GeoDjango &
       HTML5 Geolocation


John Paulett        john@paulett.org
September 1, 2011       @johnpaulett
The Plan
HTML5 Geolocation


Django Crash Course


What is GeoDjango?


GeoDjango Basics


Demo Application
Geolocation
W3C Geolocation
GPS, nearby Wi-Fi networks, cell towers, IP
address


IE 9, FF 3.6, Safari 5.0, Chrome, Opera 10.6, iOS,
Android



navigator.geolocation.getCurrentPosition


navigator.geolocation.watchPosition
W3C Geolocation
function showMap(position) {
     console.log(position);
}


navigator.geolocation.getCurrentPosition(
     showMap
);
W3C Geolocation
{
    "coords": {
         "accuracy": 22000,
         "altitude": null,
         "altitudeAccuracy": null,
         "heading": null,
         "latitude": 38.631756,
         "longitude": -90.24323,
         "speed": null
    },
    "timestamp": 1314459776275
}
Crash Course
models.py
from django.db import models
class City(models.Model):
    name = models.TextField()

class UserGroup(models.Model):
    name = models.TextField()
    city = models.ForeignKey(City)
    started = models.DateField()

    def join(self, user):
        # add user to group
urls.py
urlpatterns = patterns(
    url(
         r'^user-groups/(?P<city_name>w+)$',
         'myapp.views.user_groups'
    ),
)
views.py
def user_groups(request, city_name):
 city = City.objects.get(name=city_name)
 groups = UserGroup.objects.filter(city=city)
 return render(request, 'user_groups.html',
               {'groups': groups})
user_groups.html
{% extends "base.html%}


<ul>
   {% for group in groups %}
        <li>
           {{ group.name }}
        </li>
   {% endfor %}
</ul>
What is GeoDjango?
ā€œworld-class geographic Web frameworkā€
included in Django core


Combine existing Python & DB tools with
standard API


but first …
Some GIS Problems
The Earth is not a sphere!


How to store & query efficiently
  Vendor implementations


Wide range of data formats
  Tiger/LINE, Shapefiles, E00, OGR, GeoJSON,
  WKT, EWKT, EWKB, GML, KML, OSM, GLOBE,
  TIFF, ArcGrid ….
GeoDjango Basics
GeoDjango Model Fields
from django.contrib.gis.db import models


models.PointField
models.LineStringField
models.PolygonField
models.MultiPointField
models.MultiLineStringField
models.MultiPolygonField
models.GeometryCollectionField
Given a Set of Geo Objects
Measure & Find:
  distance, area, perimeter, centroid, envelope
Edit:
  transform (SRID), scale
Operations:
  intersection, difference, union
Output:
  geojson, gml, kml, svg


SalesRegion.objects.all().kml()
Geo Querying
contains, covers, crosses, disjoint, equals,
intersects, touches, left/right, distance_lt,
distance_gt …


SalesRegion.objects.filter(
    poly__distance_lt=(pnt, D(mi=500))
)
lambdageo
lambdageo



     http://lambdageo.ep.io



http://github.com/johnpaulett/lambdageo
lambdageo.ep.io
        ā—



models.py
Admin
Views
Templates
Django Admin
GIS is Cool
Python GIS
 Tile Servers, Mapnik, etc.


Data
 Openstreet Maps, Census
lambdageo.ep.io

github.com/johnpaulett/lambdageo

john@paulett.org / @johnpaulett
References
References
Python Geospatial Development – Erik
Westra
References
http://geodjango.org/


http://dev.w3.org/geo/api/spec-source.html


http://src.chromium.org/viewvc/chrome/tru
nk/src/chrome/browser/geolocation/
http://caniuse.com/#search=geolocation

GeoDjango & HTML5 Geolocation