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!
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
Komentar yang paling membantu
Sedikit lebih cepat lagi: