2016-12-24 3 views
0

J'ai la configuration suivante - il est construit rtree sur les points:Python rtree le plus proche - que fait-il exactement?

from collections import defaultdict 
from math import sqrt 
import rtree.index 

points = [(5, 4), (3, 1), (6, 3), (2, 8), (7, 8), (8, 1), (2, 3), (0, 4), (3, 7), (6, 4)] 

idx = rtree.index.Rtree() 

for i, p in enumerate(points): 
    idx.insert(i, p+p, p) 

Maintenant, je suis en train de trouver tous les points dans la certaine distance de certain point:

max_distance=5 
p = (6,4) 
list(idx.nearest(p, 5, objects='raw')) 

Je reçois

[(6, 4), (6, 3), (5, 4), (8, 1), (2, 3), (7, 8)] 

La question est - pourquoi (3, 1) n'est pas inclus dans la liste? La distance est de ~ 4.24 donc il devrait être inclus, non?

+0

Pourquoi insérez-vous à 'p + p'? –

Répondre

1

La méthode la plus proche "Renvoie les k-objets les plus proches des coordonnées données", c'est-à-dire qu'elle renvoie les objets les plus proches indépendants sur sa distance.

La distance des objets n'est pas un paramètre de la fonction la plus proche, comme décrit au Rtree documentation. Le deuxième paramètre est le nombre de résultats que vous voulez. Dans votre cas, il renvoie six valeurs car les points (6, 3), (5, 4) ont la même distance (1) au point (6, 4).

Pour obtenir les objets à une certaine distance, vous devez utiliser the intersection method.