MongoDB 2dsphere пространственная ошибка создания индекса
В MongoDB я создал базу данных с именем "GIS" и коллекцию с именем "UTILITIES", а в коллекцию я вставил документ BSON, как показано ниже.
{
"_id" : ObjectId("54e6b3ca7e550c1f4c2b47f6"),
"features" : [
{
"id" : "1",
"geometry" : {
"coordinates" : [
86.74957,
21.93157
],
"type" : "Point",
"crs" : null,
"bbox" : [
86.74957,
21.93157,
86.74957,
21.93157
]
},
"properties" : {
"PLACE" : "Abhoy Medical Store",
"LATITUDE" : "21.93157",
"LONGITUDE" : "86.74957",
"IMG" : "43400012"
},
"type" : "Feature",
"crs" : null,
"bbox" : [
86.74957,
21.93157,
86.74957,
21.93157
]
},
{
"id" : "2",
"geometry" : {
"coordinates" : [
86.73604,
21.92578
],
"type" : "Point",
"crs" : null,
"bbox" : [
86.73604,
21.92578,
86.73604,
21.92578
]
},
"properties" : {
"PLACE" : "Advanced Homeo Sadan",
"LATITUDE" : "21.92578",
"LONGITUDE" : "86.73604",
"IMG" : "43400123"
},
"type" : "Feature",
"crs" : null,
"bbox" : [
86.73604,
21.92578,
86.73604,
21.92578
]
}
],
"type" : "FeatureCollection",
"crs" : null,
"bbox" : [
86.71509,
21.91163,
86.79117,
21.95772
]
}
Документ на самом деле GeoJSON. Я пытался создать индекс как
db.UTILITIES.ensureIndex ({"features.geometry" : "2dsphere"})
который возвращает errmsg
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"ok" : 0,
"errmsg" : "Can't extract geo keys from object, malformed geometry?: { _id: ObjectId('54e6b3ca7e550c1f4c2b47f6'), features: [ { id: \"1\", geometry: { coordinates: [ 86.74957000000001, 21.93157 ], type: \"Point\", crs: null, bbox: [ 86.74957000000001, 21.93157, 86.74957000000001, 21.93157 ] }, properties: { PLACE: \"Abhoy Medical Store\", LATITUDE: \"21.93157\", LONGITUDE: \"86.74957\", IMG: \"43400012\" }, type: \"Feature\", crs: null, bbox: [ 86.74957000000001, 21.93157, 86.74957000000001, 21.93157 ] }, { id: \"2\", geometry: { coordinates: [ 86.73604, 21.92578 ], type: \"Point\", crs: null, bbox: [ 86.73604, 21.92578, 86.73604, 21.92578 ] }, properties: { PLACE: \"Advanced Homeo Sadan\", LATITUDE: \"21.92578\", LONGITUDE: \"86.73604\", IMG: \"43400123\" }, type: \"Feature\", crs: null, bbox: [ 86.73604, 21.92578, 86.73604, 21.92578 ] } ], type: \"FeatureCollection\", crs: null, bbox: [ 86.71509, 21.91163, 86.79116999999999, 21.95772 ] }",
"code" : 16755
}
Я проверил порядок долготы и широты, который в порядке.
Пожалуйста, предоставьте выход. Заранее спасибо.
2 ответа
Решение
Я удалил поля, содержащие нулевые данные. В моем случае это "crs": null,. И индекс создан успешно.
Это не GeoJSON. features.geometry
Поле, которое должно быть GeoJSON, также не является GeoJSON, потому что у вас есть дополнительный ключ со значением NULL:
"geometry" : {
"coordinates" : [
86.74957,
21.93157
],
"type" : "Point",
"crs" : null, // not valid
"bbox" : [
86.74957,
21.93157,
86.74957,
21.93157
]
}
Если вы удалите лишние ключи из поля GeoJSON, геоиндекс будет создан без ошибок.
Вы можете проверить GeoJSON довольно надежно с GeoJSON Lint.