평소 자주 사용하는 turf.js를 분석해보는 것을 연초 목표로 잡아 여유가 있을 때 마다 진행하고자 합니다. 우선 자주 사용했던 기능 중에 다른 기능들에 사용되는 기능을 먼저 보고자 합니다. 가장 먼저 선택한 함수는 turf-helpers에 포함된 radiansToLength와 lengthToRadians입니다.
언급된 두 기능을 살펴보기 전에 우선 두 요소에서 공통으로 사용하는 요소를 하나 보고자 합니다. 두 함수 모두 지구의 구형(타원체가 아닌) 반경을 사용하는 측정 요소를 단위에 맞춘 값을 사용합니다. 해당 요소는 다음의 코드와 같습니다.
export let earthRadius = 6371008.8;
export let factors: { [key: string]: number } = {
centimeters: earthRadius * 100,
centimetres: earthRadius * 100,
degrees: earthRadius / 111325,
feet: earthRadius * 3.28084,
inches: earthRadius * 39.37,
kilometers: earthRadius / 1000,
kilometres: earthRadius / 1000,
meters: earthRadius,
metres: earthRadius,
miles: earthRadius / 1609.344,
millimeters: earthRadius * 1000,
millimetres: earthRadius * 1000,
nauticalmiles: earthRadius / 1852,
radians: 1,
yards: earthRadius / 1.0936,
};
지구 반경(earthRadius
)은 6371008.8
로 설정되어 있으며 값의 단위는 meter
입니다. meter
를 기준으로 다른 단위들에 대한 환산값을 제공합니다.
radiansToLength
는 radians
를 전달받은 단위에 맞추어 거리를 구하게 됩니다. 이때 지구는 구형으로 가정합니다. 이에 대한 turf의 구현체는 다음 코드와 같습니다.
export function radiansToLength(
radians: number,
units: Units = "kilometers"
): number {
const factor = factors[units];
if (!factor) {
throw new Error(units + " units is invalid");
}
return radians * factor;}
radiansToLength
의 반환하는 부분을 보면 radians * factor
로 radians
에 앞에서 언급한 요소를 곱해서 반환합니다.
여기서 radians
에 factor
를 곱하는 이유는 중고등학교 때 배웠던 를 통해 호의 길이를 구할 수 있기 때문입니다.
지구가 둥글다고 가정한 상태이기 때문에 단순하게 지구의 반지름에 해당하는 factor
와 중심각에 해당하는 radians
을 곱해 두 점사이의 거리를 구하게 됩니다.
lengthToRadians
는 앞서 살펴본 radiansToLength
의 반대에 해당합니다. distance
를 전달받은 단위에 맞추어 두 점 사이의 각도를 구하게 됩니다.
export function lengthToRadians(
distance: number,
units: Units = "kilometers"
): number {
const factor = factors[units];
if (!factor) {
throw new Error(units + " units is invalid");
}
return distance / factor;}
lengthToRadians
의 반환하는 부분을 보면 distance / factor
로 distance
에서 반지름을 나눠서 radians
를 구합니다. 이는 에 해당합니다.