如何在Codename One中获取我的MapContainer边界框

时间:2017-02-07 17:25:47

标签: codenameone

My Codename One应用程序具有MapContainer。我需要在其上显示坐标位于服务器上的兴趣点(POI)。服务器上可能有数百个(可能是数千个)这样的POI。这就是为什么我只想从服务器下载可以在地图上显示的POI的原因。因此,我需要获取地图边界以将它们传递给服务器。

我看了this for Android和其他SO question for iOS,关键似乎是获取地图投影和地图边界框。但是,getProjection()方法或getBoundingBox()似乎不会公开。

解决方案可以是混合来自getCameraLocation()(地图中心)和getZoom()的坐标来推断这些边界。但它可能会因设备而异(参见显示的区域可能会更大)。

如何在Codename中获取地图边界?

任何帮助表示赞赏,

干杯,

2 个答案:

答案 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)

这可能是通过分叉项目和提供拉取请求可以轻松暴露的。我们目前正在努力更新地图组件,因此现在是进行更改和添加功能的好时机。