์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ,
ํฌ๋ผ์ ๋ฉ์ผ๋ง ๋ฆฌ์คํธ๋ฅผ ์ฐพ์ง ๋ชปํด์ ์ฌ๊ธฐ์ ์ง๋ฌธํ๋ ค๊ณ ํฉ๋๋ค. ํฌ์ธํธ ๋ชฉ๋ก์์ ๋ค๊ฐํ์ผ๋ก ๋ณํํ๋ "ํ์ค" ํ์์ด ์์ต๋๊น? ์๋ฅผ ๋ค์ด,
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
๋ด๊ฐ ์ฐพ๊ณ ์๋ ๊ฒ์ ์ ํํ์ง ์์ต๋๋ค.
์ธ๋ด์ฌ๊ณผ ์ข์ ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
ํด๋ฆฌ๊ณค ๋ง(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
์ด๋ฐ๊ธ ์ธํฐ๋ท ๊ฒ์์ ๊ณ์ํ๋ฉด์ ์ ํธํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
>>> 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
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ค์ ์ฝ๊ฐ ๋ ๋นจ๋ผ์ก์ต๋๋ค.