Для такой задачи у меня есть статический вспомогательный класс. Вот код, который я использую для создания круга:
public static CircleOptions setMapCircleMeters(LatLng latLng, float meters){
CircleOptions options = null;
try {
options = new CircleOptions();
options.center(latLng);
options.radius(meters);
options.fillColor(Color.argb(70, 80, 80, 80));
options.strokeWidth(2.0f);
}
catch (Exception ex){
Log.e(TAG, " CircleOptions --- " + ex.getMessage());
}
return options;
}
Вы можете легко изменить атрибуты fillColor
или strokeWidth
в соответствии с вашими потребностями.
Теперь, чтобы узнать, находится ли место на расстоянии, которое вы хотите проверить:
public static boolean isInRangeMeters(LatLng pt1, LatLng pt2, double meters){
boolean inRange = false;
try{
double distance = getDistanceMeters(pt1, pt2);
inRange = (distance <= meters);
}
catch (Exception ex){
Log.e("ERROR", ex.getMessage());
}
return inRange;
}
public static double getDistanceMeters(LatLng pt1, LatLng pt2){
double distance = 0d;
try{
double theta = pt1.longitude - pt2.longitude;
double dist = Math.sin(Math.toRadians(pt1.latitude)) * Math.sin(Math.toRadians(pt2.latitude))
+ Math.cos(Math.toRadians(pt1.latitude)) * Math.cos(Math.toRadians(pt2.latitude))
* Math.cos(Math.toRadians(theta));
dist = Math.acos(dist);
dist = Math.toDegrees(dist);
distance = dist * 60 * 1853.1596;
}
catch (Exception ex){
Log.e("ERROR", ex.getMessage());
}
return distance;
}