2011-02-13 24 views
12

dayalı bir çevre oluşturmak için nasıl sahip aşağıdaki (basitleştirilmiş) Model: Ben oluşturmak ve belirli bir noktada dayalı bir daire temsil eden bir çokgen, kaydetmek istediğinizGeoDjango: noktası ve yarıçapı

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

ve yarıçapı.

Bunu nasıl gerçekleştireceğimi anlamanın tek yolu, ham SQL kullanarak postgis ST_Buffer işlevini çağırmaktır. Gerçekten başka bir yol olduğunu umuyorum.

GEOS arabellek yöntemlerine erişmek mümkün mü?

cevap

19

Evet, kullanmak mümkündür 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> 

burada yarıçap noktalarının koordinatları ile aynı birimleri cinsindendir. Bu, UTM gibi bazı koordinat sistemleri için çalışacak, ancak diğerleri için de geçerli olmayacaktır.

Ayrıca, bu, dairesel bir geometri oluşturmak için uygun olsa da, PostGIS documentation, yarıçap aramaları yapmak için ST_DWithin'in daha verimli olduğunu not eder.

+2

Cevabınız için teşekkür ederiz. Ben kilometrelerce bir yarıçapım var ve Noktalarım bir derece/boylam çiftleri kullanılarak oluşturuluyor. Faydalı bir sonuç elde etmek için yarıçapımı derece dereceye dönüştürmem gerekiyor mu, yoksa bunun üstesinden gelmek için yerleşik işlevler var mı? – MattRowbum

+1

@MattRowbum - Km cinsinden dereceye dönüştürmeniz gerekecek. Ayrıca, bu ekvatordan aldığınız uzaklığı daha fazla uzatan ovaller ile sizi bırakacaktır. PostGIS artık daha fazla istediğiniz bir "coğrafya" türüne izin veriyor, ancak GeoDjango'daki GEOS API'sı aracılığıyla ona erişmenin bir yolunu bulamadım. – tcarobruce

+2

Derece nasıl derece çeviririm: http://stackoverflow.com/questions/5217348/how-do-i-convert-kilometres-to-degrees-in-geodjango-geos –

İlgili konular