Shapely: ポイントのリストからポリゴンに変換する

作成日 2012年08月24日  ·  3コメント  ·  ソース: Toblerity/Shapely

こんにちは、みんな、

フォーラムのメーリングリストが見つからなかったので、ここで質問します。 ポイントのリストからポリゴンに変換するための「標準」フォームはありますか? 例えば、

list_points = []
vertices = [Point(1,1), Point(2,2), Point(3,3)]
for i in xrange(len(vertices)):
    list_points.append(vertices[i])
polygon = Polygon(list_points)

このコードは機能しません。 私はconvex_hullを使用しなければなりませんでした:

poly = MultiPoint(list_points).convex_hull

私が探しているものは、exacltyではありません。

忍耐と良い仕事をありがとう!

最も参考になるコメント

再びわずかに速くなりました:

points = [Point(0,0), Point(2,2), Point(2,0)]
coords = [p.coords[:][0] for p in points]
poly = Polygon(coords)
poly.area

全てのコメント3件

ポリゴンリング(LinearRingのインスタンス)はPointsによって定義されるのではなく、座標タプルのシーケンスによって定義されます。 ポイントと座標はShapelyとは異なります。 ポイントの座標をPolygonコンストラクターに渡す必要があります。 このような:

>>> points = [Point(0,0), Point(2,2), Point(2,0)]
>>> coords = sum(map(list, (p.coords for p in points)), [])
>>> poly = Polygon(coords)
>>> poly.area
2.0

私は時々これをグーグルで探し続けているので、これが私がそれをすることを好む方法です(私はそれがこのようにもっと読みやすいと思います):

>>> points = [Point(0,0), Point(2,2), Point(2,0)]
>>> coords = [(p.x, p.y) for p in points]
>>> poly = Polygon(coords)
>>> poly.area
2.0

timeitによると、物事はキャッシュされる可能性がありますが、 @ sgilliesのアプローチは一貫して2/3速いようです(私のものは〜65µs、彼のアプローチは〜45µs)。

再びわずかに速くなりました:

points = [Point(0,0), Point(2,2), Point(2,0)]
coords = [p.coords[:][0] for p in points]
poly = Polygon(coords)
poly.area
このページは役に立ちましたか?
0 / 5 - 0 評価