๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

1. ๊ธฐ๋ณธ ์ฒ ํ•™

Leaflet

  • "๊ฐ€๋ณ๊ณ  ๊ฐ„๋‹จ"์„ ๋ชฉํ‘œ๋กœ ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋งŒ ์ œ๊ณต (ํƒ€์ผ๋งต, ๋งˆ์ปค, ํŒ์—…, GeoJSON ํ‘œ์‹œ ๋“ฑ)
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒํƒœ๊ณ„๊ฐ€ ํ’๋ถ€ํ•ด์„œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ๋ถ™์ด๋Š” ๋ฐฉ์‹

OpenLayers

  • "์˜ฌ์ธ์›" GIS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • ๋ฒกํ„ฐ/๋ž˜์Šคํ„ฐ, ์ขŒํ‘œ ๋ณ€ํ™˜, ์Šคํƒ€์ผ๋ง, WMS/WFS ๊ฐ™์€ ๊ณ ๊ธ‰ GIS ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ ๋‚ด์žฅ
  • ๊ธฐ๋Šฅ์€ ๋งŽ์ง€๋งŒ ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ์žˆ์Œ

2. ์„ฑ๋Šฅ

Leaflet

  • ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด์ง€๋งŒ, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ(์ˆ˜๋งŒ ๊ฐœ ํ”ผ์ฒ˜)๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์ƒ๊น€
  • ๋ชจ๋ฐ”์ผ ์ตœ์ ํ™”๊ฐ€ ์ž˜ ๋ผ ์žˆ์Œ

 

OpenLayers

  • ๋ณต์žกํ•œ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ (์ˆ˜๋งŒ~์ˆ˜์‹ญ๋งŒ ํ”ผ์ฒ˜)
  • WebGL ๊ธฐ๋ฐ˜ ๋ Œ๋”๋ง ์ง€์› → ์„ฑ๋Šฅ์ ์œผ๋กœ ๋” ๊ฐ•๋ ฅ

3. ์ขŒํ‘œ๊ณ„/ํˆฌ์˜๋ฒ•

Leaflet

  • ๊ธฐ๋ณธ์ด EPSG:3857(Web Mercator)
  • ๋‹ค๋ฅธ ์ขŒํ‘œ๊ณ„ ์ง€์›์€ ์ œํ•œ์  → proj4js ๊ฐ™์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•„์š”

OpenLayers

  • ๋‹ค์–‘ํ•œ ์ขŒํ‘œ๊ณ„(EPSG:4326, EPSG:5186 ๋“ฑ) ์ง€์›
  • ํˆฌ์˜ ๋ณ€ํ™˜ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ

4. ๋ฐ์ดํ„ฐ ์†Œ์Šค ์—ฐ๋™

Leaflet

  • GeoJSON, TileLayer, WMS ์ •๋„ ๊ธฐ๋ณธ ์ง€์›
  • WFS๋‚˜ ๋ณต์žกํ•œ GIS ํ‘œ์ค€์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ•„์š”

OpenLayers

  • WMS, WFS, WMTS, VectorTiles, GeoJSON, TopoJSON ๋“ฑ ๊ด‘๋ฒ”์œ„ํ•œ ํฌ๋งท ์ง€์›
  • GeoServer ๊ฐ™์€ GIS ์„œ๋ฒ„์™€ ๋ฐ”๋กœ ๋ถ™์ด๊ธฐ ์œ ๋ฆฌ

5. ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

Leaflet

  • CSS/JS๋กœ UI ๊พธ๋ฏธ๊ธฐ ํŽธ๋ฆฌ
  • ์ง€๋„ ์ž์ฒด๋ณด๋‹ค๋Š” "๋งˆ์ปค, ํŒ์—…" ๊ฐ™์€ ๋‹จ์ˆœ ๊ธฐ๋Šฅ ์œ„์ฃผ

OpenLayers

  • ์ง€๋„ ์Šคํƒ€์ผ๋ง, ์‹ฌ๋ณผ๋ผ์ด์ง•(์ƒ‰์ƒ, ํˆฌ๋ช…๋„, ๋ฒ”๋ก€)๊นŒ์ง€ ๊ฐ€๋Šฅ
  • GIS ๋ถ„์„ ๊ธฐ๋Šฅ(๋ฒ„ํผ, ๊ต์ฐจ, ํด๋ฆฌํ•‘ ๋“ฑ)๋„ ์ง€์›

6. ์‚ฌ์šฉ ๋‚œ์ด๋„

