Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoDB 2dsphere index fails (malformed geometry?)

I'm currently trying to build an 2dsphere index, but the creation seems to fail.

The document on which the index creation fails is valid geojson (according to geojsonlint).

Also as far as I can see it obeys the MongoDB "Polygon" rules.

I would appreciate any help, since I can't figure out why the index creation seems to fail.

Thanks in advance!

db.poly.ensureIndex( { loc: "2dsphere" } )
{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "ok" : 0,
        "errmsg" : "Can't extract geo keys from object, malformed geometry?: { _
id: 353, loc: { type: \"Polygon\", coordinates: [ [ [ 8.090732000000001, 53.6379
766 ], [ 8.050639500000001, 53.6250853 ], [ 8.036974600000001, 53.6286108 ], [ 7
.994035500000001, 53.6016978 ], [ 8.0120927, 53.59855020000001 ], [ 8.0102720000
00001, 53.5883803 ], [ 8.023379, 53.5867745 ], [ 8.0148004, 53.5832729 ], [ 8.02
6839500000001, 53.57895840000001 ], [ 8.0271685, 53.5727671 ], [ 8.0432450000000
01, 53.57190120000001 ], [ 8.0386477, 53.565241 ], [ 8.0192488, 53.5609644 ], [
8.030192100000001, 53.5508096 ], [ 8.037298, 53.5565769 ], [ 8.041402400000001,
53.55249540000001 ], [ 8.030647100000001, 53.53854200000001 ], [ 8.0381080000000
01, 53.5275022 ], [ 8.048501400000001, 53.5243656 ], [ 8.051459700000001, 53.509
912 ], [ 8.091510100000001, 53.50258460000001 ], [ 8.153839000000001, 53.5148059
0000001 ], [ 8.1708242, 53.53993010000001 ], [ 8.164240300000001, 53.5287913 ],
[ 8.1562255, 53.531339 ], [ 8.1700993, 53.54524050000001 ], [ 8.150740200000001,
 53.5596328 ], [ 8.1539377, 53.56452330000001 ], [ 8.1408203, 53.58015880000001
], [ 8.155694800000001, 53.5858101 ], [ 8.1496093, 53.60191990000001 ], [ 8.1234
503, 53.5984032 ], [ 8.090732000000001, 53.6379766 ] ] ] } }",
        "code" : 16755
}
like image 698
coalmee Avatar asked May 29 '14 00:05

coalmee


1 Answers

Apply the index to "loc" (the GeoJSON field) as you have done. However, make sure that your coordinates are specified in the order of Longitude, Latitude (not Latitude, Longitude).

Per the documentation at http://docs.mongodb.org/manual/applications/geospatial-indexes/#spherical:

Store your location data as GeoJSON objects with this coordinate-axis order: longitude, latitude. The coordinate reference system for GeoJSON uses the WGS84 datum.

Also, per the GeoJSON spec at http://geojson.org/geojson-spec.html#positions:

A position is represented by an array of numbers. There must be at least two elements, and may be more. The order of elements must follow x, y, z order (easting, northing, altitude for coordinates in a projected coordinate reference system, or longitude, latitude, altitude for coordinates in a geographic coordinate reference system). Any number of additional elements are allowed -- interpretation and meaning of additional elements is beyond the scope of this specification.

like image 157
philidem Avatar answered Nov 15 '22 05:11

philidem