2011-02-13 18 views
12

創建一個圓,我有以下(簡化)型號:GeoDjango內置:如何基於點和半徑

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

我想創建並保存一個多邊形表示了一圈,基於給定的點半徑。

我可以想出如何實現這一點的唯一方法是使用原始SQL調用postgis ST_Buffer函數。我真的希望有另一種方式。

是否可以訪問GEOS緩衝區方法?

回答

19

是的,這是可以使用geos buffer method

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

這裏的半徑是在同一單位的點的座標。這將適用於UTM等座標系,但不適用於其他座標系。

另外,雖然這適用於構建圓形幾何,但PostGIS documentation指出,爲了執行半徑搜索,ST_DWithin更加高效。

+2

感謝您的回答。我有一個以公里爲單位的半徑,我的點是使用以度爲單位的經度/緯度對創建的。我是否需要將半徑轉換爲度數才能獲得有用的結果,還是有內置的功能來處理這個問題? – MattRowbum 2011-02-16 22:52:59