【问题标题】:How to get my MapContainer bounding box in Codename One如何在代号一中获取我的 MapContainer 边界框
【发布时间】:2017-03-22 03:03:00
【问题描述】:

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

我读过this for Android 和另一个SO question for iOS,关键似乎是得到地图投影和地图边界框。但是 getProjection() 方法或 getBoundingBox() 似乎没有公开。

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

如何获得代号一中的地图边界?

任何帮助表示赞赏,

干杯,

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    问题出在 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(),它将为您获取边界框,而无需担心相对/绝对坐标。

    【讨论】:

    • 太好了!谢谢史蒂夫!
    【解决方案2】:

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

    【讨论】:

    • 您是指来自package com.codename1.mapsMapComponent 还是MapContainer。前者没有声明 ProjectionBoundingBox 对象,我找不到 MapContainer 来源。你介意进一步指导我吗?
    • MapContainer 是原生地图 cn1lib 的一部分,即here。由于它是作为 cn1lib 实现的,因此您还可以轻松地编辑本机代码,这在 Codename One 本身中有时不太直观。它也没有那么危险。
    • 谢谢@Shai。同时,为了相同的目标,我尝试了将 getCoordAtPosition 应用于 MapContainer 的方法,但我不明白结果。地图中心位于 (Lat : 48.8574 ; Lon : 2.0654),我尝试了 // Get the map borders Coord NE = currentMap.getCoordAtPosition(currentMap.getWidth(), 0); Coord SW = currentMap.getCoordAtPosition(0, currentMap.getHeight()); 在模拟器中我得到 Lat SW = 48.8584 lat NE = 48.8612 (NOK,因为两个纬度 > 地图中心纬度) Lon SW = 2.0625 lon NE = 2.0679 (OK)。为什么西南纬度不对?
    • 我不是地图专家,但我记得有几种“投影”类型或类似的东西,所以也许地图正在使用其中一种?
    • 所以getCoordAtPosition 方法没有考虑投影。我从方法名称中了解到,我会得到地图上任何 xy 点的 lon;lat 坐标。我的理解正确吗?
    猜你喜欢
    • 2019-05-11
    • 1970-01-01
    • 2021-01-14
    • 2021-04-22
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    相关资源
    最近更新 更多