Tengo una base de datos que tiene 300,000 direcciones, que se mostrarán en el mapa. Sé que si geocodifico toda la dirección, será demasiado costosa para mí. Así que me preguntaba si es posible geocodificar la dirección sobre la marcha / en tiempo real, cuando un usuario selecciona una dirección (una dirección de propiedad) buscará a través de la base de datos y luego geocodifica la dirección y luego la asigna con Otros atributos.
Sería realmente bueno si pudieras compartir un código, concepto o cualquier cosa. Por cierto, mi backend está en mysql compatible con Joomla.
google-maps
geocoding
php
mysql
google-maps-api
usuario1089553
fuente
fuente
Respuestas:
Mehul, solía trabajar en la industria de verificación de direcciones con una compañía llamada SmartyStreets. Existen muchos servicios de geocodificación, pero solo unos pocos admitirán el procesamiento por lotes con el volumen que necesita. (Google y otros no permiten el uso masivo de su API o el almacenamiento / almacenamiento en caché de resultados).
Si va a su base de datos MySQL y realiza una exportación de su tabla que contiene las direcciones, guárdela como un archivo CSV, por ejemplo. Luego puede procesarlo utilizando la herramienta web SmartyList o la herramienta de línea de comandos . Como dije, hay varios servicios disponibles, pero supongo que también querrá algo que verifique la existencia de direcciones (de ahí la razón de la geocodificación): si la dirección es incorrecta o está incompleta, también lo son los resultados de la geocodificación . Solo unos pocos servicios hacen esto.
LiveAddress es un servicio certificado por CASS por USPS. Hay algunos por ahí, así que investigue, pero quiere algo "sobre la marcha" / rápido y económico, así que nuevamente recomiendo LiveAddress. No solo verificará la dirección, sino que hará lo que necesite, que es proporcionar información de lat / lon y también la precisión de los resultados de geocodificación. Todo está basado en la web y procesará decenas de millones de registros en muy poco tiempo (vea esta pregunta como referencia ).
Si aún necesita geocodificar direcciones a medida que los usuarios interactúan, LiveAddress también tiene una versión API que se puede conectar a casi cualquier cosa y también admite el procesamiento por lotes sobre la marcha, pero se paga como una suscripción, no una sola vez. pago.
fuente
Si le gusta Python, puede usar la API GeoPy , combinada con los enlaces de Python GDAL o Fiona , y crear un script muy básico como este para convertir las direcciones en un archivo de forma de puntos.
Esto geolocalizará un archivo llamado 'Address_to_geocode', creando un archivo de forma de salida llamado 'my_output.shp' en la carpeta my_output:
Se supone que el archivo tiene solo una línea para una sola dirección, como por ejemplo:
Aquí estoy usando la API de Google, pero con GeoPy es muy básico para cambiar a diferentes API, como Yahoo !, GeoNames o MapPoint .
fuente
Otra opción para resolver su problema sería importar su conjunto de datos a tablas de fusión y establecer el campo de dirección como ubicación. Luego geocodificará los puntos automáticamente. Una vez que se haya completado, puede exportar los datos como KML.
O, alternativamente, puede escribir un script php para utilizar el geocodificador de yahoo que tiene un límite de 50 000 registros, por lo que tarde o temprano tendrá todos sus puntos geocodificados en su base de datos.
¡Espero que esto haya ayudado!
fuente
con mucho, el mejor y más fácil geocodificador que he usado https://pypi.python.org/pypi/geocoder/1.8.0 bing maps, google maps, OSM, etc.
fuente
Tal vez no sea la mejor respuesta a su pregunta, pero puede probar BatchGeo. La versión gratuita te haría sufrir mucho, pero aún así fue lo suficientemente bueno para mi trabajo. Sin embargo, hemos comprado la versión pro.
El truco para obtener coordenadas del archivo KML es importarlo a ArcGIS más adelante.
fuente
He estado usando con éxito geopy que usa el servicio web de geocodificación de Google. Funciona perfectamente por hasta 2k puntos por 24 horas.
fuente
Matej, eso es porque la API de Google permite obtener hasta 2.5k por día.
Acerca de la solución Geo, todavía no se admite que el lote sea compatible, porque, según mi revisión del código geo python, parece abrir la conexión cada vez que solicita un nuevo cordinado, 300k probablemente se quedará para siempre (probablemente con el error 400).
Jugar con Poligons debería ser el truco, pero depende de cuál sea su área de 'Play ground', si es 1 país o n países.
Para 1 país, los polígonos deberían funcionar bastante bien.
Para n países, la solución no funcionará, ya que la recopilación llevará más tiempo cada vez que agregue otro país. La mejor manera de hacerlo es la carga perezosa.
=> Comience con la idea del polígono, cada cosa en otro país, cree una gran tabla de base de datos para guardar los datos, eventualmente tendrá los datos que necesita, supongo.
fuente
Si quieres hacerlo con PHP, MySQL aquí es una solución que funcionó para mí:
fuente
Prueba esta api de geocodificación . Es gratis para uso pequeño pero si quieres más te hacen pagar. Sin embargo, es barato y podría procesarlo con mucha facilidad, yo proceso millones al mes a través de ellos.
fuente
Puede guardar sus datos como un archivo de texto (un registro por línea) y luego geocodificarlos por lotes utilizando este servicio: http://geocode.xyz/batch (funciona para la mayoría de los países europeos)
o puede escribir su propio código para acceder a la API REST / JSON: http://geocode.xyz/api (es gratis para búsquedas ilimitadas)
fuente
Utilice las herramientas de Mappointing (Map puninting | Batch Geocoding Tool ( http://www.mappointing.com/ )) En esta herramienta puede procesar los datos utilizando la clave API gratuita del mapa de Google. Y también esta herramienta proporciona herramienta de cálculo de distancia y búsqueda de lugar.
fuente