GeoDjango:如何根据点和半径创建圆

Mat*_*bum 12 gis django geodjango geos

我有以下(简化)模型:

class Zone(gismodels.Model):
    name = gismodels.CharField()
    poly = gismodels.PolygonField()
Run Code Online (Sandbox Code Playgroud)

我想基于给定的点和半径创建并保存表示圆的多边形.

我可以弄清楚如何实现这一点的唯一方法是使用原始SQL调用postgis ST_Buffer函数.我真的希望还有另一种方式.

是否可以访问GEOS缓冲区方法?

tca*_*uce 22

是的,可以使用地理缓冲区方法:

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

此处的半径与点的坐标的单位相同.这适用于某些坐标系统,如UTM,但不适用于其他坐标系统.

此外,虽然这适用于构建圆形几何体,但PostGIS文档指出,对于半径搜索,ST_DWithin更有效.

  • 感谢您的回答.我有一个以公里为单位的半径,我的点是使用以度为单位的经度/纬度对创建的.我是否需要将半径转换为度数以获得有用的结果,或者是否有内置功能来处理此问题? (2认同)
  • 如何公里转换为度:http://stackoverflow.com/questions/5217348/how-do-i-convert-kilometres-to-degrees-in-geodjango-geos (2认同)