У меня есть список позиций, которые я получаю из конечной точки мс, например:
https://atlas.microsoft.com/search/fuzzy/json?top=100&typeahead=true&subscription-key=subscription-key&api-version=1&query=Leeds
Затем пользователь выбирает один из предложенных адресов и позицию, предоставленную эта конечная точка затем используется для отображения на карте, которая использует кластеры. Например, для Лидса у меня есть следующее: -1.548567, 53.801277
Однако, когда я создаю кластеры в функции clusterRenderCallback
, которую я предоставляю при создании HtmlMarkerLayer
, я получаю позиции, близкие к те, что я предоставил, , но отличаются , и я понятия не имею, как и почему.
, поэтому код будет выглядеть примерно так:
Сначала я создаю источник данных
dataSource = new atlas.source.DataSource(null, {
//Tell the data source to cluster point data.
cluster: true
});
map.sources.add(dataSource);
Затем я управляю созданием кластера внутри HtmlMarkerLayer
создания:
clusterRenderCallback: function (id, position, properties) {
var cluster = new atlas.HtmlMarker({
position: position, // different position to that which I have provided
htmlContent: `<div>${properties.point_count_abbreviated}</div>`,
values: properties,
});
map.events.add('click', cluster, clusterClicked);
return cluster;
}
И здесь я создаю точки для добавления в мой источник данных:
let features = list.map(x => new atlas.data.Feature(new atlas.data.Point(new atlas.data.Position(x.lon, x.lat)), x));
dataSource.add(features);
Позиция, которую я получаю, например, для кластера в Лидсе: -1.549072265625, 53.80065082633024, хотя у меня в Лидсе было 2 позиции, обе из которых были с одинаковыми координатами: -1.548567, 53.801277
Похоже, что есть какая-то механизма внутри кода атласа, который «фиксирует» предоставленные координаты; кто-нибудь знает, как это остановить или что я здесь делаю неправильно?
== РЕДАКТИРОВАТЬ 02/05 ==
хорошо, так что после ответа @rbrundritt, здесь последний бит кода, который я должен добавили, показывая, что мы делаем после нажатия на кластер:
function clusterClicked(e) {
var cluster = e.target;
datasource.getClusterExpansionZoom(cluster.properties.cluster_id).then(function (zoom) {
map.setCamera({
center: cluster.getOptions().position,
zoom: zoom
});
});
}
И вот здесь у нас есть проблема с этим расхождением - нажатие на кластер увеличивает масштаб до уровня масштабирования, где кластер разрушается; однако, поскольку мы центрируем карту по положению кластера, положение булавки, отличное от положения кластера, не отображается на карте при таком уровне масштабирования (ie 3 в воздухе). Кроме того, у нас нет способа узнать в контексте этой функции, какому выводу соответствует кластер, это оставляет нам ошибочное поведение.