2011-09-15 38 views
9

Mis requisitos son similares a this question, excepto el hecho de que tengo prohibido usar los valores de latitud y longitud. Quiero calcular la distancia de "walking" entre dos códigos postales. Más tarde también necesitaría consultar "¿quién está dentro de X kms?"¿Cómo encontrar la distancia entre dos ZipCodes usando el código Java?

No estoy seguro de si es alcanzable o no. ¿Es realmente posible encontrar la distancia entre dos códigos postales dados? No quiero las respuestas que solo funcionarán para los códigos postales de EE. UU./RU. Necesito una solución genérica que funcione para dos códigos postales del mundo.

Si no es posible calcular la distancia sin utilizar la longitud de Langitude &, ¿puedo obtener los valores de Langitud/longitud de un ZIPCODE dado? (increíble) pero ¿cómo?

Cualquier tutorial/ejemplo será de gran ayuda ... Debido a que estoy trabajando en un proyecto comercial no puedo usar el Google Maps API. Por lo tanto, no sugiera ningún otro servicio con licencia.

Gracias de antemano,

ACTUALIZACIÓN una de las respuestas de this question sugiere el uso de MySQL o Postgress ... ¿Funcionará para mí ..?

+3

Dijiste que no querías trabajar con valores Lat/Lon, pero sería mucho más fácil si buscas en Google esos valores de antemano, los codificas en el código o algo así, y luego haces los cálculos con eso. (Es simple matemática para obtener distancia de Lat/Lon) – LouwHopley

+4

Estimado artista, usted tiene la ilusión de que es posible que los códigos postales sean locales para países y estados y no sean demarcaciones geológicas. Solo puede implementar esto localmente incluso si su oficina local del gobierno \ consejo \ tiene alguna de esas informaciones. Además de disculparme por decir que ningún artista puede pintar esta imagen. – Shahzeb

+0

@Nideo es absolutamente correcto. Y no es obligatorio que tenga el código postal disponible para cada ciudad, ciudad, etc. Puede ser que no haya obtenido la ubicación exacta por el código postal – Pratik

Respuesta

4

he seguido un proceso de dos pasos. ..

  1. En primer lugar, tomé el código postal del usuario como entrada, que encontré los valores de latitud y longitud mediante el uso de uno de los availa API ble,
  2. Una vez que llegué a la latitud, longitud par, yo era capaz de utilizar fácilmente la función sugerida por @Bohemian ...

Sin embargo después de veces me encontré con que las API de Google y Yahoo son los mejores posibles camino para este mi humilde opinión, así que integé eso en mi proyecto. Si alguien está interesado, puedo pegar el código aquí.

4

Hay una US Zip-codes Database que usted puede comprar que le proporciona la longitud y latitud para cada código postal. Creo que también te dan acceso a su API para que puedas hacer todo tipo de cosas como calculate the distance between 2 zipcodes, in this case Worcester and St. Louis. Sin embargo, puede ser capaz de salirse por raspado de datos de su página cuando simplemente reciben la aplicación Java para llamar a una URL de este modo:

http://www.zip-codes.com/distance_calculator.asp?zip1=63130&zip2=01610

El recorrer el DOM para la línea directa o distancia de manejo. Siempre que su sitio web no se convierta en un gran volumen, debería estar listo. Si su sitio tiene un gran volumen, entonces convenza a la administración de gastar los $ 40 por los datos. Dado que el sitio web utiliza Google para calcular la distancia, usted también puede obtener distancia recorrida.

Para su world requisito. El mundo entero lamentablemente no usa códigos postales, algunos de nosotros usamos lo que se llama Códigos Postales y no me sorprendería si hay un tercer nombre de allí o incluso un cuarto para el mismo. Probablemente sea posible usar la misma solución para todos, es decir, obtener logitud y latitud y que los mapas de Google le indiquen la distancia a pie. Todo lo que necesita es una base de datos que asigne el código postal/zip a la longitud y a las latitudes y que los mapas de Google tracen la distancia recorrida.

Si aprovecha los mapas de Google, es posible que incluso pueda salirse con la suya solo con el nombre del país y el código postal.Walking distance between UK postal code and france postal code usando solo el código postal y el nombre del país con Google Maps.

+1

@Ali ... gracias, pero ya he mencionado que no quiero respuestas específicas de EE. UU./N UK .... – aProgrammer

+0

actualizó la respuesta. Lo siento, presiono enviar por error antes. – Ali

5

Simplemente copia y pega de mi comentario;)


Estimado artista que está bajo la ilusión de que es posible códigos postales son locales de los países y estados y no son demarcaciones geológicas . Solo puede implementar esto localmente si su government \ council \ postoffice local tiene dicha información. Con excepción de siento decir que ningún artista puede pintar esta imagen. -

+0

Esto fue una mala idea hacerlo yo mismo .. La mejor manera es usar API de terceros como mencioné en esta pregunta http://stackoverflow.com/a/8136333/720176 – aProgrammer

15

Si está interesado, aquí está mi aplicación java de la haversine formula

/** 
* Calculates the distance in km between two lat/long points 
* using the haversine formula 
*/ 
public static double haversine(
     double lat1, double lng1, double lat2, double lng2) { 
    int r = 6371; // average radius of the earth in km 
    double dLat = Math.toRadians(lat2 - lat1); 
    double dLon = Math.toRadians(lng2 - lng1); 
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) 
     * Math.sin(dLon/2) * Math.sin(dLon/2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
    double d = r * c; 
    return d; 
} 

Por la presente donar este de la arena pública bajo GPL :)

+0

gracias @Bohemian .... – aProgrammer

+0

+1 de mí también debido a la importancia de este código, pero no lo que OP quiere mate :) –

Cuestiones relacionadas