En este post te mostraré un ejemplo de proyecto con OpenLayers en donde se muestran:

  • Introducción a OpenLayers
  • Descargar OpenLayers
  • Creación de mapa
  • Centrado de mapa en determinada ubicación
  • Marcadores personalizados con imagen propia
  • Listener de eventos como click o zoom cambiado
  • Consumo de API PHP para obtener los marcadores

Voy a desglosar cada cosa y al final dejaré el código del proyecto completo.

Introducción a OpenLayers

La librería se define a sí misma (traducida literalmente) como:

Una biblioteca llena de funciones y de alto rendimiento para todas sus necesidades de mapeo

En pocas palabras es una librería para manejar mapas, así como Google maps, pero esta es una alternativa gratuita y open source muy parecida a Google maps.

El punto que más destaca es que es gratis.

Puedes visitar el repositorio en https://github.com/openlayers/openlayers y ver su página web en https://openlayers.org/

Descargar OpenLayers

Si usas npm puedes instalar OpenLayers con:

npm install ol

En caso de que quieras usarlo sin NPM es totalmente posible. Aquí dejo los enlaces de la última versión que también se pueden obtener en unpkg.com

Css: https://unpkg.com/openlayers@4.6.5/dist/ol.css

JavaScript: https://unpkg.com/openlayers@4.6.5/dist/ol.js

Incluye ambos en tu HTML y estamos listos.

Creación y centrado de mapa

Vamos a ver cómo crear, en primer lugar, un mapa, y mostrarlo en un contenedor. En el HTML creamos un div con el id mapa y le damos el estilo necesario.

Después, con JavaScript, creamos el mapa:

Para crear un mapa creamos una nueva instancia de ol.Map, se va a montar en el elemento con el id mapa en la línea 6.

Después, por defecto, tiene una capa y una vista. En la vista (línea 12) utilizamos las coordenadas para centrarlo en determinada ubicación y le ponemos un zoom de 15.

Montando mapa con zoom y centrado en coordenadas

Montando mapa con zoom y centrado en coordenadas

Marcadores

Podemos crear un marcador, para ello debemos crear una capa. Después, para agregarle el icono se indica el estilo. El marcador va dentro de una capa y finalmente la capa se agrega al mapa con el método addLayer.

El código queda así:

Lo resaltable es que se indican las coordenadas del mapa en la línea 3 y el icono del marcador en la línea 10.

Los marcadores son un arreglo, podemos invocar a push cuantas veces sea necesario para agregar un elemento al arreglo.

La capa se define en la línea 19 con los marcadores en features y finalmente se añade al mapa en la línea 25. Ahora tenemos un bonito marcador de una pizzería:

Agregar marcador a mapa de OpenLayers

Agregar marcador a mapa de OpenLayers

Por cierto, la imagen fue tomada de Pixabay.

Eventos

El mapa que acabamos de crear tiene varios eventos. Vamos a ver dos de ellos.

Click

El click es cuando se hace click en un elemento del mapa o en el mapa; con esto podemos detectar si alguien hace click en un marcador.

Cambio de zoom

Del mismo modo podemos escuchar cuando el usuario aleja o acerca el mapa, es decir, cambia el zoom:

Consumo de API con PHP para marcadores dinámicos

Es momento de mostrar el pequeño proyecto o demostración. He colocado un select de categorías que sirve para ver categorías en el mapa. En el change del select hago una petición http con fetch a mi servidor con PHP y obtengo las coordenadas de los marcadores para dibujarlos.

Vamos parte por parte. Primero veamos el código HTML:

Existe la lista desplegable y el div con el id mapa. Estoy usando Bootstrap 4 para maquetar. Ahora veamos el script:

Lo único que se hace es escuchar el cambio de selección del elemento del select; cuando eso sucede se hace una petición y se obtienen los marcadores.

Como se está refrescando el mapa en cada cambio, debo obtener una referencia a la capa de los marcadores para removerla en cada actualización.

Finalmente veamos el servidor de PHP que por el momento muestra información a partir de un arreglo, pero podría fácilmente conectarse a una base de datos.

Es un simple if, que podría remplazarse por una consulta usando where. Por favor observa que estoy devolviendo el icono y las coordenadas, así fácilmente se puede configurar el diseño de cada marcador.

Aquí el resultado final:

Demostración openlayers con marcadores y coordenadas

Demostración openlayers con marcadores y coordenadas

Conclusión

Espero que todo haya quedado claro, fue un proyecto simple pero en donde aprendí mucho. Creo que con esto es suficiente para crear una aplicación web simple que utilice mapas y no requiera el poder de Google Maps.

Dejo el enlace al repositorio de GitHub para que puedas explorarlo.


Estoy disponible para trabajar en tu proyecto o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.
Si el post fue de tu agrado muestra tu apoyo compartiéndolo, suscribiéndote al blog, siguiéndome o realizando una donación.

Suscribir por correo

Ingresa tu correo y recibirás mis últimas entradas sobre programación, open source, bases de datos y todo lo relacionado con informática

Únete a otros 7,384 suscriptores

parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

4 Comentarios

Robert Meza · abril 2, 2023 a las 7:43 pm

bro quiero contactarte y hablar

carlos · agosto 21, 2020 a las 8:33 pm

como seria la parte de coordenadas.php alimentada desde una base de datos en mysql que tenga una tabla mapa y que esta solo se guarde la LAT y LONG de cada marcador ??

    parzibyte · agosto 21, 2020 a las 11:17 pm

    Hola. Solo debe traer los datos de la tabla y exponerlos en la API para consumirlos del lado del cliente
    Saludos 🙂

Deja un comentario

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto: