2011-02-13 4 views
12

을 기준으로 원을 작성하려면 어떻게해야 다음 (간체) 모델 : I 작성하고 특정 시점에 따라 원을 나타내는 다각형을 저장할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과 같은 일부 좌표 시스템에서는 작동하지만 다른 좌표 시스템에서는 작동하지 않습니다.

또한 이것은 원형 지오메트리를 구성하는 데 적합하지만 반경 검색 ST_DWithin을 수행하는 것이 더 효율적이라는 점에 유의하십시오.

+2

답변 해 주셔서 감사합니다. 나는 킬로미터 단위의 반경을 가지고 있으며, Point는 경도/위도 쌍을 사용하여도 단위로 생성됩니다. 유용한 결과를 얻으려면 반지름을 각도로 변환해야합니까, 아니면 이것을 처리 할 수있는 기본 제공 기능이 있습니까? – MattRowbum

+1

@MattRowbum - km에서 도수로 변환해야합니다. 또한, 이것은 당신이 적도에서 멀어 질수록 더 뻗어있는 타원을 남깁니다. 이제 PostGIS는 원하는 "지리"유형을 허용하지만 GeoDjango의 GEOS API를 통해 액세스 할 수있는 방법을 찾을 수 없습니다. – tcarobruce

+2

킬로미터를도 단위로 변환하는 방법 : http://stackoverflow.com/questions/5217348/how-do-i-convert-kilometres-to-degrees-in-geodjango-geos –