[英]Drawing circle using Mapbox SDK in Android
I currently have a LatLng
position and a radius in km or miles. 我目前有一个LatLng
位置,半径为km或英里。 How do I draw a circle (using CircleLayer
or any other method) onto the map using the Mapbox Android SDK ? 如何使用Mapbox Android SDK在地图上绘制圆(使用CircleLayer
或任何其他方法)?
You can use a Polyline
and calculate the points to shape a circle: 您可以使用Polyline
来计算点以形成圆形:
public static void drawCircle(MapboxMap map, LatLng position, int color, double radiusMeters) {
PolylineOptions polylineOptions = new PolylineOptions();
polylineOptions.color(color);
polylineOptions.width(0.5f); // change the line width here
polylineOptions.addAll(getCirclePoints(position, radiusMeters));
map.addPolyline(polylineOptions);
}
private static ArrayList<LatLng> getCirclePoints(LatLng position, double radius) {
int degreesBetweenPoints = 10; // change here for shape
int numberOfPoints = (int) Math.floor(360 / degreesBetweenPoints);
double distRadians = radius / 6371000.0; // earth radius in meters
double centerLatRadians = position.getLatitude() * Math.PI / 180;
double centerLonRadians = position.getLongitude() * Math.PI / 180;
ArrayList<LatLng> polygons = new ArrayList<>(); // array to hold all the points
for (int index = 0; index < numberOfPoints; index++) {
double degrees = index * degreesBetweenPoints;
double degreeRadians = degrees * Math.PI / 180;
double pointLatRadians = Math.asin(sin(centerLatRadians) * cos(distRadians)
+ cos(centerLatRadians) * sin(distRadians) * cos(degreeRadians));
double pointLonRadians = centerLonRadians + Math.atan2(sin(degreeRadians)
* sin(distRadians) * cos(centerLatRadians),
cos(distRadians) - sin(centerLatRadians) * sin(pointLatRadians));
double pointLat = pointLatRadians * 180 / Math.PI;
double pointLon = pointLonRadians * 180 / Math.PI;
LatLng point = new LatLng(pointLat, pointLon);
polygons.add(point);
}
// add first point at end to close circle
polygons.add(polygons.get(0));
return polygons;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.