Реагирует с помощью Api Карт Google, как повторно центрировать карту

#reactjs #google-maps #google-maps-api-3

#reactjs #google-карты #google-maps-api-3

Вопрос:

Я использую react и использую карту в качестве функционального компонента. (tbh я все еще не уверен, когда использовать классы v. функции, когда дело доходит до классов). однако моя главная проблема заключается в том, что я использую Google Maps API для представления карты, и я пытаюсь центрировать карту по текущему местоположению пользователя. кроме того, я хотел, чтобы он обновлялся по мере их обхода, поэтому я просто собирался использовать функцию set interval для установки таймера, когда он обновляется. Я подумал, что навигатор будет моим лучшим выбором. Хотя, похоже, я не могу найти подходящую функцию для обновления свойства center после инициализации.

Я отмечу, куда, по моему мнению, должна идти функция.

Вот документация, которую я просматривал: https://tomchentw.github.io/react-google-maps/#googlemap

 function MapContainer() {
    const [currentLoc,setCurrentLoc] = useState(
        {
            lat: 42.331429,
            lng: -83.045753
        }
    )
    function setLocation() {
        if(navigator.geolocation)
        {
            navigator.geolocation.getCurrentPosition(
                (position) => {
                    setCurrentLoc(position.coords.latitude,position.coords.longitude)
                }
            )
        }
    }
   
    return (
    <LoadScript
      googleMapsApiKey="Api key"
    >
      <GoogleMap
        //THIS IS WHERE YOU STYLLLLLEEEE
        //also where you set what is visible with the controls
        options= {{
            styles:mapStyles['hide'],
            mapTypeControl:false,
            disableDefaultUI:true,
            draggable:true,
            zoomControl:true
        }}
        id="44b929060bf5f087"
        mapContainerStyle=
        {{
            height: "86.5vh",
            width: "100%",
            stylers: mapStyles['hide'],
            draggable: false
        }}
        center={{
            lat: 44.331429,
            lng: -83.045753
        }}
        zoom={10}
      >
        {
            setInterval((props) => {
                var long;
                var lati;
                if(navigator.geolocation)
                {
                    navigator.geolocation.getCurrentPosition(
                        (position) => {
                            lati = position.coords.latitude;
                            long = position.coords.longitude;
                        }
                    )
                };
                //here is where i'd set the center if i had a function i could do it with
            }, 2000)
        }
      </GoogleMap>
    </LoadScript>
  )
}
 
export default MapContainer;
  

Ответ №1:

Я не могу получить доступ к ссылке документации библиотеки react-google-maps. Вы можете использовать библиотеку @react-google-maps / api, поскольку это переписывание react-google-maps и более поддерживается.

Для вашего варианта использования вы можете установить значение вашего центра в состоянии и обновить его в функции setinterval . Таким образом, каждый раз, когда изменяется значение состояния центра, центр также изменяется. Пожалуйста, посмотрите этот пример кода и фрагмент кода ниже:

 import React from "react";
import { GoogleMap, LoadScript } from "@react-google-maps/api";

const containerStyle = {
  width: "400px",
  height: "400px",
};

function MyComponent() {
  const [map, setMap] = React.useState(null);
  const [currentLoc, setCurrentLoc] = React.useState({
    lat: 42.331429,
    lng: -83.045753,
  });

  const onLoad = React.useCallback(function callback(map) {
    setMap(map);

    setInterval((props) => {
      console.log("refreshed");
      if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition((position) => {
          setCurrentLoc({
            lat: position.coords.latitude,
            lng: position.coords.longitude,
          });
        });
      }
    }, 2000);
  }, []);

  return (
    <LoadScript googleMapsApiKey="YOUR_API_KEY">
      <GoogleMap
        mapContainerStyle={containerStyle}
        center={{ lat: currentLoc.lat, lng: currentLoc.lng }}
        zoom={10}
        onLoad={onLoad}
      >
        {/* Child components, such as markers, info windows, etc. */}
        <></>
      </GoogleMap>
    </LoadScript>
  );
}

export default React.memo(MyComponent);