Shapely: docs: STRTree ๋ฌธ์„œ์— ๋Œ€ํ•œ ์„ค๋ช…

์— ๋งŒ๋“  2018๋…„ 07์›” 30์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: Toblerity/Shapely

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:: ํ•ญ๋ชฉ์„ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค๋ฉด ๊ทธ๋ƒฅ ๊ทธ๋ ‡๊ฒŒ ๋งํ•˜์‹ญ์‹œ์˜ค. :)

documentation

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

QGIS์˜ @nathanw ๋•๋ถ„์— https://github.com/Toblerity/Shapely/pull/623

๋ชจ๋“  4 ๋Œ“๊ธ€

@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

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