Delivery Dashboard.2 (google map)

김종민·2022년 10월 7일
0

Nuber-Client

목록 보기
19/21


Delivery Dashboard1에서
나의 page에 구글 map을 불러오고,
현재 나의 위치를 확인하고,
지정한 위치에서 나의 위치로 지도를 이동시키는거 까지 해봄.
이제 지정한 위치에서 나의 위치로 이동하는 도로를 painting해본다.


https://developers.google.com/maps/documentation/javascript/using-typescript

npm i -D @types/google.maps

!!!complierOptions에 추가할것.in tsconfig.js안에있음.
!!!공식 문서 참조

{
  "compilerOptions": {
    "skipLibCheck": true
  }
}

{
    ...
    "compilerOptions": {
        ...
        "typeRoots": [
            "node_modules/@types",
        ],
        ...
    }
}

길을 painting하기 위해서 console.cloud.google.com에서
Directions API를 활성화시켜야 함.

Delivery Dashboard 1에서 갔었던 탐색메뉴-api-라이브러리
그기임.
Directions API를 활성화한다.

사용방법

https://developers.google.com/maps/documentation/javascript/geocoding
-->주소를 가져다가 좌표로 바꿔줌

Reverse Geocodiong은 좌표를 주소로 바꿔줌,

geocoding을 검색해서 API를 활성화시켜줄것!!Enable시킬것

참조할것!!!

import React, { useEffect, useState } from 'react'
import GoogleMapReact from 'google-map-react'

interface ICoords {
  lat: number
  lng: number
}

interface IDriverProps {
  lat: number
  lng: number
  $hover?: any
}

const Driver: React.FC<IDriverProps> = () => <div className="text-lg">🚚</div>

export const Dashboard = () => {
  const [driverCoords, setDriverCoords] = useState<ICoords>({ lat: 0, lng: 0 })
  const [map, setMap] = useState<google.maps.Map>()
  const [maps, setMaps] = useState<any>()
  const onSuccess = ({
    coords: { latitude, longitude },
  }: GeolocationPosition) => {
    setDriverCoords({ lat: latitude, lng: longitude })
  }
  const onError = (error: GeolocationPositionError) => {
    console.log(error)
  }
  useEffect(() => {
    navigator.geolocation.watchPosition(onSuccess, onError, {
      enableHighAccuracy: true,
    })
  }, [])
  useEffect(() => {
    if (map && maps) {
      map.panTo(new google.maps.LatLng(driverCoords.lat, driverCoords.lng))
      
      ///geoCoder사용법~
      const geocoder = new google.maps.Geocoder()
      geocoder.geocode(
        {
          location: new google.maps.LatLng(driverCoords.lat, driverCoords.lng),
        },
        (result, status) => {
          console.log(result, status)
        }
      )
    }
  }, [driverCoords.lat, driverCoords.lng])
  ///현재 위치에서 이동한 위치로가는 도중의 길을 주소로 찍어줌.
  ///아래 사진은 현재 위치(순천)에서 도쿄로 찍었을때, 주소를 찍어줌.
  

  const onApiLoaded = ({ map, maps }: { map: any; maps: any }) => {
    map.panTo(new google.maps.LatLng(driverCoords.lat, driverCoords.lng))
    setMap(map)
    setMaps(maps)
  }
  return (
    <div>
      <div style={{ height: '70vh', width: '100%' }}>
        <GoogleMapReact
          yesIWantToUseGoogleMapApiInternals
          onGoogleApiLoaded={onApiLoaded}
          bootstrapURLKeys={{ key: 'AIzaSyCQBuKy-bkomVZm4BTMYc30cCDvtCpateI' }}
          defaultCenter={{
            lat: 35.166535,
            lng: 126.9779692,
          }}
          defaultZoom={15}
        >
          <Driver lat={driverCoords.lat} lng={driverCoords.lng} />
        </GoogleMapReact>
      </div>
    </div>
  )
}

profile
코딩하는초딩쌤

0개의 댓글