Как хранить геопространственную информацию в mongoDB
В соответствии с документацией mongoDB
(ссылка)
если вы хотите сохранить геопространственную информацию в поле документа, у вас есть два варианта: массив или встроенный документ, а порядок должен быть всегда долготой, широтой.
Если я хочу использовать встроенный документ, как я могу обеспечить порядок полей?
Или должны ли поля во встроенном документе иметь определенное имя?
Ответы
Ответ 1
со встроенным документом, независимо от имени поля во встроенном документе, первое поле должно содержать значение долготы, а второе поле должно содержать значение широты. Например:
db.zips2.insert( { _id: 1, city: "b", loc: { x: -73.974, y: 40.764 } } )
db.zips2.insert( { _id: 2, city: "b", loc: { x: -73.981, y: 40.768 } } )
Здесь поле x будет долготой; и поле y будет широтой.
Привет
Ответ 2
2D-геопространственный индекс, данные о местонахождении магазина
"Все документы должны хранить данные о местоположении в том же порядке. Если вы используете широту и долготу в качестве вашей системы координат, всегда хранить долготу сначала. Операторы сферического индекса MongoDBs 2d распознают только [долгота, широта] упорядочение".
Здесь хороший пост о геопространственных запросах в MongoDB в случае необходимости.
Ответ 3
Я бы посоветовал вам назвать ваше поле: x and y
вместо longitude / latitude
, потому что после обновления долгота и широта будут переупорядочены по алфавиту, поэтому инвертированы.
Ответ 4
Эти индексы позволяют нам находить вещи, основанные на местоположении. У нас есть 2 варианта: 2D и 3D
В 2-D мы имеем декартовую плоскость с координатами x
и y
и связью разных объектов.
![2D-декартовая плоскость]()
Документ должен хранить какое-то расположение x
, y
с помощью ensureIndex({'location':'2d', 'type':1})
. Опция типа определяет направление индекса, то есть восходящего или нисходящего (и необязательно). Это может быть составной индекс. Для поиска ближайших местоположений используйте команду db.collectionName.find({location: {$near:[x,y]}})
. И практически говоря, часто это используется через limit
. Чтобы ограничить результаты до 20 append .limit(20)
.
Ответ 5
В документации MongoDB указано следующее:
Поле с координатами, определяющими координаты объектов.
Если вы задаете координаты широты и долготы, перечислите долготу сначала и , затем широту:
Действительные значения долготы находятся между -180 и 180, оба включительно.
Действительные значения широты находятся между -90 и 90 (оба включительно).
Официальная документация MongoDB: https://docs.mongodb.com/manual/geospatial-queries/#geospatial-indexes