grossi problema con indici spaziali su oggetti GeoJSON

17 views
Skip to first unread message

Stefano Cudini

unread,
Jun 30, 2014, 6:11:25 AM6/30/14
to mongo...@googlegroups.com
Ho una collection con dentro oggetti GeoJSON, delle Feature con geometry LineString, cioè delle semplici tracce gps
ho capito che forse il problema è che mongodb fa un controllo molto serrato sul formato dei documenti geoJON prima di applicare un indice spaziale.

Per cui mi sono fatto questa piccola func javascript per pulire le geometry LineString dalle coordinate doppione:
```
cleanLinestring: function(line) {
var cc = line.coordinates,
ncc = [];
for(var i=0; i<cc.length; i++)
{
if( i>0 &&
cc[i][0]===cc[i-1][0] &&
cc[i][1]===cc[i-1][1])
continue;
ncc.push([parseFloat(cc[i][0]),parseFloat(cc[i][1])]);
}
line.coordinates = ncc;
return line;
}
```
che mi pare funzioni bene... il GeoJSON risultante è questo
https://gist.github.com/stefanocudini/0dbf30899861bf4ff708
viene anche mostrato e validato da github ed altri strumenti!

solo che sto maledetto mongodb 2.4.10 ancora non mi da lo stesso errore:
```
> db.tracks.ensureIndex({'geometry.coordinates':'2dsphere'})
{
"err" : "Can't extract geo keys from object, malformed geometry?:{ 0: [ 14.27952842193733, 41.84259576592007 ], 1: [ 14.2799254, 41.8424937 ], 2: [ 14.280153, 41.8424969 ], 3: [ 14.2802705, 41.8425372 ], 4: [ 14.2804349, 41.8426369 ], 5: [ 14.28064667736367, 41.84270158380843 ], 6: [ 14.2810599, 41.8425079 ], 7: [ 14.2811392, 41.8423788 ], 8: [ 14.2812008, 41.8422978 ], 9: [ 14.2813565, 41.8422475 ], 10: [ 14.2815738, 41.842195 ], 11: [ 14.2817999, 41.8421228 ], 12: [ 14.2820084, 41.8419631 ], 13: [ 14.2822845, 41.8418121 ], 14: [ 14.2827309, 41.8415496 ], 15: [ 14.2829423, 41.8414511 ], 16: [ 14.283051, 41.8414293 ], 17: [ 14.2830803, 41.8414774 ], 18: [ 14.2830334, 41.8415496 ], 19: [ 14.2828131, 41.8417596 ], 20: [ 14.2826663, 41.8419434 ], 21: [ 14.2826575, 41.8420462 ], 22: [ 14.282725, 41.8420747 ], 23: [ 14.28291, 41.8420441 ], 24: [ 14.2832565, 41.8418865 ], 25: [ 14.2835796, 41.8416765 ], 26: [ 14.2839291, 41.8414249 ], 27: [ 14.2841053, 41.8411952 ], 28: [ 14.2842315, 41.8409611 ], 29: [ 14.2843461, 41.840692 ], 30: [ 14.2844988, 41.8403156 ], 31: [ 14.2846662, 41.8400137 ], 32: [ 14.2847895, 41.8398671 ], 33: [ 14.28483444906064, 41.83967979818927 ], 34: [ 14.28482942728927, 41.83948622960049 ], 35: [ 14.28485240110767, 41.83933301185041 ], 36: [ 14.28503025699404, 41.83921004370063 ] }",
"code" : 16572,
"n" : 0,
"connectionId" : 15,
"ok" : 1
}
```

Massimo Brignoli

unread,
Jul 19, 2014, 12:42:47 PM7/19/14
to mongo...@googlegroups.com
Ciao Stefano, non so se hai risolto, io ho provato ad inserire la LineString di cui sopra e non ho avuto nessun problema... Pero' sto usando la 2.6.3

Stefano Cudini

unread,
Jul 19, 2014, 1:58:49 PM7/19/14
to mongo...@googlegroups.com
ho risolto scrivendo una funzione che validi perfettamente le linestring!  cioè secondo standard non devono esserci coordinate consecutive uguali! per esempio
Reply all
Reply to author
Forward
0 new messages