キロメートルをラジアンに変換する必要があります。これは正しい式ですか? MongoDBのニアスフィアにはラジアンが必要です。
5キロメートルをラジアンに変換する必要がある場合は、次のようにします。
5/6371
そして、私はこの結果を得ます(それは正しいように見えますか):
0.000784806153
[〜#〜] update [〜#〜]
これは数学の問題ではありません。MongoDBで地理空間クエリを実行できるようにするには、キロメートルからラジアンまで正しい計算を行っているかどうかを本当に知る必要があります。
私はここに到着し、混乱しました。その後、カーンアカデミーのビデオをいくつか見て、その時点でより理にかなっており、他の情報源からの方程式を実際に見て、さらに自分自身を教育することができました。
これが私の思考の流れです。
ラジアンに関する図が表示されます。最初に、ジオロケーションポイントからの半径が間違っていると思います。
代わりに、地球が完全に半分にカットされ、半分の1つに焦点を合わせると想像してください。
distance = earth radius * radians
したがって、いくつかの非常に簡単な代数で...
radians = distance / earth radius
kmradians = distance in km / 6371
miradians = distance in mi / 3959
時々それを考え抜くのは楽しいです。
これを再確認してください... https://www.translatorscafe.com/unit-converter/en/length/7-89/kilometer-Earth%E2%80%99s%20equatorial%20radius/
私の最善の努力にもかかわらず、mongoは2Dインデックスの$ geoNearクエリで文書化されているように正しく動作しませんでした。 機能しなかった
let aggregate = [
{
$geoNear: {
near: { type: 'Point', coordinates: lonLatArray },
spherical: false,
distanceField: 'dist.calculated',
includeLocs: 'dist.location',
maxDistance: distanceInMeters / (6371 * 1000),
query: {
mode: 'nearme',
fcmToken: { $exists: true }
}
}
},
{ $skip: skip },
{ $limit: LIMIT }
];
ただし、2dsphereインデックスに変更すると、完全に機能しました。
let aggregate = [
{
$geoNear: {
near: { type: 'Point', coordinates: lonLatArray },
spherical: true,
distanceField: 'dist.calculated',
includeLocs: 'dist.location',
maxDistance: distanceInMeters,
query: {
mode: 'nearme',
fcmToken: { $exists: true }
}
}
},
{ $skip: skip },
{ $limit: LIMIT }
];
しかし、教育は決して時間の無駄のようには思えません。
あなたは正しいです。球面幾何学では、距離を球の半径で割ります。ユニットを保持する必要があることに注意してください。したがって、球の半径をキロメートルで計算する場合は、距離をキロメートルで使用する必要があります。マイルを使用する場合は、地球半径をマイルで使用する必要があります(約3,963.2)。
変換するには:
ラジアンまでの距離:距離を、距離の測定値と同じ単位で球(地球など)の半径で割ります。
ラジアンから距離:距離を変換する単位系で、ラジアンメジャーに球(地球など)の半径を掛けます。
例:ラジアンで5マイルを変換する場合は、距離(5マイル)を球の半径(マイル単位)で割る必要があります。これは3959です。次に5/3959は0.0012629451です。
ありがとう
地球の赤道半径は約,963.2マイル sまたは6,378.1キロメートルです。
注:1 KM = 0.621371マイル
計算のためのいくつかの簡単な式は次のとおりです。
100 KMからマイル:(100 * 0.621371)
100 KMから放射: 100/6378.1
100マイルから放射: 100/963.2
したがって、Kilometersにデータがある場合は、(100/6378.1)を使用する必要があり、Milesデータの場合は(100/3963.2)