Как найти "близлежащие" результаты? - PullRequest
4 голосов
/ 23 июня 2010

Предполагая, что у вас есть широта и долгота вашего пользователя, и вы хотите найти поблизости ... скажем, рестораны, как вы запрашиваете свою реляционную базу данных? Что-то вроде "ресторанов в радиусе 25 миль"?

Вы бы просто запросили рестораны в квадрате с длиной и широтой больше / меньше, чем местоположение пользователя +/- 25 миль (в градусах, я думаю), а затем отфильтровали «углы» на любом языке, который вы с помощью? Или можно / нужно сделать это прямо в SQL?

Ответы [ 5 ]

4 голосов
/ 23 июня 2010

Взгляните, например, на пространственные объекты, доступные в oracle - вот запись в википедии http://en.wikipedia.org/wiki/Spatial_query, и ссылка с примерами из noaa https://www.ngdc.noaa.gov/wiki/index.php?title=Sample_Oracle_Spatial_Queries

3 голосов
/ 24 июня 2010

Нашел действительно хорошее руководство здесь: http://code.google.com/apis/maps/articles/phpsqlsearch.html

Гораздо проще, чем многие другие объяснения ...

2 голосов
/ 23 июня 2010

Ваш «круг» уже будет сильно деформирован, если вы рассматриваете широту / долготу как прямолинейную сетку на значительном расстоянии от экватора (например, в Нью-Йорке, Лондоне или Москве). Отрезание углов от «квадрата» не сильно улучшит его.

2 голосов
/ 23 июня 2010

Использование SQL-реализации формулы Haversine

1 голос
/ 23 июня 2010

Я знаю, что вы специально упомянули реляционные базы данных, но я бы хотел, чтобы вы хотя бы заглянули в систему, которая имеет собственную реализацию пространственных запросов.

Лично я считаю MongoDB довольно элегантнойhttp://www.mongodb.org/display/DOCS/Geospatial+Indexing

...