Serve vectorial map layers with Django
Project description
django-geojson is a collection of helpers to (de)serialize (Geo)Django objects into GeoJSON.
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 :
django dumpdata --format=geojson yourapp.Model > export.geojson
Works with loaddata as well, which can now import GeoJSON files.
LICENSE
Lesser GNU Public License
CHANGELOG
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.