ラインとポリゴンの交点を見つけるためにシェイプリーを使用しようとしていますが、いくつかの浮動小数点数に問題があります。
コード例:
polygon = [(4.0, -2.0), (5.0, -2.0), (4.0, -3.0), (3.0, -3.0), (4.0, -2.0)]
shapely_poly = shapely.geometry.Polygon(polygon)
line = [(4.0, -2.0000000000000004), (2.0, -1.1102230246251565e-15)]
shapely_line = shapely.geometry.LineString(line)
intersection_line = list(shapely_poly.intersection(shapely_line).coords)
print intersection_line
私が期待するのは、2 つの頂点のリストです。
ポイント 1: ポリゴンの内側にあるポイント、またはこの場合は (4.0, -2.0000000000000004)。
ポイント 2: [(4.0, -2.0000000000000004), (2.0, -1.1102230246251565e-15)] と [(3.0, -3.0), (4.0, -2.0)] の交点。
ただし、私が受け取る結果は次のとおりです。
[(4.0, -2.0000000000000004)]
また、見ているエッジとの交差があるかどうかも確認しました。
>>> edge = shapely.geometry.LineString([(3.0, -3.0), (4.0, -2.0)])
>>> edge.intersects(shapely_line)
False
(4.0, -2.0000000000000004) を (4.0, -2.000000000000000) に置き換えると、エッジの交差は True と評価されます。
何が起こっているのか、何が欠けているのか、誰にもアイデアがありますか? ありがとう!
編集:
私は格好の良いバージョン 1.12 と 3.3.1、3.3.5、3.3.6、3.3.7 の geo を使用してテストしました。
Windowsでgeosバージョンをどのように更新したかについて誰かが興味を持っている場合:
GEOS Web サイトから geos-[バージョン].tar.bz2 をダウンロードしました。ファイルを抽出し、Visual Studio 10 Win64 ジェネレーターを使用して CMake を実行しました。.sln ファイルを開いてビルドし、生成された geos_c.dll を移動して、geos_c.dll が Python ディレクトリに適切にインストールされた場所に貼り付けました。