Вы можете использовать библиотеку с именем: Rtree
, которая не зависит от пространственно включенной базы данных.
Из учебника :
# Import the library and create an index:
from rtree import index
idx = index.Index()
# Insert your fixed polygons to the index by the envelope (bounding box)
# coordinates of those polygons:
for index, polygon in enumerate(my_polygon_list):
idx.insert(index, polygon.envelope)
# To query with a point you can do the following (explanation after the example):
potential_polys = list(idx.intersection((point.x, point.y, point.x, point.y)))
Разбейте это на части:
- Часть руководства по настройке индекса Rtree довольно проста.
- Граница геометриикоординаты коробки (или конверта) должны иметь следующий формат:
(xmin, ymin, xmax, ymax)
или (left, bottom, right, top)
. В документации указано, что:
Вставкаточка, т. е. где left == right
&& top == bottom
, по существу будет вставлять запись в одну точку в индекс вместо копирования дополнительных координат и их вставки.Однако нет ярлыка для явной вставки одной точки.
Поэтому мы используем эту «причуду», чтобы применить нашу точку к многоугольному intersection
запросу по индексу.