2015-06-07 2 views
1

У меня есть файлы geoJSON, которые я вложил в базу MongoDB. Схема geoJSON стандартизована, поэтому я не хочу ее менять. Файлы geoJSON представляют собой тегированные значения, определенные набором областей (полигонов) Тег может содержать много полигонов Различные теги могут содержать те же области или многоугольники.Как найти многоугольник в geoJson, сохраненный в MongoDB

Файл GeoJSON, как:

{ 
    "_id": { 
     "$oid": "5570864ee4b08fb4e548beb6" 
    }, 
    "type": "FeatureCollection", 
    "crs": { 
     "type": "name", 
     "properties": { 
      "name": "urn:ogc:def:crs:OGC:1.3:CRS84" 
     } 
    }, 
    "features": [ 
     { 
      "type": "Feature", 
      "properties": { 
       "ida": "2335", 
       "name": "myName",      
       ..., 
       "surf_m2": 13432292 
      }, 
      "geometry": { 
       "type": "MultiPolygon", 
       "coordinates": [ 
        [ 
         [ 
          [ 
           -1.366403393656118, 
           47.19539498257428 
          ], 
          [ 
           -1.357701323667323, 
           47.19374649592587 
          ], 
          [ 
           -1.357566935700819, 
           47.1932311120653 
          ], 
          [ 
           -1.357111040694128, 
           47.192966611925904 
          ], 
          ... 
         ] 
        ] 
       ] 
      } 
     } 
    ] 
} 

Image У меня есть много документов, как это.

Как я могу запросить mongoDB в оболочке, чтобы найти область (по имени, id или что-то еще), которые находятся внутри полигонов, доступных в базе.

Я судимое это:

db.Collection.find({"features":{"$geoIntersects":{"$geometry":{"type":"Point", "coordinates":[-1.3545706,47.166627 ]}}}}) 

Или

db.runCommand({ geoNear : "Collection" ,near : { type : "Point",coordinates:[-1.3545706,47.166627]},spherical : true } 

Моя проблема заключается в том, что я был не в состоянии достигнуть координат, как это непосредственно не доступен на корневом уровне, но в особенности .geometry.coordinates.

Помощь ...

+0

Поддерживаемые объекты GeoJSON для MongoDB перечислены и [объяснены здесь] (http://docs.mongodb.org/manual/reference/geojson/). В основном лучшее, что вы можете сделать, это разбить это на объекты [GeomeryCollection] (http://docs.mongodb.org/manual/reference/geojson/#geometrycollection), поскольку FeaturesCollection не поддерживается. –

+0

@ user3561036, нормально, так бы вы сделали это время выполнения или создав новую коллекцию, соответствующую больше запросу? – Anthony

+0

Вы не можете «делать во время выполнения», потому что для параметров запроса требуется «индекс». Это значит, что данные коллекции уже должны храниться в этой форме. Вы либо сохраняете его поддерживаемым способом, либо позволяете MongoDB выполнять эту работу, либо выгружать другую службу для обработки хранимых данных, где это делает «работу с ворчанием». Мне нравятся (разумно) большие серверы баз данных железа, чтобы справиться с этим. –

ответ

0

Вот как вы можете сделать это во время выполнения, заменив позицию GPS на тот, который вы хотите.

db.CollectionName.find({"features.geometry":{"$geoIntersects":{"$geometry":{"type":"Point", "coordinates":[ -1.346784,47.141102]}}}}) 
Смежные вопросы