Quiero implementar algunos rey de la estructura de datos de indexación espacial para mi MKAnnotations
. Actualmente es terriblemente lento cuando trato de filtrarlos según los criterios de distancia (3-4k de ubicaciones, actualmente extremadamente lento con un simple doble for
...).¿Qué algoritmo de indexación espacial debo usar?
Me gustaría crear clusters de MKAnnotations
, para decidir si está cerca de otro. Además, estas ubicaciones están en un orden algo (de creación) y se necesitaría una funcionalidad "anterior"/"siguiente" para "saltar" (esto no es obligatorio). He leído acerca de las estructuras kd-tree
y r-tree
y ambas parecen cumplir con la opción de obtención de distancia/vecindad rápida para filtrar/agrupar, pero no estoy seguro de cuál es la mejor para mí o si también hay otras opciones. ¿Qué algoritmo/estructura de datos debo usar?
Update: Guardo estas ubicaciones en una base de datos Core Data, representan una ruta. Cuando se abre el mapa, se extraen en una matriz y luego solo uso esa matriz para cálculos de distancia y creación de anotaciones. Cuando el usuario mueve/amplía el mapa, lo recorro y decido qué se debe cambiar en el mapa, por lo que es un poco estático todo el material. Como entendí, si estuviera usando un árbol, podría almacenar las ubicaciones allí y cuando ocurre un zoom/movimiento solo busco y obtengo los que están en la nueva región. Es esto cierto ?
Incluso en el caso dinámico, cuando puedo agregar nuevas ubicaciones a esta matriz, sería una sola inserción y está sucediendo con poca frecuencia.
Ver mis ediciones de patrones de uso anteriores. No quiero usar hash tipo grilla, no se ven bien y para mi caso no son adecuados. Veré el árbol R * ahora mismo. – Templar
Si sus datos son estáticos, la carga masiva de un árbol R (no hay ninguna diferencia entre R y R cargado a granel, ya que difieren solo en la inserción) también es una opción, intente sort-tile-recursive. –
Tenga en cuenta que con los hash tipo grilla solo me refiero a su estructura de datos, NO a la representación visual para el usuario. Solo * agrupa * objetos para la organización si caen en la misma celda de la cuadrícula. En la pantalla, solo escanea las celdas que necesita mostrar. Un árbol apenas puede hacerlo mejor. –