kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 user997357
user997357
Вопрос

Расстояние между почтовыми индексами

Я пытаюсь найти лучший способ определения расстояния между населенными пунктами (у нас есть почтовый индекс и местоположение).

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

- Within 10 Miles
- Within 20 Miles
- Within 40 Miles
- Within 50 Miles

Единственный способ, который я вижу, это получить КАЖДУЮ запись из базы данных и вычислить расстояние между каждой, ввести его во временную таблицу, а затем упорядочить эту таблицу по местоположению и отфильтровать ее. Это кажется очень долгим и трудоемким способом - есть ли у кого-нибудь предложения, как это можно сделать лучше? Или это лучший способ сделать это?

Например, клиент вводит SO40 9AA (почтовый индекс Саутгемптона) и затем выбирает "в пределах 50 миль", это должно отобразить все записи в пределах 50 миль от этого почтового индекса или местоположения.

2 2012-08-29T17:14:14+00:00 2
Программирование
postal-code
sql
location
sql-server
asp-classic
 macycron
macycron
29-го августа 2012 в 6:01
2012-08-29T18:01:24+00:00
Дополнительно
Источник
Редактировать
#17076913

Есть ли у вас геокод в вашем наборе данных? Если нет, вы можете добавить его для имеющихся у вас почтовых индексов с помощью такой службы, как http://geocoder.us/help/city_state_zip.shtml. Или вы можете получить базу данных с готовым кодом, доступную на сайте http://www.zipinfo.com/products/z5ll/z5ll.htm. Как только вы добавите код в записи, вы сможете использовать стандартный математический расчет расстояния, используя координаты lat / long для расчета расстояния.

Если вам нужно расстояние на автомобиле, используйте Google Maps API, в противном случае это расстояние будет "как ворон летит"

0
0
Tom Collins
Tom Collins
29-го августа 2012 в 7:02
2012-08-29T19:02:08+00:00
Дополнительно
Источник
Редактировать
#17076914

Если у вас есть географические координаты всех почтовых индексов, вот функция VB для получения расстояния по прямой между любыми двумя точками. Она выдает результаты в милях, но их достаточно легко конвертировать.

Function distance(lat1 As Single, lon1 As Single, lat2 As Single, lon2 As Single)
  Dim theta As Single, dist As Single
  theta = deg2rad(lon1 - lon2)
  lat1 = deg2rad(lat1)
  lat2 = deg2rad(lat2)
  dist = Sin(lat1) * Sin(lat2) + Cos(lat1) * Cos(lat2) * Cos(theta)
  dist = acos(dist)
  dist = rad2deg(dist)
  distance = dist * 60 * 1.1515
End Function

'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
':::  This function get the arccos function from arctan function    :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function acos(Rad)
  If Abs(Rad) <> 1 Then
    acos = pi / 2 - Atn(Rad / Sqr(1 - Rad * Rad))
  ElseIf Rad = -1 Then
    acos = pi
  End If
End Function

'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
':::  This function converts decimal degrees to radians             :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function deg2rad(Deg As Single) As Single
    deg2rad = CSng(Deg * pi / 180)
End Function

'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
':::  This function converts radians to decimal degrees             :::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Function rad2deg(Rad As Single) As Single
    rad2deg = CSng(Rad * 180 / pi)
End Function
Tom Collins
Tom Collins
Редактировал ответ 29-го августа 2012 в 9:01
0
0
Похожие сообщества 4
DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
3 542 пользователей
Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.
Открыть telegram
sql_ninja
sql_ninja
2 520 пользователей
Канал для тех, кто знает или интересуется SQL 🛢 Взаимная помощь и позитив =) Вакансии тут - @sql_jobs Бан за: оскорбления, спам, фри рекламу, расизм, сексизм. Наш MSSQL канал - @sqlcom По рекламе: @aveLestat
Открыть telegram
SQL JOBS
SQL JOBS
2 144 пользователей
Обязательны: компания, город, позиция, вилка, наличие удалёнки, требования, контакты. Бан за рекламу, сексизм, расизм и неадекватный обсёр объявлений
Открыть telegram
Lazarus : Database (Firebird, mySQL, SQLite, PostgreSQL, ...)
29 пользователей
Базы данных в Lazarus https://t.me/Delphi_Lazarus (по-русски) https://t.me/Delphi_Lazarus_offtop https://t.me/freepascal_en (по-английски) по темам: https://t.me/Lazarus_Database https://t.me/Lazarus_Graphics https://t.me/Lazarus_Android
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 6 дней назад
2
Денис Васьков
Зарегистрирован 1 неделю назад
3
Dima Patrushev
Зарегистрирован 1 неделю назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией