Открытие ballon на карте при клике на внешнюю кнопку с остановками
Как реализовать открытие балуна на уже существующем маршруте при клике на внешнюю кнопку (при клике приходят координаты остановки ([54.95966, 82.83553])), открыть может на всем отрезке маршрута только 1-2 балуна, а то и вообще не открыть его.
Точку он находит и центрируется на ней, но балун не хочет открывать, может кто-то сталкивался с этим.
function showBalloonForStop(myMap, coordinates) {
function roundCoordinates(coords) {
return coords.map((coord) => parseFloat(coord.toFixed(5)));
}
function coordsAreEqual(coords1, coords2, tolerance = 0.01) {
return (
Math.abs(coords1[0] - coords2[0]) < tolerance &&
Math.abs(coords1[1] - coords2[1]) < tolerance
);
}
try {
let found = false;
// Закрыть все балуны перед открытием нового
myMap.geoObjects.each((geoObject) => {
if (geoObject.balloon && geoObject.balloon.isOpen()) {
geoObject.balloon.close();
}
});
myMap.geoObjects.each((geoObject) => {
if (geoObject.geometry && geoObject.geometry.getType() === "Point") {
const coords = geoObject.geometry.getCoordinates();
// console.log(geoObject.geometry);
const roundedCoordinates = roundCoordinates(coords);
const roundedInputCoordinates = roundCoordinates(coordinates);
// Проверка наличия данных балуна
const balloonData = geoObject.properties.get("balloonContent");
if (!balloonData) {
// console.log("Balloon data is missing for coordinates:", roundedCoordinates);
return;
}
if (coordsAreEqual(roundedCoordinates, roundedInputCoordinates)) {
found = true;
myMap
.setCenter(coords, 16, { checkZoomRange: true })
.then(() => {
// console.log("Opening balloon with data:", balloonData);
geoObject.balloon.open();
setLoading(false);
})
.catch((error) => {
console.log("Error setting center or opening balloon:", error);
setLoading(false);
});
}
}
});
if (!found) {
// console.log("No matching coordinates found for balloon");
myMap
.setCenter(coordinates, 17, { checkZoomRange: true })
.then(() => {
// console.log("Centered on coordinates:", coordinates);
setLoading(false);
geoObject.balloon.open();
})
.catch((error) => {
// console.log("Error centering on coordinates:", error);
setLoading(false);
});
}
} catch (error) {
// console.log("Error in showBalloonForStop:", error);
setLoading(false);
}
}
Ответы (1 шт):
Автор решения: YaSupport
→ Ссылка
При достаточно большом масштабе тяжело нажать именно в ожидаемые координаты. Вы правы, решением может стать либо округление координат до удобного количества знаков после запятой, либо нахождения балуна по идентификатору.