Я хотел бы (немного) улучшить документацию для STRTree.
http://shapely.readthedocs.io/en/stable/manual.html#str -packed-r-tree говорит
Shapely предоставляет интерфейс к R-дереву GEOS только для запросов, упакованному с использованием алгоритма Sort-Tile-Recursive. Передайте список геометрических объектов конструктору STRtree, чтобы создать R-дерево, к которому можно запросить другой геометрический объект.
Затем в примере показаны два запроса, которые возвращают объекты Geometry.
Я надеялся, что смогу использовать STRTree точно так же, как модуль rtree: передавать индексы, чтобы иметь возможность сопоставлять геометрию с объектами (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 есть соответствующее обсуждение.
Спасибо, я обновлю это
Сделанный!
[редактировать: удалено испорченное git mess]
Графическое представление примерных геометрий и геометрии запросов было бы здорово, чтобы показать, как он возвращает геометрии, чьи экстенты пересекаются.
Не уверен, стоит ли предлагать использовать глубокую копию, чтобы избежать мутации исходных объектов.
https://github.com/Toblerity/Shapely/pull/623 благодаря QGIS @nathanw
Самый полезный комментарий
https://github.com/Toblerity/Shapely/pull/623 благодаря QGIS @nathanw