2015-03-22 6 views
13

Ho una collezione in MongoDB con un indice 2dsphere. L'oggetto Voglio salvare assomiglia a questo:Impossibile estrarre le chiavi geografiche 'anche se il GeoJSON è valido

{ 
     "type" : "Polygon", 
     "coordinates" : [ 
      [ 
       [ 
        5.052617929724351, 
        52.64653192570052 
       ], 
       [ 
        5.051738165167465, 
        52.64765805672784 
       ], 
       [ 
        5.054162882116928, 
        52.64831549553909 
       ], 
       [ 
        5.054592035559312, 
        52.64780777138566 
       ], 
       [ 
        5.055364511755601, 
        52.64790541110375 
       ], 
       [ 
        5.056094072607651, 
        52.64688343792051 
       ], 
       [ 
        5.054237983969346, 
        52.64661654927096 
       ], 
       [ 
        5.052617929724351, 
        52.64653192570052 
       ] 
      ] 
     ] 
    } 

Secondo http://geojsonlint.com/ questo è perfettamente GeoJSON valido. Comunque MongoDB dice che non può estrarre le chiavi geografiche perché GeoJSON potrebbe essere malformato.

Qualcuno può aiutarmi e individuare l'errore?

Questo è l'errore MongoDB ottengo:

insertDocument :: caused by :: 16755 Can't extract geo keys from object, malformed geometry? 
+1

Si dispone di 2 parentesi di array attorno agli array di punti. Prova a rimuovere un set di parentesi dell'array. Dovrebbe essere [[lat, long], [lat, long], ...] –

+1

Ciao Brian, non penso che sia corretto. Un poligono in GeoJSON è un array di anelli di coordinate. GeoJSON lint riporta anche che questo è GeoJSON non valido. Comunque proveremo con MongoDB. – Mathyn

+0

Siamo spiacenti. Pensavo che solo MultiPolygon necessitasse delle parentesi quadre aggiuntive. Così divertente ... Ho trovato un post con la risposta che ha iniziato esattamente nello stesso modo https://groups.google.com/forum/m/#!topic/mongodb-user/OPouYFHS_zU –

risposta

2

Il problema è che non sta fornendo il nome dell'oggetto di livello superiore che la GeoJSON sarebbe stato assegnato.

È necessario aver creato l'indice "2dsphere" nel campo "coordinate". Invece si vuole crearlo sul campo a cui sarà assegnato questo intero valore GeoJSON.

db.geo.createIndex({"location":"2dsphere"}) 
db.geo.insert({"location" : { 
    "type" : "Polygon", 
    "coordinates" : [ 
     [ <list of your-coord-pairs> ] 
    ] 
}}) 
WriteResult({ "nInserted" : 1 }) 
+0

È certamente possibile questo era il problema. Purtroppo non posso più validare perché non ho più il codice specifico che ha causato il problema. – Mathyn

+2

Apparentemente qualcuno ha lo stesso identico problema da quando ha messo una taglia sulla risposta. –