radiansToLength & lengthToRadians

2021년 1월 7일
turf.js 분석

평소 자주 사용하는 turf.js를 분석해보는 것을 연초 목표로 잡아 여유가 있을 때 마다 진행하고자 합니다. 우선 자주 사용했던 기능 중에 다른 기능들에 사용되는 기능을 먼저 보고자 합니다. 가장 먼저 선택한 함수는 turf-helpers에 포함된 radiansToLengthlengthToRadians입니다.

Factors

언급된 두 기능을 살펴보기 전에 우선 두 요소에서 공통으로 사용하는 요소를 하나 보고자 합니다. 두 함수 모두 지구의 구형(타원체가 아닌) 반경을 사용하는 측정 요소를 단위에 맞춘 값을 사용합니다. 해당 요소는 다음의 코드와 같습니다.

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

radiansToLengthradians를 전달받은 단위에 맞추어 거리를 구하게 됩니다. 이때 지구는 구형으로 가정합니다. 이에 대한 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 * factorradians에 앞에서 언급한 요소를 곱해서 반환합니다.

라디안 - 위키백과

여기서 radiansfactor를 곱하는 이유는 중고등학교 때 배웠던 를 통해 호의 길이를 구할 수 있기 때문입니다.

Great-circle distance - 위키백과

지구가 둥글다고 가정한 상태이기 때문에 단순하게 지구의 반지름에 해당하는 factor와 중심각에 해당하는 radians을 곱해 두 점사이의 거리를 구하게 됩니다.

lengthToRadians

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 / factordistance에서 반지름을 나눠서 radians를 구합니다. 이는 에 해당합니다.

Recently posts
© 2016-2023 smilecat.dev