folium-vectortilelayer

Folium plugin to render vector tile layers using Leaflet.VectorTileLayer

MIT License

Downloads
216
Stars
5

Bot releases are hidden (Show)

folium-vectortilelayer - [0.2.0]

Published by iwpnd over 1 year ago

About The Project

Follow up on folium-vectorgrid that wraps
Leaflet.VectorTileLayer to render
Mapbox vector tiles in folium maps.

Other than Leaflet.VectorGrid, Leaflet.VectorTileLayer allows
to "overzoom" and "underzoom".
Even if the tiling provider only provides map tiles for zoom level 5 through 12,
Leaflet.VectorTileLayer utilizes
data from these upper and lower bounds to render tiles beyond
zoom level 12 and 5 respectively.

Built With

Getting Started

Prerequisite

Install Poetry.

Installation

as dependency

poetry add git+https://github.com/iwpnd/folium-vectortilelayer.git

local development

  1. Clone and install
    git clone https://github.com/iwpnd/folium-vectortilelayer.git
    poetry install
    
  2. Test it!
    poe test  # or poetry run pytest .
    

Usage

from folium_vectortilelayer import VectorTileLayer
import folium

url = "https://free.tilehosting.com/data/v3/{z}/{x}/{y}.pbf?token=my_token"

m = folium.Map()
options = {
    "layers": ["my_layer"], # define layer to be shown
    # min zoom of your map,
    # if minZoom < minDetailZoom features in minDetailZoom level are used
    # for minDetailZoom to minZoom
    "minZoom": 8,
    # max zoom of your map,
    # if maxZoom > maxDetailZoom features in maxDetailZoom level are used
    # for maxDetailZoom to maxZoom
    "maxZoom": 18,
    # min zoom level provided by source
    "minDetailZoom": 10,
    # max zoom level provided by source
    "maxDetailZoom": 13,
    "vectorTileLayerStyles": {
        "my_layer":{
            "fill": True,
            "weight": 1,
            "fillColor": 'green',
            "color": 'black',
            "fillOpacity":0.6,
            "opacity":0.6
        },
    }
}

vc = VectorTileLayer(url, "folium_layer_name", options)
m.add_child(vc)
m

Or with conditional styling

import folium
from folium_vectortilelayer import VectorTileLayer

m = folium.Map()
url = "https://free.tilehosting.com/data/v3/{z}/{x}/{y}.pbf?token=my_token"

options = '''{
  "layers": ["my_layer"],
  "vectorTileLayerStyles": {
    "my_layer": function(f) {
      if (f.type === 'parks') {
        return {
          "fill": true,
          "weight": 1,
          "fillColor": 'green',
          "color": 'black',
          "fillOpacity":0.6,
          "opacity":0.6
        };
      }

      if (f.type === 'water') {
        return {
          "fill": true,
          "weight": 1,
          "fillColor": 'purple',
          "color": 'black',
          "fillOpacity":0.6,
          "opacity":0.6
        };
      }
    }
  }
}'''

VectorTileLayer(url,"layer_name",options).add_to(m)
m

License

Distributed under the MIT License. See LICENSE for more information.

Contact

Benjamin Ramser - @imwithpanda - [email protected]
Project Link: https://github.com/iwpnd/folium-vector