Skip to main content

Dynamic map marker generation using template images and arbitrary text

Project description

A dynamic map marker generator using template images and arbitrary text.

Why

Sometimes you need to use a lot of markers on a map, many of which are similar, but slightly different, using text labels, or even different colours or opacities. This will do that for you.

Theoretically, you could also use it to caption memes, but I think there’s other stuff out there for that sort of thing.

How

You can reference the markers in three ways: using a django template tag, via URL parameters, or in Python, by using the Marker class. The preferred method is the template tag, and I don’t recommend using direct URL requests, since it requires a hit to your application server every time.

Using a Template Tag:

This will generate a media URL pointing to a newly-created marker based on a template.png, with the text 42, positioned 3 pixels right, and 3 pixels down from the upper left corner of the template, with an opacity of 50%, a hue-shift of 105, and using the hex colour #333333 for the text. All of the arguments, save for the first, are optional:

{% load markers %}
{% marker 'path/to/template.png' text='42' text_x=3 text_y=3 opacity=0.5 hue=105 text_colour='333333' %}

Typically, you’ll use this in your template to assign marker paths to some javascript variables:

<script>
  var marker1 = "{% marker 'path/to/template.png' text='1' %}";
  var marker2 = "{% marker 'path/to/template.png' text='3' hue=105 %}";
</script>

After you have the URLs in your Javascript, you can do whatever you like with them, they’re just URLs to existing static files.

Using the Python Model

Marker generation is as easy as instantiating a model:

from markers.models import Marker

mymarker = Marker(
    "path/to/template.png",
    text="42",
    opacity=0.5,
    text_x=3,
    text_y=3,
    text_colour="333333",
    hue=105
)

The Templates

The template path you pass to django-markers, must be part of one of your apps, and referenced as such. So for example, if you have a template living in mapping/static/mapping/img/markers/mytemplate.png, the argument you’re looking for is: mapping/img/markers/mytemplate.png.

If you’re calling the URL directly, then you’ll append this path to the URL like so:

https://localhost:8000/markers/mapping/img/markers/mytemplate.png?hue=105&opacity=0.8

A Note on Text Positioning

By default, we try to centre text along the x/y axis, so if that’s your intention, don’t specify either. Specifying an x value without a y one will assume y to be centred and vice versa.

A Note on Template Images

You can use whatever image you like for your templates, but since the hue-shifting starts at red (0), and progresses through the spectrum to red again at 360, you’d do well to use a redish image as your template. Otherwise, requests that dont’ specify a hue will look out of step with ones that have hue set to 1.

Installation

You can install it from pypi using pip:

$ pip install django-markers

Or you can install it from GitHub:

$ pip install git+https://github.com/danielquinn/django-markers.git#egg=django-markers

Then in your settings.py:

INSTALLED_APPS = (
    ...
    "markers",
)

And if you want to make use of the direct URL requests, you’ll need to add this to your urls.py:

url(r"^some/arbitrary/path/", include("markers.urls")),

So for example, you would have something like this in your urls.py:

url(r"^mapping/markers/", include("markers.urls")),

Requirements

We’re doing image processing here, so PIL is required. You should probably use Pillow though, since that’s what this was developed against. Additionally, numpy is required to handle the hue-shifting. Both will install automatically if you follow the installation instructions above.

In addition to these Python dependencies, Django 1.6+ is required if you intend to make use of the on-the-fly generation via calling a specifric URL.

Licensing

The whole project is licesned under the GPL-3, but the default font used is licensed under Apache 2.0. Both licenses are available under COPYING/.

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-markers-1.3.1.tar.gz (129.8 kB view details)

Uploaded Source

Built Distribution

django_markers-1.3.1-py3-none-any.whl (114.9 kB view details)

Uploaded Python 3

File details

Details for the file django-markers-1.3.1.tar.gz.

File metadata

  • Download URL: django-markers-1.3.1.tar.gz
  • Upload date:
  • Size: 129.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.4

File hashes

Hashes for django-markers-1.3.1.tar.gz
Algorithm Hash digest
SHA256 6ddd0c1b8b59ceedae68f30db81dbe052b2a8bd28bc0f3e446b36c8428deb747
MD5 6026f50dcb0398e97eb03d173713866b
BLAKE2b-256 6d922e4b89724a3c01aca40d5a9dce7e48a99b75c0a1ba9d314879da891aff71

See more details on using hashes here.

File details

Details for the file django_markers-1.3.1-py3-none-any.whl.

File metadata

  • Download URL: django_markers-1.3.1-py3-none-any.whl
  • Upload date:
  • Size: 114.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.28.1 CPython/3.7.4

File hashes

Hashes for django_markers-1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6c65181be64d9b23256d5e718bf5fc665395bd984bf016e58b72d73c8a01bc5f
MD5 0a1f73af99e4f5cd595f02986b268e95
BLAKE2b-256 5dd58d0e43d5e86015d67044f9f2766ae8ff3f16a1cca5a8b5fbb0a584fbadef

See more details on using hashes here.

Supported by

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