OpenStreetMap-OpenLayers-OpenRouteService la ‘alternativa’ a Google Maps

Realmente no te das cuenta de la dependencia que tienes de los servicios de Google. Piensas que puedes disponer de ellos porque además de ser potentes son gratis… hasta que dejan de serlo.

[Mapa OpenLayers]Me ha ocurrido en el pasado, en un proyecto personal (747mx.com) que utilizaba el traductor de Google. Era gratis hasta un número de peticiones, suficientes para la pretensiones de esa página y pasó a ser de pago desde la primera petición. Algo que no me podía permitir en ese portal.

Así que cuando en una entrevista a Javier De La Torre uno de los fundadores de Vizzuality señalaba a OpenStreetMap como alternativa seria a Google Maps me dije ‘… esto me lo tengo que mirar‘ .

Para saber como funciona de verdad, lo que me propuse fue migrar un código que tenía con el API de Google Maps en 747mx.com. Basarme en él y hacer lo mismo en OpenStreetMap utilizando lal librería OpenLayers y el servicio de geolocalización de OpenRouteService.org.

Qué es cada cosa….

OpenStreetMap es un mapa libre cuya información geográfica se obtiene a partir de la contribución de usuarios, que suben sus trazas GPS y añadir o corregir la información. OpenLayers es una potente librería que te permite interactuar mapas (no necesariamente de OpenStreetMap) y OpenRouteService.org es un servicio con la misma filosofía que OpenStreetMap que permite la creación de rutas y la geolocalización de direcciones para saber sus coordenadas.

… el ejemplo …

Lo que hacía el código original basado en el API de GoogleMaps es mostrar una serie de localizaciones de diferentes municipios de una misma comunidad autónoma. Se hace una geolocalización para saber las coordenadas y mostrar la marca en el mapa y se ajusta el centro y el zoom del mapa para que se mostrasen todas las marcas. Puedes verlo aquí.

El ejemplo que he hecho para este post en OpenStreetMap-OpenLayer, cambia un poco para hacerlo más didáctico. Para mostrar la geolocalización, se pueden ir añadiendo direcciones (‘Collado Villalba, Madrid’, ‘Calle del Barquillo, Madrid’, etc…) y se dibujará una marca en el mapa, mostrando sus coordenadas. El mapa se centra y se ajustará el zoom automáticamente para que aparezcan todos los puntos marcados. También se puede añadir marcas al hacer ‘doble clic’ en cualquier punto del mapa. Ambos tipos de marcas se pueden borrar.

Me ha parecido interesante añadir esta funcionalidad de iteracción del usuario con el mapa. Con esto es relativamente sencillo mejorar la experiencia de usuario, se me ocurre, por ejemplo, al realizar un mantenimiento de localizaciones de una aplicación/web y hacerlo a través de un mapa en vez de un formulario convencional.

El código fuente está en GitHub

    https://github.com/logicaalternativa/ejemploOpenLayer

y el ejemplo es este

Busca una ciudad o dirección y se mostrará una marca con su longitud y latitud. Ejemplo: ‘Calle del Barquillo, Madrid’. También, para añadir una marca, puedes hacer doble click en cualquier punto del mapa. Si añades varias direcciones se ajustará el zoom del mapa y se centrará para que se visualicen todas las marcas. Puedes ver el ejemplo también en está página

Para poder hacer las peticiones de geolocalización a OpenRouteService.org desde JavaScript he tenido que codificar un proxy cross domain. He hecho dos implementaciones una en PHP utilizando la librería Snoopy (puedes ver el codigo aquí) y otra en Java utilizando un simple servlet HttpServlet (puedes ver el código aquí). Puede servir de base para que luego cada uno lo ‘cocine y sazone’ al gusto y realice su propia implementación en Spring o Struts. Está organizado en un proyecto Maven preparado para bajar y compilar.

Los detalles

Para más detalles técnicos de como funciona y lo que hace el código, leer el README.md del repositorio. Para que sea más fácil su compresión no he sido tacaño al comentar el código.

Conclusión.

A pesar de haber explorado un porcentaje muy pequeño de sus posibilidades, me ha gustado trabajar con la librería OpenLayers. Es muy potente, permite añadir marcas, crear rutas, editar mapas, trabajar con diferentes capas y proyecciones, etc…

En combinación con los dos servicios de OpenStreetMap y OpenRouteService.org te permite ofrecer la misma funcionalidad que te da Google Maps sin tener que convertirte en un cliente cautivo.

No sé si será una opinión un poco sesgada, ya que a mi todo lo Open ‘me va’. Juzgad por vosotros mismos.

Espero que os sirva.

M.E.

 

3 pensamientos en “OpenStreetMap-OpenLayers-OpenRouteService la ‘alternativa’ a Google Maps

  1. Marlon Villamizar

    Hola, he leído esto y es formidable. Actualmente ya he adelantado bastante sobre OpenLayers y me decidí a meterme con geolocalización y enrutamiento y por ello he llegado a este artículo. Esta buenísimo lo tomaré con calma para digerirlo con gusto.

  2. francisco

    En primer lugar indicarte que has hecho un gran trabajo. Estoy estudiando tu aplicación y me parece muy interesante. Me la baje y estoy trabajando con netbeans. No obstante, cuando la ejecuto e intento localizar una dirección me displaya el error “error indeterminado al añadir marca”. Entiendo que realiza correctamente la geolocalización, pero no recibe un dato legible.
    Queria consultarte:
    1.cual es el motivo del error.
    2. Existe posibilidad de utilizar otro tipo de geolocalización sin pasar por OpenRouteservice.org?

    Muchas gracias de antemano.
    Un cordial saludo.

    1. Miguel R. Esteban Martín Autor

      Hola.

      Ese error aparece cuando se realiza bien la conexión con el servicio pero en la respuesta no contiene ninguna dirección.

      Acabo de modificar el código para controlar mejor este caso y aparezca el mensaje adecuado. De paso he también mejorado la petición al servicio.

      Puedes ver los cambios que he realizado en el repositorio de GitHub. Te recomiendo que bajes el código de nuevo y vuelvas a hacer las pruebas. Si te vuelve a aparecer el mismo mensaje de error abre la consola javaScript del navegador, porque también he añadido una salida a consola con más información.

      También he modificado la demo de esta misma entrada para que se pueda observar los nuevos cambios.

      Con respecto a tu segunda pregunta el ejemplo esta adaptado a Openrouteservice.org. Creo que existe otro servicio Nominatim pero no tengo experiencia con él.

Los comentarios están cerrados.