Node.js

[npm] 지도의 위도, 경도 좌표를 쉽게 관리할 수 있는 turf

angieveloper 2022. 4. 26. 21:52

Node.js(Express)를 이용해 지도를 포함하는 프로젝트를 진행 중이었고, 두 지점 사이의 중앙의 위도, 경도를 구하는 작업이 필요했다.

두 좌표점의 중앙값을 구하는 방법이 뭐 사인값 구하고 코사인값 구하고.. 이런 공식을 사용하면 되긴 했지만 잘 만들어진 라이브러리가 없나 찾아보다 Turf라는 라이브러리를 찾게 되었다.

 

http://turfjs.org/

 

Turf.js | Advanced Geospatial Analysis

Modular Turf is a collection of small modules, you only need to take what you want to use

turfjs.org

 

geospatial한 작업을 할 수 있도록 해주는 Node.js 라이브러리다.

위 공식사이트에 들어가보면 알겠지만 distance, area, midpoint, length 등등.. 지리적 작업에 필요한 다양한 기능을 제공한다.

나같은 경우는 두 지점의 중앙값을 구하는 midpoint만을 사용했다. 아래는 midpoint를 사용하는 방법이다.

 

⛳️ 1. 설치하기

$ npm install --save @turf/midpoint

만약에 Turf의 모든 기능 라이브러리를 설치하고 싶다면

$ npm install --save @turf/turf

 

⛳️ 2. 라이브러리 사용

const midpoint = require('@turf/midpoint');

const coordinateA = [longitudeA, latitudeA];
const coordinateB = [longitudeB, latitudeB];
const midCoordinate = midpoint(coordinateA, coordinateB);

 

내가 잘못 이해한걸 수도 있지만 공식사이트에 나와있는 코드가 에러가 나서 살짝 헤맸다

두 좌표값을 각각 위도값과 경도값을 담은 배열로 저장한다. 순서는 [경도, 위도] 순이다.

그리고 midpoint 함수를 이용해서 두 배열을 넘겨서 값을 저장한다.

이 때 midCoordinate의 값은 다음과 같다.

 

{
  type: 'Feature',
  properties: {},
  geometry: {
    type: 'Point',
    coordinates: [ longitude, latitude ]
  }
}

 

geometry의 coordinates 값이 바로 구하고자 했던 중앙지점(midpoint)의 좌표값이다. 역시 [경도, 위도] 순으로 저장되어 있다.

참고로 여기서 type은 위치정보를 갖는 점을 기반으로 체계적으로 지형을 표현하기 위해 설계된 개방형 공개 표준 형식인 GeoJSON의 형식을 따른다.

 

GeoJSON 형식을 참고하고 싶으면 아래 사이트를 참고하면 된다.

https://datatracker.ietf.org/doc/html/rfc7946

 

RFC 7946 - The GeoJSON Format

 

datatracker.ietf.org