Geodata extensions for Django REST Framework

Overview

Django-Spillway

https://travis-ci.org/bkg/django-spillway.svg?branch=master https://coveralls.io/repos/bkg/django-spillway/badge.svg?branch=master&service=github

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 unnecessary 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.query import GeoQuerySet

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

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

urlpatterns = [
    url(r'^locations/(?P<slug>[\w-]+)/$',
        generics.GeoDetailView.as_view(queryset=Location.objects.all()),
        name='location'),
    url(r'^locations/$',
        generics.GeoListView.as_view(queryset=Location.objects.all()),
        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.

# models.py
from spillway.models import AbstractRasterStore
from spillway.query import GeoQuerySet

class RasterStore(AbstractRasterStore):
    objects = GeoQuerySet.as_manager()

# urls.py
from django.conf.urls import url
from spillway import generics
from .models import RasterStore

urlpatterns = [
    url(r'^rstores/(?P<slug>[\w-]+)/$',
        generics.RasterDetailView.as_view(queryset=RasterStore.objects.all()),
        name='rasterstore'),
    url(r'^rstores/$',
        generics.RasterListView.as_view(queryset=RasterStore.objects.all()),
        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'

Generic Views

Spillway extends REST framework generic views with GeoJSON and KML/KMZ renderers for geographic data. This includes pagination of features and all available spatial lookups/filters for the spatial backend in use.

ViewSets

View sets exist for geo and raster enabled models following the familiar usage pattern of Django REST Framework. Currently, a writable raster viewset needs to be added and tested though the read-only variety is available.

from spillway import viewsets
from .models import Location, RasterStore

class LocationViewSet(viewsets.GeoModelViewSet):
    queryset = Location.objects.all()

class RasterViewSet(viewsets.ReadOnlyRasterModelViewSet):
    queryset = RasterStore.objects.all()

Map Tiles

TileView and RasterTileView are available respectively for generating vector or image map tiles. Image tiles require the optional dependency Mapnik, so be sure to have that installed. In this example, GeoJSON or PNG tiles can be requested for the Location geo model, or PNG tiles for RasterStore data sets. The urls presented here use a scheme of "/{z}/{x}/{y}.{format}".

from django.conf.urls import url
from spillway import views, urls
from .models import Location, RasterStore

urlpatterns = [
    url(urls.tilepath('^locations/),
        views.TileView.as_view(queryset=Location.objects.all()),
        name='location-tiles'),
    url(urls.tilepath('^tiles/(?P<slug>\d+)/'),
        views.RasterTileView.as_view(queryset=RasterStore.objects.all()),
        name='map-tiles'),
]

Be sure to cache map tiles through configuration of your web server or Django's cache framework when serving outside of development environments.

Renderers

So far there are renderers for common raster and vector data formats, namely zipped GeoTIFF, JPEG, PNG, and Erdas Imagine, plus GeoJSON, KML/KMZ, and SVG.

Tests

Create a virtualenv with virtualenvwrapper, install dependencies, and run the tests. On Python 2.7, running tests with SpatiaLite requires a build of pysqlite with extension loading enabled. On 3.x, all is well without it.

mkvirtualenv spillway
# Only the following when testing on 2.7, not needed with 3.x.
pip install --global-option=build_ext --global-option='-USQLITE_OMIT_LOAD_EXTENSION' pysqlite
pip install -r requirements.txt Pillow
make check
Owner
Brian Galey
Brian Galey
A ninja python package that unifies the Google Earth Engine ecosystem.

A Python package that unifies the Google Earth Engine ecosystem. EarthEngine.jl | rgee | rgee+ | eemont GitHub: https://github.com/r-earthengine/ee_ex

47 Dec 27, 2022
User friendly Rasterio plugin to read raster datasets.

rio-tiler User friendly Rasterio plugin to read raster datasets. Documentation: https://cogeotiff.github.io/rio-tiler/ Source Code: https://github.com

372 Dec 23, 2022
Simulation and Parameter Estimation in Geophysics

Simulation and Parameter Estimation in Geophysics - A python package for simulation and gradient based parameter estimation in the context of geophysical applications.

SimPEG 390 Dec 15, 2022
Python package for earth-observing satellite data processing

Satpy The Satpy package is a python library for reading and manipulating meteorological remote sensing data and writing it to various image and data f

PyTroll 882 Dec 27, 2022
Search and download Copernicus Sentinel satellite images

sentinelsat Sentinelsat makes searching, downloading and retrieving the metadata of Sentinel satellite images from the Copernicus Open Access Hub easy

837 Dec 28, 2022
Replace MSFS2020's bing map to google map

English verison here 中文 免责声明 本教程提到的方法仅用于研究和学习用途。我不对使用、拓展该教程及方法所造成的任何法律责任和损失负责。 背景 微软模拟飞行2020的地景使用了Bing的卫星地图,然而卫星地图比较老旧,很多地区都是几年前的图设置直接是没有的。这种现象在全球不同地区

hesicong 272 Dec 24, 2022
ColoringMapAlgorithm-CSP- - Graphical Coloring of Countries with Condition Satisfaction Algorithm

ColoringMapAlgorithm-CSP- Condition Satisfaction Algorithm Output Condition

Kerem TAN 2 Jan 10, 2022
A proof-of-concept jupyter extension which converts english queries into relevant python code

Text2Code for Jupyter notebook A proof-of-concept jupyter extension which converts english queries into relevant python code. Blog post with more deta

DeepKlarity 2.1k Dec 29, 2022
A trivia questions about Europe

EUROPE TRIVIA QUIZ IN PYTHON Project Outline Ask user if he / she knows more about Europe. If yes show the Trivia main screen, else show the end Trivi

David Danso 1 Nov 17, 2021
List of Land Cover datasets in the GEE Catalog

List of Land Cover datasets in the GEE Catalog A list of all the Land Cover (or discrete) datasets in Google Earth Engine. Values, Colors and Descript

David Montero Loaiza 5 Aug 24, 2022
The geospatial toolkit for redistricting data.

maup maup is the geospatial toolkit for redistricting data. The package streamlines the basic workflows that arise when working with blocks, precincts

Metric Geometry and Gerrymandering Group 60 Dec 05, 2022
Geospatial Image Processing for Python

GIPPY Gippy is a Python library for image processing of geospatial raster data. The core of the library is implemented as a C++ library, libgip, with

GIPIT 83 Aug 19, 2022
Manipulation and analysis of geometric objects

Shapely Manipulation and analysis of geometric objects in the Cartesian plane. Shapely is a BSD-licensed Python package for manipulation and analysis

3.1k Jan 03, 2023
🌐 Local tile server for viewing geospatial raster files with ipyleaflet

🌐 Local Tile Server for Geospatial Rasters Need to visualize a rather large raster (gigabytes) you have locally? This is for you. A Flask application

Bane Sullivan 192 Jan 04, 2023
A service to auto provision devices in Aruba Central based on the Geo-IP location

Location Based Provisioning Service for Aruba Central A service to auto provision devices in Aruba Central based on the Geo-IP location Geo-IP auto pr

Will Smith 3 Mar 22, 2022
OSMnx: Python for street networks. Retrieve, model, analyze, and visualize street networks and other spatial data from OpenStreetMap.

OSMnx OSMnx is a Python package that lets you download geospatial data from OpenStreetMap and model, project, visualize, and analyze real-world street

Geoff Boeing 4k Jan 08, 2023
Creates 3D geometries from 2D vector graphics, for use in geodynamic models

geomIO - creating 3D geometries from 2D input This is the Julia and Python version of geomIO, a free open source software to generate 3D volumes and s

3 Feb 01, 2022
Location field and widget for Django. It supports Google Maps, OpenStreetMap and Mapbox

django-location-field Let users pick locations using a map widget and store its latitude and longitude. Stable version: django-location-field==2.1.0 D

Caio Ariede 481 Dec 29, 2022
Geographic add-ons for Django REST Framework. Maintained by the OpenWISP Project.

Geographic add-ons for Django REST Framework. Maintained by the OpenWISP Project.

OpenWISP 982 Jan 06, 2023
Calculate & view the trajectory and live position of any earth-orbiting satellite

satellite-visualization A cross-platform application to calculate & view the trajectory and live position of any earth-orbiting satellite in 3D. This

Space Technology and Astronomy Cell - Open Source Society 3 Jan 08, 2022