2016-05-17 3 views
0

Для нашего применения нам необходимо показать местоположение текущего пользователя с некоторым радиусом. Но когда я включил map.setMyLocationEnabled(true);, мы заметили, что радиус точности изменяется в очень большом диапазоне (например, от 10 до 50 м, затем 15 м и т. Д.), И это может смутить наших пользователей. Мы решили исправить радиус круга точности вокруг маркера, чтобы придать ему другое значение.Есть ли способ исправить радиус точности маркера на Картах Google?

Есть ли способ исправить радиус точности, в дополнение к созданию собственного маркера? Я не хочу создавать свой собственный маркер, потому что считаю, что моя реализация будет намного хуже, чем Google.

Заранее спасибо.

+1

как я думаю, ответ не –

+0

Вы не можете изменить слой «Мое местоположение», но вы можете cr Используйте свою собственную реализацию. Взгляните на http://stackoverflow.com/questions/33411112/change-custom-current-location-indicator-in-google-map-v2/33417474#33417474 – antonio

ответ

1

Используя My Location layer, вы не сможете изменить символику (значок) текущего местоположения.

В качестве обходного пути вы можете реализовать эту функцию, используя Location Updates и нарисовать местоположение на карте.

Чтобы сделать это, вы можете использовать эту реализацию LocationListener, что втягивает текущее местоположение и точность:

import android.graphics.Color; 
import android.location.Location; 
import android.location.LocationListener; 
import android.os.Bundle; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.model.BitmapDescriptor; 
import com.google.android.gms.maps.model.BitmapDescriptorFactory; 
import com.google.android.gms.maps.model.Circle; 
import com.google.android.gms.maps.model.CircleOptions; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.Marker; 
import com.google.android.gms.maps.model.MarkerOptions; 

public class MyLocationLayer implements LocationListener { 
    private GoogleMap map; 

    private BitmapDescriptor markerDescriptor; 
    private boolean drawAccuracy = true; 
    private int accuracyStrokeColor = Color.argb(255, 130, 182, 228); 
    private int accuracyFillColor = Color.argb(100, 130, 182, 228); 

    private Marker positionMarker; 
    private Circle accuracyCircle; 

    public MyLocationLayer(GoogleMap map, int markerResource) { 
     this.map = map; 

     markerDescriptor = BitmapDescriptorFactory.fromResource(markerResource); 
    } 

    public void setDrawAccuracy(boolean drawAccuracy) { 
     this.drawAccuracy = drawAccuracy; 
    } 

    public void setAccuracyStrokeColor(int color) { 
     this.accuracyStrokeColor = color; 
    } 

    public void setAccuracyFillColor(int color) { 
     this.accuracyFillColor = color; 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     double latitude = location.getLatitude(); 
     double longitude = location.getLongitude(); 
     float accuracy = location.getAccuracy(); 

     if (positionMarker != null) { 
      positionMarker.remove(); 
     } 
     final MarkerOptions positionMarkerOptions = new MarkerOptions() 
       .position(new LatLng(latitude, longitude)) 
       .icon(markerDescriptor) 
       .anchor(0.5f, 0.5f); 
     positionMarker = map.addMarker(positionMarkerOptions); 

     if (accuracyCircle != null) { 
      accuracyCircle.remove(); 
     } 
     if (drawAccuracy) { 
      final CircleOptions accuracyCircleOptions = new CircleOptions() 
        .center(new LatLng(latitude, longitude)) 
        .radius(accuracy) 
        .fillColor(accuracyFillColor) 
        .strokeColor(accuracyStrokeColor) 
        .strokeWidth(2.0f); 
      accuracyCircle = map.addCircle(accuracyCircleOptions); 
     } 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 

    } 
} 

Улучшения будут сделаны

Вы можете вращать маркер на основе направления движение с использованием public MarkerOptions rotation (float rotation)https://developers.google.com/android/reference/com/google/android/gms/maps/model/MarkerOptions.html#rotation(float)

+0

Спасибо! Это очень полезный ответ. –

Смежные вопросы