3

ポイントの配列(緯度、経度)内のエリアのポイントのリストを取得しました。これらの配列にインデックスを作成しましたが、1 つのポイントがそのポリゴン内にあるかどうかを知りたいと考えています。

MongoDBで可能ですか?私はすでにこれらのコマンドを試しましたが、うまくいきませんでした:

 > polygonA = [ [ 48.780809,2.307129],[ 48.781809,2.300129],[ 48.770809,2.317129]]
 > db.contours.find({ "rings.ring" : { "$within" : { "$polygon" : polygonA } } })

 > db.runCommand( { geoNear : "contours" , within : [2.307129,48.780809,], num : 10 } );

私のデータ構造は次のとおりです。

 > db.contours.findOne({},{'rings':0})
 {
         "_id" : ObjectId("50364617d591ac166000c196"),
         "foundfieldname" : "Name",
         "geometrytype" : "geometryPolygon",
         "attributes" : {
                 "Shape" : "Polygon",
                 "Name" : "France",
                 "Type" : "Country",
                 "Country" : "France",
                 "Area" : "1162358716567.45"
         },
         "country" : "France",
 "rings":{
      "ring":[[12.32,43.54],...],
           ...
 }

ありがとう

4

1 に答える 1

2

これには、rings.ring がポイントであり、geo インデックスが定義されている必要がありますが、これは当てはまりますか?

あなたの質問は、これが実際には標準インデックス(マルチキーインデックス)を持つ複数のポイントのリストであることを意味しますが、これは機能しません。

http://www.mongodb.org/display/DOCS/Geospatial+Indexing/#GeospatialIndexing-BoundsQueries

そこにあるように、ポリゴン内のポイントとして「loc」を検索すると、「loc」フィールドは次のようになります (他の有効な例については、上記のリンクを参照してください)。

{ loc : [ 50 , 30 ] }

次のようなインデックスを使用します。

db.places.ensureIndex( { loc : "2d" }

つまり、単一のポイントを表し、地理インデックスが定義されたフィールドです。そのようなフィールドを使用すると、テストは機能しますか?

于 2012-08-23T17:25:34.640 に答える