Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Определение близлежащих мест / 12 сообщений из 12, страница 1 из 1
20.08.2014, 18:35:51
    #38724921
urukhay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение близлежащих мест
Всем привет.

Есть таблица в БД, в которой хранятся координаты (широта и долгота) различных гео-объектов.
Мне нужно выбрать из нее те объекты, которые находятся от заданной точки на определенном расстоянии (по радиусу).

Имеем входные данные:
1. Широта и долгота точки (представленные в виде десятичного числа), для которой ищем места рядом
2. Радиус в киломметрах, в пределах которого ищем места рядом.

Мои идеи:
1. Определяем диапазон широт и долгот относительно имеющейся точки, зная радиус
2. Выбираем объекты, выполняя подобный запрос:
Код: sql
1.
select * from geoobject where lat >= lat_min and lat <= lat_max and lng >= lng_min and lng <= lng_max



Вопрос: как узнать этот минимальную широту и долготу, зная радиус в километрах?
Всем заранее спасибо!
...
Рейтинг: 0 / 0
20.08.2014, 18:44:06
    #38724934
urukhay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение близлежащих мест
Сейчас подумал - таким способом я нахожу точки в пределах квадрата.
А мне нужно найти в пределах окружности, т.е. по радиусу.

Есть у кого какие идеи?
...
Рейтинг: 0 / 0
20.08.2014, 18:51:20
    #38724945
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение близлежащих мест
urukhayСейчас подумал - таким способом я нахожу точки в пределах квадрата.
А мне нужно найти в пределах окружности, т.е. по радиусу.

Есть у кого какие идеи?Правильно, сначала отбираете в пределах "квадрата", поскольку это легко делается на большинстве СУБД с использованием индексов. А уже потом из них отбираете по радиусу.

А расстояние на сфере описано даже википедии .
...
Рейтинг: 0 / 0
20.08.2014, 19:09:20
    #38724956
urukhay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение близлежащих мест
Спасибо!
...
Рейтинг: 0 / 0
20.08.2014, 21:42:13
    #38725026
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение близлежащих мест
в мускуле вродь тоже должны быть всякие финтифлюшки для работы с гео-координатами
...
Рейтинг: 0 / 0
20.08.2014, 21:42:13
    #38725027
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение близлежащих мест
в мускуле вродь тоже должны быть всякие финтифлюшки для работы с гео-координатами
...
Рейтинг: 0 / 0
20.08.2014, 22:25:50
    #38725052
urukhay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение близлежащих мест
авторпоскольку это легко делается на большинстве СУБД с использованием индексов
Кстати, насчет индексов: в старых версиях мускула, насколько я знаю, индексы не работали в случае операторов сравнения.
Т.е. на запросы вида:
Код: sql
1.
select * from user where age > 25


рабочий индекс построить было нельзя. Хотя, возможно, у меня недостоверная информация, я сам не проверял.

Скажите, а как сейчас с этим дела. Как в данном конеретном примере построить индекс?
Такой будет работать?
Код: sql
1.
ALTER TABLE `geoobject` ADD INDEX `Index_Name`(`lat`, `lng`);
...
Рейтинг: 0 / 0
20.08.2014, 23:22:22
    #38725079
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение близлежащих мест
urukhay,

Как раньше, так и сейчас индекс не будет применяться, если по статистике данных MySQL решит, что будет выбрано более 5% записей (точную величину могу путать, точно не помню, но не суть).

А вообще по данному вопросу у нас есть FAQ: Нахождение записей, где заданное значение находится между значениями полей

Модератор: Тема перенесена из форума "PHP, Perl, Python".
...
Рейтинг: 0 / 0
21.08.2014, 08:14:17
    #38725156
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение близлежащих мест
Условие < или > может быть обработано с помощью индекса только в случае если индекса состоит только из одного этого поля или это поле является завершающим в составном индексе и все остальные поля составного индекса присутствуют в условии.
...
Рейтинг: 0 / 0
21.08.2014, 08:21:34
    #38725158
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение близлежащих мест
Hettтолько в случае если индекса состоит только из одного этого поля или это поле является завершающим в составном индексе и все остальные поля составного индекса присутствуют в условии.а как же третий случай - когда индекс начинается с этого поля?
...
Рейтинг: 0 / 0
21.08.2014, 08:37:36
    #38725166
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение близлежащих мест
на да, простите
...
Рейтинг: 0 / 0
21.08.2014, 08:38:26
    #38725167
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение близлежащих мест
только тогда оставшиеся поля индекса не могут быть использованы
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Определение близлежащих мест / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]