Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Теперь геопространственные данные можно хранить и запрашивать с помощью Azure DocumentDB. Это усовершенствование предоставляет мощные средства для управления пространственными данными и анализа пространственных данных, что обеспечивает широкий спектр приложений, таких как отслеживание расположения в реальном времени, оптимизация маршрутов и пространственный анализ.
Ниже приведен краткий обзор геопространственных команд и операторов, поддерживаемых ниже.
Геопространственные операторы запросов
$geoIntersects
Выбирает документы, в которых указанная геометрия пересекается с геометрией документов. Полезно для поиска документов, которые совместно используют любую часть пространства с заданной геометрией.
db.collection.find({
location: {
$geoIntersects: {
$geometry: {
type: "<GeoJSON object type>",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$geoWithin
Выбирает документы с геопространственных данных, которые полностью существуют в указанной фигуре. Этот оператор используется для поиска документов в определенной области.
db.collection.find({
location: {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$box
Определяет прямоугольную область с помощью двух пар координат (нижние и левые и верхние правые угла). Используется с оператором $geoWithin для поиска документов в этом прямоугольнике. Например, поиск всех расположений в прямоугольной области на карте.
db.collection.find({
location: {
$geoWithin: {
$box: [[lowerLeftLong, lowerLeftLat], [upperRightLong, upperRightLat]]
}
}
})
$center
Определяет круговую область с помощью центра и радиуса в радианах. Используется с оператором $geoWithin для поиска документов в этом круге.
db.collection.find({
location: {
$geoWithin: {
$center: [[longitude, latitude], radius]
}
}
})
$centerSphere
$centerАналогично, но определяет сферическую область с помощью центра и радиуса в радианах. Полезно для вычислений сферической геометрии.
db.collection.find({
location: {
$geoWithin: {
$centerSphere: [[longitude, latitude], radius]
}
}
})
$geometry
Задает объект GeoJSON для определения геометрии. Используется с геопространственных операторами для выполнения запросов на основе сложных фигур.
db.collection.find({
location: {
$geoIntersects: {
$geometry: {
type: "<GeoJSON object type>",
coordinates: [longitude, latitude]
}
}
}
})
$maxDistance
Указывает максимальное расстояние от точки для геопространственного запроса. Используется с $near операторами и $nearSphere операторами. Например, поиск всех расположений в пределах 2 км от заданной точки.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
$minDistance
Указывает минимальное расстояние от точки для геопространственного запроса. Используется с $near операторами и $nearSphere операторами.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$minDistance: distance
}
}
})
$polygon
Определяет многоугольник с помощью массива пар координат. Используется с оператором $geoWithin для поиска документов в этом многоугольнике.
db.collection.find({
location: {
$geoWithin: {
$geometry: {
type: "Polygon",
coordinates: [[[...], [...], [...], [...]]]
}
}
}
})
$near
Находит документы, расположенные рядом с указанной точкой. Возвращает документы, отсортированные по расстоянию от точки. Например, поиск ближайших ресторанов к расположению пользователя.
db.collection.find({
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
$nearSphere
$nearАналогично, но выполняет вычисления на сферической поверхности. Полезно для более точных вычислений расстояния на поверхности Земли.
db.collection.find({
location: {
$nearSphere: {
$geometry: {
type: "Point",
coordinates: [longitude, latitude]
},
$maxDistance: distance
}
}
})
Этап геопространственного агрегирования
$geoNear
Выполняет геопространственный запрос для возврата документов, отсортированных по расстоянию от указанной точки. Может включать дополнительные критерии запроса и возвращать сведения о расстоянии.
db.collection.aggregate([
{
$geoNear: {
near: {
type: "Point",
coordinates: [longitude, latitude]
},
distanceField: "distance",
spherical: true
}
}
])
Рекомендации и неподдерживаемые возможности
В настоящее время запрос с одним кольцом многоугольника GeoJSON, область которого превышает одно полушарие, не поддерживается. В таких случаях Azure DocumentDB возвращает следующее сообщение об ошибке:
Error: Custom CRS for big polygon is not supported yet.Составной индекс, использующий обычный индекс и геопространственный индекс, не допускается. Рассмотрим пример.
db.collection.createIndex({a: "2d", b: 1}); Error: Compound 2d indexes are not supported yetМногоугольники с отверстиями в настоящее время не поддерживаются для использования с $geoWithin запросов. Хотя вставка многоугольника с отверстиями не ограничена, в конечном итоге происходит сбой со следующим сообщением об ошибке:
Error: $geoWithin currently doesn't support polygons with holesПоле ключа всегда требуется на этапе агрегирования $geoNear. Если ключевое поле отсутствует, возникает следующая ошибка:
Error: $geoNear requires a 'key' option as a StringУ
$geoNearэтапов ,$nearи$nearSphereэтапы не имеют строгих требований к индексу, поэтому эти запросы не завершаются ошибкой, если индекс отсутствует.
Связанный контент
- Дополнительные сведения о совместимости языка запросов MongoDB (MQL) с MongoDB.
- Просмотрите параметры миграции из MongoDB в Azure DocumentDB.