Hamutaro - Hamtaro 4

Frontend/OpenLayers

[Openlayers] GeoJSON ํŒŒ์ผ ์ฝ์–ด์„œ ์ง€๋„์œ„์— Layer ์˜ฌ๋ฆฌ๊ธฐ

carsumin 2024. 8. 12. 11:12

 

OpenLayers๋ž€?

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋Œ€ํ™”ํ˜• ์ง€๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ๋„์™€์คŒ

๋‹ค์–‘ํ•œ ์ง€๋ฆฌ๊ณต๊ฐ„ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ง€๋ฆฌ ์ •๋ณด๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ์ œ๊ณต

 

https://openlayers.org/en/latest/apidoc/

 

OpenLayers v10.1.0 API - Index

View The view manages the visual parameters of the map view, like resolution or rotation. View with center, projection, resolution and rotation

openlayers.org

 

๊ณต์‹ Document์— ์›ฌ๋งŒํ•œ๊ฒŒ ๋‹ค ์žˆ๊ณ , ์˜ˆ์ œ ์ฝ”๋“œ๊นŒ์ง€ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ผผ๊ผผํ•˜๊ฒŒ ํ™•์ธํ•ด๋ณด์ž.

 

 

OpenLayers๋กœ GeoJSON ํŒŒ์ผ ์ฝ์–ด์„œ ์ง€๋„ ์œ„์— VectorLayer ์˜ฌ๋ฆฌ๊ธฐ

 

  • map.html

OpenLayers๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ script๋ฅผ ๋กœ๋“œํ•ด์•ผ ํ•œ๋‹ค.

 

<!-- openlayers -->
    <link rel="stylesheet" href="https://openlayers.org/en/v4.6.5/css/ol.css" type="text/css">
    <script src="https://openlayers.org/en/v4.6.5/build/ol.js"></script>

 

 

body ๋ถ€๋ถ„์— map์„ ๋„์šธ div๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

 

  • geoMap.js

์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ์— ์•ž์„œ, ๋‚ด๊ฐ€ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋Š” SHP ํŒŒ์ผ์ด์˜€๊ณ  ์ด๋Š” QGIS๋ฅผ ํ†ตํ•ด์„œ GeoJSON ํ˜•์‹์œผ๋กœ ๋ฐ”๊ฟ”์„œ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์Šคํฌ๋ฆฝํŠธ์˜ ready ํ•จ์ˆ˜ ์•ˆ์— ์•„๋ž˜์™€ ๊ฐ™์ด map ๊ฐ์ฒด ์ƒ์„ฑ


  • target : html์—์„œ ๋งŒ๋“  ์ง€๋„๋ฅผ ๋„์šธ div
  • layers : ์ง€๋„์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ ˆ์ด์–ด๋“ค, ๋‚˜๋Š” GeoJSON์„ ์ฝ์–ด์„œ ๋ ˆ์ด์–ด๋ฅผ ์˜ฌ๋ฆด ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ๊ฒฝ์ง€๋„๋งŒ ์ถ”๊ฐ€ํ•ด์คฌ๋‹ค. OpenLayers์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” OSM ๋ฐฐ๊ฒฝ์ง€๋„๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.
  • view : ์ง€๋„๋ฅผ ๋กœ๋“œํ–ˆ์„ ๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ฒŒ ๋˜๋Š” ์ง€๋„์ƒ์˜ ๊ตฌ๊ฐ„์„ ์˜๋ฏธํ•œ๋‹ค.
    • center : ์ค‘์‹ฌ์ด ๋˜๋Š” ์ขŒํ‘œ
    • zoom : ์ง€๋„ ํ™•๋Œ€ ๋ ˆ๋ฒจ

 

 

์ฒ˜์Œ์—๋Š” javaScript์—์„œ ์ œ๊ณตํ•˜๋Š” fetch API๋ฅผ ์ด์šฉํ•ด์„œ GeoJSON ํŒŒ์ผ์„ ์ฝ์–ด์˜ค๋ ค๊ณ  ํ–ˆ์œผ๋‚˜ CORS ์—๋Ÿฌ ๋ฌธ์ œ๋กœ ์ž ์‹œ ๋ณด๋ฅ˜ํ•˜๊ณ  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜๋‹ค.

 

VectorSource์•ˆ์— GeoJSON().readFeatures()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GeoJSON ๊ฐ์ฒด๋ฅผ ์ฝ์–ด์™”๋‹ค.

GeoJSON ๊ฐ์ฒด๋ฅผ ์ฝ๊ธฐ ์œ„ํ•ด ํ•ด๋‹น json ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ์„ ์–ธํ•ด์„œ ์ €์žฅํ•ด์ฃผ์—ˆ๋‹ค.


  • Feature : ์ขŒํ‘œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์€ ๊ฐ์ฒด
  • Source : Feature์˜ ์ง‘ํ•ฉ๊ฐ์ฒด

 

