최근 프로젝트에서 대한민국 시도 경계 데이터를 Google Maps 위에 시각화할 일이 있었다.
React와 TypeScript, 그리고 @react-google-maps/api 라이브러리를 활용해 이를 구현한 과정을 정리해본다.
npm install @react-google-maps/api
Maps JavaScript API 활성화.env에 저장REACT_APP_GOOGLE_MAPS_API_KEY=your_api_key_here
⚠️ 꼭 리퍼러 제한 설정하자! (
*.yourdomain.com/*)
리퍼러 제한 설정 방법이 궁금하다면 아래 글을 참고해보자!
🔗 구글 Maps API 키 보안을 위한 Referrer 제한 설정법
type: FeatureCollection 형태여야 함{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": { "name": "서울특별시" },
"geometry": {
"type": "Polygon",
"coordinates": [...]
}
},
...
]
}
// components/KoreaMap.tsx
import { GoogleMap, LoadScript } from '@react-google-maps/api';
import { useRef } from 'react';
const containerStyle = {
width: '100%',
height: '100vh',
};
const center = {
lat: 36.5,
lng: 127.5,
};
export default function KoreaMap({ geoJson }: { geoJson: any }) {
const mapRef = useRef<google.maps.Map | null>(null);
const onLoad = (map: google.maps.Map) => {
mapRef.current = map;
// GeoJSON 데이터 추가
map.data.addGeoJson(geoJson);
// 기본 스타일 지정
map.data.setStyle({
fillColor: '#FFEDA0',
strokeColor: '#555',
strokeWeight: 1,
fillOpacity: 0.6,
});
// Hover 스타일
map.data.addListener('mouseover', (event: any) => {
map.data.overrideStyle(event.feature, { fillColor: '#FEB24C' });
});
map.data.addListener('mouseout', (event: any) => {
map.data.revertStyle();
});
};
return (
<LoadScript googleMapsApiKey={process.env.REACT_APP_GOOGLE_MAPS_API_KEY!}>
<GoogleMap
mapContainerStyle={containerStyle}
center={center}
zoom={7}
onLoad={onLoad}
/>
</LoadScript>
);
}
import KoreaMap from './components/KoreaMap';
import sidoGeoJson from './SIDO_MAP_2022.json'; // GeoJSON import
function App() {
return <KoreaMap geoJson={sidoGeoJson} />;
}
export default App;
FeatureCollection이 아니면 mapshaper.org에서 변환 추천
Google Maps에서 GeoJSON을 쉽게 불러올 수 있다는 점은 정말 편리하다.
GeoJSON만 잘 준비되면 지도 시각화는 생각보다 어렵지 않다.
다음엔 시군구 단위 또는 마우스 클릭 시 정보 보여주기 등 인터랙션을 더해볼 예정!
질문은 댓글로 편하게 남겨주세요 🙌
필요하면 이 포스트에 맞는 이미지나 코드 스니펫용 gist도 같이 넣을 수 있어.
포스팅용으로 꾸며주는 것도 도와줄 수 있으니까, 원하면 알려줘!