Skip to main content

Dynamic map marker generation using template images and arbitrary text

Project description

# django-markers

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:

```django
{% 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:

```django
<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 Direct Links

The same arguments passed to the template tag can be passed in a URL:

https://localhost:8000/markers/path/to/template.png?text=42&opacity=0.5&text_x=3&text_y=3&text_colour=333333&hue=105


### Using the Python Model

Marker generation is as easy as instantiating a model:

```python
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`:

```bash
$ pip install django-markers
```

Or you can install it from GitHub:

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

Then in your `settings.py`:

```python
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`:

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

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

```python
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.0.tar.gz (129.6 kB view details)

Uploaded Source

Built Distribution

django_markers-1.3.0-py3-none-any.whl (114.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for django-markers-1.3.0.tar.gz
Algorithm Hash digest
SHA256 8431eea491c2c22e573d42f21f3caf01a5043d114f78541e39261320215130a8
MD5 dea811b6c85abb96b463f8357c40e948
BLAKE2b-256 049a0b58447de69ed897914be5dd628847379325a6ce812acf41204b42eb1f0d

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for django_markers-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 135a8fc1248a31b4fb2f3fb618fb716a09170bdc06b20014e3dba2104895178e
MD5 9edd8078a37c2a648605d9b55f149b5f
BLAKE2b-256 ccbbf8d4a03280654ea5ba180a759290a238990a332bc87ec75380778aa66e48

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