Geodjango: come creare un cerchio in base al punto e al raggio
Domanda
Ho il seguente modello (semplificato):
class Zone(gismodels.Model):
name = gismodels.CharField()
poly = gismodels.PolygonField()
Voglio creare e salvare un poligono che rappresenti un cerchio, basato su un determinato punto e raggio.
L'unico modo in cui riesco a capire come raggiungere questo obiettivo è chiamare la funzione Postgis ST_BUFFER usando RAW SQL. Spero davvero che ci sia un altro modo.
È possibile accedere ai metodi buffer GEOS?
Soluzione
Sì, è possibile utilizzare il Metodo buffer GEOS:
>>> from django.contrib.gis import geos
>>> center = geos.Point(5, 5)
>>> radius = 2
>>> circle = center.buffer(radius)
>>> circle
<Polygon object at 0x1029d8370>
Il raggio qui è nelle stesse unità delle coordinate dei punti. Funzionerà per alcuni sistemi di coordinate come UTM, ma non anche per altri.
Inoltre, mentre questo è appropriato per la costruzione di una geometria circolare, il Documentazione di Postgis Note che per eseguire le ricerche di raggio st_dwithin è più efficiente.