10

MongoDB には次の問題があります。母国からいくつかの地理データを取得しました。それらを mongodb に保存して、単純な Web 機能サービスをセットアップする必要があります。$withinこのサービスは主に、演算子を使用してバウンディング ボックスのクエリを実行します。データは GeoJSON 形式です。[1,2]したがって、最初に、この形式でポイント ( ) として表される村と都市をインポートしました。問題ない。次のステップの川と街路は、LineString であり、GeoJSON に従ってこのように表されます[[1,2],[3,4]]。しかし、地区 (実際にはポリゴンであり、GeoJSON 仕様の 3 次元配列によると) をインポート するとgeo values have to be numbers、インデックスの作成時にエラーが発生しました。

db.collection.ensureIndex({"geometry.coordinates" : "2d"});

すべてのデータは有効な GeoJSON であり、EPSG:4326 投影のプレーンな 2D 座標です。

誰かアイデアがありますか?

4

6 に答える 6

13

MongoDB 2.4 では、GeoJSON ポイント、ラインストリング、およびポリゴンに「2dsphere」インデックスを使用します。

たとえば、次のインデックスを作成できます。

db.mycoll.ensureIndex( { loc : "2dsphere" } )

そして、この LineString を保存します:

{ loc : { type : "LineString" , coordinates : [ [ 1 , 2 ] , [ 3 , 4 ] ] } }

http://docs.mongodb.org/manual/applications/2dsphere/を参照してください。

于 2013-03-20T17:34:18.693 に答える
3

mongo 2.3.2 開発リリースでは、GeoJSON がサポートされているようです: MongoDB 2.4 のリリース ノート

于 2013-02-10T21:48:14.270 に答える
2

これをmongoシェルから試してみてください:

// Polygon in GeoJson format
var poly = {};
poly.name = 'GeoJson polygon';
poly.geo = {};
poly.geo.type = 'Polygon';
poly.geo.coordinates = [
    [ [ -80.0, 30.0 ], [ -40.0, 30.0 ], [ -40.0, 60.0 ], [-80.0, 60.0 ], [ -80.0, 30.0 ] ]
];
db.foo.insert(poly);
db.foo.ensureIndex({geo: "2dsphere" });
于 2014-09-23T16:18:36.300 に答える
2

GeoFence 機能を設定するには、これと同じことを自分で行う必要がありました。私がしたことは、「ポリゴン」データを一連の座標と中心として保存することでした。例えば:

{ 
    "_id" : ObjectId( "4f189d132ae5e92272000000" ),
    "name" : "Alaska",
    "points" : [ 
        { "coords" : [ 
            -141.0205, 
            70.0187 ] 
        }, 

        ...

        { "coords" : [ 
            -141.0205, 
            70.0187 ] 
        } 
    ],
    "center" : { 
        "coords" : [ 
          -153.6370465116279, 
          61.42329302325581 ] 
    } 
}

私のアプリケーション (Python) では、shapely ライブラリを使用しています。最初に行うことは、ポイントに最も近い中心を持つオブジェクトのリストを見つけることです。次に、クライアント側 (python) で、各大きな座標配列を多角形に適切に変換し、領域をテストして、どの領域にポイントが含まれているかを調べます。

そのため、ポリゴン データを単なるデータとして MongoDB に格納し、センターなどの他の事前計算済みの 2D インデックスを使用できます。

于 2012-06-28T16:42:43.083 に答える
1

現在、MongoDB の地理空間機能は点の保存のみをサポートしており、形状や線はサポートしていません。ただし、円、長方形、または多角形を使用してポイントを照会することはできます。

于 2012-06-28T16:27:12.220 に答える