Para adicionar uma trilha ao nosso mapa, vamos convertê-lo de um shapefile para GeoJSON. Há mais de uma maneira de fazer isso – você poderia usar ogr2ogr, mas optamos por usar o QGIS, pois ele não apenas o converteria, mas também transformaria o sistema de coordenadas ao mesmo tempo.

1. Convertendo para GeoJSON

Com o shapefile carregado no QGIS, podemos clicar com o botão direito na camada e escolher a opção “Export -> Save Features As…

Escolhemos o sistema de coordenadas apropriado ( EPSG:4326 – WGS 84) para uso com o Leaflet e o QGIS faz a conversão enquanto salva no GeoJSON. Isso torna nossa trilha pronta para uso no Leaflet.

2. Adicionando o arquivo

O arquivo GeoJSON precisa ser adicionado ao nosso arquivo HTML como um script, mas primeiro precisamos modificá-lo adicionando um nome de variável:

var trail = {
"type": "FeatureCollection",
"name": "rails",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::3857" } },
"features": [
...

Adicionando o var trail ao início do arquivo nos permitirá fazer referência a ele no Leaflet.

Em seguida, adicionamos o script e agora podemos adicioná-lo ao mapa:

  var trail = L.geoJSON(trail);
  trail.addTo(map);

3. Estilizando a trilha

Podemos mudar a aparência da trilha adicionando opções à declaração L.geoJSON:

  var thetrail = L.geoJSON(trail, {
      color: '#800000',
      weight: 3,
      dashArray: '12 8 12',
  });

Isso transforma a trilha em vermelho escuro, aumentando sua largura para 3 pixels e criando uma linha tracejada.

4. Adicionando rótulo

Ao adicionar este rótulo quando se passa o mouse sobre a trilha o mesmo é apresentado na tela:

thetrail.bindTooltip('Trilha de Brumadinho')

5. Resultado

Após nossas mudanças o resultado do nosso mapa agora é esse:



6. Código

Após as alterações realizadas acima, o nosso código ficou da seguinte forma:

<!DOCTYPE html>
<head>
  <link rel="stylesheet" href="https://unpkg.com/leaflet@1.4.0/dist/leaflet.css"
  integrity="sha512-puBpdR0798OZvTTbP4A8Ix/l+A4dHDD0DGqYW6RQ+9jxkRFclaxxQb/SJAWZfWAkuyeQUytO7+7N4QKrDh+drA=="
  crossorigin=""/>  
  <script src="https://unpkg.com/leaflet@1.4.0/dist/leaflet.js"
  integrity="sha512-QVftwZFqvtRNi0ZyCtsznlKSWOStnDORoefr1enyq5mVL4tmKB3S/EnC3rRJcxCPavG10IcrVGSmPh6Qw5lwrg=="
  crossorigin=""></script>
  <script src="rails.geojson"></script>
<style>
    #mapDIV{
        height: 700px;
        width: 700px;
        border: solid 1px black;
    }
</style>
</head>
<body>
    <div id='mapDIV'></div>
<script>
    var map = L.map(document.getElementById('mapDIV'), {
    center: [-20.1438, -44.1301],
    zoom: 15
    });
    var basemap = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
        });

    basemap.addTo(map);
	
    var earthquakeMarker = L.marker([-20.1438, -44.1301],
         {title: 'Janeiro 25, 2019 Desastre de Brumadinho'});
		 
    earthquakeMarker.bindPopup(
         "Janeiro 25, 2019<br> Desastre de Brumadinho");
		 
    earthquakeMarker.addTo(map);
 
    var thetrail = L.geoJSON(trail, {
        color: '#800000',
        weight: 3,
        dashArray: '12 8 12',
    });
	
    thetrail.bindTooltip('Trilha de Brumadinho');
    thetrail.addTo(map);
</script>
</body>
</html>

Se você quiser, pode ver o processo detalhado acima no YouTube: