標籤:style http color io ar strong for sp 問題
建立地理空間索引注意事項
建立地理空間索引失敗,提示錯誤資訊如下
> db.places.ensureIndex({"loc":"2dsphere"})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"ok" : 0,
"errmsg" : "Can‘t extract geo keys from object, malformed geometry?: { _
id: ObjectId(‘5428bb224f26d9aa1af3d844‘), name: \"Hudson River\", loc: { type: \
"Line\", coordinates: [ [ 0.0, 1.0 ], [ 0.0, 2.0 ], [ 1.0, 2.0 ] ] } }",
"code" : 16755
}
原因是多邊形的點至少是4個才能建立成功
mongodb版本:mongodb-2.6。
> db.world.insert( { "name":"New England", "loc":{ "type":"Polygon", "
coordinates":[[0,1],[0,2],[1,2]] } } )這裡只有3個點, 最外側應該有兩個[和]
> db.world.insert({"name":"New England", "loc":{ "type":"Polygon", "
coordinates":[[[0,1],[0,2],[1,2],[0,1]]]}})這裡有4個。
建立成功提示資訊如下:
> db.places.ensureIndex({"loc":"2dsphere"})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
這種錯誤一般都是json格式和內容不正確。
錯誤資訊如下
"$err" : "Can‘t canonicalize query: BadValue bad geo query"
原因是type=Polygon類型,表示是多邊形,至少需要有4個點(起點和終點必須一樣),並且多邊形有多個環組成,所以應該是數組結構,每個數組是一個多邊形。
正確的格式如下:
db.places.insert({"name":"New England","loc":{"type":"Polygon","coordinates":[[[0,1],[0,2],[1,2],[0,1]]]}})
var eastVillage={"type":"Polygon","coordinates":[[-73.9917900,40.7264100],[-73.9917900,40.7321400],[-73.9829300,40.7321400],[-73.9917900,40.7264100]]}
參考文檔如下:
http://stackoverflow.com/questions/25893415/mongodbcant-canonicalize-query-badvalue-bad-geo-query
http://geojson.org/geojson-spec.html#id4
mongodb的地理空間索引常見的問題