HERE Отображает JavaScript API: как получить информацию, щелкнув по маркеру кластера

#javascript #maps #here-api #heremaps

#javascript #Карты #здесь-api #heremaps

Вопрос:

Следуя этим 2 документам:

https://developer.here.com/documentation/examples/maps-js/clustering/custom-cluster-theme

https://developer.here.com/documentation/maps/3.1.30.3/dev_guide/topics/clustering.html

У меня есть кластер маркеров. Но целевые данные при нажатии на маркер кластера отличаются от данных при нажатии на маркер шума.

  1. Как я могу получить данные из кластера и маркеров шума при щелчке, чтобы отобразить их в пузырьке, не переопределяя тему? Как мне определить, какой из них был нажат: кластер или шум? Потому что, если я просто сделаю это:
 clusteredDataProvider.addEventListener('tap', function(event) {
  let data = event.target.getData();
  console.log(data)
});
 

нужные мне данные будут поступать data.c.a.data из кластера и data.a.data из шума.

  1. Как мне остановить нелепый эффект увеличения и уменьшения масштаба при нажатии на маркер кластера? Потому что, если для карты установлено значение zoom 2, а маркеры шума находятся на 16, когда вы нажимаете на маркер кластера, он начинает масштабироваться полностью от 2 до 16, а затем обратно до 2, даже без возможности загрузки карт. Это ужасно. Как я могу это остановить?

Спасибо.

Ответ №1:

  1. Единственный способ, который работает до сих пор, — это переопределение темы и получение случайной точки при щелчке по кластеру, данные случайных точек — это тот же объект, что и данные шума. Не могу понять, как это сделать без этого.
  2. Чтобы остановить это безумное увеличение и уменьшение масштаба при нажатии на маркеры, я добавил:
 let zoom = map.getZoom();

map.setCenter(position, zoom > 6 ? true : false);

if (zoom < 7) {
    map.setZoom(7, true);
}
 

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