Подтвердить что ты не робот

GeoDjango: Как создать круг, основанный на точке и радиусе

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

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

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

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

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

4b9b3361

Ответ 1

Да, можно использовать метод geos buffer:

>>> 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 более эффективен.