Буфер в API GEOS django создаст буфер, используя любые единицы измерения, которые использует ваша текущая система координат.
Если вы храните все в 4326 (в широтах / долготах), то вам нужно будет найти какой-нибудь хитрый способ преобразования КМ в градусы. Но теперь ваш буфер будет сильно искажен по мере продвижения на север.
Лучшее решение состоит в том, чтобы заново спроецировать вашу геометрию в проекцию, которая поддерживает площадь, и часто такого рода проекция может отслеживать единицы измерения в метрах.
Например, если вы создаете буферизованные области в Северной Америке, вы можете использовать эту проекцию, которая использует метры http://spatialreference.org/ref/sr-org/7314/
Вот пример того, как сделать это с помощью 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)