Задать вопрос
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?
  • Вопрос задан
  • 127 просмотров
Подписаться 2 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Javascript.ru
    Курс по React
    5 недель
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
Fox7777
@Fox7777 Автор вопроса
Люблю python
Координаты границ карты можно получить через map.bounds().
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