position nodes according to the geographic position initially and skip the early force ticks
This commit is contained in:
parent
c7479774df
commit
484f2bef20
|
@ -267,7 +267,7 @@ var force = d3.layout.force()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
force.on("tick", function(e) {
|
function tick_event(e) {
|
||||||
var size = force.size()
|
var size = force.size()
|
||||||
var nodes = force.nodes()
|
var nodes = force.nodes()
|
||||||
var nl = nodes.length
|
var nl = nodes.length
|
||||||
|
@ -296,7 +296,7 @@ force.on("tick", function(e) {
|
||||||
vis.selectAll(".label").attr("transform", function(d) {
|
vis.selectAll(".label").attr("transform", function(d) {
|
||||||
return "translate(" + d.x + "," + d.y + ")";
|
return "translate(" + d.x + "," + d.y + ")";
|
||||||
})
|
})
|
||||||
})
|
}
|
||||||
|
|
||||||
var data
|
var data
|
||||||
|
|
||||||
|
@ -373,10 +373,51 @@ function reload() {
|
||||||
d3.select("#clientcount")
|
d3.select("#clientcount")
|
||||||
.text("ungefähr " + (nClients - nNodes) + " Clients")
|
.text("ungefähr " + (nClients - nNodes) + " Clients")
|
||||||
|
|
||||||
|
data = wilder_scheiß(data)
|
||||||
|
|
||||||
update()
|
update()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function fix_geonodes(nodes, x) {
|
||||||
|
nodes.filter(function(d) {
|
||||||
|
return d.geo !== null
|
||||||
|
}).forEach(function(d) {
|
||||||
|
d.fixed = x
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function wilder_scheiß(data) {
|
||||||
|
var nodes = data.nodes.filter(function(d) {
|
||||||
|
return d.geo !== null
|
||||||
|
})
|
||||||
|
|
||||||
|
var lat = nodes.map(function(d) { return d.geo[0] })
|
||||||
|
var lon = nodes.map(function(d) { return d.geo[1] })
|
||||||
|
|
||||||
|
var max_lat = Math.min.apply(null, lat)
|
||||||
|
var min_lat = Math.max.apply(null, lat)
|
||||||
|
|
||||||
|
var min_lon = Math.min.apply(null, lon)
|
||||||
|
var max_lon = Math.max.apply(null, lon)
|
||||||
|
|
||||||
|
var width = force.size()[0]
|
||||||
|
var height = force.size()[1]
|
||||||
|
|
||||||
|
var scale_x = width / (max_lon - min_lon)
|
||||||
|
var scale_y = height / (max_lat - min_lat)
|
||||||
|
|
||||||
|
nodes.forEach(function(d) {
|
||||||
|
if (d.x || d.y)
|
||||||
|
return
|
||||||
|
|
||||||
|
d.x = (d.geo[1] - min_lon) * scale_x
|
||||||
|
d.y = (d.geo[0] - min_lat) * scale_y
|
||||||
|
})
|
||||||
|
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
var dragging = false
|
var dragging = false
|
||||||
|
|
||||||
var node_drag = d3.behavior.drag()
|
var node_drag = d3.behavior.drag()
|
||||||
|
@ -607,6 +648,25 @@ function update() {
|
||||||
.alpha(0.1)
|
.alpha(0.1)
|
||||||
.start()
|
.start()
|
||||||
|
|
||||||
|
if (initial == 1) {
|
||||||
|
fix_geonodes(data.nodes, true)
|
||||||
|
|
||||||
|
force.alpha(0.1)
|
||||||
|
while(force.alpha() > 0.05)
|
||||||
|
force.tick()
|
||||||
|
|
||||||
|
fix_geonodes(data.nodes, false)
|
||||||
|
|
||||||
|
force.alpha(0.1)
|
||||||
|
while(force.alpha() > 0.05)
|
||||||
|
force.tick()
|
||||||
|
|
||||||
|
force.on("tick", tick_event)
|
||||||
|
force.start()
|
||||||
|
}
|
||||||
|
|
||||||
|
initial = 0
|
||||||
|
|
||||||
linkedByIndex = {}
|
linkedByIndex = {}
|
||||||
|
|
||||||
links.forEach(function(d) {
|
links.forEach(function(d) {
|
||||||
|
@ -617,6 +677,8 @@ function update() {
|
||||||
show_node(hashstr)
|
show_node(hashstr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var initial = 1
|
||||||
|
|
||||||
reload()
|
reload()
|
||||||
|
|
||||||
var timer = window.setInterval(reload, 30000)
|
var timer = window.setInterval(reload, 30000)
|
||||||
|
|
Loading…
Reference in a new issue