문제

나는 Geodjango를 엉망으로 만들고 있으며, 단순한 다각형 필드를 데이터베이스에 추가 한 다음 모든 것이 잘 작동하는지 확인하기 위해 Point-In-Polygon을 실행하고 싶습니다.

views.py의 내 코드는 다음과 같습니다.

    #adding a polygon
    pe = PolygonExample.objects.create(name="uk_polygon", poly="POLYGON((58.768200159239576, -12.12890625, 58.49369382056807 1.1865234375, 49.18170338770662 -12.9638671875, 50.2612538275847 5.537109375))" )
    #doing the point-in-polygon check
    result = PolygonExample.objects.filter(poly__contains='POINT(52.696361078274485 -0.87890625)') 

그리고 여기에 내가 Models.py에서 가지고있는 내용은 다음과 같습니다.

    class PolygonExample(models.Model):
      name = models.CharField(max_length=16, db_index=True)
      poly = models.PolygonField()
      objects = models.GeoManager()

그러나 다각형 (polygonexample.objects.create)을 추가하려고하면 오류가 발생합니다. "오류가 발생한 Geos C 함수"Geoswktreader_Read "에서 반환 된 지오메트리를 확인했습니다.

다각형을 추가하기위한 코드가 잘못 되었습니까? LAT/LON 좌표로 직접 슬롯하는 방법을 이해하지 못합니다.

아니면 GEOS 설치 오류입니까?

감사.

도움이 되었습니까?

해결책

당신의 wkt 몇 가지 문제가 있습니다.

  1. 좌표 치수는 공간으로 분리됩니다
  2. 좌표 쌍 (또는 튜플)은 쉼표로 분리됩니다.
  3. 좌표 순서는 (x, y)입니다.

영국의 다각형 테스트는 다음과 같아야합니다.

>>> wkt = "POLYGON((-12.12890625 58.768200159239576, 1.1865234375 58.49369382056807, 5.537109375 50.2612538275847, -12.9638671875 49.18170338770662, -12.12890625 58.768200159239576))"
>>> pe = PolygonExample.objects.create(name="uk_polygon", poly=wkt)
>>> result = PolygonExample.objects.filter(poly__contains='POINT(-0.87890625 52.696361078274485)')  # note x,y order here, too
>>> result[0].name
u'uk_polygon'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top