I’m still very new to GeoDjango and the Django world in general, but I have to say that, based on what I’ve seen so far, I’m very impressed by how easy, fast and clean you can build powerful geographic web applications with it.
Django 1.2 is the current version and one thing that caught my eye in the release notes was Model validation. Among other benefits, model validation allows you to “perform custom validation on your Model” everytime a user wants to save data through a ModelForm. Translated to GeoDjango, that basically means that one can access the unleashed power of PostGIS (or the functionality of your supported geo-database of choice) to validate geometries and provide feedback for users through a nice web interface. Best part of it: it’s all done only by a few lines of additional code in your data model.
I’m not going into much detail how Django’s model validation works, you should check out the documentation if you’re interested, but here’s a quick example of creating something like a simple topology rule with GeoDjango:
Let’s say I have users entering and modifying point data and need to make sure that each point falls inside a polygon from another layer.
# models.py
from django.contrib.gis.db import models
from django.core.exceptions import ValidationError
class Poly(models.Model):
geometry = models.PolygonField()
objects = models.GeoManager()
class Point(models.Model):
geometry = models.PointField()
objects = models.GeoManager()
# simple topology rule
def clean(self):
# find Polys that contain the Point
pq = Poly.objects.filter(geometry__contains=self.geometry)
if not pq: # no Poly has been found
raise ValidationError('Point is not within a Poly.')
That’s it. You only need to add a custom clean() method and put your validation rules there. Those few lines of additional code check if the new point falls inside a polygon and tell the user if it’s not through the Django admin interface.
I’ve posted the project on bitbucket if you want to give it a shot. Add a little more PostGIS extravaganza and you can have a pretty sophisticated set of topology rules in your web application, bundled with the great capabilities Django apps offer.


SVG is supposed to be the flash killer since its first appearance, and never really succeeded as we know very well. SVG is still a good choice for mapping applications in my opinion, for light-weighted thematic web mapping applications to be more precise. Vector graphics handled by an AJAX front-end, used to visualize statistical attribute data provide a user-friendly interface and are usually easy to develop. Mapping APIs like Google Maps or Open Layers support and use SVG. Web browsers like Firefox and Safari for instance natively support SVG elements, no “but you need an extra plugin discussion” anymore. There is good portion of potential users for SVG based mapping applications.
