Функция пересечения R-дерева не находит точку, даже если она / вставка не вставляет все точки - PullRequest
0 голосов
/ 06 октября 2018

Я сохраняю некоторые x-y coordinates и по отдельности в r-дереве, перебирая все строки кадра данных pandas и сохраняя столбцы x и y.Чтобы вставить точки, я делаю, как предложено idx.insert(0, (left, bottom, right, top)), а left == right && top == bottom.Объединенные координаты образуют несколько графиков.

Теперь я пытаюсь выяснить, находится ли случайная точка xStart, yStart в r-дереве, используя startInData=list(idx.intersection((xStart, yStart, xStart, yStart))).Если startInData равно empty, я должен быть уверен, что точка не содержится в r-дереве, верно?Однако, похоже, что функция не работает так.Я проверил это вручную, так как был удивлен, что точка никогда не была найдена в дереве, и обнаружил, что многие точки на самом деле являются частью моего Pandas Dataframe, но не распознаются с помощью list(idx.intersection((xStart, yStart, xStart, yStart))).

Как это может быть?

Это мой код:

import pandas as pd
from rtree import index

df = pd.DataFrame({'id':[1,1,1,1,2,2,2,2], 'x':[1,1,2,2,9,10,10,11],'y':[0,1,1,2,7,7,8,8]})
#my dataframe is actually much bigger but for demonstration i give you this

idx = index.Index()
for i, row in df.iterrows():
    idx.insert(i, (row["x"], row["y"], row["x"],row["y"]))

xStart = randint(0,39)
yStart = randint(0,39)
startingPoint= xStart,yStart
startInData= list(idx.intersection((xStart, yStart, xStart, yStart)))
if not startInData:
    neighboursStart=list(idx.nearest((xStart, yStart, xStart, yStart), 4))
    print("Starting point not in Data")
else:
    neighboursStart=startInData
    print("Starting point in Data")

В случае, если Начальная точка находится в Дереве, я хочу установить ее в качестве начальной точки,в противном случае я считаю "neighbors" с помощью neighboursStart=list(idx.nearest((xStart, yStart, xStart, yStart), 4)).Как-то не получается так, как я хочу, чтобы это работало.Есть идеи?

ОБНОВЛЕНИЕ:

Похоже, проблема не в том, что intersection работает не так, как он думал, а в том, что мое количество очков слишком велико для структуры r-tree.Это не сохраняет все мои очки, но останавливается на индексе 100-160?Есть ли способ продлить номер индекса или что-то еще?Мне интересно, что он достигает только около 100. Это нормально?Он работает с меньшим Dataframes, но с большими он не добавляет все очки.

...