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

Google maps 如何在Codename One中正确使用BoundingBox getNE和getSW,google-maps,codenameone,Google Maps,Codenameone,我的应用程序有一个MapContainer,我想在上面为数据库中的每个报告绘制一个标记。由于数据库中可能同时有数千份报告,我的应用程序的用户也可能很多,因此我希望始终为报告添加标记,这些报告可以显示在实际显示的地图区域上 这就是为什么我只向数据库查询西南和东北边界内的记录。在模拟器上,它工作得很好,报告被标在地图上应该标在的地方 我通过以下命令获得NE和SW边界: MapContainer googleMap = new MapContainer("MyGoogleMapsKeyForJavaS

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

这就是为什么我只向数据库查询西南和东北边界内的记录。在模拟器上,它工作得很好,报告被标在地图上应该标在的地方

我通过以下命令获得NE和SW边界:

MapContainer googleMap = new MapContainer("MyGoogleMapsKeyForJavaScript");
Coord NE = googleMap.getBoundingBox().getNorthEast();
Coord SW = googleMap.getBoundingBox().getSouthWest();
但是,在实际设备(Android 4.4)上无法检索记录,因为该设备要求在法国以外的范围内(应用程序的预期使用地)进行报告

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

现在,如果我显示东北和西南坐标,东北在利比亚的某个地方,西南在几内亚的某个地方(见下文,东北和西南边界已手动添加到地图中)。所以边界框是用南非语写的,不包含我在地图上看到的位置

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

而且,我放大的越多,地图越往北。我不显示缩放,但实际上,当我缩放到非常高的级别(我猜是18+时),报告会显示在地图上。但是我必须精确地缩放我知道的报告所在的位置,而在模拟器上,报告每次放在边界框中时都会被打印出来(这似乎是正确的,尽管我因为遇到问题而无法显示值)

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


关于这个问题的任何说明都会有很大帮助,

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

如果我理解正确,NE/SW的值是正确的,但地图定位/缩放不正确,因为地图显示的区域太多。对吗?除了变焦,你还移动了照相机吗?我知道人们使用的一种策略是移动相机并动态缩放,直到边界框位于一个好的区域内,因为不同平台的缩放值可能不同。嗨,Shai,我的意思是相反的:地图是正确的,但NE/SE不是。但你可能在正确的轨道上!实际上,我只以用户位置为中心进行缩放。我也会尝试移动相机。@Shai,我添加了一些插图以使它更清晰。这给你带来了另一个想法吗?史蒂夫添加了这个功能,我会让他看看,因为我的大脑由于工作负荷过重而处于结巴状态……我检查了代码,删除了每个缩放调用(实际上没有用),只保留了一个调用
setCameraPosition
,当用户按下按钮时,将地图居中放置在用户身上。但是,设备上的NE SW仍然与我在模拟器中预期和看到的不同。感谢Steve的回答。但是为什么它在模拟器上工作呢?而且我也知道,我第一次要求边界时,地图还没有布置好,但对于下一次调用,这是因为表单已经完全布置好了。也许我没有领会你的意思。你的意思是:1)创建一个新的MapContainer,然后2)将其添加到表单中,最后3)请求边界框,应该可以确定吗?你是对的。事实上,在
MapContainer
在表单中布局之前,我是在间接调用
zoom()
方法(即通过我的方法)。我删除了此调用,值变为预期值!