거리 계산과 같은 기본 지리 공간 작업을 제공하는 라이브러리, 소수점 좌표를 Sexagesimal 및 그 반대로 변환합니다.
세부적인 ChangeLog는 ChangeLog.md에서 찾을 수 있습니다
npm install geolibyarn add geolibUMD 빌드 및 ES 모듈 빌드가 있습니다. 다른 라이브러리와 마찬가지로 노드에서 UMD 빌드를 사용할 수 있습니다.
const geolib = require ( 'geolib' ) ;또는 간단한 스크립트 요소를 사용하여 브라우저에서 :
< script src =" lib/geolib.js " > </ script > 브라우저에로드하면 window.geolib 통해 모든 기능에 액세스 할 수 있습니다.
Bundler (Webpack 또는 Parcel과 같은)와 함께 일하거나 ES 모듈을 기본적으로 지원하는 환경이있는 경우 패키지에서 특정 기능을 직접 가져올 수 있습니다.
import { getDistance } from 'geolib' ;또는 전체 라이브러리로드 :
import * as geolib from 'geolib' ;또는 단일 기능을 직접 가져와 잠재적으로 트레시 킹 (권장)을 사용할 수 있습니다.
import getDistance from 'geolib/es/getDistance' ; 이 라이브러리는 TypeScript로 작성되었습니다. Geolib을 사용하기 위해 TypeScript를 알 필요는 없지만 유형 정의는 일반적인 사용, 입력 매개 변수 등에 대한 귀중한 정보를 제공합니다.
좌표로 작동하는 모든 방법은 lat / latitude 과 lon / lng / longitude 속성을 갖는 객체 또는 Geojson이 배열을 다음과 같이 조정합니다. [lon, lat] . 모든 값은 10 진수 ( 53.471 ) 또는 sexagesimal ( 53° 21' 16" ) 형식 일 수 있습니다.
거리 값은 항상 부유물이며 미터 의 거리를 나타냅니다.
getDistance(start, end, accuracy = 1)두 GEO 좌표 사이의 거리를 계산합니다.
이 기능은 최대 3 개의 인수를 사용합니다. 처음 2 인수는 유효한 GeolibInputCoordinates (예 {latitude: 52.518611, longitude: 13.408056} ) 여야합니다. 좌표는 sexagesim 또는 소수점 형식 일 수 있습니다. 세 번째 인수는 정확도 (미터)입니다. 기본적으로 정확도는 1 미터입니다. 보다 정확한 결과가 필요한 경우 센티미터 정확도를 위해 더 낮은 값 (예 : 0.01 으로 설정할 수 있습니다. 선택한 정확도로 나눌 수있는 결과를 다음 100 25428 정확도는 25400 됩니다).
getDistance (
{ latitude : 51.5103 , longitude : 7.49347 } ,
{ latitude : "51° 31' N" , longitude : "7° 28' E" }
) ; // Working with W3C Geolocation API
navigator . geolocation . getCurrentPosition (
( position ) => {
console . log (
'You are ' ,
geolib . getDistance ( position . coords , {
latitude : 51.525 ,
longitude : 7.4575 ,
} ) ,
'meters away from 51.525, 7.4575'
) ;
} ,
( ) => {
alert ( 'Position could not be determined.' ) ;
}
) ;미터의 거리를 숫자 값으로 반환합니다.
getPreciseDistance(start, end, accuracy = 1) 두 GEO 좌표 사이의 거리를 계산합니다. 이 방법은 특히 장거리의 경우 getDistance 보다 더 정확하지만 느리게 진행됩니다. 타원체에 Vincenty 역 공식을 사용하고 있습니다.
그것은 getDistance 와 동일하게 (최대 3 개) 인수를 필요로합니다.
geolib . getPreciseDistance (
{ latitude : 51.5103 , longitude : 7.49347 } ,
{ latitude : "51° 31' N" , longitude : "7° 28' E" }
) ;getCenter(coords)GEO 좌표 모음에서 모든 지점의 지리적 중심을 계산합니다. 좌표 배열을 취하고 중심을 계산합니다.
geolib . getCenter ( [
{ latitude : 52.516272 , longitude : 13.377722 } ,
{ latitude : 51.515 , longitude : 7.453619 } ,
{ latitude : 51.503333 , longitude : - 0.119722 } ,
] ) ;객체를 반환합니다.
{
"latitude" : centerLat ,
"longitude" : centerLon
}getCenterOfBounds(coords)GEO 좌표 경계의 중심을 계산합니다.
좌표 배열을 취하고 그 경계를 계산하며 해당 사각형의 중심을 돌려줍니다.
정치적 경계 (예 : 국가)와 같은 다각형에서, 이것은 그 기능이 다른 측면에서 점의 고르지 않은 분포에 의해 방해 될 수 있기 때문에 getCenter 보다 인간의 기대에 더 가까운 결과를 제공 할 수 있습니다.
남부 국경에는 다른 노드보다 더 많은 노드가 포함되어 있기 때문에 미국 주 오클라호마 : getCenter 상상해보십시오.
geolib . getCenterOfBounds ( [
{ latitude : 51.513357512 , longitude : 7.45574331 } ,
{ latitude : 51.515400598 , longitude : 7.45518541 } ,
{ latitude : 51.516241842 , longitude : 7.456494328 } ,
{ latitude : 51.516722545 , longitude : 7.459863183 } ,
{ latitude : 51.517443592 , longitude : 7.463232037 } ,
] ) ;객체를 반환합니다.
{
"latitude" : centerLat ,
"longitude" : centerLng
}getBounds(points)GEO 좌표의 범위를 계산합니다.
geolib . getBounds ( [
{ latitude : 52.516272 , longitude : 13.377722 } ,
{ latitude : 51.515 , longitude : 7.453619 } ,
{ latitude : 51.503333 , longitude : - 0.119722 } ,
] ) ;최소 및 최대 위도 및 최소 및 최대 경도를 물체로 반환합니다.
{
"minLat" : minimumLatitude ,
"maxLat" : maximumLatitude ,
"minLng" : minimumLongitude ,
"maxLng" : maximumLongitude ,
}isPointInPolygon(point, polygon)포인트가 다각형 내부에 있는지 확인합니다.
geolib . isPointInPolygon ( { latitude : 51.5125 , longitude : 7.485 } , [
{ latitude : 51.5 , longitude : 7.4 } ,
{ latitude : 51.555 , longitude : 7.4 } ,
{ latitude : 51.555 , longitude : 7.625 } ,
{ latitude : 51.5125 , longitude : 7.625 } ,
] ) ; true 또는 false 반환합니다
isPointWithinRadius(point, centerPoint, radius)포인트가 원 안에 있는지 여부를 확인합니다.
// checks if 51.525/7.4575 is within a radius of 5 km from 51.5175/7.4678
geolib . isPointWithinRadius (
{ latitude : 51.525 , longitude : 7.4575 } ,
{ latitude : 51.5175 , longitude : 7.4678 } ,
5000
) ; true 또는 false 반환합니다
getRhumbLineBearing(origin, destination)두 지점의 Rhumb 라인 베어링을 얻습니다. Wikipedia의 Rhumb 라인과 Great Circle Bearing의 차이점에 대해 알아보십시오. 대부분의 경우 rhumb 라인은 괜찮아야합니다.
http://en.wikipedia.org/wiki/rhumb_line#general_and_mathematical_description
기능은 Doug Vanderweide의 위대한 PHP 버전 (GPL 3.0에 따라 라이센스)을 기반으로합니다 (http://www.dougv.com/2009/07/13/calculating-the-bearing-and-compass-direction-between-two-latitude-longditege-coordinates-in-phpp/
geolib . getRhumbLineBearing (
{ latitude : 52.518611 , longitude : 13.408056 } ,
{ latitude : 51.519475 , longitude : 7.46694444 }
) ;계산 된 베어링을 숫자로 반환합니다.
getGreatCircleBearing(origin, destination)두 지점의 큰 원 베어링을 얻습니다. 이것은 Rhumb 라인 베어링보다 정확하지만 느린 느낌이 듭니다.
geolib . getGreatCircleBearing (
{ latitude : 52.518611 , longitude : 13.408056 } ,
{ latitude : 51.519475 , longitude : 7.46694444 }
) ;계산 된 베어링을 숫자로 반환합니다.
getCompassDirection(origin, destination, bearingFunction = getRhumbLineBearing) 원점 좌표에서 대상 좌표로 나침반 방향을 가져옵니다. 선택적으로 베어링을 결정하는 함수는 세 번째 매개 변수로 전달 될 수 있습니다. 기본값은 getRhumbLineBearing 입니다.
geolib . getCompassDirection (
{ latitude : 52.518611 , longitude : 13.408056 } ,
{ latitude : 51.519475 , longitude : 7.46694444 }
) ; 방향 (예 : NNE , SW , E ,…)을 문자열로 반환합니다.
orderByDistance(point, arrayOfPoints)참조 좌표와 거리별로 코디 배열을 정렬합니다.
geolib . orderByDistance ( { latitude : 51.515 , longitude : 7.453619 } , [
{ latitude : 52.516272 , longitude : 13.377722 } ,
{ latitude : 51.518 , longitude : 7.45425 } ,
{ latitude : 51.503333 , longitude : - 0.119722 } ,
] ) ;기준점까지의 거리에 따라 순서가 순서대로 반환됩니다.
findNearest(point, arrayOfPoints) 참조 좌표에 가장 가까운 단일 지점을 찾습니다. 실제로는 후드 아래에서 orderByDistance 사용하고 첫 번째 결과를 반환하는 편의 방법 일뿐입니다.
geolib . findNearest ( { latitude : 52.456221 , longitude : 12.63128 } , [
{ latitude : 52.516272 , longitude : 13.377722 } ,
{ latitude : 51.515 , longitude : 7.453619 } ,
{ latitude : 51.503333 , longitude : - 0.119722 } ,
{ latitude : 55.751667 , longitude : 37.617778 } ,
{ latitude : 48.8583 , longitude : 2.2945 } ,
{ latitude : 59.3275 , longitude : 18.0675 } ,
{ latitude : 59.916911 , longitude : 10.727567 } ,
] ) ;참조 점에 가장 가까운 지점을 반환합니다.
getPathLength(points, distanceFunction = getDistance) 좌표 모음의 길이를 계산합니다. 포인트 배열을 첫 번째 인수로 기대하고 선택적으로 두 번째 인수로 거리를 결정하는 함수를 기대합니다. 기본값은 getDistance 입니다.
geolib . getPathLength ( [
{ latitude : 52.516272 , longitude : 13.377722 } ,
{ latitude : 51.515 , longitude : 7.453619 } ,
{ latitude : 51.503333 , longitude : - 0.119722 } ,
] ) ;경로의 길이를 미터로 숫자로 반환합니다.
getDistanceFromLine(point, lineStart, lineEnd, accuracy = 1)최소 거리에서 지점에서 2 점의 한 줄로 가져옵니다.
geolib . getDistanceFromLine (
{ latitude : 51.516 , longitude : 7.456 } ,
{ latitude : 51.512 , longitude : 7.456 } ,
{ latitude : 51.516 , longitude : 7.459 }
) ;주어진 선으로 가장 짧은 거리를 숫자로 반환합니다.
참고 : 모든 점이 너무 가까이 있으면 함수가 NAN을 반환 할 수 있습니다. 이 경우 일반적으로 정확도를 약간 증가시키는 데 도움이됩니다 (예 : 0.01 ).
getBoundsOfDistance(point, distance)지구 표면의 모든 지점의 경계 좌표를 지정된 큰 원 거리는 또는 동일하게 계산합니다.
geolib . getBoundsOfDistance (
{ latitude : 34.090166 , longitude : - 118.276736555556 } ,
1000
) ;남서부 및 북동부 좌표로 배열을 반환합니다.
isPointInLine(point, lineStart, lineEnd)주어진 포인트가 시작과 끝에 의해 형성된 줄에있는 경우 계산합니다.
geolib . isPointInLine (
{ latitude : 0 , longitude : 10 } ,
{ latitude : 0 , longitude : 0 } ,
{ latitude : 0 , longitude : 15 }
) ;sexagesimalToDecimal(value)sexagesimal 좌표를 10 진수 형식으로 변환합니다
geolib . sexagesimalToDecimal ( `51° 29' 46" N` ) ;새 값을 소수점 번호로 반환합니다.
decimalToSexagesimal(value)소수점 좌표를 sexagesimal 형식으로 변환합니다
geolib . decimalToSexagesimal ( 51.49611111 ) ; // -> 51° 29' 46`새 값을 sexagesimal 문자열로 반환합니다.
geolib.getLatitude(point, raw = false)geolib.getLongitude(point, raw = false)주어진 지점의 위도/경도를 반환 하고 소수로 변환합니다. 두 번째 인수가 true로 설정되면 값을 소수로 변환하지 않습니다 .
geolib . getLatitude ( { lat : 51.49611 , lng : 7.38896 } ) ; // -> 51.49611
geolib . getLongitude ( { lat : 51.49611 , lng : 7.38896 } ) ; // -> 7.38896두 번째 인수가 true로 설정된 경우 값을 10 진수 또는 원래 형식으로 반환합니다.
toDecimal(point) 좌표가 이미 10 진수 형식인지 확인하고 그렇지 않은 경우로 변환합니다. 단일 값 (예 : 51° 32' 17" )으로 작동하고 지원되는 형식으로 오랫동안 완전한 좌표 (예 : {lat: 1, lon: 1} ).
geolib . toDecimal ( `51° 29' 46" N` ) ; // -> 51.59611111
geolib . toDecimal ( 51.59611111 ) ; // -> 51.59611111주어진 입력 값에 대해 소수점 값을 반환합니다.
computeDestinationPoint(point, distance, bearing, radius = earthRadius)초기 지점, 거리 (미터) 및 베어링 (도)이 주어지면 대상 지점을 계산합니다. 반경이 주어지지 않으면 기본값은 평균 지구 반경 6,371,000 미터입니다.
주의 :이 공식은 100% 정확하지는 않지만 매우 가깝습니다.
geolib . computeDestinationPoint (
{ latitude : 52.518611 , longitude : 13.408056 } ,
15000 ,
180
) ; geolib . computeDestinationPoint (
[ 13.408056 , 52.518611 ]
15000 ,
180
) ;입력 좌표와 동일한 형식으로 대상을 반환합니다. 따라서 Geojson Point를 통과하면 Geojson 포인트가 나타납니다.
getAreaOfPolygon(points)다각형의 표면적을 계산합니다.
geolib . getAreaOfPolygon ( [
[ 7.453635617650258 , 51.49320556213869 ] ,
[ 7.454583481047989 , 51.49328893754685 ] ,
[ 7.454778172179346 , 51.49240881084831 ] ,
[ 7.453832678225655 , 51.49231619246726 ] ,
[ 7.453635617650258 , 51.49320556213869 ] ,
] ) ;결과를 제곱 미터의 숫자로 반환합니다.
getCoordinateKeys(point)그 속성 이름을 지점에서 정규화 된 형태로 가져옵니다.
geolib . getCoordinateKeys ( { lat : 1 , lon : 1 } ) ;
// -> { latitude: 'lat', longitude: 'lon' } latitude 와 longitude 특성을 가진 물체를 반환합니다. 그들의 값은 전달 된 지점에서 사용되는 위도 및 경도의 속성 이름입니다. 아마도 내부적으로 만 사용해야합니다.
getCoordinateKey(point, keysToLookup) 후드 아래의 getCoordinateKeys 에서 사용하고 가능한 이름 목록에서 속성 이름을 반환합니다.
geolib . getCoordinateKey ( { latitude : 1 , longitude : 2 } , [ 'lat' , 'latitude' ] ) ;
// -> latitude 속성의 이름을 문자열로 반환하거나 일치하지 않으면 undefined 되지 않은 경우.
isValidCoordinate(point)주어진 지점에 최소한 위도 와 경도가 있고 지원되는 형식인지 확인합니다.
// true:
geolib . isValidCoordinate ( { latitude : 1 , longitude : 2 } ) ;
// false, longitude is missing:
geolib . isValidCoordinate ( { latitude : 1 } ) ;
// true, GeoJSON format:
geolib . isValidCoordinate ( [ 2 , 1 ] ) ; true 또는 false 반환합니다.
getSpeed(startPointWithTime, endPointWithTime)주어진 시간 내에 두 지점 사이의 속도를 계산합니다.
geolib . getSpeed (
{ latitude : 51.567294 , longitude : 7.38896 , time : 1360231200880 } ,
{ latitude : 52.54944 , longitude : 13.468509 , time : 1360245600880 }
) ;초당 미터로 속도를 숫자로 반환하십시오.
convertSpeed(value, unit) 결과를 getSpeed 에서보다 인간 친화적 인 형식으로 변환합니다. 현재 사용 가능한 장치는 mph 및 kmh 입니다.
unit 다음 중 하나 일 수 있습니다.
geolib . convertSpeed ( 29.8678 , 'kmh' ) ;변환 된 값을 숫자로 반환합니다.
convertDistance(value, unit)주어진 거리 (미터)를 다른 장치로 변환합니다.
unit 다음 중 하나 일 수 있습니다.
geolib . convertDistance ( 14200 , 'km' ) ; // 14.2
geolib . convertDistance ( 500 , 'km' ) ; // 0.5변환 된 거리를 숫자로 반환합니다.
convertArea(value, unit) 결과를 getAreaForPolygon 에서 다른 장치로 변환합니다.
unit 다음 중 하나 일 수 있습니다.
geolib . convertArea ( 298678 , 'km2' ) ) ;변환 된 영역을 숫자로 반환합니다.
wktToPolygon(wkt)잘 알려진 텍스트 (일명 wkt)를 Geolib가 이해하는 다각형으로 변환합니다. https://en.wikipedia.org/wiki/well-known_text_Representation_of_geometric_geometric_objects
geolib . wktToPolygon ( 'POLYGON ((30 10.54321, 40 40, 20 40, 10 20, 30 10))' ) ;
// [
// { latitude: 10.54321, longitude: 30 },
// { latitude: 40, longitude: 40 },
// { latitude: 40, longitude: 20 },
// { latitude: 20, longitude: 10 },
// { latitude: 10, longitude: 30 },}
// ]좌표 배열을 반환합니다.
버전 3.0.0에서 나는 뿌리로 조금 돌아 가려고 노력하고 있습니다. Geolib은 한 번 시작되었습니다. 두 지점 사이의 거리 나 방향을 얻는 것과 같은 매우 구체적인 GEO 관련 작업을 수행하기위한 소수의 방법이 필요했기 때문에 시작되었습니다. NPM의 첫 번째 도서관 중 하나 였기 때문에 당시에는 이런 종류의 일을 매우 간단한 방식으로 수행하는 것이 매우 인기가 높았으므로 (2019 년 4 월에 한 달에 3 억 개 이상의 다운로드로!) 수년에 걸쳐 많은 기여를했습니다. 그 중 다수는 일관성, 컨벤션, 복잡성, 코딩 스타일 또는 때로는 완전히 이해하지 못한 기능의 전반적인 품질을 보지 않고 테스트를 동반 한 한 오랫동안 합병했습니다.
이제 코드베이스를 완전히 정리하고 전체 라이브러리를 "처음부터"재건하고, 모든 기능 인수를 통합하고, 여기에 있을지 확실하지 않은 몇 가지 기능을 제거했습니다 (사용한 것도 자유롭게 추가 할 수 있습니다!) (Github에서 기능 이름에 대한 몇 가지 검색을 수행했는지, 결과가 없었습니다).
고도지지가 삭제되었으며, 불필요하게 라이브러리의 크기가 크게 커진 몇 가지 기능 (예 : isPointInsideRobust 단독은 700 개 이상의 코드 라인이었으며 기본적으로 다른 라이브러리에서 가져 왔습니다).
빌드 프로세스에서 Grunt를 제거하고 Eslint 및 Pretier와 같은 "현대적인"도구를 추가했습니다. Travis CI에서 Circle CI로 전환했으며 semantic-release 및 conventional-commits 사용하여 새로운 버전의 릴리스 프로세스를 추가로 자동화하는 과정에 있습니다. 또한 몇 가지 이점이 있다고 생각하기 때문에 Pure JavaScript에서 TypeScript로 전환했습니다.
getDistance 기능을 느리고 정확한 기능에서 빠르고 약간 부정확 한 기능으로 변경했습니다. 이전 getDistance 함수는 이제 getPreciseDistance 로 선정되었으며 이전 getDistanceSimple 함수는 이제 기본 getDistance 기능입니다. 그러나 내부적으로 거리 계산을 사용하는 함수에 대한 인수로 getPreciseDistance 통과 할 수 있습니다.getBoundsOfDistance() 이제 인공 8 소수점 자리 제한을 제거하여 정확한 좌표를 반환합니다.getCompassDirection() 더 이상 정확 하고 거친 방향을 가진 객체를 반환하지 않지만 정확한 방향 만 문자열로 반환합니다.getCompassDirection() 에 대한 세 번째 인수는 더 이상 문자열 ( "Circle", "Line")이 아니라 베어링을 결정하는 함수입니다 ( getRhumbLineBearing 또는 getGreatCircleBearing 통과 할 수 있음). 함수는 원점과 대상을 첫 번째 및 두 번째 인수로받습니다. 3 번째 인수가 주어지지 않으면 getRhumbLineBearing(origin, dest) 기본적으로 사용됩니다.roughCompassDirection(exact) 이 있습니다. 사용하지 않는 것이 좋습니다.orderByDistance() 더 이상 입력을 수정하지 않으므로 반환 된 좌표에 distance 와 key 속성을 추가하지 않습니다.getSpeed() 의 결과는 이제 초당 미터 로 항상 반환됩니다. 새로운 편의 기능 convertSpeed(mps, targetUnit) 사용하여 변환 할 수 있습니다.findNearest() 더 이상 offset 및 limit 인수를 제한하지 않습니다. 일련의 좌표에서 가장 가까운 한 지점을 얻는 것은 편의 방법 일뿐입니다. 둘 이상이 필요한 경우 구현을 살펴보고 orderByDistance 사용하여 자신의 논리를 구현하십시오.52° 46' 21.0004" 와 같은 못생긴 플로트 포인트 단위를 잠재적으로 반환 할 수 있지만 이전보다 더 정확합니다.computeDestinationPointgetBoundsgetBoundsOfDistancegetCentergetCenterOfBoundsgetCompassDirectiongetDistanceFromLinegetPathLengthgetRhumbLineBearinggetSpeedisDecimalisPointInLineisPointNearLineisSexagesimalorderByDistancegetKeys getCoordinateKeys 로 이름이 변경되었습니다isValidCoordinate 로 validategetLat getLatitude 로 이름이 변경되었습니다getLon 이름을 얻었 getLongitudelatitude -> getLatitude 로 이름이 바뀌 었습니다longitude -> getLongitude 로 이름이 변경되었습니다convertUnit > 이름이 너무 모호했기 때문에 ConvertDistance에 대한 RemameduseDecimal toDecimal 으로 이름이 바뀌 었습니다decimal2sexagesimal decimalToSexagesimal 으로 이름이 변경되었습니다sexagesimal2decimal sexagesimalToDecimal 로 이름이 변경되었습니다getDistance getPreciseDistance 로 이름이 변경되었습니다getDistanceSimple getDistance 로 이름이 변경되었습니다isPointInside isPointInPolygon 으로 이름이 바뀌 었습니다isPointInCircle isPointWithinRadius 로 이름이 바뀌 었습니다getBearing 더 명확하게하기 위해 getGreatCircleBearing 으로 이름이 변경되었습니다getElev > 제거되었습니다elevation -> 제거coords > 제거 (getCoordinate 또는 GetNormalizedCoordinate로 다시 구입할 수 있음)ll > 제거 (WTF 때문에?)preparePolygonForIsPointInsideOptimized > 누락 된 문서 및 누락 된 테스트로 인해 제거되었습니다.isPointInsideWithPreparedPolygon > 문서가 누락되어 제거되었습니다isInside alias-> 제거 (너무 모호한) - isPointInPolygon 또는 isPointWithinRadius 사용withinRadius > 제거, isPointWithinRadius 사용하십시오getDirection alias-> 제거 (불필요한 혼란) - getCompassDirection 사용하십시오getAreaOfPolygon 다각형의 영역을 계산합니다getCoordinateKey (예 : 가능한 이름 배열을 기반으로 한 객체의 lat 또는 lng )를 얻으십시오.