Android 获取mapView的像素距离(以米为单位)

Android 获取mapView的像素距离(以米为单位),android,android-mapview,Android,Android Mapview,我想知道在给定的缩放级别下,某个像素距离是多少米 原因:我想知道mapView中圆的半径(以米为单位),它非常适合mapView->radiupixels=mapView.getWidth()/2 我找到了方法mapView.getProjection().metersToEquatorPixels(radiusMeters),它与我需要的正好相反。但这种方法或任何其他有用的方法都没有反比 我(可能是天真的)解决方法如下: private double getFittingRadiusInMet

我想知道在给定的缩放级别下,某个像素距离是多少米

原因:我想知道mapView中圆的半径(以米为单位),它非常适合mapView->
radiupixels=mapView.getWidth()/2

我找到了方法
mapView.getProjection().metersToEquatorPixels(radiusMeters)
,它与我需要的正好相反。但这种方法或任何其他有用的方法都没有反比

我(可能是天真的)解决方法如下:

private double getFittingRadiusInMeters() {
    return getMeters(mapView.getWidth() / 2);
}

private double getMeters(int pixels) {
    Projection proj = mapView.getProjection();
    Point mapCenterPixels = new Point(mapView.getWidth() / 2, mapView.getHeight() / 2);

    //create 2 geopoints which are at pixels distance
    GeoPoint centerGeoPoint = proj.fromPixels(mapCenterPixels.x, mapCenterPixels.y);
    GeoPoint otherGeoPoint = proj.fromPixels(mapCenterPixels.x + pixels, mapCenterPixels.y);

    Location loc = new Location("");
    loc.setLatitude(centerGeoPoint.getLatitudeE6() / 1E6);
    loc.setLongitude(centerGeoPoint.getLongitudeE6() / 1E6);

    Location loc2 = new Location("");
    loc2.setLatitude(otherGeoPoint.getLatitudeE6() / 1E6);
    loc2.setLongitude(otherGeoPoint.getLongitudeE6() / 1E6);

    return loc.distanceTo(loc2);
}
但效果不好。我总是得到比地图视图小得多的圆——半径太小了

我知道distanceTo方法说的是“近似”,但半径与预期大小有很大差异。不应是近似值的影响


谢谢。

你的方法有一个小错误

您正在计算屏幕中间水平的屏幕一半的值。找到的距离仅适用于在相同纬度值处绘制圆(经度可能会毫无问题地发生变化)

由于地球是半球面的,所以在不同纬度计算相同数量像素的距离会产生不同的结果。从Equador水平移动到更接近极点水平的位置,相同数量的像素会导致以米为单位的较小距离

但是,只有当您调用
getFittingRadiusInMeters()
并将地图放置在离绘制圆的纬度非常远的地方时,才会注意到这一点

否则,它应该可以正常工作

解决方案

方法
getMeters()
应接收作为参数的
地球点
(或至少是纬度),用于计算距离

问候