Algorithm 5.
SparkGIS Spatial kNN
| 1: | procedure NativeSpatialKNN(tile, k, searchRadius) |
| 2: | dataset1 // all objects from dataset1 in tile |
| 3: | dataset2 // all objects from dataset2 in tile |
| 4: | /* local R*tree index */ |
| 5: | localIndex.build(dataset2) |
| 6: | getObjectDensity() |
| 7: | for each object in dataset1 do |
| 8: | while searchRadius < spacedimensions do |
| 9: | /* Use local index to get qualifying objects */ |
| 10: | if qualifying objects > (k * 1.5) then |
| 11: | break |
| 12: | else searchRadius* = 2 |
| 13: | end if |
| 14: | end while |
| 15: | end for |
| 16: | for each qualifying object from dataset2 do |
| 17: | Compute distance |
| 18: | end for |
| 19: | Sort(distance, neighbors) |
| 20: | return first k results |
| 21: | end procedure |