OpenLayers는 웹 브라우저에서 지도 데이터를 표시하기 위한 자바스크립트 라이브러리이다.
왜 때문인지.. OpenLayers에 관련한 공식 문서는 영어밖에 없을뿐더러, 블로그 포스팅도 많이 없어 처음 시작할 때 혼돈의 도가니탕이었다. 😵
그래서!!!! 나처럼 처음 시작하는 사람들이 쉽게 참고할 수 있게 기본적인 사용 방법을 포스팅 해 볼까한다. 근데 이제 React와 Next를 곁들인..
시작하기에 앞서 npm i ol / yarn add ol
로 프로젝트에 추가해 주자!
import 'ol/ol.css';
import { Map, View } from 'ol';
import { defaults } from 'ol/control';
import { fromLonLat, get } from 'ol/proj';
import { Tile } from 'ol/layer';
import { OSM, XYZ } from 'ol/source';
const map = new Map({ // ①
controls: defaults({ zoom: false, rotate: false }).extend([]),
layers: [ // ②
new Tile({ // ③
source: new OSM() // ④
}),
new Tile({
name: 'Base',
visible: true,
source: new XYZ({ // ⑤
url: `http://api.vworld.kr/req/wmts/1.0.0/${process.env.VWORLD_API_KEY}/Base/{z}/{y}/{x}.png` // ⑥
})
})
],
target: 'map', // ⑦
view: new View({ // ⑧
projection: get('EPSG:3857'), // ⑨
center: fromLonLat([126.30574134206182, 33.35570244202401], get('EPSG:3857')), // ⑩
zoom: 14 // ⑪
})
});
위 예제는 OpenLayers와 Vworld를 사용하여 가장 기본적인 Map을 렌더링 한 것이다.
중복과 옵션은 제외하고 필수 값들을 차근차근 살펴보겠다.
Vworld란?
Vworld는 2D/3D 기반의 다양한 국가공간정보 및 검색기능을 제공하는 오픈 API이다.
Vworld의 오픈 API를 사용하기 위하여 인증 key를 발급 받아야 하므로 회원가입이 필수다.
Vworld 웹 사이트로 이동 🏃♀️
new Map
layer
new Tile
source
라는 필수 값 필요source: new OSM()
(👉 OSM 타일이 적용된 지도 사진)
source: new XYZ({})
(👉 XYZ 타일이 적용된 지도 사진)
url: 'http://~'
WMTS Tile
API 호출{z}/{y}/{x}
를 그대로 입력하면 되는데, z, y, x에 값을 넣어야 하는 줄 알고 구글 좌표를 엄청 찾아보았다..🤦🏻♀️🤦🏻♀️🤦🏻♀️ 이 부분은 후에 view에서 지정한 초기값으로 지정되고, 지도가 움직임에 따라 값이 자동으로 입력된다...🤦🏻♀️🤦🏻♀️🤦🏻♀️target
<div id = "map"></div>
view
new View
projection
EPSG:3857
값으로 지정하였다.📚 알아둘 것!
[전지구 좌표계]
전 세계를 한 번에 나타내야 할 때 많이 쓰이는 좌표계
- WGS84 경위도: GPS가 사용하는 좌표계
- EPSG:4326, EPSG:4166 (Korean 1995)
- Bessel 1841 경위도: 한국과 일본에 잘 맞는 지역 타원체를 사용한 좌표계
- EPSG:4004, EPSG:4162 (Korean 1985)
- GRS80 경위도: WGS84와 거의 유사
- EPSG:4019, EPSG:4737 (Korean 2000)
- Google Mercator: 구글지도/빙지도/야후지도/OSM 등에서 사용 중인 좌표계
- EPSG:3857(공식), EPSG:900913(통칭)
center
fromLonLat()
메서드에 배열로 경도, 위도 순으로 좌표 값을 입력한 후 get()
메서드를 두 번째 인자로 넣으므로써 projection을 지정해 준다.zoom
이로써 가장 기본적인 map 생성을 알아보았다. 👏👏👏
(사실 5~6번의 XYZ 레이어는 기본적인 map은 아니므로 생략해도 된다. 근데 어차피 뒤에서 사용해야 함 ^^~어쩔티비📺 )
이처럼 OpenLayers로 생성한 Map 객체를 React + Next에 적용하는 방법은 다음 포스팅으로 돌아오겠다. 😉