๐ project/
โโ index.html
โโ /js/
โโ KoreanTmsProviders.js (Daum ์ขํ๊ณ์ฉ)
โโ /geoJson/
โโ daegu.json (ํ์ ๊ตฌ์ญ GeoJSON ํ์ผ)
<head>
์ ์๋ CDN ์ถ๊ฐ:<!-- Leaflet -->
<link rel="stylesheet" href="<https://unpkg.com/leaflet@1.9.4/dist/leaflet.css>" />
<script src="<https://unpkg.com/leaflet@1.9.4/dist/leaflet.js>"></script>
<!-- axios -->
<script src="<https://cdnjs.cloudflare.com/ajax/libs/axios/1.9.0/axios.min.js>"></script>
<!-- Daum ์ง๋ ์ขํ๊ณ์ฉ ํ๋ฌ๊ทธ์ธ -->
<script src="/js/KoreanTmsProviders/lib/proj4.js"></script>
<script src="/js/KoreanTmsProviders/lib/proj4leaflet.js"></script>
<script src="/js/KoreanTmsProviders/src/Leaflet.KoreanTmsProviders.js"></script>
<div id="map" style="height: 100vh;"></div>
const map = new L.Map('map', {
center: new L.LatLng(35.829890, 128.532719), // ๋๊ตฌ ์ค์ฌ ์ขํ
zoom: 8,
crs: L.Proj.CRS.Daum // Daum ์ขํ๊ณ
});
L.tileLayer.koreaProvider('DaumMap.Street').addTo(map);
map.on('click', function(e){
const lat = e.latlng.lat;
const lng = e.latlng.lng;
const marker = L.marker([lat, lng]).addTo(map);
axios.get(`/open/weather/get/${lat}/${lng}`)
.then(resp => {
const content = `
<div>
<strong>๊ธฐ์ ์ ๋ณด</strong><br/>
base: ${resp.data.base}<br/>
cloud: ${resp.data.clouds.all}
</div>`;
marker.bindPopup(content);
});
});
const borderColors = {
"์ค๊ตฌ": "red", "๋๊ตฌ": "orange", "์๊ตฌ": "yellow",
"๋จ๊ตฌ": "green", "๋ถ๊ตฌ": "blue", "์์ฑ๊ตฌ": "navy",
"๋ฌ์๊ตฌ": "black", "๋ฌ์ฑ๊ตฐ": "royalblue"
};
axios.get("/geoJson/daegu.json")
.then(resp => {
const grouped = {};
resp.data.features.forEach(f => {
const key = f.properties.sggnm;
if (!grouped[key]) grouped[key] = [];
grouped[key].push(f);
});
Object.entries(grouped).forEach(([sggnm, features]) => {
L.geoJSON(features, {
style: {
color: borderColors[sggnm],
fillColor: borderColors[sggnm],
fillOpacity: 0.6,
weight: 2
},
onEachFeature: (feature, layer) => {
const name = feature.properties.adm_nm;
layer.bindTooltip(name);
layer.on('click', () => {
map.fitBounds(layer.getBounds());
alert(`์ ํํ ํ์ ๋: ${name}`);
});
}
}).addTo(map);
});
});
sggnm
(์๊ตฐ๊ตฌ๋ช
) ๊ธฐ์ค์ผ๋ก ์ฌ๋ฌ Polygon
โ ํ๋์ MultiPolygon
์ผ๋ก ๋ณํฉhttps://mapshaper.org ์ ์
GeoJSON ํ์ผ ๋๋๊ทธ๋ก ์ ๋ก๋
์๋จ ๋ฉ๋ด โ Console
ํด๋ฆญ
๋ช ๋ น์ด ์ ๋ ฅ:
dissolve sggnm
๊ฒฐ๊ณผ ํ์ธ ํ ์ฐ์ธก ์๋จ Export
โ GeoJSON ์ ์ฅ
๐ก ์ต์ : ๊ธฐ์กด ์์ฑ ์ ์งํ๊ณ ์ถ๋ค๋ฉด
dissolve sggnm keep-fields=adm_cd,adm_nm
ํญ๋ชฉ | ๋ด์ฉ |
---|---|
๐ ์ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | Leaflet + Daum CRS |
๐ ๋ฐ์ดํฐ ํ์ | GeoJSON (MultiPolygon , properties.sggnm , adm_nm ) |
๐ ์ฃผ์ ๊ธฐ๋ฅ | ์ง๋ + ๋ง์ปค + ํ์ + ํ์ ๊ตฌ์ญ ์์ ์๊ฐํ |
๐ ์์ฉ | ํ์ ๋ ํํฐ, ํต๊ณ ์๊ฐํ, ๋๋ฆด๋ค์ด ๊ฐ๋ฅ |
๐ ๊ฐ๊ณต ํด | Mapshaper๋ก dissolve ๋ก ๋ณํฉ ๋ฐ ์ ๋ฆฌ |