we propose a novel multi-level progressive 3D compression method, which is designed to satisfy two progressive query conditions, thus supports returning correct results even with compressed data whenever possible. Based on this, we further propose novel progressive refinement which starts from lightweight low-resolution representation for possible early return of results and progresses to higher resolution representation, which can be largely avoided. A system TDBase is implemented with progressive refinement to support highly efficient and accurate spatial queries for complex three-dimensional objects.
install the prerequisite libraries: cmake CGAL GMP Boost(program_options) ZLIB OpenMP if the machine equiped with NVIDIA GPU, setup the environment to let the compiler know
export USE_GPU=TRUE_
then compile the code
cd src/
mkdir build
cd build/
cmake ../
make simulator
make tdbase
generate two .dt files, one for nuclei (bar_n_nv1000_nu200_vs100_r30_cm1.dt) and one for vessel (bar_v_nv1000_nu200_vs100_r30_cm1.dt). --nv specifies the number of vessels in the dataset while --nu specifies the number of nuclei around each vessel. Thus the generated dataset contains 1000 vessels and 200,000 nuclei
./simulator -u ../../data/nuclei.pt -v ../../data/vessel.pt -o bar --nv 1000 --nu 200
convert .dt files into decoded format for better performance but with higher storage cost. We are working on improving the decoding efficiency with partial decoding and GPU accelerating.
./tdbase convert bar_n_nv1000_nu200_vs100_r30_cm1.dt foo_n_nv1000_nu200_vs100_r30_cm1.dt
./tdbase convert bar_v_nv1000_nu200_vs100_r30_cm1.dt foo_v_nv1000_nu200_vs100_r30_cm1.dt
conduct a 3NN join. -g specifies that the geometry computation are conducted with GPU.
./tdbase join --tile1 foo_n_nv1000_nu200_vs100_r30_cm1.dt --tile2 foo_v_nv1000_nu200_vs100_r30_cm1.dt -q nn --knn 3 -g --lod 20 40 60 80 100
conduct a 3NN join with the progressive refinement disabled by checking only the highest LOD polyhedrons.
./tdbase join --tile1 foo_n_nv1000_nu200_vs100_r30_cm1.dt --tile2 foo_v_nv1000_nu200_vs100_r30_cm1.dt -q nn --knn 3 -g --lod 100
conduct a 3NN join with the geometric computation conducted using 24 threads (--cn 24)
./tdbase join --tile1 foo_n_nv1000_nu200_vs100_r30_cm1.dt --tile2 foo_v_nv1000_nu200_vs100_r30_cm1.dt -q nn --knn 3 --cn 24 --lod 20 40 60 80 100
conduct a within distance join which conducts a within 50 distance join.
./tdbase join --tile1 foo_n_nv1000_nu200_vs100_r30_cm1.dt --tile2 foo_v_nv1000_nu200_vs100_r30_cm1.dt -q within --within_dist 50 -g --lod 20 40 60 80 100
conduct a 3NN self join.
./tdbase join --tile1 foo_n_nv1000_nu200_vs100_r30_cm1.dt -q nn --knn 3 -g --lod 20 40 60 80 100