In other words, the GeoQuerySet methods operate on the database, and are
able to "know" what the right units are and return an appropriate
Distance object. Whereas, GEOSGeometry objects are "dumb" as to units
because they (at the most) store only an integer id with no information
providing context for the id. Thus, all distances and lengths returned
from GEOSGeometry are "in units of the field" -- e.g., if in WGS84
(SRID=4326), then they are in degrees of latitude and longitude (which
is _not_ a linear unit like meters or feet). Examples:
# This operates at the DB level, and attach new
# `length` and `distance` attributes to the _model_.
GeoModel.objects.length()
GeoModel.objects.distance(other)
# Whereas, this is a model already returned from the database
# and are called on the model's GEOSGeometry representation of
# the geometry.
gm = GeoModel.objects.get(id=1)
# Both of these are just numbers in the units of the field.
gm.line.length
gm.line.distance(other)
The GEOS distance docs are here, and the length docs immediately follow:
http://geodjango.org/docs/geos.html#distance-geom
I'll try to clarify this section better the next time I'm editing the docs.
Regards,
-Justin