如何在Codename One中正确使用BoundingBox getNE和getSW

时间:2017-03-18 22:32:10

标签: google-maps codenameone

我的应用程序有一个MapContainer,我想在其中为数据库中的每个报告绘制一个标记。由于数据库中同时存在数千个报告以及我的应用程序的用户数量很多,我希望始终为可以在实际显示的地图区域上显示的报告添加标记。

这就是为什么我只向数据库询问位于西南和东北范围内的记录。在模拟器上它运行良好,报告被绘制在地图上应该的位置。

我使用以下命令获取NE和SW界限:

MapContainer googleMap = new MapContainer("MyGoogleMapsKeyForJavaScript");
Coord NE = googleMap.getBoundingBox().getNorthEast();
Coord SW = googleMap.getBoundingBox().getSouthWest();

然而,在实际设备(Android 4.4)上,未检索到记录,因为设备要求在法国境内(应用程序的使用位置)内的报告。

例如,该设备显示了一个以法国为中心的地图,在那里我还可以看到西班牙,葡萄牙,意大利,比利时,德国的一部分。总而言之,该地图显示了西欧(请参阅下面的屏幕截图,其中MapContainer以红色圈出)。

enter image description here

现在,如果我显示NE和SW坐标,则NE位于利比亚的某个地方,而SW位于几内亚的某个地方(请参阅下面的NE和SW边界已手动添加到地图中)。因此边界框位于Afrika中,并且不包含我在地图上看到的位置。

enter image description here

因此,由于边界框与显示的地图无关,因此当所有记录都在法国时,数据库无法在Afrika中检索记录。

此外,我放大的越多,地图越北。我没有显示缩放,但实际上当我缩放到非常高的水平(我猜是18+)时,报告会出现在地图上。但是我必须准确地缩放我知道报告的位置,而在模拟器上,每次它们放在边界框中时都会绘制报告(这似乎是正确的,尽管由于遇到the other issue我无法显示值)。

我是否在理解如何使用NE / SW界限时犯了错误,为什么它在模拟器中工作而在真实设备上没有?或者它只是这个特定设备上的一个错误,它不会发生在更现代的设备上?

任何关于这个问题的灯都会有很多帮助,

1 个答案:

答案 0 :(得分:1)

在将MapContainer添加到UI之前获取边界框将产生未定义的结果。边界框是在UI中可见的Map的边界。在将地图添加到用户界面之前,我们不知道界限是什么......