2

私は 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 のインストール エラーですか?

ありがとう。

4

1 に答える 1

5

WKTにはいくつかの問題があります

  1. 座標次元はスペースで区切られます
  2. 座標ペア (またはタプル) はコンマで区切られます
  3. 座標順は (x, y) -- つまり (lon, lat)

英国周辺のポリゴンをテストすると、次のようになります。

>>> 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'
于 2009-10-06T17:52:56.453 に答える