Как нарисовать круг вокруг булавки с помощью Google MAPS API v2
Я использую новый API (Google Map API V2) для своего приложения для Android, я сделал создание карты и добавил туда маркеры, теперь моя задача - создать круг вокруг любого из маркеров, а также я хочу для обеспечения функциональности для пользователя, чтобы он мог увеличить радиус этого круга соответственно, поскольку для этого я дал полосу, когда пользователь увеличивает эту полосу, радиус круга увеличится и наоборот.
Если кто-нибудь знает, как это сделать, используя Google Map API V2, пожалуйста, помогите,
спасибо
Ответы
Ответ 1
Я тоже работаю над этим, и я нашел следующее решение. Это все еще не идеально, потому что я должен был сделать очень большой холст, чтобы предотвратить размывание края круга.
private void addCircleToMap() {
// circle settings
int radiusM = // your radius in meters
double latitude = // your center latitude
double longitude = // your center longitude
LatLng latLng = new LatLng(latitude,longitude);
// draw circle
int d = 500; // diameter
Bitmap bm = Bitmap.createBitmap(d, d, Config.ARGB_8888);
Canvas c = new Canvas(bm);
Paint p = new Paint();
p.setColor(getResources().getColor(R.color.green));
c.drawCircle(d/2, d/2, d/2, p);
// generate BitmapDescriptor from circle Bitmap
BitmapDescriptor bmD = BitmapDescriptorFactory.fromBitmap(bm);
// mapView is the GoogleMap
mapView.addGroundOverlay(new GroundOverlayOptions().
image(bmD).
position(latLng,radiusM*2,radiusM*2).
transparency(0.4f));
}
- EDIT -
Google обновил API. Теперь вы можете легко добавить круг на свою карту:
https://developers.google.com/maps/documentation/android/shapes?hl=nl#circles
Ответ 2
Google сделал простую версию на картах v2. В приведенном ниже фрагменте показаны как чертежные маркеры, так и круги вместе с обновлением их позиций.
private Circle mCircle;
private Marker mMarker;
private GoogleMap mGoogleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGoogleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.mapFragment)).getMap();
mGoogleMap.setMyLocationEnabled(true);
mGoogleMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
@Override
public void onMyLocationChange(Location location) {
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
if(mCircle == null || mMarker == null){
drawMarkerWithCircle(latLng);
}else{
updateMarkerWithCircle(latLng);
}
}
});
}
private void updateMarkerWithCircle(LatLng position) {
mCircle.setCenter(position);
mMarker.setPosition(position);
}
private void drawMarkerWithCircle(LatLng position){
double radiusInMeters = 100.0;
int strokeColor = 0xffff0000; //red outline
int shadeColor = 0x44ff0000; //opaque red fill
CircleOptions circleOptions = new CircleOptions().center(position).radius(radiusInMeters).fillColor(shadeColor).strokeColor(strokeColor).strokeWidth(8);
mCircle = mGoogleMap.addCircle(circleOptions);
MarkerOptions markerOptions = new MarkerOptions().position(position);
mMarker = mGoogleMap.addMarker(markerOptions);
}
Ответ 3
Это лучше:
double radiusInMeters = 100.0;
//red outline
int strokeColor = 0xffff0000;
//opaque red fill
int shadeColor = 0x44ff0000;
CircleOptions circleOptions = new CircleOptions().center(position).radius(radiusInMeters).fillColor(shadeColor).strokeColor(strokeColor).strokeWidth(2);
mCircle = map.addCircle(circleOptions);
MarkerOptions markerOptions = new MarkerOptions().position(position);
mMarker = map.addMarker(markerOptions);
Ответ 4
Возможно, вам помогут:
GoogleMap map;
// ... get a map.
// Add a circle in Sydney
Circle circle = map.addCircle(new CircleOptions()
.center(new LatLng(-33.87365, 151.20689))
.radius(10000)
.strokeColor(Color.RED)
.fillColor(Color.BLUE));
Отсюда:
ЗДЕСЬ