Skip to main content

Map engine for maplibre in django

Project description

Django-Mapengine

django-mapengine is a Django app to provide library for maplibre in backend. This includes

  • html templates and JS files for maplibre
  • creation of maplibre sources and layers including choropleths,
  • provision of multi-vector-tiles from django models,
  • distilling of map source views
  • basic popups

Requirements

Maplibre must be installed (i.e. via npm) and provided as JS framework

Quick start

  1. Add "django_mapengine" to your INSTALLED_APPS setting like this:

    INSTALLED_APPS = [
         "...",
         'django_mapengine',
    ]
    
  2. Install maplibre-gl, pubsub-js and (unfortunately - this shall be removed in the future) jquery dependency by:

    npm install maplibre-gl pubsub-js jquery
    

    and copy JS and CSS to your static folder.

  3. Include URLs from django_mapengine to your project:

    urlpatterns = [
        "...",
        path("map/", include("django_mapengine.urls")),
    ]
    
  4. Configure map engine by setting zoom levels, regions and styles folder in project settings.py. You can see all possible settings by looking into django_mapengine.settings.py. Example settings:

    from django_mapengine import setup
    
    MAP_ENGINE_CENTER_AT_STARTUP = [12.537917858911896, 51.80812518969171]
    MAP_ENGINE_ZOOM_AT_STARTUP = 9
    MAP_ENGINE_MAX_BOUNDS = [[11.280733017118229, 51.22918643452503], [13.616574868700604, 52.35515806663738]]
    
    MAP_ENGINE_IMAGES = [setup.MapImage("wind", "images/icons/i_wind.png")]
    
    MAP_ENGINE_API_MVTS = {
        "municipality":
            [
                setup.MVTAPI("municipality", "map", "Municipality"),
                setup.MVTAPI("municipalitylabel", "map", "Municipality", "label_tiles"),
            ],
        "results": [setup.MVTAPI("results", "map", "Municipality")]
    }
    
    MAP_ENGINE_API_CLUSTERS = [
        setup.ClusterAPI("wind", "map", "WindTurbine"),
        setup.ClusterAPI("pvroof", "map", "PVroof"),
        setup.ClusterAPI("pvground", "map", "PVground"),
        setup.ClusterAPI("hydro", "map", "Hydro"),
        setup.ClusterAPI("biomass", "map", "Biomass"),
        setup.ClusterAPI("combustion", "map", "Combustion"),
    ]
    
    MAP_ENGINE_STYLES_FOLDER = "digiplan/static/config/"
    MAP_ENGINE_POPUPS = ["results"]
    
  5. Add middleware to your middleware setup before Whitenoise middleware (or other static server middleware):

    MIDDLEWARE = [
        "django.middleware.security.SecurityMiddleware",
        "django_mapengine.middleware.MapEngineMiddleware",
        "whitenoise.middleware.WhiteNoiseMiddleware",
        ...
    ]
    
  6. Create a TemplateView in views.py using views.MapEngineMixin. This will add all data needed for map setup to the view context:

    from django.views.generic import TemplateView
    from django_mapengine.views import MapEngineMixin
    
    
    class MapView(TemplateView, MapEngineMixin):
        """View to show a map generated by django-mapengine."""
    
        template_name = "map.html"
    
  7. Add maplibre-gl, pubsub-js and mapengine JS, CSS and JSONs in template by:

    {% block javascript %}
      {{ block.super }}
      {% compress js %}
        <script src="{% static 'vendors/maplibre/js/maplibre-gl.js' %}"></script>
        <script src="{% static 'vendors/pubsub/js/pubsub.js' %}"></script>
        <script src="{% static 'vendors/jquery/js/jquery.min.js' %}"></script>
      {% endcompress %}
    {% endblock javascript %}
    
    {%  block inline_javascript %}
      {% include 'django_mapengine/map_json.html' %}
      {% compress js %}
        {% include 'django_mapengine/map_js.html' %}
      {% endcompress %}
    {% endblock %}
    
    {% block css %}
      {% compress css %}
        <link href="{% static 'vendors/maplibre/css/maplibre-gl.css' %}" rel='stylesheet'/>
      {% endcompress %}
    {% endblock css %}
    
  8. If you want to integrate basemaps to your map add the following to the corresponding places:

    <script src="{% static 'django_mapengine/js/basemaps.js' %}" type="text/javascript"></script>
    {% include 'django_mapengine/map_basemaps.html'}
    

User Guides

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_mapengine-3.2.1.tar.gz (35.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_mapengine-3.2.1-py3-none-any.whl (49.6 kB view details)

Uploaded Python 3

File details

Details for the file django_mapengine-3.2.1.tar.gz.

File metadata

  • Download URL: django_mapengine-3.2.1.tar.gz
  • Upload date:
  • Size: 35.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.2

File hashes

Hashes for django_mapengine-3.2.1.tar.gz
Algorithm Hash digest
SHA256 9e7ee0cbf572cdb5fd7c4dec9d8bdeb34fb826080e7d2ba5a3df6170556786b1
MD5 6115bbbb13ada105d2d0d830897ae779
BLAKE2b-256 bc714c0a0a124438d0ffd715a5750190862e895ecb6c7e75b3387536fab463b6

See more details on using hashes here.

File details

Details for the file django_mapengine-3.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for django_mapengine-3.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f2b3a5a922055dcc54095cf76c729466d926aa702c220760241f578155548cd1
MD5 f533fbc3548ba065ff80f862df50d276
BLAKE2b-256 3f1f538e6e2b73b599aa6d29bf4cfbf9d13adb6a840dbab77c5e4a0973d10e45

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page