如何在代号一中获取我的 MapContainer 边界框
How to get my MapContainer bounding box in Codename One
My Codename One 应用程序具有 MapContainer。我需要在其上显示坐标驻留在服务器上的兴趣点 (POI)。服务器上可能有数百个(将来可能有数千个)此类 POI。这就是为什么我只想从服务器下载可以在地图上显示的 POI。因此我需要获取地图边界以将它们传递给服务器。
我读了this for Android and this other SO question for iOS,关键似乎得到了地图投影和地图边界框。但是 getProjection() 方法或 getBoundingBox() 似乎没有公开。
一个解决方案可能是混合来自地图中心 getCameraLocation()
和 getZoom()
的坐标来推断这些边界。但它可能会因设备而异(请参阅显示的区域可以更大)。
如何获取代号一中的地图边界?
感谢任何帮助,
干杯,
这可能是可以通过分叉项目并提供拉取请求轻松公开的内容。我们目前正在努力更新地图组件,因此现在是进行更改和添加功能的好时机。
问题出在 getCoordAtPosition() 的 javadoc 中。这将得到纠正。 getCoordAtPosition() 需要绝对坐标,而不是相对坐标。
例如
Coord NE = currentMap.getCoordAtPosition(currentMap.getWidth(), 0);
Coord SW = currentMap.getCoordAtPosition(0, currentMap.getHeight());
应该是
Coord NE = currentMap.getCoordAtPosition(currentMap.getAbsoluteX() + currentMap.getWidth(), currentMap.getAbsoluteY());
Coord SW = currentMap.getCoordAtPosition(currentMap.getAbsoluteX(), currentMap.getAbsoluteY() + currentMap.getHeight());
我在您提供的坐标上进行了试验,结果 returns 有效。
编辑 2017 年 3 月 21 日:事实证明,一些平台需要相对坐标,而其他平台需要绝对坐标。我不得不对其进行标准化,并且我选择在所有平台上使用相对坐标以与 Javadocs 保持一致。所以你的第一次尝试:
Coord NE = currentMap.getCoordAtPosition(currentMap.getWidth(), 0);
Coord SW = currentMap.getCoordAtPosition(0, currentMap.getHeight());
现在可以在最新版本的库中使用。
我还添加了另一种方法:getBoundingBox()
,它将为您获取边界框,而无需担心 relative/absolute 坐标。
My Codename One 应用程序具有 MapContainer。我需要在其上显示坐标驻留在服务器上的兴趣点 (POI)。服务器上可能有数百个(将来可能有数千个)此类 POI。这就是为什么我只想从服务器下载可以在地图上显示的 POI。因此我需要获取地图边界以将它们传递给服务器。
我读了this for Android and this other SO question for iOS,关键似乎得到了地图投影和地图边界框。但是 getProjection() 方法或 getBoundingBox() 似乎没有公开。
一个解决方案可能是混合来自地图中心 getCameraLocation()
和 getZoom()
的坐标来推断这些边界。但它可能会因设备而异(请参阅显示的区域可以更大)。
如何获取代号一中的地图边界?
感谢任何帮助,
干杯,
这可能是可以通过分叉项目并提供拉取请求轻松公开的内容。我们目前正在努力更新地图组件,因此现在是进行更改和添加功能的好时机。
问题出在 getCoordAtPosition() 的 javadoc 中。这将得到纠正。 getCoordAtPosition() 需要绝对坐标,而不是相对坐标。
例如
Coord NE = currentMap.getCoordAtPosition(currentMap.getWidth(), 0);
Coord SW = currentMap.getCoordAtPosition(0, currentMap.getHeight());
应该是
Coord NE = currentMap.getCoordAtPosition(currentMap.getAbsoluteX() + currentMap.getWidth(), currentMap.getAbsoluteY());
Coord SW = currentMap.getCoordAtPosition(currentMap.getAbsoluteX(), currentMap.getAbsoluteY() + currentMap.getHeight());
我在您提供的坐标上进行了试验,结果 returns 有效。
编辑 2017 年 3 月 21 日:事实证明,一些平台需要相对坐标,而其他平台需要绝对坐标。我不得不对其进行标准化,并且我选择在所有平台上使用相对坐标以与 Javadocs 保持一致。所以你的第一次尝试:
Coord NE = currentMap.getCoordAtPosition(currentMap.getWidth(), 0);
Coord SW = currentMap.getCoordAtPosition(0, currentMap.getHeight());
现在可以在最新版本的库中使用。
我还添加了另一种方法:getBoundingBox()
,它将为您获取边界框,而无需担心 relative/absolute 坐标。