Necesito construir un árbol R usando puntos de datos dados.He buscado la implementación del árbol R.Toda la implementación encontré construir el árbol r cuando me dieron coordenadas de rectángulo como entrada .Necesito construir r tree cuando se le dan puntos de datos en sí (puede ser de 1 dimensión). El código debe encargarse de crear rectángulos que encierren estos puntos de datos y construyan r tree.cómo construir un RTree usando los puntos de datos dados
Respuesta
Usa los MBR (Minimum bounding rectangle) con min = max = coordenada. Todos lo hacen de esta manera. Sin embargo, las buenas implementaciones almacenarán datos de puntos con aproximadamente el doble de la capacidad en las hojas que en los nodos de directorio.
Supongo que usar un Rtree para almacenar puntos parece un mal uso. Aunque este tipo de estructura está indicada para almacenar datos espaciales, después de algunas investigaciones descubrí que es la más adecuada para almacenar regiones de área distinta de cero (ya que la R del nombre es para Región o Rectángulo). Crear una tabla simple con un buen índice debería ofrecer un mejor rendimiento, ya sea para actualizar y buscar datos. Considero que mi ejemplo a continuación:
CREATE TABLE locations (id, latitude, longitude);
CREATE INDEX idx_locations ON locations (latitude, longitude);
es preferible sobre
CREATE VIRTUAL TABLE locations USING rtree(id, minLatitude, maxLatitude, minLongitude, maxLongitude);
si la intención es repetir minLatitude sobre maxLatitude y minLongitude sobre maxLongitude para cada fila como para representar puntos y no rectángulos. Aunque este último enfoque funcionará como se espera, los Rtrees son adecuados para indexar áreas rectangulares y usarlas para almacenar puntos es un mal uso con el peor rendimiento. Prefiere un índice compuesto como el anterior.
Más información: http://www.deepdyve.com/lp/acm/r-trees-a-dynamic-index-structure-for-spatial-searching-ZH0iLI4kb0?key=acm
No puedo estar de acuerdo. Necesitaba índices solo de puntos y las consultas de R-tree eran más rápidas que el índice compuesto (SQLite). La espacialidad no se trata solo de datos, sino también de consultas: si desea conocer todos los puntos (datos) contenidos en un rectángulo (consulta), intente con R-trees. – pwes
Si usted está buscando una aplicación C++, la contenida en Boost.Geometry actualmente (. Boost 1.57) es capaz de almacenar puntos, Cajas y segmentos. La ventaja obvia es que los datos en las hojas del árbol no se duplique lo que significa que se utiliza menos memoria, el almacenamiento en caché es mejor, etc. El uso es el siguiente:
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/geometries.hpp>
#include <boost/geometry/index/rtree.hpp>
#include <vector>
namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;
int main()
{
typedef bg::model::point<float, 2, bg::cs::cartesian> point;
typedef bg::model::box<point> box;
// a container of points
std::vector<point> points;
// create the rtree
bgi::rtree< point, bgi::linear<16> > rtree(points.begin(), points.end());
// insert some additional points
rtree.insert(point(/*...*/));
rtree.insert(point(/*...*/));
// find points intersecting a box
std::vector<point> query_result;
rtree.query(bgi::intersects(box(/*...*/)), std::back_inserter(query_result));
// do something with the result
}
Aquí hay algunos ejemplos numéricos con aserciones: https://github.com/cirosantilli/cpp-cheat/blob/160e96ec04df93c4ad227d63af5e651498bca834/boost/rtree.cpp –
- 1. cómo generar mapas de calor dados los puntos
- 2. Elija los puntos k más cercanos de los n puntos dados
- 3. Cómo calcular el vértice de una parábola dados tres puntos
- 4. Dados 3 puntos, ¿cómo calculo el vector normal?
- 5. Dados: Simulando un juego de Dados
- 6. calcular la distancia dados 2 puntos, latitud y longitud
- 7. Estructura de datos para dados cargados?
- 8. Dados 2 puntos, ¿cómo dibujo una línea en ángulo recto con respecto a la línea formada por los dos puntos?
- 9. ¿Cómo puedo crear un dado virtual (para jugar a los dados) usando html y css?
- 10. Cómo construir un softphone (usando el protocolo SIP) usando C#
- 11. ¿Cómo se interpola entre los puntos de datos?
- 12. Reconocimiento de valor nominal de los dados
- 13. ¿Construir un árbol de probabilidad usando php?
- 14. Construir un ejecutable Linux usando GCC
- 15. construir un simple despachador remoto usando multiprocessing.Managers
- 16. Usando el gráfico de líneas KendoUI, ¿cómo hacer que los marcadores de datos (puntos) tengan un color sólido?
- 17. ¿Cómo extraer los datos de un sitio web usando Java?
- 18. Cómo obtener los datos EXIF de un archivo usando C#
- 19. ¿Cómo construir un sistema de donación de PayPal que da puntos
- 20. Trazado de puntos de datos de 3 tuplas en un gráfico de superficie/contorno usando matplotlib
- 21. OpenLayers: ¿cómo dibujo un polígono de los puntos LonLat existentes?
- 22. Cómo construir datos robustos en clojure
- 23. ¿Se recomienda construir un foro usando node.js?
- 24. ¿Podemos construir un sitio web usando MSBuild
- 25. Android - adjuntar los datos de puntos de vista
- 26. ¿Cómo construir un contenedor usando maven, ignorando los resultados de las pruebas?
- 27. cómo calcular los puntos de control para una ruta sin problemas dado un conjunto de puntos?
- 28. Crear QTransform dados 4 puntos de definición de la unidad transformado cuadrados
- 29. ¿Cómo puedo encontrar el círculo mínimo que incluye algunos puntos dados?
- 30. Rectángulos de puntos usando Python
pueda para elaborar un poco? En la mayoría de los códigos de árbol R, debe crear un rectángulo (con los puntos inferior derecho y superior derecho) y agregar el rectángulo al árbol R. ¿Estás diciendo que si queremos almacenar un solo punto, entonces ambos puntos (abajo a la derecha y arriba a la derecha) deberían ser el mismo punto? – stackoverflowuser2010
El MBR de un solo punto tiene, por supuesto, 'min = max = coordinate'. Al almacenar puntos en lugar de MBR a nivel de hoja, obtenemos aproximadamente el doble de objetos allí, lo que reduce el espacio en disco en casi 2. –
Gracias. Entonces, al descifrar tu respuesta, supongo que debes decir "sí, si queremos almacenar un solo punto, entonces ambos puntos (abajo a la derecha y arriba a la derecha) deben ser el mismo punto". ¿Es mejor un R-tree para almacenar puntos que otras estructuras de datos, como un quadtree de región de punto? – stackoverflowuser2010