多くの調査の結果、特定のオブジェクトを実際にクエリし、RoboMongo とGoogle ドラッグ アンド ドロップ GeoJSONを使用してそれらを視覚化する方法を見つけました。
クエリ部分については、ここで指定されている以下の手法を使用できます。
//[Thematic] Finds all the LineString documents that contain “Avenue” in their name.
db.LineString.aggregate(
{ $match : {
"features.properties.name": /avenue/i
}},
{ $unwind : "$features" },
{ $match : {
"features.properties.name": /avenue/i
}}
)
ここでは、取得するフィールドを定義するために$unwind集約ステージを使用します。その後、特定の条件でドキュメントを取得するために$matchを使用します。最初の一致では、インデックス (テキスト、空間など) を利用して、時間を大幅に短縮できることに注意してください。MongoDB でドキュメントを右クリックすると、生成された JSON を表示して保存できます。
ただし、空間データを操作する場合、特に複雑な構造を操作する場合は、マップにデータを配置したいと思うでしょう。そのためには、データをJSON から GeoJSONに変換する必要があります。以下に、ファイルを変換するために使用した正規表現を示します。
アルゴリズム JSON ファイル (MongoDB から生成) から GeoJSON へ:
- 消去:
"features" : \{.*
AND "coordinates"[^}]*\K\}
AND "type" : "Feature"
AND "ok" : 1.0000000000000000
AND "id".*, **AND**
"_id" : ObjectId(.*`
- 置換:
"type" : "FeatureCollection",[^}]*\}
、WITH "type" : "Feature",
AND "result" : [
WITH "features" : [
{
"type": "FeatureCollection",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features" : [
Notepad++ を使用してこれらの正規表現を実行します。
"features" : \{.*|"coordinates"[^}]*\K\}|"type" : "Feature"|"ok" : 1.0000000000000000|"id".*,|"_id" : ObjectId\(.*,
"type" : "FeatureCollection",[^}]*\},
と置換する "type" : "Feature",
免責事項: データを投影する方法は明らかに出力ファイルに影響するため、ファイルは異なる構造に従う場合があることに注意してください。このような場合は、追加の修正が必要です。
GeoJSON ファイルができたので、それをGoogle の GeoJSON APIにドラッグ アンド ドロップできます。上記のクエリは、名前に「Avenue」を含むバンクーバーの道路を取得します。
考え:
生成された JSON は、劣った変更を加えて GeoJSON に変換できるため、この作業は RoboMongo から直接実行できると思います。また、このREGEXは複雑すぎることに注意してください。より安定したソリューションに興味がある場合は、 NodeJS、Jacksonなどの JSON ライブラリを使用して、新しいファイルを生成することをお勧めします。私の場合は完璧です。
楽しみ :)