距離計算、10進座標のセクシージマルへの変換、その逆などの基本的な地理空間操作を提供するライブラリ。このライブラリは現在2Dです。つまり、高度/標高はその機能のいずれにもサポートされていません。
詳細なChangelogは、changelog.mdにあります
npm install geolibyarn add geolibUMDビルドとESモジュールビルドがあります。他のライブラリと同様に、ノードでUMDビルドを使用できます。
const geolib = require ( 'geolib' ) ;または、単純なスクリプト要素を使用してブラウザで:
< script src =" lib/geolib.js " > </ script >ブラウザにロードすると、 window.geolibを介してすべての機能にアクセスできます。
バンドラー(WebpackやParcelなど)を使用している場合、またはESモジュールをネイティブにサポートする環境がある場合は、パッケージから特定の機能を直接インポートできます。
import { getDistance } from 'geolib' ;または、ライブラリ全体をロードします。
import * as geolib from 'geolib' ;または、単一関数を直接インポートして、トレシェーキング(推奨)を使用する可能性があります。
import getDistance from 'geolib/es/getDistance' ; このライブラリはTypeScriptで記述されています。 Geolibを使用するためにタイプスクリプトを知る必要はありませんが、タイプ定義は一般的な使用法、入力パラメーターなどに関する貴重な情報を提供します。
座標で動作しているすべての方法は、 lat / latitudeとlon / lng / longitude特性を持つオブジェクト、または次のようなGeojson座標配列のいずれかを受け入れます。 [lon, lat] 。すべての値は、10進数( 53.471 )またはsexageimal( 53° 21' 16" )形式のいずれかです。
距離値は常に浮かび、メートルの距離を表します。
getDistance(start, end, accuracy = 1)2つのジオ座標間の距離を計算します。
この関数は最大3つの引数を占有します。最初の2つの引数は、有効なGeolibInputCoordinatesでなければなりません(例{latitude: 52.518611, longitude: 13.408056} )。座標は、性別または小数形式である場合があります。 3番目の引数は、正確性(メートル単位)です。デフォルトでは、精度は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) 2つのジオ座標間の距離を計算します。この方法は、特に長距離の場合、 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)ジオ座標の境界の中心を計算します。
一連の座標を取り、それらの境界を計算し、その長方形の中心を返します。
政治的境界(例えば州)のようなポリゴンでは、これは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)ジオ座標の境界を計算します。
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)2つのポイントのrhumbラインベアリングを取得します。ウィキペディアのrhumbラインとグレートサークルベアリングの違いについて調べてください。ほとんどの場合、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-the-the-bearing-rose-direction-wet wety-ween-ween-ween-wene-wene-wene-wene-wene-wey-longitude-coordinates-in-php/に基づいています。
geolib . getRhumbLineBearing (
{ latitude : 52.518611 , longitude : 13.408056 } ,
{ latitude : 51.519475 , longitude : 7.46694444 }
) ;計算されたベアリングを数として返します。
getGreatCircleBearing(origin, destination)2つのポイントの大規模なサークルベアリングを取得します。これは、rhumbラインベアリングよりも正確ですが、遅いです。
geolib . getGreatCircleBearing (
{ latitude : 52.518611 , longitude : 13.408056 } ,
{ latitude : 51.519475 , longitude : 7.46694444 }
) ;計算されたベアリングを数として返します。
getCompassDirection(origin, destination, bearingFunction = getRhumbLineBearing)原点座標から宛先座標にコンパスの方向を取得します。オプションでは、ベアリングを決定する関数を3番目のパラメーターとして渡すことができます。デフォルトは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)参照座標に最も近い単一の1つのポイントを見つけます。実際、それはフードの下で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)座標のコレクションの長さを計算します。一連のポイントが最初の引数として、オプションでは距離を2番目の引数として決定する関数を期待しています。デフォルトは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)sexageimal座標を小数形式に変換します
geolib . sexagesimalToDecimal ( `51° 29' 46" N` ) ;新しい値を10進数として返します。
decimalToSexagesimal(value)10進座標をセクセージムル形式に変換します
geolib . decimalToSexagesimal ( 51.49611111 ) ; // -> 51° 29' 46`sexageimal文字列として新しい値を返します。
geolib.getLatitude(point, raw = false)geolib.getLongitude(point, raw = false)特定のポイントの緯度/経度を返し、小数に変換します。 2番目の引数がtrueに設定されている場合、値を小数に変換しません。
geolib . getLatitude ( { lat : 51.49611 , lng : 7.38896 } ) ; // -> 51.49611
geolib . getLongitude ( { lat : 51.49611 , lng : 7.38896 } ) ; // -> 7.388962番目の引数が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ポイントを通過すると、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)特定の時間内に2つのポイント間の速度を計算します。
geolib . getSpeed (
{ latitude : 51.567294 , longitude : 7.38896 , time : 1360231200880 } ,
{ latitude : 52.54944 , longitude : 13.468509 , time : 1360245600880 }
) ;数として1秒あたりの速度を返します。
convertSpeed(value, unit) getSpeedの結果をより人間に優しい形式に変換します。現在利用可能なユニットはmphとkmhです。
unit次の1つにすることができます:
geolib . convertSpeed ( 29.8678 , 'kmh' ) ;変換された値を数として返します。
convertDistance(value, unit)特定の距離(メートル)を別のユニットに変換します。
unit次の1つにすることができます:
geolib . convertDistance ( 14200 , 'km' ) ; // 14.2
geolib . convertDistance ( 500 , 'km' ) ; // 0.5変換された距離を数として返します。
convertArea(value, unit) getAreaForPolygonの結果を別のユニットに変換します。
unit次の1つにすることができます:
geolib . convertArea ( 298678 , 'km2' ) ) ;変換された領域を数として返します。
wktToPolygon(wkt)よく知られているテキスト(別名Wkt)をGeolibが理解しているポリゴンに変換します。 https://en.wikipedia.org/wiki/well-nubled_text_representation_of_geometry#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はかつて開始されました。これは、距離や2つのポイント間の方向を獲得するなど、非常に具体的なジオ関連のタスクを実行するためのほんの一握りの方法が必要だったためです。当時のNPMの最初の図書館の1つであったため、非常に簡単な方法でこの種のことを非常に人気がありました(2019年4月の時点で月額300,000を超えるダウンロードがあります!)。その結果、長年にわたって多くの貢献がありました。その多くは、一貫性、慣習、複雑さ、コーディングスタイル、または私が時々完全に理解していなかった機能の全体的な品質さえも見ずに、テストに付随するテストを受けている限り合併しました。
私は今、コードベースを完全にクリーンアップし、「ゼロから」ライブラリ全体を再構築し、すべての関数引数を統合し、ここにいるべきかどうかわからないいくつかの機能を削除しました(それらを使用していることを自由に追加してください!)
標高のサポートが削除され、ライブラリのサイズが非常に大きくなったいくつかの機能( isPointInsideRobustのみが700本を超え、基本的には別のライブラリから撮影されました)。
ビルドプロセスからGruntを削除し、EslintやThe Prettierなどの「モダンな」ツールを追加しました。 Travis CIからCiS CIに切り替えましたが、 semantic-releaseとconventional-commitsを使用して、新しいバージョンのリリースプロセスをさらに自動化するプロセスにあります。また、純粋なJavaScriptからTypeScriptに切り替えました。
getDistance関数は、ゆっくり、正確な機能から、速く、わずかに不正確な機能に変更しました。古いgetDistance関数はgetPreciseDistanceと呼ばれるようになりましたが、古いgetDistanceSimple関数がデフォルトのgetDistance関数になりました。ただし、距離計算を内部的に使用する関数に対する引数としてgetPreciseDistance渡すことができます。getBoundsOfDistance()人工8小数点の制限の除去により、正確な座標を返すようになりました。getCompassDirection() 、正確で粗い方向でオブジェクトを返さず、文字列として正確な方向のみを返しますgetCompassDirection()に対する第三の引数は、文字列( "circle"、 "line")ではなく、ベアリングを決定する関数です( getRhumbLineBearingまたはgetGreatCircleBearing渡すことができます)。関数は、最初と2番目の引数として起源と目的地を受け取ります。 3番目の引数が与えられていない場合、デフォルトでgetRhumbLineBearing(origin, dest)が使用されます。roughCompassDirection(exact)があります。使用しないでください。orderByDistance()入力を変更しなくなるため、返された座標にdistanceとkeyプロパティを追加しません。getSpeed()の結果は、常にメートルあたりのメートルとして返されます。新しいコンビニエンス関数convertSpeed(mps, targetUnit)を使用して変換できますfindNearest() offsetを取り、引数limitしなくなります。一連の座標から単一の1つの最も近いポイントを取得するのは、単一の便利な方法です。複数の必要がある場合は、実装を見て、 orderByDistanceを使用して独自のロジックを実装してください52° 46' 21.0004"のような醜いフロートポイントユニットを潜在的に返す可能性がありますが、以前よりも正確でもあります。computeDestinationPointgetBoundsgetBoundsOfDistancegetCentergetCenterOfBoundsgetCompassDirectiongetDistanceFromLinegetPathLengthgetRhumbLineBearinggetSpeedisDecimalisPointInLineisPointNearLineisSexagesimalorderByDistancegetCoordinateKeysに改名されたgetKeysvalidate 、 isValidCoordinateに変更されますgetLat getLatitudeに改名されましたgetLon getLongitudeに改名されましたlatitude - > getLatitudeに変更されましたlongitude - > getLongitudeに変更されましたconvertUnit >名前はあいまいだったので、convertDistanceにremedされたtoDecimalに変更されたuseDecimaldecimal2sexagesimal decimalToSexagesimalに変更されましたsexagesimal2decimal sexagesimalToDecimalに変更されましたgetDistance 、 getPreciseDistanceに変更されましたgetDistanceSimple getDistanceに変更されましたisPointInside isPointInPolygonに変更されましたisPointInCircle isPointWithinRadiusに改名されましたgetBearing 、より明確になるようにgetGreatCircleBearingに改名されましたgetElev >削除elevation - >削除coords - >削除された(getCoordinateまたはget -normalizedCoodineとして再添加される可能性があります)ll >削除(WTFのため?)preparePolygonForIsPointInsideOptimized >ドキュメントが欠落しているため削除され、テストが欠落しているためisPointInsideWithPreparedPolygon preparedpolygon->ドキュメントが欠落しているため削除されましたisInside ALIAS->削除(あいまいすぎる) - isPointInPolygonまたはisPointWithinRadiusを使用するwithinRadius - >削除して、 isPointWithinRadius使用しますgetDirectionエイリアス - >削除(不必要なクラッター) - getCompassDirectionを使用しますgetAreaOfPolygongetCoordinateKeyプロパティ名(可能な名前の配列に基づいてオブジェクトのlatまたはlngなど)を取得する