考虑墨卡托投影的可见谷歌地图区域中物理中心的经纬度值
LatLang value of the physical center in the visible GoogleMap region considering mercator projection
我想计算屏幕中间圆的圆心和半径,半径为可见区域宽度的一半。
visibleRegion.latLngBounds.getCenter()
或
cameraPosition.target
当我缩小很多时,中心值与物理中心有偏移。
下图中黑色阴影圆圈我计算如下:
VisibleRegion visibleRegion = mMap.getProjection().getVisibleRegion();
LatLng nearLeft = visibleRegion.nearLeft;
LatLng nearRight = visibleRegion.nearRight;
mCircle.setCenter(visibleRegion.latLngBounds.getCenter());
mCircle.setRadius(distanceFrom(nearLeft.latitude, nearLeft.longitude, nearRight.latitude, nearRight.longitude) / 4);
public double distanceFrom(double lat1, double lng1, double lat2, double lng2)
{
// Return distance between 2 points, stored as 2 pair location;
double dLat = Math.toRadians(lat2 - lat1);
double dLng = Math.toRadians(lng2 - lng1);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(Math.toRadians(lat1))
* Math.cos(Math.toRadians(lat2)) * Math.sin(dLng / 2) * Math.sin(dLng / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double dist = EARTH_RADIOUS * c;
return new Double(dist * METER_CONVERSION).floatValue();
}
我正在寻找绿色圆圈的半径和圆心。
对于任何感兴趣的人,我都是这样解决的:
我使用 GoolgeMap.getProjection() 计算中心的像素位置以及开始时圆上某个点的像素位置。
现在随着相机的变化,我通过将 Point() 转换回 LatLang 来绘制以该像素位置为中心的圆,半径等于中心点与圆上的点之间的距离(以米为单位)。
我想计算屏幕中间圆的圆心和半径,半径为可见区域宽度的一半。
visibleRegion.latLngBounds.getCenter()
或
cameraPosition.target
当我缩小很多时,中心值与物理中心有偏移。
下图中黑色阴影圆圈我计算如下:
VisibleRegion visibleRegion = mMap.getProjection().getVisibleRegion();
LatLng nearLeft = visibleRegion.nearLeft;
LatLng nearRight = visibleRegion.nearRight;
mCircle.setCenter(visibleRegion.latLngBounds.getCenter());
mCircle.setRadius(distanceFrom(nearLeft.latitude, nearLeft.longitude, nearRight.latitude, nearRight.longitude) / 4);
public double distanceFrom(double lat1, double lng1, double lat2, double lng2)
{
// Return distance between 2 points, stored as 2 pair location;
double dLat = Math.toRadians(lat2 - lat1);
double dLng = Math.toRadians(lng2 - lng1);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(Math.toRadians(lat1))
* Math.cos(Math.toRadians(lat2)) * Math.sin(dLng / 2) * Math.sin(dLng / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double dist = EARTH_RADIOUS * c;
return new Double(dist * METER_CONVERSION).floatValue();
}
我正在寻找绿色圆圈的半径和圆心。
对于任何感兴趣的人,我都是这样解决的: 我使用 GoolgeMap.getProjection() 计算中心的像素位置以及开始时圆上某个点的像素位置。 现在随着相机的变化,我通过将 Point() 转换回 LatLang 来绘制以该像素位置为中心的圆,半径等于中心点与圆上的点之间的距离(以米为单位)。