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
Django model field that can hold a geoposition, and corresponding widget

django-geoposition A model field that can hold a geoposition (latitude/longitude), and corresponding admin/form widget. Prerequisites Starting with ve

Philipp Bosch 324 Oct 17, 2022
Bacon - Band-limited Coordinate Networks for Multiscale Scene Representation

BACON: Band-limited Coordinate Networks for Multiscale Scene Representation Project Page | Video | Paper Official PyTorch implementation of BACON. BAC

Stanford Computational Imaging Lab 144 Dec 29, 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
A public data repository for datasets created from TransLink GTFS data.

TransLink Spatial Data What: TransLink is the statutory public transit authority for the Metro Vancouver region. This GitHub repository is a collectio

Henry Tang 3 Jan 14, 2022
Global topography (referenced to sea-level) in a 10 arcminute resolution grid

Earth - Topography grid at 10 arc-minute resolution Global 10 arc-minute resolution grids of topography (ETOPO1 ice-surface) referenced to mean sea-le

Fatiando a Terra Datasets 1 Jan 20, 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
Open Data Cube analyses continental scale Earth Observation data through time

Open Data Cube Core Overview The Open Data Cube Core provides an integrated gridded data analysis environment for decades of analysis ready earth obse

Open Data Cube 410 Dec 13, 2022
This GUI app was created to show the detailed information about the weather in any city selected by user

WeatherApp Content Brief description Tools Features Hotkeys How it works Screenshots Ways to improve the project Installation Brief description This G

TheBugYouCantFix 5 Dec 30, 2022
QLUSTER is a relative orbit design tool for formation flying satellite missions and space rendezvous scenarios

QLUSTER is a relative orbit design tool for formation flying satellite missions and space rendezvous scenarios, that I wrote in Python 3 for my own research and visualisation. It is currently unfinis

Samuel Low 9 Aug 23, 2022
A Jupyter - Leaflet.js bridge

ipyleaflet A Jupyter / Leaflet bridge enabling interactive maps in the Jupyter notebook. Usage Selecting a basemap for a leaflet map: Loading a geojso

Jupyter Widgets 1.3k Dec 27, 2022
PySAL: Python Spatial Analysis Library Meta-Package

Python Spatial Analysis Library PySAL, the Python spatial analysis library, is an open source cross-platform library for geospatial data science with

Python Spatial Analysis Library 1.1k Dec 18, 2022
Python 台灣行政區地圖 (2021)

Python 台灣行政區地圖 (2021) 以 python 讀取政府開放平台的 ShapeFile 地圖資訊。歡迎引用或是協作 另有縣市資訊、村里資訊與各種行政地圖資訊 例如: 直轄市、縣市界線(TWD97經緯度) 鄉鎮市區界線(TWD97經緯度) | 政府資料開放平臺: https://data

WeselyOng 12 Sep 27, 2022
Geocode rows in a SQLite database table

Geocode rows in a SQLite database table

Chris Amico 225 Dec 08, 2022
a Geolocator made in python

Geolocator A Geolocator made in python ✨ Features locates ur location using ur ip thats it! 💁‍♀️ How to use first download the locator.py file instal

Portgas D Ace 1 Oct 27, 2021
Solving the Traveling Salesman Problem using Self-Organizing Maps

Solving the Traveling Salesman Problem using Self-Organizing Maps This repository contains an implementation of a Self Organizing Map that can be used

Diego Vicente 3.1k Dec 31, 2022
Manage your XYZ Hub or HERE Data Hub spaces from Python.

XYZ Spaces for Python Manage your XYZ Hub or HERE Data Hub spaces and Interactive Map Layer from Python. FEATURED IN: Online Python Machine Learning C

HERE Technologies 30 Oct 18, 2022
A modern, geometric typeface by @chrismsimpson (last commit @ 85fa625 Jun 9, 2020 before deletion)

Metropolis A modern, geometric typeface. Influenced by other popular geometric, minimalist sans-serif typefaces of the new millenium. Designed for opt

Darius 183 Dec 25, 2022
Platform for building statistical models of cities and regions

UrbanSim UrbanSim is a platform for building statistical models of cities and regions. These models help forecast long-range patterns in real estate d

Urban Data Science Toolkit 419 Dec 30, 2022
Expose a GDAL file as a HTTP accessible on-the-fly COG

cogserver Expose any GDAL recognized raster file as a HTTP accessible on-the-fly COG (Cloud Optimized GeoTIFF) The on-the-fly COG file is not material

Even Rouault 73 Aug 04, 2022
:earth_asia: Python Geocoder

Python Geocoder Simple and consistent geocoding library written in Python. Table of content Overview A glimpse at the API Forward Multiple results Rev

Denis 1.5k Jan 02, 2023