Inicio > Delphi, GPS, Mapas > Visualizar rutas con OpenStreetMap

Visualizar rutas con OpenStreetMap

Share Button

47051ef57b97x300.jpgAnteriormente en el blog he escrito entradas sobre cómo visualizar rutas o tracks en mapas  de Google , en diferentes formatos. Al final la idea es la misma en todos los ejemplos; Pintar una sucesión de puntos correspondientes a latitud y longitud sobre un mapa. Nada más. Hemos visto cómo hacerlo con los ficheros KML que utiliza Google o los ficheros GPX (GPS eXchange Format), que están considerados como un estándar en este tipo de representación.

No es mi intención seguir el camino que muchas compañías están tomando de “mudarse” de los mapas de Google a OpenStreetMap, desde que Google anunció que iba a cobrar por utilizar los suyos, sino más bien ampliar las posibilidades de los ejemplos que ya habíamos visto para poder utilizar estos mapas también.

Para quien no la conozca, OpenStreeMap, se trata de una plataforma de mapas a nivel mundial libre. Donde cualquiera puede añadir información (en mi caso, por ejemplo, he añadido rutas en bici).  Si queréis saber algo más sobre este proyecto podéis leer esta lista de “las 10 cosas que deberías saber sobre OpenStreetMap”.

He utilizado el mismo ejemplo que en su día hice para la visualización de tracks en Google Maps; “El Visor KML”. Como ya he dicho, la idea es la misma, pero utilizando diferente proveedor de mapas.

En el caso de Google Maps, para crear el mapa y la polilínea utilizamos las siguientes clases:

0
1
2
map = new GMap2(document.getElementById("map"));var polyline = new GPolyline…

En el caso de OpenStreetMap utilizamos:

0
1
2
3
4
map = new OpenLayers.Map ("map_canvas", options…
…
var linear_ring = new OpenLayers.Geometry.LinearRing(points);
polygonFeature = new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Polygon([linear_ring]), null, style);

Siguiendo con la misma idea su miramos como proveedor Bing Maps (Microsoft) o los mapas de Yahoo, el sistema es fácilmente “portable” a estos. Si buscamos un poco en la API para Bing, vemos que para crear el mapa y la polilínea podemos utilizar:

0
1
map = new MM.Map(document.getElementById("myMap"), options…
var polyline = new MM.Polyline([

Y en el caso de Yahoo Maps utilizaríamos:

0
1
2
var map = new YMap(document.getElementById('map'));
polylinePoints = [];
map.addOverlay(new YPolyline(polylinePoints, options…

Modificando el ejemplo antes comentado, he añadido a los mapas de Google Maps, los mapas de OPenStreetMap y los de Bing Maps. Si alguien se anima a completarlo con los de Yahoo Maps (ya he parado aquí) os lo dejo como “ejercicio” y espero que lo compartáis aquí.

Os dejo unas imágenes del resultado.

gmosmbm

Los diferentes mapas se encuentran en un fichero de recursos.

Os adjunto el código fuente del proyecto, algunas rutas de ejemplo para probar y un EXE compilado.

<DESCARGAR FUENTES + EXE>

Share Button
Categories: Delphi, GPS, Mapas Tags: , , ,
  1. Agustin
    Jueves, 5 de Septiembre de 2013 a las 18:38 | #1

    Muy bueno el ejemplo! Te consulto: es posible realizar lo mismo pero en lugar de una ruta, marcar puntos sobre un mapa? He intentado con un archivo KML pero no responde.Muchas gracias!

  2. Neftalí
    Domingo, 8 de Septiembre de 2013 a las 18:59 | #2

    @Agustin
    Hola Agustín.
    Se pueden añadir “Markers”(puntos) sin problemas. Basta hacerlo a partir de las coordenadas de Lat y Lon del punto concreto. Si revisas la API para cada uno de los mapas, verás que no es complicado. Y la forma de hacerlo es similar a como se añaden las rutas.

    Un saludo.

  3. Donald Shimoda
    Lunes, 13 de Marzo de 2017 a las 16:14 | #3

    Estimado netfali, no funciona el vinculo de descarga podrías actualizarlo por favor? Saludos!

  4. Lunes, 13 de Marzo de 2017 a las 17:04 | #4

    @Donald Shimoda
    Hola Donald.
    Prueba de nuevo, ya he corregido el enlace.

    Un saludo.

  1. Sin trackbacks aún.
What is 8 + 29 ?
Please leave these two fields as-is:
IMPORTANTE! Para continuar, debes contestar la pregunta anterior (para evitar SPAM) :-)