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 nodes = force.nodes()
|
||||
var nl = nodes.length
|
||||
|
@ -296,7 +296,7 @@ force.on("tick", function(e) {
|
|||
vis.selectAll(".label").attr("transform", function(d) {
|
||||
return "translate(" + d.x + "," + d.y + ")";
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
var data
|
||||
|
||||
|
@ -373,10 +373,51 @@ function reload() {
|
|||
d3.select("#clientcount")
|
||||
.text("ungefähr " + (nClients - nNodes) + " Clients")
|
||||
|
||||
data = wilder_scheiß(data)
|
||||
|
||||
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 node_drag = d3.behavior.drag()
|
||||
|
@ -607,6 +648,25 @@ function update() {
|
|||
.alpha(0.1)
|
||||
.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 = {}
|
||||
|
||||
links.forEach(function(d) {
|
||||
|
@ -617,6 +677,8 @@ function update() {
|
|||
show_node(hashstr)
|
||||
}
|
||||
|
||||
var initial = 1
|
||||
|
||||
reload()
|
||||
|
||||
var timer = window.setInterval(reload, 30000)
|
||||
|
|
Loading…
Reference in a new issue