GeoDjango: Как создать круг на основе точки и радиуса - PullRequest
12 голосов
/ 13 февраля 2011

У меня есть следующая (упрощенная) модель:

class Zone(gismodels.Model):
    name = gismodels.CharField()
    poly = gismodels.PolygonField()

Я хочу создать и сохранить многоугольник, представляющий круг на основе заданной точки и радиуса.

ЕдинственноеЧтобы понять, как этого добиться, нужно вызвать функцию postgis ST_Buffer с использованием необработанного SQL.Я действительно надеюсь, что есть другой способ.

Возможно ли получить доступ к буферным методам GEOS?

1 Ответ

22 голосов
/ 15 февраля 2011

Да, можно использовать буферный метод geos :

>>> from django.contrib.gis import geos
>>> center = geos.Point(5, 5)
>>> radius = 2
>>> circle = center.buffer(radius)
>>> circle
<Polygon object at 0x1029d8370>

Радиус здесь в тех же единицах, что и координаты точек. Это будет работать для некоторых систем координат, таких как UTM, но не так хорошо для других.

Также, хотя это подходит для построения круговой геометрии, в документации PostGIS отмечается, что для выполнения поиска по радиусу ST_DWithin более эффективен.

...