Map with German electoral districts: Difference between revisions
From JSXGraph Wiki
A WASSERMANN (talk | contribs) No edit summary |
A WASSERMANN (talk | contribs) No edit summary |
||
Line 28: | Line 28: | ||
function createCurve(area) { | function createCurve(area) { | ||
var | var compos = area[0].split(';'), // Connected component | ||
x = [], y = [], | x = [], y = [], | ||
c = [], | c = [], num, i, a, graph, k, a; | ||
len = xy.length; | num = compos.length; | ||
for (k=0;k<num;k++) { | |||
x = []; y = []; c = []; | |||
xy = compos[k].split(','); | |||
len = xy.length; | |||
for(i=0;i<len;i++) { | |||
a = xy[i].split(' '); | |||
c.push(new JXG.Coords(JXG.COORDS_BY_USER, [1*a[0], 1*a[1]], brd)); | |||
} | |||
c = brd.renderer.RamenDouglasPeuker(c,1.3); | |||
len = c.length; | |||
for (i=0;i<len;i++) { | |||
x.push(c[i].usrCoords[1]); | |||
y.push(c[i].usrCoords[2]); | |||
} | |||
graph = brd.createElement('curve', [x,y], | |||
{fillColor:JXG.hsv2rgb(col++,0.6,0.9), | {fillColor:JXG.hsv2rgb(col++,0.6,0.9), | ||
highlightFillColor:'yellow', | highlightFillColor:'yellow', | ||
strokeWidth:1,strokeColor:'black',highlightStrokeColor:'black'}); | strokeWidth:1,strokeColor:'black',highlightStrokeColor:'black'}); | ||
if (k==0) { | |||
JXG.addEvent(graph.rendNode, 'mouseover', (function(g){ return function(){g.highlight(); wahlkreisNode.nodeValue=area[1];};})(graph), graph); | |||
JXG.addEvent(graph.rendNode, 'mouseout', (function(g){ return function(){g.noHighlight();};})(graph), graph); | |||
} | |||
graph.hasPoint = function(){return false; }; | |||
} | |||
} | } | ||
Line 108: | Line 114: | ||
function createCurve(area) { | function createCurve(area) { | ||
var | var compos = area[0].split(';'), // Connected component | ||
x = [], y = [], | x = [], y = [], | ||
c = [], | c = [], num, i, a, graph, k, a; | ||
len = xy.length; | num = compos.length; | ||
for (k=0;k<num;k++) { | |||
x = []; y = []; c = []; | |||
xy = compos[k].split(','); | |||
len = xy.length; | |||
for(i=0;i<len;i++) { | |||
a = xy[i].split(' '); | |||
c.push(new JXG.Coords(JXG.COORDS_BY_USER, [1*a[0], 1*a[1]], brd)); | |||
} | |||
c = brd.renderer.RamenDouglasPeuker(c,1.3); | |||
len = c.length; | |||
for (i=0;i<len;i++) { | |||
x.push(c[i].usrCoords[1]); | |||
y.push(c[i].usrCoords[2]); | |||
} | |||
graph = brd.createElement('curve', [x,y], | |||
{fillColor:JXG.hsv2rgb(col++,0.6,0.9), | {fillColor:JXG.hsv2rgb(col++,0.6,0.9), | ||
highlightFillColor:'yellow', | highlightFillColor:'yellow', | ||
strokeWidth:1,strokeColor:'black',highlightStrokeColor:'black'}); | strokeWidth:1,strokeColor:'black',highlightStrokeColor:'black'}); | ||
if (k==0) { | |||
JXG.addEvent(graph.rendNode, 'mouseover', (function(g){ return function(){g.highlight(); wahlkreisNode.nodeValue=area[1];};})(graph), graph); | |||
JXG.addEvent(graph.rendNode, 'mouseout', (function(g){ return function(){g.noHighlight();};})(graph), graph); | |||
} | |||
} | graph.hasPoint = function(){return false; }; | ||
} | |||
} | } | ||
Revision as of 14:07, 21 October 2009
For a more elaborate version see http://vis.uell.net/wahlatlas/.
The underlying JavaScript code
<script type="text/javascript" src="/ajax/germany.js"></script>
<div id="wahlkreis"> </div>
<jsxgraph width="500" height="700">
var minX =-289319.4,
maxY = 6827620,
maxX = 351315.7,
minY = 5960587,
brd,
wahlkreisNode = document.getElementById('wahlkreis').firstChild,
points = [],
len = data.length, // from germany.js
lastWk = null,
i, col = 0;
brd = JXG.JSXGraph.initBoard('jxgbox', {boundingbox:[minX-1000,maxY+1000,maxX+1000,minY-1000],
keepaspectratio:true});
for(i=0;i<len;i++) {
if(i%6==1) {
lastWk = data[i];
}
else if(i%6 == 5) {
points.push([data[i],lastWk]);
}
}
function createCurve(area) {
var compos = area[0].split(';'), // Connected component
x = [], y = [],
c = [], num, i, a, graph, k, a;
num = compos.length;
for (k=0;k<num;k++) {
x = []; y = []; c = [];
xy = compos[k].split(',');
len = xy.length;
for(i=0;i<len;i++) {
a = xy[i].split(' ');
c.push(new JXG.Coords(JXG.COORDS_BY_USER, [1*a[0], 1*a[1]], brd));
}
c = brd.renderer.RamenDouglasPeuker(c,1.3);
len = c.length;
for (i=0;i<len;i++) {
x.push(c[i].usrCoords[1]);
y.push(c[i].usrCoords[2]);
}
graph = brd.createElement('curve', [x,y],
{fillColor:JXG.hsv2rgb(col++,0.6,0.9),
highlightFillColor:'yellow',
strokeWidth:1,strokeColor:'black',highlightStrokeColor:'black'});
if (k==0) {
JXG.addEvent(graph.rendNode, 'mouseover', (function(g){ return function(){g.highlight(); wahlkreisNode.nodeValue=area[1];};})(graph), graph);
JXG.addEvent(graph.rendNode, 'mouseout', (function(g){ return function(){g.noHighlight();};})(graph), graph);
}
graph.hasPoint = function(){return false; };
}
}
//Copyright 2009 Nicholas C. Zakas. All rights reserved.
//MIT Licensed
function timedChunk(items, process, context, callback){
var todo = items.concat(); //create a clone of the original
setTimeout(function(){
var start = +new Date();
do {
process.call(context, todo.shift());
} while (todo.length > 0 && (+new Date() - start < 300));
if (todo.length > 0){
setTimeout(arguments.callee, 1);
} else {
callback(items);
}
}, 1);
}
brd.suspendUpdate();
timedChunk(points, createCurve, null, final);
</jsxgraph>