我正在谷歌地图上创建地理区域。默认Circle https://developers.google.com/android/reference/com/google/android/gms/maps/model/Circle滚动地图时地图 API 提供的延迟。所以,我想创建自己的圈子(覆盖在地图上)。我创建了半径为 300 米的固定圆。该圆圈的宽度应根据缩放级别而变化,就像默认地图圆圈一样。我编写了如下方法,通过将半径和缩放级别作为参数来计算像素。我添加了默认圈子也是为了验证不同地址的圈子的准确性。
//Adjusts the width and height of circle according to radius and zoom level
private void adjustCircleWidth(final LatLng center, final double zoom) {
//With inputs from topic "Zoom" from https://developers.google.com/maps/documentation/android-api/views
double widthOfWorldDP = 256 * Math.pow(2, zoom);
int radius = 300; //meters.
int circleWidthMeters = radius * 2; // *2 to get diameter or width.
//From google and alsop from this SOF post http://stackoverflow.com/a/6452332/3209739
int EQUATOR_LENGTH_METERS = 40075004; //in meters..
float dpOfCircle = (float) ((widthOfWorldDP * circleWidthMeters) / EQUATOR_LENGTH_METERS);
//converts dp to pixels depending on device density..
int pixels = (int) convertDpToPixels(dpOfCircle);
mCircleView.requestLayout();
mCircleView.getLayoutParams().height = pixels;
mCircleView.getLayoutParams().width = pixels;
}
嗯,这很好用。我开始验证其他位置,然后它开始显示变化。圆圈宽度小于地图的默认圆圈。我对其进行了分析,以了解当我在赤道上的任何位置周围设置圆圈时,它会完美显示(与默认圆圈同步)。例如,圆圈与肯尼亚的默认位置完美同步,因为肯尼亚位于赤道上。请参阅随附的屏幕截图。如果我继续远离赤道,圆圈就会从默认圆圈变得越来越小。比如说,对于德国来说,位置圈几乎是默认位置圈的一半......请参阅随附的屏幕截图。
这是因为我使用的公式与赤道相关。
您能提供有关如何使其统一的任何线索吗?
致谢并非常感谢Android Maps API v2 绘制圆圈 https://stackoverflow.com/a/14428226/3209739 post.
我可以根据给定的纬度、经度和半径(从给定的纬度、长度)以米为单位计算圆的宽度(以像素为单位)。
private int convertZoneRadiusToPixels(double lat, double lng, double radiusInMeters) {
double EARTH_RADIUS = 6378100.0;
double lat1 = radiusInMeters / EARTH_RADIUS;
double lng1 = radiusInMeters / (EARTH_RADIUS * Math.cos((Math.PI * lat / 180)));
double lat2 = lat + lat1 * 180 / Math.PI;
double lng2 = lng + lng1 * 180 / Math.PI;
Point p1 = mMap.getProjection().toScreenLocation(new LatLng(lat, lng));
Point p2 = mMap.getProjection().toScreenLocation(new LatLng(lat2, lng2));
return Math.abs(p1.x - p2.x);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)