Задать вопрос
Fox7777
@Fox7777
Люблю python

Как получить текущие bounds (границы видимой области) карты в Yandex Maps API?

Работаю с Yandex Maps API (React, YMap). Хочу получить текущие границы окна пользователя (видимую область карты).
Пробовал использовать mapInstance.getBounds(), но иногда этот метод недоступен (например, в некоторых версиях ymaps3).

Сейчас мой хук выглядит так:
import { useEffect, useRef } from "react";
import debounce from "lodash/debounce";
import { coord1Changed, coord2Changed } from "@entities/jobs/store";

export const useMapBounds = (mapInstance: any) => {
  const prevBounds = useRef<string | null>(null);

  useEffect(() => {
    if (!mapInstance) return;

    const getVisibleBounds = () => {
      try {
        if (typeof mapInstance.getBounds === "function") {
          const bounds = mapInstance.getBounds();
          if (bounds) {
            return {
              minLat: bounds[0][0],
              maxLat: bounds[1][0],
              minLon: bounds[0][1],
              maxLon: bounds[1][1],
            };
          }
        }

        if (mapInstance.center && mapInstance.zoom) {
          // пробую вычислять вручную
          const center = mapInstance.center;
          const zoom = mapInstance.zoom;
          const size = mapInstance.size || { x: 943, y: 954 };

          const zoomFactor = Math.pow(2, zoom);
          const latDelta = size.y / 256 / zoomFactor;
          const lonDelta = size.x / 256 / zoomFactor;

          return {
            minLat: center[0] - latDelta,
            maxLat: center[0] + latDelta,
            minLon: center[1] - lonDelta,
            maxLon: center[1] + lonDelta,
          };
        }

        return null;
      } catch (error) {
        console.error("Error getting visible bounds:", error);
        return null;
      }
    };

    const handleBoundsChange = debounce(() => {
      const bounds = getVisibleBounds();
      if (!bounds) return;

      console.log(" bounds updated:", bounds);
    }, 500);

    if (mapInstance.events?.add) {
      mapInstance.events.add("update", handleBoundsChange);
    } else {
      setInterval(handleBoundsChange, 1000);
    }

    setTimeout(handleBoundsChange, 1000);
  }, [mapInstance]);
};

Как правильно получить границы видимой области карты (bounds) в Yandex Maps API (особенно для ymaps3)?
Есть ли встроенный метод вроде getBounds(), или bounds нужно вычислять вручную через center, zoom и size?
  • Вопрос задан
  • 87 просмотров
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
Fox7777
@Fox7777 Автор вопроса
Люблю python
Координаты границ карты можно получить через map.bounds().
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 80 000 до 120 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