web-dev-qa-db-ja.com

mongoDBに地理空間情報を保存する方法

MongoDBドキュメント( link )によると、ドキュメントフィールドに地理空間情報を保存する場合、配列または埋め込みドキュメントの2つのオプションがあり、順序は常に経度、緯度である必要があります。

埋め込みドキュメントを使用する場合、フィールドの順序を確認するにはどうすればよいですか?

または、埋め込みドキュメントのフィールドに特定の名前を付ける必要がありますか?

28
José Luis

埋め込みドキュメントでは、埋め込みドキュメントのフィールドの名前に関係なく、最初のフィールドには経度の値が含まれ、2番目のフィールドには緯度の値が含まれます。例えば:

 db.zips2.insert( { _id: 1, city: "b", loc: { x: -73.974, y: 40.764 } } )
 db.zips2.insert( { _id: 2, city: "b", loc: { x: -73.981, y: 40.768 } } )

ここでは、xフィールドは経度になります。 yフィールドは緯度です。

よろしく

33
Kay

2D地理空間インデックス、店舗データ

「すべてのドキュメントは位置データを同じ順序で保存する必要があります。座標系として緯度と経度を使用する場合、常に経度を最初に保存します。MongoDBの2次元球面インデックス演算子は[経度、緯度]の順序のみを認識します。」

MongoDBの地理空間クエリに関する優れた投稿 必要に応じて。

32
Andy Refuerzo

フィールドに名前を付けることをお勧めします:x and y、 の代わりに longitude/latitude。更新後、経度と緯度がアルファベット順に並べ替えられるため、逆になります。

7
emilie zawadzki

地理空間インデックスを使用すると、地理的な場所に基づいて物を見つけることができます。

次の2つのオプションがあります。

  • 2D
  • 3D

2次元では、x座標とy座標をもつデカルト平面とさまざまなオブジェクトがあります。


2D cartesian plane


ドキュメントには、ensureIndex({'location':'2d', 'type':1})で何らかの種類のxyロケーションを格納する必要があります。

type(オプション)オプションは、インデックスの方向、つまり昇順または降順を指定します。複合インデックスでもかまいません。

使用例:

近くの場所を見つけるには、次のコマンドを使用します。

_db.collectionName.find({location: {$near:[x,y]}})
_

実際には、これはlimitを介してよく使用されます。結果をたとえば20に制限するには、.limit(20)を追加します。

_db.collectionName.find({location: {$near:[x,y]}}).limit(20)
_
2
student

MongoDBのドキュメントには、次のことが記載されています。

オブジェクトの座標を指定する、coordinatesという名前のフィールド。緯度と経度の座標を指定する場合は、経度を最初に次に緯度をリストします:

有効な経度の値は、-180〜180の範囲です。有効な緯度の値は-90〜90(両方を含む)です。

MongoDBの公式ドキュメント: https://docs.mongodb.com/manual/geospatial-queries/#geospatial-indexes

1