32 lines
780 B
Plaintext
32 lines
780 B
Plaintext
|
|
|
||
|
|
|
||
|
|
# let k = 50;
|
||
|
|
query memclear();
|
||
|
|
|
||
|
|
let SSm = SS feed mconsume;
|
||
|
|
let SSm_Pos_mtree = SSm mcreatemtree[Pos]
|
||
|
|
|
||
|
|
let Balls = SS feed
|
||
|
|
extend[Radius: fun(t: TUPLE)
|
||
|
|
distance(attr(t, Pos),
|
||
|
|
SSm_Pos_mtree SSm mdistScan[attr(t, Pos)] head[k] tail[1] extract[Pos])]
|
||
|
|
mconsume
|
||
|
|
|
||
|
|
let maxRadius = Balls mfeed max[Radius]
|
||
|
|
|
||
|
|
let PCm = Balls mfeed head[0] mconsume;
|
||
|
|
let PCm_Pos_mtree = PCm mcreatemtree[Pos]
|
||
|
|
|
||
|
|
query Balls mfeed filter[fun(t: TUPLE)
|
||
|
|
PCm_Pos_mtree PCm mdistRange[attr(t, Pos), attr(t, Radius) + maxRadius]
|
||
|
|
filter[distance(attr(t, Pos), .Pos) < attr(t, Radius) + .Radius]
|
||
|
|
count = 0]
|
||
|
|
minsert[PCm]
|
||
|
|
minsertmtree[PCm_Pos_mtree, Pos]
|
||
|
|
consume
|
||
|
|
|
||
|
|
let PC = PCm mfeed project[Osm_id, Pos, Radius] addcounter[N, 0]
|
||
|
|
extend[C: circle(.Pos, .Radius, 20)]
|
||
|
|
consume
|
||
|
|
|