2

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

原因:我想知道mapView中圆的半径,以米为单位,它完全适合mapView->radiusPixels = 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);
}

但效果不好。我总是得到比 mapView 小得多的圆圈——半径太小。

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

谢谢。

4

1 回答 1

0

你的方法有一个小错误。

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

由于地球是球形的,因此在不同纬度级别计算相同数量的像素的距离会产生不同的结果。从 Equador 级别移动到更接近 Pole 级别的位置,相同数量的像素会导致更小的距离(以米为单位)。

但是,只有当您getFittingRadiusInMeters()使用地图定位在距离您绘制圆圈的地方非常遥远的纬度时,这才会引起注意。

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

解决方案

该方法getMeters()应接收GeoPoint用于计算距离的参数 a(或至少是纬度)。

问候。

于 2012-11-27T21:18:24.087 回答