【发布时间】:2020-12-29 20:42:25
【问题描述】:
我正在使用 osmdroid 在 android 上做应用程序。如何获取屏幕上显示的地图坐标(上、下、左、右)? 谢谢。
【问题讨论】:
标签: android openstreetmap osmdroid
我正在使用 osmdroid 在 android 上做应用程序。如何获取屏幕上显示的地图坐标(上、下、左、右)? 谢谢。
【问题讨论】:
标签: android openstreetmap osmdroid
您的要求并不完全清楚,但我认为您要求的是纬度/经度边界框。
BoundingBoxE6 boundingBox = mMapView.getProjection().getBoundingBox();
【讨论】:
“如果重要,我会在 onCreate 中执行”=> 是的。
实际上,您无法在 onCreate 中访问正确的地图视图边界框。 这是“因为 MapView 的宽度和高度为零,因为它还没有调用 onLayout”
这是一个(相当烦人的)osmdroid 问题,在 v4.2 中未修复。
另外,在 onCreate 中调用时,setCenter 在 v4.2 中也不能正常工作。
在此处查看更多解释和解决方法:https://github.com/osmdroid/osmdroid/issues/22
【讨论】:
在 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
},
]
}
【讨论】: