El buffer en la API django de GEOS creará un búfer usando las unidades que use su sistema de coordenadas actual.
Si está almacenando todo en 4326 (en lat/long degrees), tendrá que encontrar alguna forma complicada de convertir KM en grados. Pero ahora su buffer se distorsionará severamente cuanto más al norte vaya.
Una mejor solución es volver a proyectar su geometría en una proyección que mantenga el área, y con frecuencia ese tipo de proyección puede rastrear unidades en metros.
Por ejemplo, si va a crear zonas buffer en América del Norte, puede utilizar esta proyección que utiliza metros http://spatialreference.org/ref/sr-org/7314/
He aquí un ejemplo de cómo hacer que el uso de Django GEOS API:
from django.contrib.gis.geos import Point
# Defines a point in lat/long
p = Point(-70, 50)
# This projection defines lat/long coordinate system
p.srid = 4326
# Transform into the 7314 projection using the OGC WKT format to define that projection
p.transform('PROJCS["NA Lambert Azimuthal Equal Area",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["degree",0.0174532925199433]],PROJECTION["Lambert_Azimuthal_Equal_Area"],PARAMETER["false_easting",0.0],PARAMETER["false_northing",0.0],PARAMETER["longitude_of_center",-100.0],PARAMETER["latitude_of_center",45.0],UNIT["meter",1.0]]')
# Creates a buffered polygon of 1000 meters in radius
poly = p.buffer(1000)
1 grado lat es aproximadamente 110.567 km en el ecuador a 111.699 km en los polos. Este [enlace] (http://www.movable-type.co.uk/scripts/gis-faq-5.1.html) puede ser de su interés. La conversión se basa en la circunferencia de la división de tierra en 360 grados. – DTing
@Kriegar, debe publicar eso como respuesta, el enlace solo vale +1 :) – sarnold