Геоджанго - в памяти r-tree index - PullRequest
0 голосов
/ 08 октября 2018

Как я могу создать индекс r-дерева в памяти, используя Geodjango?

У меня есть несколько фиксированных полигонов (жестко закодированных), и я хотел бы проверить, к какому из этих полигонов относится точка.

Я хотел бы сделать это в памяти, чтобы избежать зависимостив пространственной базе данных.

1 Ответ

0 голосов
/ 16 октября 2018

Вы можете использовать библиотеку с именем: 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 запросу по индексу.

...