ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ,
Π― Π½Π΅ Π½Π°ΡΠ΅Π» ΡΠΏΠΈΡΠΊΠ° ΡΠ°ΡΡΡΠ»ΠΊΠΈ ΡΠΎΡΡΠΌΠ°, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ ΡΠΏΡΠΎΡΠΈΡΡ Π·Π΄Π΅ΡΡ. ΠΡΡΡ Π»ΠΈ Β«ΠΊΠ°Π½ΠΎΠ½ΠΈΡΠ΅ΡΠΊΠ°ΡΒ» ΡΠΎΡΠΌΠ° Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° ΡΠΎΡΠ΅ΠΊ Π² ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ? ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,
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)
ΠΡΠΎΡ ΠΊΠΎΠ΄ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ convx_hull:
poly = MultiPoint(list_points).convex_hull
Π§ΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠΎ, ΡΡΠΎ Ρ ΠΈΡΡ.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΡΠ΅ΡΠΏΠ΅Π½ΠΈΠ΅ ΠΈ Ρ ΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ!
ΠΠΎΡ ΡΡΠΎ: ΠΊΠΎΠ»ΡΡΠ° ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ² (ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ LinearRing) Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΠΎΡΠΊΠ°ΠΌΠΈ, ΠΎΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡΠΌΠΈ ΠΊΠΎΡΡΠ΅ΠΆΠ΅ΠΉ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ. Π’ΠΎΡΠΊΠΈ ΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ - ΡΡΠΎ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΠΈ Π΄Π»Ρ 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
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ Π²ΡΠ΅ΠΌΡ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΡ ΡΡΠΎ Π² Google, Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Π²ΠΎΡ ΡΠ°ΠΊ (ΠΌΠ½Π΅ ΡΡΠΎ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠ°Π΅ΠΌΡΠΌ):
>>> 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 ΠΌΠΊΡ Ρ ΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΠΈΠ² ~ 45 ΠΌΠΊΡ Ρ Π½Π΅Π³ΠΎ), ΠΏΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½Π° ΡΡΠΏΠ΅Ρ-ΡΠ»ΡΡΡΠ°-Ρ Π°ΡΠ΄ΠΊΠΎΡΠ½Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π»Ρ ΠΌΠΈΠ»Π»ΠΈΠ°ΡΠ΄ΠΎΠ² ΡΠΎΡΠ΅ΠΊ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ΠΎΠ², ΠΏΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅ ΠΎΠ± ΡΡΠΎΠΌ.
Π‘Π½ΠΎΠ²Π° ΡΠ°ΠΊ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΡΡΠ΅Π΅:
points = [Point(0,0), Point(2,2), Point(2,0)]
coords = [p.coords[:][0] for p in points]
poly = Polygon(coords)
poly.area
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π‘Π½ΠΎΠ²Π° ΡΠ°ΠΊ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΡΡΠ΅Π΅: