2016-06-09 2 views
3

У меня есть приложение с картой. На этой карте я помещаю маркер в текущее местоположение устройства. Я также добавить круг вокруг маркера следующим образом:Android - отображать на карте только маркеры, включенные в определенную область

Circle circle = mMap.addCircle(new CircleOptions() 
         .center(latLng) 
         .radius(400)  //The radius of the circle, specified in meters. It should be zero or greater. 
         .strokeColor(Color.rgb(0, 136, 255)) 
         .fillColor(Color.argb(20, 0, 136, 255))); 

В результате получается нечто вроде этого:
here's an example of the result!

У меня есть база данных с некоторыми позициями, характеризующимися широтой и долготой.

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

, пожалуйста, помогите мне, спасибо!

ответ

0

Вы посмотрите на этот вопрос для того, как рассчитать расстояние между двумя широтной долготе может: how-to-calculate-distance-between-two-locations-using-their-longitude-and-latitu

Если удаленность от 2 до точки меньше, чем радиус вашего круга (для вас 400) поместить маркер для них (также. Не смотрите только на выбранный ответ. selected_location.distanceTo(another_location) поможет вам в нижнем ответе.)

5

Вы можете добавить все свои маркеры, сделав их невидимыми сначала, а затем вычислить расстояние между центром вашего круга и вашими маркерами видны маркеры, которые находятся на заданном расстоянии:

private List<Marker> markers = new ArrayList<>(); 

// ... 

private void drawMap(LatLng latLng, List<LatLng> positions) { 
    for (LatLng position : positions) { 
     Marker marker = mMap.addMarker(
       new MarkerOptions() 
         .position(position) 
         .visible(false)); // Invisible for now 
     markers.add(marker); 
    } 

    //Draw your circle 
    Circle circle = mMap.addCircle(new CircleOptions() 
      .center(latLng) 
      .radius(400) 
      .strokeColor(Color.rgb(0, 136, 255)) 
      .fillColor(Color.argb(20, 0, 136, 255))); 

    for (Marker marker : markers) { 
     if (SphericalUtil.computeDistanceBetween(latLng, marker.getPosition()) < 400) { 
      marker.setVisible(true); 
     } 
    } 
} 

Отметьте, что я использую метод SphericalUtil.computeDistanceBetween от Google Maps API Utility Library

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