GEOADD
GEOADD
GEOADD key [NX | XX] [CH] longitude latitude member [longitude latitude member ...]
- Доступно с версии:
- 3.2.0
- Сложность по времени:
- O(log(N)) для каждого добавленного элемента, где N — количество элементов в упорядоченном наборе.
- Категории ACL:
-
@write,@geo,@slow,
Добавляет указанные геопространственные элементы (долгота, широта, имя) к указанному ключу. Данные хранятся в ключе как упорядоченный набор, что позволяет выполнять запросы к элементам с помощью команды GEOSEARCH.
Команда принимает аргументы в стандартном формате x,y, поэтому долгота должна быть указана перед широтой. Существуют ограничения на координаты, которые могут быть индексированы: области, очень близкие к полюсам, не индексируемы.
Точные ограничения, как указано в EPSG:900913 / EPSG:3785 / OSGEO:41001, следующие:
- Допустимые долготы находятся в диапазоне от -180 до 180 градусов.
- Допустимые широты находятся в диапазоне от -85.05112878 до 85.05112878 градусов.
Команда сообщит об ошибке, если пользователь попытается индексировать координаты за пределами указанных диапазонов.
Примечание: нет команды GEODEL, так как вы можете использовать ZREM для удаления элементов. Структура геоиндекса — это просто упорядоченный набор.
Параметры GEOADD
GEOADD также предоставляет следующие параметры:
- XX: Обновляются только существующие элементы. Новые элементы никогда не добавляются.
- NX: Не обновляются уже существующие элементы. Всегда добавляются новые элементы.
-
CH: Изменить значение возвращаемого значения с количества добавленных новых элементов на общее количество измененных элементов (CH — аббревиатура от changed). Измененные элементы — это новые добавленные элементы и элементы, которые уже существуют, для которых были обновлены координаты. Элементы, указанные в командной строке, имеющие тот же рейтинг, что и ранее, не учитываются. Примечание: обычно возвращаемое значение
GEOADDучитывает только количество добавленных новых элементов.
Примечание: параметры XX и NX взаимоисключающие.
Как это работает?
Для заполнения упорядоченного набора используется метод, называемый Geohash. Биты широты и долготы переплетаются, образуя уникальное 52-битное целое число. Мы знаем, что двойной рейтинг упорядоченного набора может представлять 52-битное целое число без потери точности.
Этот формат позволяет выполнять запросы по прямоугольной области и радиусу, проверяя 1+8 областей, необходимых для покрытия всей формы, и отбрасывая элементы, находящиеся за ее пределами. Области проверяются путем вычисления диапазона области, покрываемой, удалением достаточного количества битов из менее значимой части рейтинга упорядоченного набора и вычисления диапазона рейтинга для запроса в упорядоченном наборе для каждой области.
Какую модель Земли она использует?
Модель предполагает, что Земля — это сфера, так как для вычисления расстояния используется формула гаверсинуса. Эта формула является лишь приближением при применении к Земле, которая не является идеальной сферой. Введенные ошибки не являются проблемой, если их используют, например, социальные сети и аналогичные приложения, требующие такого типа запросов. Однако в худшем случае ошибка может достигать 0,5%, поэтому для критически важных приложений вы можете рассмотреть другие системы.
Возвращаемое значение
Целое число в ответе, а именно:
- При использовании без дополнительных аргументов — количество элементов, добавленных в упорядоченный набор (исключая обновления рейтинга).
- Если указан параметр
CH, количество элементов, которые были изменены (добавлены или обновлены).
Примеры
GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania" GEODIST Sicily Palermo Catania GEORADIUS Sicily 15 37 100 km GEORADIUS Sicily 15 37 200 km
История
- Начиная с версии Redis 6.2.0: добавлены параметры
CH,NXиXX.
© 2006–2022 Salvatore Sanfilippo
Licensed under the Creative Commons Attribution-ShareAlike License 4.0.
https://redis.io/commands/geoadd/