2011-07-07 4 views
5

У меня есть таблица адресов, и мне нужно рассчитать расстояние между всеми их почтовыми индексами и моим почтовым индексом. Я довольно гибкий в используемом методе, но я надеюсь на какой-то веб-сервис или математический алгоритм. Только адреса США. В основном мне нужно кормить в 2 почтовых индексах и убирать расстояние между ними.Почтовый индекс калькулятор расстояния

Я готов использовать формулы Excel или VBA, и я могу даже что-то кодировать в C# .net, если это необходимо.

Как бы вы оценили эти расстояния?

+1

вы смотрели на Google Maps API? –

+0

@Amir Raminfar. Когда я в последний раз смотрел карты Google api, ограничение заключалось в том, что любая информация, полученная, должна отображаться на карте, чтобы удовлетворить требования к изъятию. Я не хочу отображать на карте. – MAW74656

ответ

2

Это довольно простой на самом деле. Загрузите базу данных GPS-координат zip-кодов, есть много сайтов, на которых эти данные доступны для скачивания. Они будут перечислять координаты центра почтового индекса.

Используйте формулу для расчета кратчайшего расстояния: (напр: http://www.movable-type.co.uk/scripts/latlong.html)

3

Вы можете использовать широту и долготу.

Excel:

=IF(SIN(Lat1) * SIN(Lat2) + COS(Lat1) * COS(Lat2) * COS(Long1 - Long2) > 1, 
RadiusofEarth * ACOS(1), RadiusofEarth * 
ACOS(SIN(Lat1) * SIN(Lat2) + COS(Lat1) * COS(Lat2) * COS(Long1-Long2))) 

VB.NET импортирует System.Math

Private Function Distance(ByVal lat1 As Double, ByVal lon1 As Double, ByVal lat2 As Double, ByVal lon2 As Double, ByVal unit As String) As Double 
     Dim theta As Double = lon1 - lon2 
     Dim dist = System.Math.Sin(deg2rad(lat1)) * System.Math.Sin(deg2rad(lat2)) + System.Math.Cos(deg2rad(lat1)) * System.Math.Cos(deg2rad(lat2)) * System.Math.Cos(deg2rad(theta)) 
     dist = System.Math.Acos(dist) 
     dist = rad2deg(dist) 
     dist = dist * 60 * 1.1515 
     Select Case unit 
      Case "K" 
       dist = dist * 1.609344 
      Case "N" 
       dist = dist * 0.8684 
     End Select 

     Return dist 

    End Function 

Другие полезные ссылки (Первый один также упоминает альтернативы VBA)

ExcelLatLong (также упоминает альтернативы VBA)

Zips by Lat Long Lookup

VBA discussion

EDIT: Ссылка добавлена ​​из-за комментарии дискуссию

More Info(Excel Formula)

+0

Не могли бы вы объяснить логику формулы Excel? Я не вижу, чтобы это соответствовало формуле на сайте Чипа Пирсона, на которую вы ссылаетесь. Кроме того, это предполагает сферическую Землю, а не более реалистичный эллипсоид, но я думаю, что это отлично подходит для этого приложения, поскольку неопределенность будет намного меньше размера почтовых индексов ... кроме, быть может, в больших компактных городах, где почтовый индекс области могут быть довольно маленькими. Может быть, я слишком анальный. –

+0

@ Jean-Francois Corbett Excels нужно преобразовать в Radians (я поставлю еще одну ссылку в своем ответе). Я не собирался сломать его и не думал, как ты, когда я его написал. Но вы делаете хороший момент. Наверное, это зависит от того, насколько он точно будет желать этого. Вот почему я связал его с другим вариантом. – sealz

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