Cómo agregar rutas en coche y edificios 3d en Mapbox

Si quieres tener detalle de que es Mapbox y para que se usa, puedes leer la publicación Cómo crear aplicaciones web de mapas con Mapbox

Ahora te explico como agregar rutas en coche y edificios 3D con los siguientes pasos:

1. Descargar e incluir Mapbox y sus plugins

Primero necesitas los archivos base para usar Mapbox en tu proyecto.

En tu archivo HTML, incluye los siguientes enlaces en la sección <head>:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<link href='https://api.mapbox.com/mapbox-gl-js/v2.3.1/mapbox-gl.css' rel='stylesheet' />
	<link rel="stylesheet" href="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v4.7.0/mapbox-gl-geocoder.css" type="text/css">
	<link rel="stylesheet" type="text/css" href="mapbox-gl-directions-master/src/mapbox-gl-directions.css">
	<link rel="stylesheet" type="text/css" href="mapa_directions.css">

	<title>Mi primer Mapa</title>
</head>
<body>
	<div id='map'></div>
	<nav id="listing-group">
		<input type="checkbox" id="scrollZoom" checked="checked">
		<label for="scrollZoom">Scroll Zoom</label>
		<input type="checkbox" id="boxZoom" checked="checked">
		<label for="boxZoom">Box zoom</label>
		<input type="checkbox" id="dragRotate" checked="checked">
		<label for="dragRotate">Drag rotate</label>
		<input type="checkbox" id="dragPan" checked="checked">
		<label for="dragPan">Drag pan</label>
		<input type="checkbox" id="keyboard" checked="checked">
		<label for="keyboard">Keyboard</label>
		<input type="checkbox" id="doubleClickZoom" checked="checked">
		<label for="doubleClickZoom">Double click zoom</label>
		<input type="checkbox" id="touchZoomRotate" checked="checked">
		<label for="touchZoomRotate">Touch zoom rotate</label>
	</nav>
	<script src='https://api.mapbox.com/mapbox-gl-js/v2.3.1/mapbox-gl.js'></script>
	<script src="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-geocoder/v4.7.0/mapbox-gl-geocoder.min.js"></script>
	<script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.min.js"></script>
	<script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.min.js"></script>
	<script type="text/javascript" src="mapbox-gl-directions-master/dist/mapbox-gl-directions.js"></script>
	<script type="text/javascript" src='mapa_directions.js'></script>
</body>
</html>

2. Agregar el plugin Directions (para rutas en coche)

Este plugin permite agregar un sistema de navegación para calcular rutas en coche (driving), caminata (walking), o bicicleta (cycling).

En tu archivo JS, agrega esto dentro de la configuración del mapa:

mapboxgl.accessToken = 'TU_TOKEN_MAPBOX';

Con esto podrás dar clic en el mapa o escribir direcciones para crear rutas automáticamente.


3. Agregar barra de zoom y navegación

Esto se hace agregando controles prediseñados de Mapbox para moverse y hacer zoom:

// Agregar barra de zoom
map.addControl(new mapboxgl.NavigationControl());

Esto permite al usuario acercar, alejar, rotar o inclinar el mapa fácilmente.


4. Agregar edificios en 3D

Cuando el estilo del mapa tiene la capa de edificios (building), podemos usar extrusión para representarlos en 3D.

// Edificios en 3D

map.on("load", () => {
  
  const layers = map.getStyle().layers;
  const labelLayerId = layers.find(
    (layer) => layer.type === "symbol" && layer.layout["text-field"]
  ).id;
  
  map.addLayer(
    {
      id: "add-3d-buildings",
      source: "composite",
      "source-layer": "building",
      filter: ["==", "extrude", "true"],
      type: "fill-extrusion",
      minzoom: 15,
      paint: {
        "fill-extrusion-color": "#aaa",       
        "fill-extrusion-height": [
          "interpolate",
          ["linear"],
          ["zoom"],
          15,
          0,
          15.05,
          ["get", "height"],
        ],
        "fill-extrusion-base": [
          "interpolate",
          ["linear"],
          ["zoom"],
          15,
          0,
          15.05,
          ["get", "min_height"],
        ],
        "fill-extrusion-opacity": 0.6,
      },
    },
    labelLayerId
  );
});

Esto renderiza edificios 3D que se elevan según su altura real cuando haces zoom o cambias el ángulo del mapa.


¿Y si quiero cargar mi propia ruta o edificios?

  • Para rutas personalizadas puedes cargar un archivo GeoJSON con líneas y mostrarlas en el mapa.
  • Para edificios propios en 3D debes usar un tileset desde Mapbox Studio con propiedades de altura.

Todo el codigo lo encuentras [aquí](http://MapBox/Mapa Directions).


Ver el paso a paso:

Video de YouTube

Para verlo aquí, enciende la capa de contenido externo.

Abrir en YouTube

WhatsApp