Skip to main content

Geodata extensions for Django REST Framework

Project description

https://travis-ci.org/bkg/django-spillway.svg?branch=master https://img.shields.io/coveralls/bkg/django-spillway.svg

Django and Django REST Framework integration of raster and feature based geodata.

Spillway builds on the immensely marvelous Django REST Framework by providing facilities for the handling of geospatial formats such as GeoTIFF, GeoJSON, and KML/KMZ.

Specific attention has been paid to speedy serialization of geometries from spatial backends which avoids the cost of unneccessary re-serialization in Python.

Basic Usage

Add vector response formats such as GeoJSON, KML/KMZ, and SVG to your API.

# models.py
from django.contrib.gis.db import models
from spillway.models import GeoManager

class Location(models.Model):
    slug = models.SlugField()
    geom = models.GeometryField()
    objects = GeoManager()

# urls.py
from django.conf.urls import patterns, url
from spillway import generics
from .models import Location

urlpatterns = patterns('',
    url(r'^locations/(?P<slug[\w-]+)/$',
        generics.GeoDetailView.as_view(model=Location),
        name='location'),
    url(r'^locations/$',
        generics.GeoListView.as_view(model=Location),
        name='location-list'),
)

Retrieve all locations as GeoJSON:

curl -H 'Accept: application/vnd.geo+json' 127.0.0.1:8000/locations/

Simplify and reproject the geometries to another coordinate system:

curl -H 'Accept: application/vnd.geo+json' '127.0.0.1:8000/locations/?srs=3857&simplify=100'

Any spatial lookup supported by the backend is available to search on. For instance, find the location which intersects a particular point:

curl -g '127.0.0.1:8000/locations/?intersects={"type":"Point","coordinates":[-120,38]}'

Raster data support is provided as well.

from django.conf.urls import patterns, url
from spillway import generics
from .models import RasterStore

urlpatterns = patterns('',
    url(r'^rstores/(?P<slug>[\w-]+)/$',
        generics.RasterDetailView.as_view(model=RasterStore),
        name='rasterstore'),
    url(r'^rstores/$',
        generics.RasterListView.as_view(model=RasterStore),
        name='rasterstore-list'),
)

Return JSON containing a 2D array of pixel values for a given bounding box:

curl 'http://127.0.0.1:8000/rstores/tasmax/?bbox=-107.74,37.39,-106.95,38.40'

One can crop raster images with a geometry and return a .zip archive of the results:

curl  -H 'Accept: application/zip' 'http://127.0.0.1:8000/rstores/?g=-107.74,37.39,-106.95,38.40'

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-spillway-0.2.0.tar.gz (19.1 kB view hashes)

Uploaded Source

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