1

MySQL で動作する geodjango データベースを作成しました。

私の問題は、PolygonField を使用して新しいレコードを追加し、ポイントがこのポリゴン内にあるかどうかを確認すると、間違った結果が得られることです (より多くのポイントが必要です)。[Location.objects.filter(shape__contains='POINT(-0.058188 51.504289)')] ポリゴン形状内のポイントを確認するために使用します。

私のモデルは次のとおりです。

class Location(models.Model):
    locationId = models.IntegerField(unique=True)
    shape = models.PolygonField(null=True, blank=True)
    objects = models.GeoManager()

使用したデータベースに形状を追加するには:

polygon = Polygon(((-0.076406999999999975,51.495287999999995),(-0.076412999999999953,51.495159000000008), …(-0.076406999999999975,51.495287999999995)))

この画像を参照してくださいhttp://i.stack.imgur.com/qRSnX.png geodjango admin のマップでも、このポリゴンの境界が正しい位置にないことがわかります。

このような単純な python スクリプトを使用して、結果を geodjango と比較していました: http://geospatialpython.com/2011/01/point-in-polygon.html

ご協力ありがとうございました

4

2 に答える 2

2

ジャスティン・ブロンの引用:

「MySQLは機能不全の空間データベースです...」

containsの代わりに、実際にbbcontainsを実行し、信頼性の低い結果でよく知られています。https://code.djangoproject.com/ticket/13430

PostgreSQLに移行することをお勧めします。
それが選択肢ではない場合、私は答えがありません。

于 2011-07-29T12:13:24.837 に答える
0

ご協力ありがとうございました。最後に、2段階のアプローチを使用しました。

**-最初のステップ**は、shape__containsを使用して結果のリストを確認することです

**-2番目のステップ**は、これらの結果をループし、polygon.intersects(locationPoint)を使用してポイントがこれらのポリゴンの内側にあるかどうかを確認することです。

于 2011-09-16T13:49:48.937 に答える