質問

Geodjango をいじっています。単純なポリゴン フィールドをデータベースに追加し、それに対してポイントインポリゴンを実行して、すべてが正常に動作していることを確認したいだけです。

これが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" から返されたジオメトリのチェック中にエラーが発生しました。

ポリゴンを追加するコードが間違っているのでしょうか?緯度/経度の座標を直接スロットに入れる方法を理解しているかどうかわかりません。

それとも 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