2010-08-25 44 views
17

Deseo obtener el código postal de la ubicación actual de los usuarios (Latitud, Longitud), utilicé los métodos de delegado de MKReverse Geocoder, pero a veces no puedo obtener información de código postal basada en la latitud & de longitud (valores válidos). ¿Hay alguna otra alternativa para MKReverseGeocoder? La base de datos ZipCode es específica de los países, por eso no quiero usarlos. ¿Alguna otra idea o pista?Obtener código postal de latitud y longitud?

Gracias

+2

bases de datos son específicos código postal, país, sí; pero los códigos postales también son específicos del país (por ejemplo, EE. UU. no tiene el mismo formato de código postal que los Países Bajos o el Reino Unido). Tendrá que lidiar con esto de una forma u otra, si quiere usar los códigos postales. – Piskvor

Respuesta

34

Considere el GeoNames web service. Es un conjunto completo de codificación geográfica/geocodificación inversa bajo una licencia de atribución de Creative Commons. Puede descargar sus datos o acceder a su servicio web. Lo mejor es que no requieren ninguna clave de API ni tonterías de licencias: solo tienes que acceder a su aplicación web y obtener datos.

Aquí hay un ejemplo: http://ws.geonames.org/findNearbyPostalCodesJSON?formatted=true&lat=36&lng=-79.08 Eso le devolverá un objeto JSON para los códigos postales alrededor del área de Chapel Hill, Carolina del Norte.

También es internacional. Aquí está Seaford, Inglaterra, y la única diferencia es el par lat/lng que estoy enviando: http://ws.geonames.org/findNearbyPostalCodesJSON?formatted=true&lat=50.5&lng=0.08

Luego debes aprender a hacer solicitudes web y analizar JSON (si aún no tienes un control sobre esas cosas), y ya está todo listo.

+0

gracias, esto es lo que estoy buscando. Gracias. – Matrix

+0

Para uso comercial, es un poco caro (con el tiempo). No es gratis para eso, aquí está su guía: http://www.geonames.org/commercial-webservices.html. Siento por enseñarle esas noticias a usted ... –

+4

Usar GeoNames para esto puede provocar errores importantes. Devuelven el código postal para el registro en su base de datos que está más cerca de su punto de consulta. Esto es incorrecto si el registro más cercano en su base de datos está en un código postal diferente, lo que ocurrirá cada vez que se encuentre cerca de un límite entre dos códigos postales. Vea mi respuesta en esta página para conocer el método correcto para obtener esta información. –

1
+1

lo he pasado, pero no encontré ningún código postal relacionado – Matrix

+1

El servicio de geocodificación inversa de Google solo se puede usar junto con un mapa de Google incrustado. –

2

Si usted tiene una base de datos gratuita (disponible en ese sitio? Sólo la búsqueda de la base de datos de código postal y verá que)

continuación, puede ejecutar una prueba de consultas SQL interno para las inmediaciones de lat/anhela. De esta forma, no tendrá que preocuparse por la licencia de un servicio web.

Tiene tres opciones a continuación. Sentencia SQL BETWEEN, la ecuación de hipotenusa o Haversine. Haversine es el mejor, por suerte es tutorial en otro lugar

+1

¿Por qué votar abajo? En serio, ¿quieres que haga las matemáticas? Utilizo esa técnica en el trabajo, lo hago sin usar un codificador en línea. Esto nos solucionó el problema, funciona, y aún así me votaste porque eres demasiado perezoso para probar cuatro desigualdades sin que alguien te escriba el código. Aquí: si x lat-range, igual para long. Responde su q –

+0

¿Cómo maneja esto que las bases de datos usualmente son el latón central del código postal? Necesitaría una base de datos de todas las regiones de todos los códigos postales (por ejemplo, en GeoJSON) y necesitaría una base de datos que comprenda las consultas de punto a región de GeoJSON (de las cuales hay pocas). Haversine y SQL BETWEEN parecen darte una respuesta muy aproximada, a menos que me falta algo. –

+0

No creo que te estés perdiendo nada. Literalmente hicimos los cálculos y redujimos el código postal usando trig para determinar qué lats y longs estaban cerca. Cuesta el poder de procesamiento, pero fue bueno para nosotros. –

6

Esto es realmente una pregunta difícil. Usar una solución de geocodificación como GeoNames es probable que genere errores importantes en muchas consultas. La razón de esto es que GeoNames busca el registro en su base de datos que está más cerca de su punto de consulta y luego devuelve el código postal que tienen registrado para ese punto. Esto funciona muy bien cuando su punto de consulta está justo encima de un registro en su base de datos, pero puede dar lugar a errores de lo contrario. Por ejemplo, si su registro más cercano está a unas pocas cuadras de distancia en un código postal diferente, obtendrá la respuesta incorrecta.

mapas La oficina de censo de Estados Unidos ha creado de los códigos postales:

https://www.census.gov/geo/reference/zctas.html

favor ver sus notas en esa página.

También he trabajado en un proyecto que utiliza los mapas del Censo para proporcionar una API que devuelve el código postal para una latitud y longitud determinada. Es en:

http://askgeo.com

le proponemos una API web y una biblioteca de Java que se puede ejecutar en su propio servidor. La biblioteca tiene un excelente rendimiento. Dado que nuestro sitio ofrece información adicional que sólo el código postal, se puede leer acerca de nuestro servicio de código postal aquí:

http://askgeo.com/database/UsZcta2010

Y usted leer acerca de la documentación de la API de Web aquí:

http://askgeo.com/#web-api

La metodología de GeoNames es fundamentalmente defectuosa para este tipo de consulta. Si está buscando el polígono que contiene un punto de consulta determinado, necesita un mapa con los polígonos, y necesita un índice espacial para proporcionar búsquedas rápidas. GeoNames no tiene ninguno. AskGeo tiene ambos.

+0

Geonames parece genial, si quiero ir desde ZipCode -> Lat/Long. – Walker

+1

La URL del censo ha cambiado. Esto parece correcto: https://www.census.gov/geo/reference/zctas.html –

+1

Me temo que esto está restringido a los Estados Unidos solamente. Supongo que hay muchos otros países en este mundo. –

Cuestiones relacionadas