Shapely: Mengkonversi dari daftar Poin ke Poligon

Dibuat pada 24 Agu 2012  ·  3Komentar  ·  Sumber: Toblerity/Shapely

Halo semua,

Saya tidak menemukan milis forum, jadi saya akan bertanya di sini. Apakah ada formulir "kanonik" untuk mengonversi dari daftar Poin ke Poligon? Sebagai contoh,

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)

Kode ini tidak berfungsi. Saya harus menggunakan convex_hull:

poly = MultiPoint(list_points).convex_hull

Apa yang tidak persis apa yang saya cari.

Terima kasih atas kesabaran dan kerja bagusnya!

Komentar yang paling membantu

Sedikit lebih cepat lagi:

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

Semua 3 komentar

Inilah masalahnya: cincin poligon (contoh LinearRing) tidak ditentukan oleh Poin, mereka ditentukan oleh urutan tupel koordinat. Titik dan koordinat adalah hal yang berbeda bagi Shapely. Anda harus meneruskan koordinat titik ke konstruktor Polygon. Seperti ini:

>>> 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

Karena saya terus mencari di Google untuk ini sesekali, inilah cara saya lebih suka melakukannya (saya merasa lebih mudah dibaca seperti ini):

>>> 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 mengatakan hal-hal mungkin di-cache tetapi pendekatan @sgillies tampaknya secara konsisten 2/3 lebih cepat (~milik saya 65 vs ~45 miliknya) jadi jika Anda membutuhkan kinerja super ultra hardcore untuk trilyunan poin atau poli, pertimbangkan itu.

Sedikit lebih cepat lagi:

points = [Point(0,0), Point(2,2), Point(2,0)]
coords = [p.coords[:][0] for p in points]
poly = Polygon(coords)
poly.area
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

MarkWieczorek picture MarkWieczorek  ·  4Komentar

sgillies picture sgillies  ·  5Komentar

LostFan123 picture LostFan123  ·  3Komentar

mromanie picture mromanie  ·  3Komentar

jrobichaud picture jrobichaud  ·  3Komentar