我正在谷歌地图上创建Geozones。滚动地图时,地图API提供的默认Circle是滞后的。所以,我想创建自己的圆圈(在地图上叠加)。我创建了半径为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;
}
嗯,这很好用。我开始验证其他位置然后开始显示变化。圆宽小于地图的默认圆。我分析了它,以便在我在赤道上的任何位置周围设置圆圈时,它完美地显示(与默认圆同步)。例如,对于肯尼亚的肯定是肯定在赤道的位置,例如,圆与完全同步。看到附加的scrrenshot。如果我继续远离赤道,圆圈会从默认圆圈越来越小。比如,对于德国来说,位置圈几乎是默认值的一半......请参阅随附的scrrenshot。
这是因为我使用的公式与赤道有关。
你能帮忙解决一下如何让它变得均匀吗?
答案 0 :(得分:1)
对Android Maps API v2 draw circle帖子的致谢和感谢。
我可以用给定的纬度,经度和半径(从给定的纬度,长度)以米为单位计算圆的宽度。
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);
}