Leaflet

  • ์ดˆ์‹ฌ์ž์šฉ์œผ๋กœ ์ตœ์ 
  • "๋ช‡ ์ค„ ์ฝ”๋“œ"๋กœ ์ง€๋„ ๋„์šฐ๊ณ  ๋งˆ์ปค ์ถ”๊ฐ€ ๊ฐ€๋Šฅ

OpenLayers

  • ๋ฌธ๋ฒ•์ด ์žฅํ™ฉํ•˜๊ณ  ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ์žˆ์Œ
  • GIS ์ง€์‹์ด ์žˆ์œผ๋ฉด ๊ฐ•๋ ฅํ•˜๊ฒŒ ํ™œ์šฉ ๊ฐ€๋Šฅ

 

Leaflet์€ OpenLayers๋ณด๋‹ค ํ›จ์”ฌ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๋‹จํ•˜๋‹ค.

๋ณดํ†ต ์ด๋ ‡๊ฒŒ 3๋‹จ๊ณ„๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค: ์ง€๋„ ์ƒ์„ฑ → ๋ฐฐ๊ฒฝ์ง€๋„(Tile Layer) ์ถ”๊ฐ€ → WMS๋‚˜ ๋งˆ์ปค ์ถ”๊ฐ€.


OpenLayers์™€ ๋น„๊ตํ•ด๋ณด๋ฉด:

  • Leaflet: L.map, L.tileLayer, L.marker, L.tileLayer.wms ์ด๋Ÿฐ ์‹์œผ๋กœ L.* ํ•จ์ˆ˜ ์œ„์ฃผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ถ™์ธ๋‹ค.
  • OpenLayers: new ol.Map, new ol.layer.Tile, new ol.source.WMS ์ด๋Ÿฐ ์‹์œผ๋กœ ๊ฐ์ฒด๋ฅผ ๋งŽ์ด ์“ด๋‹ค.

๊ทธ๋ž˜์„œ Leaflet์€ ์ง„์ž…์žฅ๋ฒฝ์ด ๋‚ฎ๊ณ , ๊ฐ„๋‹จํ•œ ์ง€๋„ ์„œ๋น„์Šค๋Š” ๊ธˆ๋ฐฉ ๋งŒ๋“ ๋‹ค.
๋Œ€์‹  ์ขŒํ‘œ ๋ณ€ํ™˜์ด๋‚˜ ๋ณต์žกํ•œ GIS ์—ฐ์‚ฐ์ด ํ•„์š”ํ•  ๋• OpenLayers ์ชฝ์ด ์œ ๋ฆฌํ•˜๋‹ค.

 

openlayers๋Š” ๋‹ค๋ฅธ ๊ฒŒ์‹œ๋ฌผ ์˜ˆ์ œ๋“ค์ด ์žˆ์œผ๋‹ˆ Leaflet ์˜ˆ์ œ๋ฅผ ์ ์–ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

Leaflet ์˜ˆ์ œ

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8"/>
  <title>Leaflet - ์„œ์šธ ์ง€๋„ ์˜ˆ์ œ</title>
  <link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css"/>
  <style>
    #map { width: 100%; height: 600px; }
  </style>
</head>
<body>
<div id="map"></div>

<script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
<script>
  // 1. ์ง€๋„ ์ƒ์„ฑ (์„œ์šธ ์‹œ์ฒญ ๊ทผ์ฒ˜)
  const map = L.map('map').setView([37.5665, 126.9780], 13);

  // 2. ๋ฐฐ๊ฒฝ์ง€๋„ (OSM)
  L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    maxZoom: 19,
    attribution: '&copy; OpenStreetMap'
  }).addTo(map);

  // 3. ๋งˆ์ปค ์ถ”๊ฐ€
  const marker = L.marker([37.5665, 126.9780]).addTo(map);
  marker.bindPopup("์„œ์šธ ์‹œ์ฒญ").openPopup();

  }).addTo(map);
</script>
</body>
</html>

See the Pen Untitled by note (@somieee) on CodePen.

 

์ด๋ ‡๊ฒŒํ•˜๋ฉด

  • ๋ฐฐ๊ฒฝ์ง€๋„๋Š” OSM,
  • ๋งˆ์ปค๋Š” ์„œ์šธ ์‹œ์ฒญ์ด ์ง€๋„ ์œ„์— ์–นํžŒ๋‹ค.
๋ฐ˜์‘ํ˜•