Más

¿Cómo aumentar el rendimiento para la consulta del vecino más cercano utilizando un multipunto? (Impulsar la geometría)


La siguiente función obtiene el punto más cercano de un árbol a una geometría multipunto. Me gustaría que el rendimiento de la función fuera mejor. ¿Hay alguna forma de hacerlo más rápido?

TimingLink * JourneyPattern :: getClosestFromTimingLink (multipunto g, int maxFromSequence) {estándar :: vector result_n; linkFromTree.query (bgi :: más cercano (g, 1) && bgi :: satisfies ([maxFromSequence] (LinkPair const & v) {return ((v.second) -> fromSequence 

El propósito de la función es encontrar un punto en el rtree linkFromTree que esté más cerca del multipunto gy cuyo fromSequence sea menor que maxFromSequence. linkFromTree es un rtree creado usando el algoritmo de empaquetado y generalmente contiene alrededor de 100 puntos. El multipunto g también contendrá unos 100 puntos.

La parte lenta parece estar usando un multipunto (g) para hacer la consulta de vecino más cercano, ya que tengo una función similar que usa un punto en su lugar y es mucho más rápida (promedio 20 veces más rápido).


La solución fue usar un kdtree en lugar de rtree. Usé nanoflann. Funciona unas 20 veces más rápido.