Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Codenameone 如何获得代号为1的MapContainer边界框_Codenameone - Fatal编程技术网

Codenameone 如何获得代号为1的MapContainer边界框

Codenameone 如何获得代号为1的MapContainer边界框,codenameone,Codenameone,My Codename One应用程序具有MapContainer功能。我需要在上面显示坐标位于服务器上的兴趣点(POI)。服务器上可能有成百上千个这样的POI。这就是为什么我只想从服务器上下载可以在地图上显示的POI。因此,我需要获取地图边界以将其传递给服务器 我读了这本书,另一本,键似乎得到了地图投影和地图边界框。但是,getProjection()方法或getBoundingBox()似乎没有公开 解决方案是将地图中心的getCameraLocation()坐标与getZoom()坐标混合

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

我读了这本书,另一本,键似乎得到了地图投影和地图边界框。但是,getProjection()方法或getBoundingBox()似乎没有公开

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

如何获得代号为1的地图边界

感谢您的帮助


干杯,

这可能是通过分叉项目并提供拉取请求而很容易暴露出来的东西。我们目前正在更新map组件,因此现在是进行更改和添加功能的好时机。

问题出在getCoordAtPosition()的javadocs中。这将得到纠正。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());
我在你提供的坐标上试过了,它返回了有效的结果

编辑2017年3月21日:结果表明,一些平台需要相对坐标,而其他平台需要绝对坐标。我必须对其进行标准化,并且我选择在所有平台上使用相对坐标,以与Javadocs保持一致。因此,您的第一次尝试:

Coord NE=currentMap.getCoordAtPosition(currentMap.getWidth(),0);
Coord SW=currentMap.getCoordAtPosition(0,currentMap.getHeight());
现在将在库的最新版本中工作


我还添加了另一种方法:
getBoundingBox()
,它将为您获取边界框,而不必担心相对/绝对坐标。

您指的是
package com.codename1.maps
中的
MapComponent
还是
MapContainer
。前者没有声明
Projection
BoundingBox
对象,我无法找到
MapContainer
源。请您进一步指导我好吗?
MapContainer
是本机地图cn1lib的一部分,它是。由于它是作为cn1lib实现的,所以您还可以轻松编辑本机代码,这在Codename One中有时不够直观。这也没那么危险。谢谢@Shai。同时,为了同样的目标,我尝试了将
getCoordAtPosition
应用于MapContainer,但我不理解结果。地图中心位于(Lat:48.8574;Lon:2.0654),我尝试了
//获取地图边界
Coord NE=currentMap.getCoordAtPosition(currentMap.getWidth(),0);Coord SW=currentMap.getCoordAtPosition(0,currentMap.getHeight())在模拟器中,我得到Lat SW=48.8584 Lat NE=48.8612(不适用,因为两个Lat>地图中心Lat)Lon SW=2.0625 Lon NE=2.0679(正常)。为什么西南纬度错了?我不是地图专家,但我记得有几种“投影”类型或类似的类型,因此地图可能使用了其中一种?因此方法
getCoordAtPosition
没有考虑投影。我从方法名中了解到,我将获得lon;地图上任意xy点的坐标。我的理解正确吗?太好了!谢谢史蒂夫!