Как сфокусировать видовой экран снизу, а не по центру

#reactjs #mapbox #react-map-gl

#reactjs #mapbox #реагировать-карта-gl

Вопрос:

В настоящее время я использую пакет react-map-gl для создания своего приложения. В документации этот блок кода фокусируется на широте: 37.7577, долготе: -122.4376 масштабирование: 8 в центре моего обзора. Тем не менее, я хочу, чтобы фокус широты: 37.7577, долготы: -122.4376 был в нижней части моего обзора. Есть идеи, как я могу это сделать?

 function Map() {
  const [viewport, setViewport] = useState({
    width: 400,
    height: 400,
    latitude: 37.7577,
    longitude: -122.4376,
    zoom: 8
  });

  return (
    <ReactMapGL
      {...viewport}
      onViewportChange={nextViewport => setViewport(nextViewport)}
    />
  );
}
 

Ответ №1:

Одним из вариантов было бы определить северную точку границ и перецентрировать карту с помощью Map.panTo функции:

 const bounds = map.getBounds();  //get map bounds
const newCenter = { lng: map.getCenter().lng, lat: bounds.getNorth() };
map.panTo(newCenter);
 

Пример

 function Map() {
  const [viewport, setViewport] = React.useState({
    latitude: 37.7577,
    longitude: -122.4376,
    zoom: 8,
  });

  function mapLoaded(e) {
    const map = e.target;
    const bounds = map.getBounds();  //get map bounds
    const newCenter = { lng: map.getCenter().lng, lat: bounds.getNorth() };
    map.panTo(newCenter);
  }

  return (
    <ReactMapGL
      onLoad={mapLoaded}
      mapboxApiAccessToken={MAPBOX_TOKEN}
      {...viewport}
      width="100vw"
      height="100vh"
      onViewportChange={(nextViewport) => setViewport(nextViewport)}
    />
  );
}