маркеры кластера отображаются неточно

#java #android #google-maps #google-maps-markers #cluster-manager

#java #Android #google-карты #google-карты-маркеры #диспетчер кластеров

Вопрос:

Я попытался внедрить диспетчер кластеров, следуя этому руководству разработчиков Google, но мои маркеры отображаются крайне неточно по сравнению с простым использованием googleMap.addMarker(); (пример).

Вот сравнение изображений двух

Я полагаю, это связано с offset in addClusterPoints() , но когда я меняю divisor( 60d ), единственное изменение заключается в том, насколько далеко распределены точки, но по-прежнему в неправильном местоположении. Я попытался изменить значение 60d и обнаружил, что с < 60d они более распределены, а> 60d они менее распределены.

Может кто-нибудь объяснить, что offset делает и как заставить точки отображаться точно?

 private void addClusterPoints(){
    List<LatLng> locations= new ArrayList<>(getLatLongList());
    for(int i=0; i < locations.size(); i  ){
       double offset = i /60d;
       latLng = locations.get(i);
       double lat = latLng.latitude   offset;
       double lng = latLng.longitude   offset;
       mapClusterItem offsetItem = new mapClusterItem(lat, lng, "Tile " i, "Snippet" i);
       clusterManager.addItem(offsetItem);
    }
}    
  

Комментарии:

1. Смещение перемещает местоположение маркеров на величину смещения — меньший делитель увеличивает смещение и, таким образом, перемещает его дальше на север и восток (первый маркер перемещается дальше, чем последний маркер, на основе увеличения числителя). Неясно, какова ваша мотивация для перемещения маркеров — если вы могли бы подробнее рассказать об этом, это может быть полезно.

2. У вас также есть потенциальная проблема с вашим циклом: вы создаете locations из некоторого геттера, а затем получаете доступ sneezeLocations с помощью индекса цикла — похоже, вам следует просто использовать locations .

3. Спасибо за отзыв, sneezeLocations это то же самое, locations что и я просто пропустил это при изменении имени, чтобы задать этот вопрос; но сейчас я это исправил. Кроме того, вы правильно отображаете маркеры в правильных местах, когда смещения нет. Приветствия.

Ответ №1:

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

В руководстве для разработчиков Google, на которое я ссылался, есть offset so, я думал, что это часть процесса, но оказывается, что это совершенно не связано. Честно говоря, мне кажется странным, что они решили включить это в учебник. Единственное рассуждение, которое я мог придумать, почему они это сделают (поскольку они его не предоставляют), — это создать некоторое пространство между элементами, которые находятся очень близко друг к другу.