2010-06-23 2 views
4

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

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

+4

Такого рода материал обрабатывается через пространственные данные. Лат и долгота не идеальны, потому что земля не плоская. PostgreSQL имеет высоко оцененную/использованную пространственную составляющую, обе из которых являются бесплатными. –

ответ

4

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

+1

+1 MySQL, SQL Server и PostgreSQL также имеют пространственные компоненты. Это означает, что вы «делаете это прямо» в SQL, просто используя специальные функции запросов, которые выстраивают (например) расстояние между двумя точками. Вот несколько воздушных SQL для ресторанов в пределах 25 миль 'select r.restaurant_name из ресторанов r где sdo_within_distance (r.shape, (выберите форму у пользователей, где user_name =" Fred ")," distance = 25 unit = miles ") =" TRUE " ; ' – MarkJ

2

Использование реализация SQL в Haversine formula

+1

Нет, не надо! Используйте базу данных с пространственными функциями и дайте ей работу для вас. MySQL, SQL Server, Oracle или PostgreSQL, чтобы назвать четыре. http://stackoverflow.com/questions/3098395/how-to-find-nearby-results/3098402#3098402 – MarkJ

2

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

1

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

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

+0

Многие реляционные базы данных имеют встроенную реализацию пространственных запросов. MySQL, Oracle, SQL Server, PostGIS – MarkJ

Смежные вопросы