Calcular la distancia aproximada entre un código postal y una dirección

Preguntado hace 1 año

Antonio R.
Votos
PositivosNegativosTotal
1 0 1
73 Visualizaciones
Compártelo: Compártelo en twitterCompártelo en Facebook

Me piden que en un listado de registros dado un código postal calcule la distancia aproximada a las direcciones de cada registro. La verdad es que no se por donde agarrarlo, ¿alguna sugerencia? Gracias por adelantado.

Actualizando datos

3 Respuestas

Hace 1 año

Gabriel Molina
Votos
PositivosNegativosTotal
101

Hola,

para obtener la latitud y la longitud puedes usar el api de google maps http://code.google.com/intl/es-ES/apis/maps/documentation/geocoding/ Ojo las limitaciones legales si quieres usar la versión gratuita

"El uso de Google Geocoding API está sujeto a un límite de consultas de 2.500 solicitudes de codificación geográfica al día. (Los usuarios de Google Maps API Premier pueden realizar un máximo de hasta 100.000 solicitudes al día)" Además de tener que mostrar un mapa google maps.

También tienes la opción microsoft con bing maps la puedes ver aquí http://msdn.microsoft.com/en-us/library/ee692181.aspx que igual es más nativo. Las limitaciones gratuitas son

"Use is on public-facing, non-password protected Web sites Limit of 125,000 sessions or 500,000 transactions in a 12 month period"

En ambos casos yo no contaría con el método es inmediato, es decir trata de no calcular la misma dirección o código postal cada vez. Almacena los resultados.

¿Puede ser tratar de usar un job que vaya completando las longitudes/latitudes sin que el proceso principal quede nunca a la espera de respuesta? Tendrías que controlar en las presentaciones que la posición (latitud/longitud) puede ser nula, cosa que igualmente deberías hacer en previsión de que el proceso de consulta pueda fallar.

No he usado ninguna. Por un lado tienes una tecnología más reconocible (google maps) y por otro una api más nativa con .net. Tendrás que valorarlo.

Saludos!

Cerrar

Hace 1 año

Juan Quijano
Votos
PositivosNegativosTotal
202

La verdad lo tienes muy dificil porque el concepto, al menos en Madrid, es erroneo.

Los códigos postales no indican una posición geográfica, si no un area metropolitana de forma muy irregular.

Por lo cual, por ejemplo, una misma calle puede tener varios códigos postales. O sus números pares uno y sus impares otro.

Para más complicación, según te alejas de las grandes urbes, los códigos postales aumentan el area que contienen, por lo cual es aún mayor el posible error de distancia hasta el punto elegido.

A lo cual, creo que el planteamiento debería iniciarse con una historia de usuario que indique ¿para qué quieren ese calculo?. Porque huele mucho a que están abordando de forma erronea un problema funcional que requiere una solución técnica diferente.

Cerrar

Hola, Juan, es para un ordenamiento de registros en el que se admite como aproximación, no es para un cálculo riguroso. Es para una búsqueda en la que no van a solicitar la dirección exacta y real. Partimos de que no necesitan tanto rigor. Muchas gracias por tu opinión. Antonio R. hace 1 año

Hace 1 año

Ignacio
Editada hace 1 año
Votos
PositivosNegativosTotal
101

Lo primero es conseguir una buena base de datos con ciudades, codigos postales y coordenadas de estos... (si encuentras una comentamelo que nunca se sabe cuando se puede necesitar)

Lo siguiente es hacer el cálculo matemático, teniendo en cuenta que se calcula distancia entre el punto a(x1,y1) y el punto b(x2,y2) debería resultarte facil de ver

function distancia_puntos(x1, y1, x2, y2) {
    (x1 == x2) {
       distancia = Abs(y2-y1);
   }   (y1==y2) {
       distancia = abs(x2 - x1);
   }  {
       //raiz cuadrada de: (x2-x1)^2  (y2-y1)^2
       distancia = sqr(((x2-x1)<em>(x2-x1)  ((y2-y1)</em> (y2-y1)));
   }

   return distancia;
}

No lo he probado por lo dicho, no tengo la base de datos. Pero si consigues una avisa ;)

Otra cosa que encontré interesante es usar googlemaps para sacar las coordenadas de un código postal. Y luego almacenarlas en nuestra DB, así cada vez que un usuario hace una consulta si no existe en la db lo buscamos en googlemaps y si existe lo sacamos de la DB ahorrando tiempo.

Cerrar

Tu respuesta

Confirmación

Cerrar

Si sales ahora, perderás los cambios. ¿Estás seguro de querer salir?

Para participar en Babelias, debes estar convenientemente validado. Si ya eres usuario inicia sesión, si no lo eres, te puedes registrar.

Dar una respuesta

Trata de ser descriptivo, usa al menos 25 caracteres