我想知道在给定的缩放级别下,某个像素距离是多少米。
原因:我想知道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 方法说“近似”,但半径与预期大小有很大不同。不应该是近似值的影响。
谢谢。