1

モルフィア フレームワークを使用して、いくつかのジオ ロケーション ポイントをクエリしたいと思います。緯度、経度、および半径 (100 km) を "Near" メソッドで使用して、現在地周辺の他のクエリを実行し、10 件の結果を制限します。ちょうどこのような :

morphia.ds.find(Location.class).field("Location").near(latitude, longitude, 100).limit(10).asList();

エラーにはなりませんが、結果は、私の周りで私の半径 (100km) の範囲外の位置を示しています。したがって、結果を照会するときに私の半径は関係ありません。

クエリステートメントに関する私の問題は何ですか?

よろしくお願いします

4

3 に答える 3

4

南北緯度差の弧度の長さは、約60海里、111キロメートル、または任意の緯度で69法定マイルです。詳細については、ウィキペディアまたはmongo地理空間ページを参照してください。地球は丸いですが、地図は平らです。

kmを使用する場合は距離を111.12(1度は約111.12 km)、またはマイルの場合は69で変換します。

したがって、クエリを次のように変更します

morphia.ds.find(Location.class).field("Location").near(latitude, longitude, 100/111.12).limit(10).asList();

そして、mongodbが[long、lat]の座標を受け入れることを確認してください。

于 2011-10-28T08:21:13.157 に答える
3

Web サイト ( MongoDB: Calculate Distances in a 2d Index Using Spherical Geometry ) によると、私たちが見ている距離のラジアンを取得するには、3.959 マイルまたは 6.371 km 以内の土地を使用する必要があります。

ドキュメント ( MongoDB:$nearSphere ) を表示すると、呼び出しは次のようになるはずです。

morphia.ds.find(Location.class).field("Location").near(latitude, longitude, 100/6371, true).limit(10).asList();

私の場合、いくつかのチェックの後、これが私がどのように機能するかです。

于 2013-09-16T08:07:31.883 に答える