La geocodificación o geocoding en inglés es el proceso de convertir direcciones postales, nombres geográficos o puntos de interés en coordenadas geográficas o lo que es lo mismo, en un punto real de la superficie de la Tierra.
Este tipo de trabajos es ampliamente demandado por empresas que requieren conocer la localización de sus activos. Es una parte fundamental en el ámbito del geomarketing y se consume, junto a servicios de cálculo de rutas (routing), en labores análisis de redes de distribución, logística o control de flotas.
¿Qué tipos de geocodificación o geocoding existen?
Aunque la consulta más habitual es la de obtener las coordenadas a partir de una dirección postal, lo que se conoce como geocodificación directa, existen otros tipos de servicios basados en la localización que son interesantes de conocer.
- Geocodificación inversa. En este caso se obtendrá la dirección postal, lugar o área geográfica a partir de coordenadas.
- Geo Búsqueda. Se suele incluir la presentación de resultados coincidentes a partir de una cadena de texto.
- Geolocalización del navegador o por IP. Permite segmentar los resultados ofrecidos en páginas web o identificar el idioma o el país asignado a nuestra IP.

Los proyectos que necesitan consumir servicios de geolocalización requieren un conjunto de trabajos que pasan por:
- La elección de los servicios que mejor se ajusten a las necesidades del encargado (marco geográfico, tipo de precisión, coste…)
- El tratamiento previo de los datos de origen (estructuración de los textos de búsqueda, sustitución de abreviaturas…)
- El desarrollo de rutinas con programación.
- La elección de formatos de salida (tablas, mapas SIG, visores web…)
- La presentación de informes de resultados (coincidencias, calidad de los datos…)
Desde el Área de Consultoría SIG y Desarrollo de Geoinnova podemos ayudar a empresas y particulares a llevar a cabo trabajos que requieran este tipo de servicios .
Principales servicios web de geocoding
En el siguiente apartado realizaremos una recopilación de servicios webs de geocodificación o geocoding a escala mundial. Hay que conocer también que existen servicios para zonas o países concretas como Yandex en Rusia, Geolytica para Estados Unidas o Baidu en China.

La mayoría de estos servicios son de pago, aunque muchos permiten usar cuentas gratuitas, conocidas como freemium, que tiene limitaciones con relación al número de peticiones por día o mes, tiempo (petición por segundo), restricciones de IP y CORS o soporte.
Como recurso abierto está Nominatim basado en los datos de OpenStreetMap. Servicios como OpenCage usan también las fuentes de OpenStreetMap pero las mejoran con otros recursos.
Otra consideración es la existencia de desarrollos de empresas geoespaciales que se basan en servicios de codificación. Es el caso por ejemplo de Carto o ArcGIS World Geocoding Service que usan entre sus recursos la localización ofrecidos por Here.
Google Geocoding API
Sin duda los servicios de Google Maps, entre los que se incluye el geocoding, son de los más demandados a escala mundial. La potente infraestructura de Google permite un servicio de localización con gran precisión.
Enlace: https://developers.google.com/maps/documentation/geocoding/overview
El uso del servicio pasa por el alta en Google Cloud Console para crear una cuenta de facturación. Para comenzar Google, nos ofrece un crédito mensual recurrente de 200 USD para usarlos en Maps Platform.

HERE Geocoder REST API
Según se indica en su página web, Here cuenta con más de 270 millones de localizaciones en 70 países.
Enlace: https://developer.here.com/documentation/geocoding-search-api/dev_guide/index.html
Hay que destacar que los resultados obtenidos con la API REST de Here devuelven, junto a los datos relativos a la localización, información sobre el nivel de precisión de los resultados. En ciertos procesos es fundamental conocer el tipo de resultado y si la localización final se ha realizado a nivel de número postal, calle, ciudad o país.

Nominatim
Nominatim es una herramienta de búsqueda por nombre y dirección sobre los datos del proyecto colaborativo OpenStreetMap. Su fuerte es el carácter abierto y por tanto gratuito de todos los servicios ofrecidos.
Enlace: https://nominatim.org/release-docs/develop/api/Overview/
Además de obtener las coordenadas, los resultados presentan toda la información almacenada en la base de datos de OpenStreetMap como códigos postales, tipo de calle según el modelo OSM (primaria, segundaria…) y relación con otras entidades geográficas y límites administrativos (barrio, ciudad, municipio o país).

