Открытие 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

При достаточно большом масштабе тяжело нажать именно в ожидаемые координаты. Вы правы, решением может стать либо округление координат до удобного количества знаков после запятой, либо нахождения балуна по идентификатору.

→ Ссылка