"MongoError: невозможно извлечь гео-ключи из объекта" с помощью Type: Point
Я пытаюсь подготовить поле базы данных для геокодирования с помощью этого:
MyCollection._ensureIndex({'data.address.located':'2dsphere'});
Но тогда возникает эта ошибка:
MongoError: Can't extract geo keys from object, malformed geometry?:
{ type: "Point", coordinates: [ 32.4586858, -110.8571443 ] }
Я не могу понять, что случилось с этим полем? Любая идея?
Когда я посмотрю этот, это показывает следующее:
The following example stores a GeoJSON Point:
{ loc: { type: "Point", coordinates: [ 40, 5 ] } }
Ответы
Ответ 1
Проблема заключается в том, что
[ 32.4586858, -110.8571443 ]
не является допустимой координатой. Порядок должен быть долготой, за которой следует широта, тогда как эта координата представляется обратным (судя по тому, что действительный диапазон широты составляет от -90 до 90 и -110.8571443 находится за пределами этого).
Я думаю, вы имели в виду:
{ type: "Point", coordinates: [ -110.8571443, 32.4586858 ] }
или была некоторая другая ошибка ввода.
Ответ 2
Как упомянутый @go-oleg, проблема заключается в следующем диапазоне координат:
- Долгота: (+ -) 180 °
- Широта: (+ -) 90 °
и индекс ожидает координат в этих границах.
Но если вы пытаетесь применить индекс к уже импортированным данным и обнаружили, что координаты меняются местами, вам, скорее всего, захочется поменять его, а не реимпортировать в целом коллекция. Для этого вы можете использовать следующий mongoshell
script.
Предположим, что у вас уже есть хорошо сформированный GeoJSON
типа Point
.
db.coll.find().forEach(function (e) {
// assuming that `geoJson` is our field containing `coordinates`
e.geoJson.coordinates = [ // Swapping Lat/Lon
e.geoJson.coordinates[1], // Longitude goes first
e.geoJson.coordinates[0] // Latitude goes last
];
db.coll.save(e);
// Some `print(e.name)` can go here just to understand the progress
});
Ответ 3
Даже проблема была решена, мне нужно выделить эту ошибку, также может появиться, если вы опустите тип объекта GeoJSON.
В моем случае это было исправлено, добавив значение type: 'Point'
к модели.
Ответ 4
У меня была та же проблема, в то время как моя долгота, порядок широты были правильными. Моя ошибка заключалась в том, что я написал coordiantes
вместо coordinates
монго дал мне это:
pymongo.errors.WriteError: Can't extract geo keys: {data} Point must be an array or object
поэтому, возможно, у вас есть правильный заказ, но у вас есть проблемы с именами ваших ключей.