Pregunta

Decir que tengo una API de servicio web que acepta un código postal como un parámetro, pero sólo tienen acceso a un GPS de coordenadas (latitud, longitud). ¿Cómo puedo dinámicamente las operaciones de búsqueda del código postal de la coordenada que pertenece a?

que estoy haciendo este trabajo en el iPhone, así que espero que no hay una forma sencilla de hacer esto dentro de las API CoreLocation que estoy pasando por alto en la documentación.

¿Fue útil?

Solución

Me gustaría probar la salida a la documentación para el geocodificador inversa en el SDK 3.0 si fuera tú. No puedo decir lo que hay, pero es posible que, por ejemplo, encontrar que la codificación geográfica inversa devuelve una marca de posición, y luego, si miras hacia arriba que la marca de posición en el SDK, es posible encontrar que tiene una propiedad de código postal. ¿Quién sabe?

Otros consejos

Esta página ofrece una base de datos (en formato CSV) de todos los códigos postales en los EE.UU., con su latitud y longitud. http://zips.sourceforge.net/

El archivo es 500k desempaquetado. He aquí las primeras líneas de datos:

"35004", "AL", " 33.606379", " -86.50249", "Moody", "Alabama"
"35005", "AL", " 33.592585", " -86.95969", "Adamsville", "Alabama"
"35006", "AL", " 33.451714", " -87.23957", "Adger", "Alabama"

Volcado de estos datos en una base de datos local. Use la fórmula Haversine a comparar sus coordenadas y los de la base de datos para encontrar el punto más cercano. CoreLocation tiene una getDistanceFrom función que se puede utilizar también.

- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location

Esta página tiene una función en C Haversine e información acerca de la base de datos cremalleras.

http://www.jaimerios.com/?p=39

Editar Aquí está una gran explicación de Google sobre el cálculo de distancias. Utiliza MySQL y PHP, pero el SQL para encontrar puntos más próximos también es útil en este caso. Probablemente sería más rápido para consultar el uso de SQL, en lugar de la función getDistanceFrom.

http://code.google.com/support/ bin / answer.py? answer = 87134 & topic = 11364

Encuentra las 20 ubicaciones más cercanas que se encuentran dentro de un radio de 25 millas al 37, -122 coordenadas:

SELECT id, ( 3959 * acos( cos( radians(37) ) 
 * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) 
 + sin( radians(37) ) * sin( radians( lat ) ) ) ) 
 AS distance FROM markers HAVING distance < 25 
 ORDER BY distance LIMIT 0 , 20; 

Para buscar por kilómetros en lugar de millas, reemplace 3959 con 6371.

Este tipo de búsqueda se llama "Reverse Geolocalización."

Lo primero que hay que hacer es convertir los datos LAT / LNG de objeto CLOCATION a grados ...

en la función locationManager (que se llama una vez que reciba una actualización de posición) ....

Código:

[lat stringWithFormat:@"%+.6f", myLocation.coordinate.latitude];
[lng stringWithFormat:@"%+.6f", myLocation.coordinate.longitude];

A partir de ahí se envía las cuerdas lat y lng a un servicio web de back-end como "GeoNames.org" o API de Google Maps ... y se puede obtener la dirección de la ciudad o calle más cercana.

Hay una base de datos producida por el censo de los EEUU - la base de datos del tigre. Creo que hay una posibilidad para buscar código postal determinada latitud / longitud.

apuesto si ha buscado tigre código postal usted podría encontrar algo. ver aquí por ejemplo. Parece que hay un módulo de Perl en CPAN que hace esto, por lo que no debería ser imposible.

Google ofrece un servicio de geocodificación inversa libre. Se puede utilizar directamente, o probar el SDK Temboo que ofrece un cómodo acceso en varios idiomas, incluyendo el objetivo C (con ejemplos de código).

https://www.temboo.com/library/Library / Google / geocodificación / GeocodeByCoordinates /

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top