GeoNames
GeoNames se diferencia de los servicios descritos porque se centra en la localización de información basada en nombres geográficos. Los nombres están basados en categorías y subcategorías. Como novedad se incluye datos de población.
Enlace: http://www.geonames.org/export/web-services.html
La base de datos GeoNames contiene alrededor de 9,6 millones de entradas de Wikipedia geolocalizadas en 279 idiomas.

Mapbox Geocoding API
Los diferentes endpoints de la API cubre las necesidades de geocodificación y se pueden integrar en los servicios de mapas teselados de Mapbox ampliamente usados en aplicaciones web de mapas.
Enlace: https://docs.mapbox.com/api/search/geocoding/
El servicio cuenta con desarrollos de integración (wrappers) que ayudan al uso de los servicios de Mapbox con lenguajes como Python, Java o Ruby.
ArcGIS World Geocoding Service
Este servicio de ESRI permite buscar direcciones o lugares del mundo, geocodificar una tabla de direcciones o realizar la geocodificación inversa de una ubicación sin que sea necesario adquirir el dataset de referencia para crear los localizadores.
Enlace: https://developers.arcgis.com/rest/geocode/api-reference/overview-world-geocoding-service.htm
Existe servicios gratuitos y otros de pago en los que se requiere tener una cuenta en ArcGIS online.
En la web de la API REST de ArcGIS podemos encontrar una página interesante donde se comenta se presenta una clasificación por países según el nivel de cobertura, de mayor a menor, de la geocodificación que contiene también los códigos de países e idiomas soportados, así como la fuente de datos, principalmente Here y GeoNames.

Bing Maps Locations API
Bing Maps cuenta con un conjunto de servicios REST entre los que se encuentra la localización de por dirección o por puntos. Se requiere tener una API Key para usarlos.
Enlace: https://docs.microsoft.com/en-us/bingmaps/rest-services/locations/
La geocodificación se completa con acceso a servicios de cálculo de rutas, elevación o tráfico.

OpenCage
Servicio geocoder basado en información de Nominatim enriquecida y mejorada otros recursos. En su página web hay gran cantidad de recursos y ejemplos de integración, así como una Live Demo para realizar pruebas.
Enlace: https://opencagedata.com/

Carto
Los servicios de codificación geográfica de Carto usan la localizacón ofrecida por TomTom, Mapbox y HERE. Los usuarios pueden convertir grandes volúmenes de datos de direcciones en valores de latitud y longitud, utilizando Builder, Python o las APIs de Carto.
Enlace: https://carto.com/geocoding/
Su cuenta freemium permite realizar un número limitado de peticiones.
¿Cómo se usan los servicios de geolocalización?
Es muy común encontrar la implementación de estos recursos dentro de una aplicación web. Se suele usar un formulario para añadir la dirección o las coordenadas y posteriormente ver la localización en un mapa y acceder a los datos asociados. Un ejemplo por todos conocidos es Google Maps.
Pero es posible también realizar nuestra propia aplicación web con geocodificación usando librerías como OpenLayers, Leaflet y apoyándonos en framework JavaScript.

Sin ningún apoyo gráfico, la manera más «hard» de obtener una dirección o coordenadas es usando la terminal de comandos mediante los comandos curl, http o WGET.
En el siguiente ejemplo, lanzamos desde consola una petición GET a Nominatim almacenando los resultados en un archivo JSON.
$ WGET 'https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=-34.44076&lon=-58.70521' -O results.json
Todo esto puede ser más amigable si nos apoyamos clientes REST como PostMan, Hoppscotch o Insommia que aportan una interfaz para la construcción de peticiones o la presentación de las respuestas.

Pero la forma más común de obtener direcciones usando estos servicios es escribir rutinas de código en algún lenguaje de programación como Python, R, Java o Ruby usando librerías que manejen peticiones y respuestas HTTP.
El flujo más común dentro de script de geocodificación es la la lectura de documento tipo hoja de cálculo o CSV, la consulta de la información usando un servicio de codificación y generación de una salida (ej. hoja de cálculo) con los resultados.
Sencillo ejemplo en Python usando el servicio Nominatim de geocodificación inversa.

Hola, un muy interesante artículo, sólo cabe destacar que para España, el mejor geocodificador existente es el que ofrece la Dirección General de Catastro, es muy engorrosa de implementar, pero sin duda es la más precisa.
Hola Hugo. Gracias por el comentario.
Como bien dices, creo que sería interesante hacer una recopilación de geocoders pero esta vez públicos. Comentas Catastro, al que yo sumaría el servicio de CartoCiudad. En este también encontramos dificultades en al implementación, pero merece la pena tenerlos muy en cuenta que que son «oficiales»