GeoJSON ํŒŒ์ผ์„ ์ฝ์–ด์„œ ์ง€๋„๋ฅผ ์˜ฌ๋ฆด ๋•Œ ๊ฐ€์žฅ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ ์ขŒํ‘œ๊ณ„์ด๋‹ค.

์ขŒํ‘œ๊ณ„๋ฅผ ํ†ต์ผํ•ด์ค˜์•ผ ์ง€๋„๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ํ‘œ์ถœ๋œ๋‹ค.

GIS ๋‹ด๋‹น์žํ•œํ…Œ ๋ฐ›์€ SHP ํŒŒ์ผ์€ ์ขŒํ‘œ๊ณ„๊ฐ€ 5186์ด์˜€๊ณ , ๋‚ด๊ฐ€ js์—์„œ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•œ ์ขŒํ‘œ๊ณ„๋Š” 3857์ด์˜€๋‹ค...

 

์ง€๋„๋ฅผ ์ฒ˜์Œ ๊ตฌํ˜„ํ•ด๋ณด๋Š”๋ฐ๋‹ค๊ฐ€ ์ด๋Ÿฐ ์ขŒํ‘œ๊ณ„์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ „ํ˜€ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ถ€๋ถ„์—์„œ ์กฐ๊ธˆ ํ—ค๋งธ๋‹ค.

์ขŒํ‘œ๊ณ„์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ž˜ ํ™•์ธํ•˜๊ณ  ๋งž์ถฐ์„œ ๊ฐœ๋ฐœ์„ ํ•ด์•ผํ•œ๋‹ค.

QGIS์—์„œ GeoJSON์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์˜ต์…˜์œผ๋กœ ์ขŒํ‘œ๊ณ„ ์„ ํƒํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๊ธฐ์— ์ด๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ์ขŒํ‘œ๊ณ„๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ์—ˆ๋‹ค.

 


  • featureProjection : Vector ์†Œ์Šค ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜. GeoJSON์˜ Projection๊ณผ ๋งž์ถฐ์ค€๋‹ค.

 

feature๋ฅผ ์ฝ์–ด์„œ Geometry ํƒ€์ž…์— ๋”ฐ๋ผ style์„ ์ง€์ •ํ•œ ํ›„ VectorLayer๋ฅผ returnํ•˜๋„๋ก ํ–ˆ๋‹ค.

style ๊ฐ์ฒด ์ƒ์„ฑ์— ๋Œ€ํ•œ ๊ฒƒ๋“ค์€ OpenLayers ๊ณต์‹ Document์— ์ƒ์„ธํžˆ ์„ค๋ช…์ด ๋ผ ์žˆ๋‹ค.

 

GeoJSON ํŒŒ์ผ์„ ์—ฌ๋Ÿฌ๊ฐœ ์ฝ์–ด์„œ ๊ฐ๊ฐ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•˜์—ฌ ๋ ˆ์ด์–ด๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ด๊ณ ์ž ์•„๋ž˜์™€๊ฐ™์ด ๊ณตํ†ตํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

 

 

 

์œ„์—์„œ ๋งŒ๋“  ๊ณตํ†ตํ•จ์ˆ˜์— parameter๋ฅผ ๊ฐ™์ด ๋ณด๋‚ด์„œ VectorLayer๋ฅผ ๋งŒ๋“ ๋‹ค.

 

vectorLayer_node = createVectorLayer(nodeObject, styleFunction);
vectorLayer_link = createVectorLayer(linkObject, styleFunction);

 

 

map ๊ฐ์ฒด์— addLayer()๋ฅผ ์ด์šฉํ•ด Layer๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

 

// ๋งต์— Layer ์ถ”๊ฐ€
map.addLayer(vectorLayer_node);
map.addLayer(vectorLayer_link);

 

 

๊ฒฐ๊ณผ

 

 

node, link 2๊ฐœ์˜ GeoJSON ํŒŒ์ผ์„ ์ฝ์–ด์„œ ์ง€๋„ ์œ„์— ์˜ฌ๋ฆฐ ๊ฒฐ๊ณผ์ด๋‹ค.

 

 

 

 

 

 

* ์œ„์˜ ํฌ์ŠคํŒ…์€ ๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€, ์ •๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

* ๋”ฐ๋ผ์„œ ์ •ํ™•ํ•˜์ง€ ์•Š์€ ๋ถ€๋ถ„์ด ์žˆ์„์ˆ˜๋„ ์žˆ์Œ.

* ๋‚ด์šฉ์˜ ์ž˜๋ชป๋œ ๋ถ€๋ถ„, ์˜ค๋ฅ˜ ์ง€์ , ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ ๊ฐ์‚ฌํžˆ ๋ฐ›๊ฒ ์Šต๋‹ˆ๋‹ค.