STRTree์ ๋ํ ๋ฌธ์๋ฅผ (์ฝ๊ฐ) ๊ฐ์ ํ๊ณ ์ถ์ต๋๋ค.
http://shapely.readthedocs.io/en/stable/manual.html#str -packed-r-tree ๋งํ๋ค
Shapely๋ Sort-Tile-Recursive ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ์์ถ๋ ์ฟผ๋ฆฌ ์ ์ฉ GEOS R-ํธ๋ฆฌ์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ธฐํ ๊ฐ์ฒด ๋ชฉ๋ก์ STRtree ์์ฑ์์ ์ ๋ฌํ์ฌ ๋ค๋ฅธ ๊ธฐํ ๊ฐ์ฒด๋ก ์ฟผ๋ฆฌํ ์ ์๋ R-ํธ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์์ ์์๋ Geometry ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ๋ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
๋๋ rtree ๋ชจ๋์ฒ๋ผ STRTree๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋์ต๋๋ค. ์ง์ค๋ฉํธ๋ฆฌ๋ฅผ (Fiona) ๊ธฐ๋ฅ๊ณผ ์ผ์น์ํฌ ์ ์๋๋ก ์ธ๋ฑ์ค ๋ฒํธ๋ฅผ ์ ๋ฌํ์ง๋ง ๊ทธ๋ ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. STRTree๋ ๋จ์ํ Geometry ๊ฐ์ฒด ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๊ณ ์ฟผ๋ฆฌ์์ ์๊ณ ์๋ ๊ต์ฐจ Geometry ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. ์์๋ ์ธ๋ฑ์ค๊ฐ ์์ต๋๋ค. ๊ทธ ๋ง์ต๋๊น?
๊ทธ๋ ๋ค๋ฉด ์ฟผ๋ฆฌ ๋ฉ์๋๊ฐ ๋ฐํํ๋ ๋ด์ฉ์ ๋ํด ํ ๋ฌธ์ฅ๋ง ์ถ๊ฐํ๊ฒ ์ต๋๋ค. ํด๋์ค ์ค๋ช
(์: Point)์ ๊ฒฝ์ฐ ์์ฑ์ด ์ฐ๋ฌธ์ผ๋ก ํ์๋์ง๋ง ์ด๊ฒ์ด ์๋ก์ด .. method::
ํญ๋ชฉ์ ๊ฐ์ ธ์์ผ ํ๋ค๋ฉด ๊ทธ๋ฅ ๊ทธ๋ ๊ฒ ๋งํ์ญ์์ค. :)
@kannes ์ฐ๋ฆฌ๋ ์ง๊ธ ๋ฌด์์ด ์ ์ฅ๋๋์ง์ ๋ํด ์ ์ฐํ์ง ์์ง๋ง ๊ธฐํํ ๊ฐ์ฒด์ ๋ชจ๋ ์์ฑ์ ์ ์ฅํฉ๋๋ค. ์ด๋ฌํ ์ง์ค๋ฉํธ๋ฆฌ ๊ฐ์ฒด๋ __dict__
๋ฉค๋ฒ์ ์์ฑ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์์ฑ๋ ํ ์ง์ค๋ฉํธ๋ฆฌ ๊ฐ์ฒด์ ์์ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค( geom.myattr
๋ geom.__dict__['myattr']
๋ก ์ฝ์). Shapely์ ์ด ๋์์ ์กฐ๋ง๊ฐ ๋ณ๊ฒฝํ์ง ์์ ์์ ์ด๋ฏ๋ก ๋ค์ ์ฝ๋๋ ์ต์ํ ๊ฐ์์ Shapely 2.0๊น์ง๋ ์๋ํด์ผ ํฉ๋๋ค.
>>> from shapely.strtree import STRtree
>>> from shapely.geometry import Point
>>> pt = Point(0.0, 0.0)
>>> pt.name = 'foo'
>>> tree = STRtree([pt])
>>> tree.query(Point(1.0, 1.0).buffer(2.0))
[<shapely.geometry.point.Point object at 0x109254208>]
>>> results = tree.query(Point(1.0, 1.0).buffer(2.0))
>>> respt = results[0]
>>> respt
<shapely.geometry.point.Point object at 0x109254208>
>>> respt.name
'foo'
#615์ ๊ด๋ จ๋ ๋ ผ์๊ฐ ์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค ์ ๋ฐ์ดํธํ๊ฒ ์ต๋๋ค
์๋ฃ!
[ํธ์ง: ๋ง์น ์์ ์๋ง ์ ๊ฑฐ]
์์ ์ง์ค๋ฉํธ๋ฆฌ ๋ฐ ์ฟผ๋ฆฌ ์ง์ค๋ฉํธ๋ฆฌ์ ๊ทธ๋ํฝ ํํ์ ๋ฒ์๊ฐ ๊ต์ฐจํ๋ ์ง์ค๋ฉํธ๋ฆฌ๋ฅผ ๋ฐํํ๋ ๋ฐฉ๋ฒ์ ์ถ๊ฐ๋ก ๋ณด์ฌ์ฃผ๊ธฐ์ ์ข์ต๋๋ค.
์๋ณธ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ธฐ ์ํด deepcopy๋ฅผ ์ฌ์ฉํ๋๋ก ์ ์ํด์ผ ํ๋์ง ํ์คํ์ง ์์ต๋๋ค.
QGIS์ @nathanw ๋๋ถ์ https://github.com/Toblerity/Shapely/pull/623
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
QGIS์ @nathanw ๋๋ถ์ https://github.com/Toblerity/Shapely/pull/623