Skip to main content

Serve vectorial map layers with Django

Project description

django-geojson is a collection of helpers to (de)serialize (Geo)Django objects into GeoJSON.

https://travis-ci.org/makinacorpus/django-geojson.png https://coveralls.io/repos/makinacorpus/django-geojson/badge.png

INSTALL

pip install django-geojson

If you need to load data from GeoJSON files (deserialize), you’ll also need shapely

pip install "django-geojson [shapely]"

USAGE

Add djgeojson to your applications :

# settings.py

INSTALLED_APPS += (
    'djgeojson',
)

(not required for views)

GeoJSON layer view

Very useful for web mapping :

# urls.py
from djgeojson.views import GeoJSONLayerView
...
url(r'^data.geojson$', GeoJSONLayerView.as_view(model=MushroomSpot), name='data'),

Consume the vector layer as usual, for example, with Leaflet loaded in Ajax:

# Leaflet JS
var layer = L.geoJson();
map.addLayer(layer);
$.getJSON("{% url 'data' %}", function (data) {
    layer.addData(data);
});

Inherit generic views only if you need a reusable set of options :

# views.py
from djgeojson.views import GeoJSONLayerView

class MapLayer(GeoJSONLayerView):
    # Options
    precision = 4   # float
    simplify = 0.5  # generalization


# urls.py
from .views import MapLayer, MeetingLayer
...
url(r'^mushrooms.geojson$', MapLayer.as_view(model=MushroomSpot, fields=('name',)), name='mushrooms')

Most common use-cases of reusable options are: low-fi precision, common list of fields between several views, etc.

Options are :

  • properties : list of properties names, or dict for mapping field names and properties

  • simplify : generalization of geometries (See simplify())

  • precision : number of digit after comma

  • geometry_field : name of geometry field (default: geom)

  • srid : projection (default: 4326, for WGS84)

GeoJSON template filter

Mainly useful to dump features in HTML output and bypass AJAX call :

// Leaflet JS
L.geoJson({{ object_list|geojsonfeature|safe}}).addTo(map);

Will work either for a model, a geometry field or a queryset.

{% load geojson_tags %}

var feature = {{ object|geojsonfeature|safe }};

var geom = {{ object.geom|geojsonfeature|safe }};

var collection = {{ object_list|geojsonfeature|safe }};

Low-level serializer

from djgeojson.serializers import Serializer as GeoJSONSerializer

GeoJSONSerializer().serialize(Restaurants.objects.all(), use_natural_keys=True)

Dump GIS models, or fixtures

Register the serializer in your project :

# settings.py

SERIALIZATION_MODULES = {
    'geojson' : 'djgeojson.serializers'
}

Command-line dumpdata can export files, viewable in GIS software like QGis :

python manage.py dumpdata --format=geojson yourapp.Model > export.geojson

Works with loaddata as well, which can now import GeoJSON files.

AUTHORS

Version 1.X:

  • Daniel Sokolowski, serializer snippet

  • ozzmo, python 2.6 compatibility

makinacom

LICENSE

  • Lesser GNU Public License

CHANGELOG

2.1.1 (2013-08-21)

  • Set default SRID to 4326 in generic GeoJSON views.

2.1.0 (2013-08-19)

  • Serialize reversed relations using natural keys (fixes #8)

  • Support empty geometries (None or NULL in Db)

  • Fix serializing property in upper class

2.0.1 (2013-07-10)

  • Fix usage of simplify.

  • Expose force2d option in view

  • Allow to have pk or id in properties if explicitly listed

2.0.0 (2013-07-09)

  • Complete rewrite using @jeffkistler and @glenrobertson code

  • CRS is added to GeoJSON ouput by default

  • Ability to build pk dynamically by passing a lambda

  • Ability to provide a bbox

  • Ability to use Django natural keys

  • Support of ValuesQuerySet

  • Support of ForeignKey and ManyToMany

  • Added force2d option

** Backwards incompatible changes **

  • Geom field is not guessed automatically : Use geometry_field option, default is 'geom'.

  • no more pk in properties : use feature id, or list pk in properties explicitly.

  • fields list in GeoJSONLayer was renamed properties.

1.2.0 (2013-05-22)

  • Shapely is now optional (used for deserialization only)

  • Add Django to requirements

  • Skip a step in GeoJSON conversion of geometries (fixes #6)

1.1.0 (2013-03-06)

  • Django 1.5 support

  • Fix template tag geojsonfeature on empty geometries

1.0.0 (2012-08-03)

  • Initial working version.

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-geojson-2.1.1.zip (22.2 kB view details)

Uploaded Source

File details

Details for the file django-geojson-2.1.1.zip.

File metadata

  • Download URL: django-geojson-2.1.1.zip
  • Upload date:
  • Size: 22.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for django-geojson-2.1.1.zip
Algorithm Hash digest
SHA256 255f95499f291258620da7f4e16d83bfd1dd9971e72aaf88ff62cd19b1908a16
MD5 452bab32073138bc56a5b7e6933fbb68
BLAKE2b-256 799fc8f0e1e727beae52ac54c887cc664084d5c91b6fbff4f8fa5487c1a4d816

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