【问题标题】:OSMdroid how to get screen coordinates?OSMdroid 如何获取屏幕坐标?
【发布时间】:2020-12-29 20:42:25
【问题描述】:

我正在使用 osmdroid 在 android 上做应用程序。如何获取屏幕上显示的地图坐标(上、下、左、右)? 谢谢。

【问题讨论】:

    标签: android openstreetmap osmdroid


    【解决方案1】:

    您的要求并不完全清楚,但我认为您要求的是纬度/经度边界框。

    BoundingBoxE6 boundingBox = mMapView.getProjection().getBoundingBox();
    

    【讨论】:

    • thanx 但实际上我需要动态获取屏幕的(上、下、左、右)角或边(上、下、右、左)的坐标,因此我可以检测是否加载另一个点。我试过这样的事情:Projection proj = myMap.getProjection(); GeoPoint topLeft = (GeoPoint) proj.fromPixels(0, 0); Log.i("左上", topLeft.getLongitudeE6()+"a" );而 topLeft.getLongitudeE6() 始终为 0,如果重要,我会在 onCreate 中执行
    • 这并不能真正告诉我们@kurtzmarc 发布的解决方案是否适合您。如果它有效,你只需要订阅我猜的滚动事件。
    【解决方案2】:

    “如果重要,我会在 onCreate 中执行”=> 是的。

    实际上,您无法在 onCreate 中访问正确的地图视图边界框。 这是“因为 MapView 的宽度和高度为零,因为它还没有调用 onLayout”

    这是一个(相当烦人的)osmdroid 问题,在 v4.2 中未修复。

    另外,在 onCreate 中调用时,setCenter 在 v4.2 中也不能正常工作。

    在此处查看更多解释和解决方法:https://github.com/osmdroid/osmdroid/issues/22

    【讨论】:

      【解决方案3】:

      在 react-native 中,我使用 onRegionChangeComplete 事件 (onRegionChangeComplete={e => properties.regionChange(e)})。此事件返回 MapView 的区域。所以:{"latitude": 4.50751184289841, "latitudeDelta": 0.09999884159289252, "longitude": -75.67515761717539, "longitudeDelta": 0.06322002503726765}

      所以,如果你需要计算一个带有屏幕区域的多边形,你应该这样做:

      regionChange = (e) => {    
          areaLoadData = [
              {
                  latitude: e.latitude + e.latitudeDelta,
                  longitude: e.longitude - e.longitudeDelta
              },
              {
                  latitude: e.latitude + e.latitudeDelta,
                  longitude: e.longitude + e.longitudeDelta
              },
              {
                  latitude: e.latitude - e.latitudeDelta,
                  longitude: e.longitude + e.longitudeDelta
              },
              {
                  latitude: e.latitude - e.latitudeDelta,
                  longitude: e.longitude - e.longitudeDelta
              },
          ]
      }
      

      【讨论】:

        猜你喜欢
        • 2021-10-22
        • 2015-08-01
        • 2012-02-02
        • 2019-08-22
        • 2016-02-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多