2011-07-07 703 views
5

Tengo una hoja de cálculo de direcciones y necesito calcular la distancia entre todos sus códigos postales y mi código postal. Soy bastante flexible con el método utilizado, pero espero algún tipo de servicio web o algoritmo matemático. Direcciones de Estados Unidos solamente Básicamente necesito ingresar 2 códigos postales y distanciarlos.Calculador de distancia de código postal

Estoy dispuesto a usar fórmulas de Excel o VBA, e incluso puedo codificar algo en C# .net si es necesario.

¿Cómo harías para calcular estas distancias?

+1

¿Has mirado en google maps api? –

+0

@Amir Raminfar: cuando revisé por última vez la API de Google Maps, la limitación era que cualquier información recuperada debía mostrarse en un mapa para cumplir los requisitos de liscencia. No estoy buscando mostrar en un mapa. – MAW74656

Respuesta

2

Es bastante simple en realidad. Descargue una base de datos de coordenadas de GPS de códigos postales, hay muchos sitios que tienen estos datos disponibles para su descarga. Enumerarían las coordenadas para el centro del código postal.

utilizar una fórmula para calcular la distancia más corta: (ej: http://www.movable-type.co.uk/scripts/latlong.html)

3

Usted podría utilizar latitud y longitud.

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 importaciones 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 

Otros enlaces útiles (el primero también menciona las alternativas VBA)

ExcelLatLong (menciones también alternativas VBA)

Zips by Lat Long Lookup

VBA discussion

EDIT: Enlace agregado debido al comentar la discusión

More Info(Excel Formula)

+0

¿Te importaría explicar la lógica detrás de tu fórmula de Excel? No veo que coincida con la fórmula en el sitio de Chip Pearson al que se vincula. También esto supone una Tierra esférica en lugar de un elipsoide más realista, pero supongo que está perfectamente bien para esta aplicación, ya que la incertidumbre será mucho menor que el tamaño de los códigos postales ... excepto quizás en ciudades grandes y compactas donde el código postal las áreas pueden ser bastante pequeñas Tal vez estoy siendo demasiado anal. –

+0

@ Jean-Francois Corbett Excels debe convertirse a Radians (proporcionaré otro enlace en mi respuesta). No estaba intentando desglosarlo, y no estaba pensando como tú cuando lo escribí. Pero haces un buen punto. Supongo que depende de qué tan exacto quiera que sea. Por eso lo vinculé a otra opción. – sealz

Cuestiones relacionadas