My Codename One应用程序具有MapContainer。我需要在其上显示坐标位于服务器上的兴趣点(POI)。服务器上可能有数百个(可能是数千个)这样的POI。这就是为什么我只想从服务器下载可以在地图上显示的POI的原因。因此,我需要获取地图边界以将它们传递给服务器。
我看了this for Android和其他SO question for iOS,关键似乎是获取地图投影和地图边界框。但是,getProjection()方法或getBoundingBox()似乎不会公开。
解决方案可以是混合来自getCameraLocation()
(地图中心)和getZoom()
的坐标来推断这些边界。但它可能会因设备而异(参见显示的区域可能会更大)。
如何在Codename中获取地图边界?
任何帮助表示赞赏,
干杯,
答案 0 :(得分:2)
问题出在getCoordAtPosition()的javadoc中。这将得到纠正。 getCoordAtPosition()需要绝对坐标,而不是相对坐标。
E.g
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());
我在你提供的坐标上尝试了这个,它会返回有效的结果。
编辑2017年3月21日:事实证明,有些平台需要相对坐标,而其他平台则需要绝对坐标。我不得不对其进行标准化,并且我选择在所有平台上使用相对坐标以与Javadocs保持一致。所以你的第一次尝试:
Coord NE = currentMap.getCoordAtPosition(currentMap.getWidth(), 0);
Coord SW = currentMap.getCoordAtPosition(0, currentMap.getHeight());
现在可以在最新版本的库中使用。
我还添加了另一种方法:getBoundingBox()
,它将为您获取边界框,而不必担心相对/绝对坐标。
答案 1 :(得分:1)
这可能是通过分叉项目和提供拉取请求可以轻松暴露的。我们目前正在努力更新地图组件,因此现在是进行更改和添加功能的好时机。