From 5aa27172262d4ac6575095918313a64827c52472 Mon Sep 17 00:00:00 2001 From: Jason Davies Date: Sat, 27 Nov 2010 11:02:30 +0000 Subject: [PATCH] Treat null `url` for `po.image` as empty tiles. Instead of setting the image URL to `about:blank`, no image URL is set when `null` URLs are detected. This appears to be slightly faster than using `about:blank`, at least in Firefox. I've updated `po.image`'s `repeat` accordingly. --- polymaps.js | 18 +++++--- polymaps.min.js | 114 ++++++++++++++++++++++++------------------------ src/Image.js | 16 ++++--- src/Url.js | 2 +- 4 files changed, 81 insertions(+), 69 deletions(-) diff --git a/polymaps.js b/polymaps.js index 8e8f64d..b935d86 100644 --- a/polymaps.js +++ b/polymaps.js @@ -192,7 +192,7 @@ po.url = function(template) { column = c.column % max; if (column < 0) column += max; } else if ((column < 0) || (column >= max)) { - return "about:blank"; + return null; } return template.replace(/{(.)}/g, function(s, v) { switch (v) { @@ -1110,13 +1110,19 @@ po.image = function() { if (typeof url == "function") { element.setAttribute("opacity", 0); - tile.request = po.queue.image(element, url(tile), function(img) { - delete tile.request; + var tileUrl = url(tile); + if (tileUrl !== null) { + tile.request = po.queue.image(element, tileUrl, function(img) { + delete tile.request; + tile.ready = true; + tile.img = img; + element.removeAttribute("opacity"); + image.dispatch({type: "load", tile: tile}); + }); + } else { tile.ready = true; - tile.img = img; - element.removeAttribute("opacity"); image.dispatch({type: "load", tile: tile}); - }); + } } else { tile.ready = true; if (url) element.setAttributeNS(po.ns.xlink, "href", url); diff --git a/polymaps.min.js b/polymaps.min.js index 9ed4689..9966bfb 100644 --- a/polymaps.min.js +++ b/polymaps.min.js @@ -1,62 +1,62 @@ if(!org)var org={};if(!org.polymaps)org.polymaps={}; -(function(s){function fa(e){var h=e.indexOf(":");return h<0?e:{space:s.ns[e.substring(0,h)],local:e.substring(h+1)}}function S(){for(var e=0;eh.row){var c=e;e=h;h=c}return{x0:e.column,y0:e.row,x1:h.column,y1:h.row,dx:h.column-e.column,dy:h.row-e.row}}function ca(e,h,c,k,g){c=Math.max(c,Math.floor(h.y0)); -k=Math.min(k,Math.ceil(h.y1));if(e.x0==h.x0&&e.y0==h.y0?e.x0+h.dy/e.dy*e.dx0,q=h.dx<0;for(c=c;ch.dy){c=f;f=h;h=c}if(f.dy>e.dy){c=f;f=e;e=c}if(h.dy>e.dy){c=h;h=e;e=c}f.dy&&ca(e,f,k,g,a);h.dy&&ca(e,h,k,g,a)}s.version="2.3+1.0"; -var Y={x:0,y:0};s.ns={svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink"};s.id=function(){var e=0;return function(){return++e}}();s.svg=function(e){return document.createElementNS(s.ns.svg,e)};s.transform=function(e,h,c,k,g,a){var f={},m,q,t;if(!arguments.length){e=1;h=g=c=0;k=1;a=0}f.zoomFraction=function(l){if(!arguments.length)return q;q=l;m=Math.floor(q+Math.log(Math.sqrt(e*e+h*h+c*c+k*k))/Math.log(2));t=Math.pow(2,-m);return f};f.apply=function(l){var i=Math.pow(2,-l.zoom), -u=Math.pow(2,l.zoom-m);return{column:(e*l.column*i+c*l.row*i+g)*u,row:(h*l.column*i+k*l.row*i+a)*u,zoom:l.zoom-m}};f.unapply=function(l){var i=Math.pow(2,-l.zoom),u=Math.pow(2,l.zoom+m);return{column:(l.column*i*k-l.row*i*c-g*k+a*c)/(e*k-h*c)*u,row:(l.column*i*h-l.row*i*e-g*h+a*e)/(c*h-k*e)*u,zoom:l.zoom+m}};f.toString=function(){return"matrix("+[e*t,h*t,c*t,k*t].join(" ")+" 0 0)"};return f.zoomFraction(0)};s.cache=function(e,h){function c(i){l--;h&&h(i);delete f[i.key];if(i.next)i.next.prev=i.prev; +(function(s){function fa(d){var h=d.indexOf(":");return h<0?d:{space:s.ns[d.substring(0,h)],local:d.substring(h+1)}}function S(){for(var d=0;dh.row){var c=d;d=h;h=c}return{x0:d.column,y0:d.row,x1:h.column,y1:h.row,dx:h.column-d.column,dy:h.row-d.row}}function ca(d,h,c,k,g){c=Math.max(c,Math.floor(h.y0)); +k=Math.min(k,Math.ceil(h.y1));if(d.x0==h.x0&&d.y0==h.y0?d.x0+h.dy/d.dy*d.dx0,q=h.dx<0;for(c=c;ch.dy){c=f;f=h;h=c}if(f.dy>d.dy){c=f;f=d;d=c}if(h.dy>d.dy){c=h;h=d;d=c}f.dy&&ca(d,f,k,g,a);h.dy&&ca(d,h,k,g,a)}s.version="2.3+1.0"; +var Y={x:0,y:0};s.ns={svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink"};s.id=function(){var d=0;return function(){return++d}}();s.svg=function(d){return document.createElementNS(s.ns.svg,d)};s.transform=function(d,h,c,k,g,a){var f={},m,q,t;if(!arguments.length){d=1;h=g=c=0;k=1;a=0}f.zoomFraction=function(l){if(!arguments.length)return q;q=l;m=Math.floor(q+Math.log(Math.sqrt(d*d+h*h+c*c+k*k))/Math.log(2));t=Math.pow(2,-m);return f};f.apply=function(l){var i=Math.pow(2,-l.zoom), +u=Math.pow(2,l.zoom-m);return{column:(d*l.column*i+c*l.row*i+g)*u,row:(h*l.column*i+k*l.row*i+a)*u,zoom:l.zoom-m}};f.unapply=function(l){var i=Math.pow(2,-l.zoom),u=Math.pow(2,l.zoom+m);return{column:(l.column*i*k-l.row*i*c-g*k+a*c)/(d*k-h*c)*u,row:(l.column*i*h-l.row*i*d-g*h+a*d)/(c*h-k*d)*u,zoom:l.zoom+m}};f.toString=function(){return"matrix("+[d*t,h*t,c*t,k*t].join(" ")+" 0 0)"};return f.zoomFraction(0)};s.cache=function(d,h){function c(i){l--;h&&h(i);delete f[i.key];if(i.next)i.next.prev=i.prev; else if(q=i.prev)q.next=null;if(i.prev)i.prev.next=i.next;else if(m=i.next)m.prev=null}function k(){for(var i=q;l>t;i=i.prev){if(!i)break;i.lock||c(i)}}var g={},a={},f={},m=null,q=null,t=64,l=0;g.peek=function(i){return f[[i.zoom,i.column,i.row].join("/")]};g.load=function(i,u){var y=[i.zoom,i.column,i.row].join("/"),A=f[y];if(A){if(A.prev){if(A.prev.next=A.next)A.next.prev=A.prev;else q=A.prev;A.prev=null;A.next=m;m=m.prev=A}A.lock=1;return a[y]=A}A={key:y,column:i.column,row:i.row,zoom:i.zoom,next:m, -prev:null,lock:1};e.call(null,A,u);a[y]=f[y]=A;if(m)m.prev=A;else q=A;m=A;l++;return A};g.unload=function(i){if(!(i in a))return false;var u=a[i];u.lock=0;delete a[i];u.request&&u.request.abort(false)&&c(u);return u};g.locks=function(){return a};g.size=function(i){if(!arguments.length)return t;t=i;k();return g};g.flush=function(){k();return g};g.clear=function(){for(var i in f){var u=f[i];u.request&&u.request.abort(false);h&&h(f[i]);if(u.lock){u.lock=0;u.element.parentNode.removeChild(u.element)}}a= -{};f={};m=q=null;l=0;return g};return g};s.url=function(e){function h(g){var a=g.zoom<0?1:1<=a)return"about:blank";return e.replace(/{(.)}/g,function(m,q){switch(q){case "S":return c[(Math.abs(g.zoom)+g.row+f)%c.length];case "Z":return g.zoom;case "X":return f;case "Y":return g.row;case "B":var t=s.map.coordinateLocation({row:g.row,column:f,zoom:g.zoom}),l=s.map.coordinateLocation({row:g.row+1,column:f+1,zoom:g.zoom}),i=Math.ceil(Math.log(g.zoom)/ -Math.LN2);return l.lat.toFixed(i)+","+t.lon.toFixed(i)+","+t.lat.toFixed(i)+","+l.lon.toFixed(i)}return q})}var c=[],k=true;h.template=function(g){if(!arguments.length)return e;e=g;return h};h.hosts=function(g){if(!arguments.length)return c;c=g;return h};h.repeat=function(g){if(!arguments.length)return k;k=g;return h};return h};s.dispatch=function(e){var h={};e.on=function(c,k){for(var g=h[c]||(h[c]=[]),a=0;a=a||!k.length)){g++;k.pop()()}}function h(f){for(var m=0;mu[1])t=u[1];l=t-(t=Math.round(t));i=Math.pow(2,l)}function h(){if(n){var d=45/Math.pow(2,t+l-3),r=Math.max(Math.abs(C*f.x+A*f.y),Math.abs(B*f.x+E*f.y)),o=V(K- -r*d/m.y);r=V(j+r*d/m.y);q.lat=Math.max(o,Math.min(r,q.lat));o=Math.max(Math.abs(C*f.y+A*f.x),Math.abs(B*f.y+E*f.x));q.lon=Math.max(n[0].lon-o*d/m.x,Math.min(n[1].lon+o*d/m.x,q.lon))}}var c={},k,g,a=Y,f=Y,m={x:256,y:256},q={lat:37.76487,lon:-122.41948},t=12,l=0,i=1,u=[1,18],y=0,A=1,C=0,E=1,B=0,K=-180,j=180,n=[{lat:V(K),lon:-Infinity},{lat:V(j),lon:Infinity}];c.locationCoordinate=function(d){d=s.map.locationCoordinate(d);var r=Math.pow(2,t);d.column*=r;d.row*=r;d.zoom+=t;return d};c.coordinateLocation= -s.map.coordinateLocation;c.coordinatePoint=function(d,r){var o=Math.pow(2,t-r.zoom),z=Math.pow(2,t-d.zoom),v=(r.column*o-d.column*z)*m.x*i;o=(r.row*o-d.row*z)*m.y*i;return{x:f.x+A*v-C*o,y:f.y+C*v+A*o}};c.pointCoordinate=function(d,r){var o=Math.pow(2,t-d.zoom),z=(r.x-f.x)/i,v=(r.y-f.y)/i;return{column:d.column*o+(E*z-B*v)/m.x,row:d.row*o+(B*z+E*v)/m.y,zoom:t}};c.locationPoint=function(d){var r=Math.pow(2,t+l-3)/45,o=(d.lon-q.lon)*r*m.x;d=(W(q.lat)-W(d.lat))*r*m.y;return{x:f.x+A*o-C*d,y:f.y+C*o+A* -d}};c.pointLocation=function(d){var r=45/Math.pow(2,t+l-3),o=(d.x-f.x)*r;d=(d.y-f.y)*r;return{lon:q.lon+(E*o-B*d)/m.x,lat:V(W(q.lat)-(B*o+E*d)/m.y)}};var w=s.svg("rect");w.setAttribute("visibility","hidden");w.setAttribute("pointer-events","all");c.container=function(d){if(!arguments.length)return k;k=d;k.setAttribute("class","map");k.appendChild(w);return c.resize()};c.focusableParent=function(){for(var d=k;d;d=d.parentNode)if(d.tabIndex>=0)return d;return window};c.mouse=function(d){var r=(k.ownerSVGElement|| -k).createSVGPoint();if($<0&&(window.scrollX||window.scrollY)){var o=document.body.appendChild(s.svg("svg"));o.style.position="absolute";o.style.top=o.style.left="0px";var z=o.getScreenCTM();$=!(z.f||z.e);document.body.removeChild(o)}if($){r.x=d.pageX;r.y=d.pageY}else{r.x=d.clientX;r.y=d.clientY}return r.matrixTransform(k.getScreenCTM().inverse())};c.size=function(d){if(!arguments.length)return a;g=d;return c.resize()};c.resize=function(){if(g){a=g;S.remove(c)}else{w.setAttribute("width","100%");w.setAttribute("height", -"100%");b=w.getBBox();a={x:b.width,y:b.height};S.add(c)}w.setAttribute("width",a.x);w.setAttribute("height",a.y);f={x:a.x/2,y:a.y/2};h();c.dispatch({type:"resize"});return c};c.tileSize=function(d){if(!arguments.length)return m;m=d;c.dispatch({type:"move"});return c};c.center=function(d){if(!arguments.length)return q;q=d;h();c.dispatch({type:"move"});return c};c.panBy=function(d){var r=45/Math.pow(2,t+l-3),o=d.x*r;d=d.y*r;return c.center({lon:q.lon+(B*d-E*o)/m.x,lat:V(W(q.lat)+(B*o+E*d)/m.y)})};c.centerRange= -function(d){if(!arguments.length)return n;if(n=d){K=n[0].lat>-90?W(n[0].lat):-Infinity;j=n[0].lat<90?W(n[1].lat):Infinity}else{K=-Infinity;j=Infinity}h();c.dispatch({type:"move"});return c};c.zoom=function(d){if(!arguments.length)return t+l;t=d;e();return c.center(q)};c.zoomBy=function(d,r,o){if(arguments.length<2)return c.zoom(t+l+d);if(arguments.length<3)o=c.pointLocation(r);t=t+l+d;e();var z=c.locationPoint(o);return c.panBy({x:r.x-z.x,y:r.y-z.y})};c.zoomRange=function(d){if(!arguments.length)return u; -u=d;return c.zoom(t+l)};c.extent=function(d){if(!arguments.length)return[c.pointLocation({x:0,y:a.y}),c.pointLocation({x:a.x,y:0})];var r=c.locationPoint(d[0]),o=c.locationPoint(d[1]),z=Math.max((o.x-r.x)/a.x,(r.y-o.y)/a.y);r=c.pointLocation({x:(r.x+o.x)/2,y:(r.y+o.y)/2});t=t+l-Math.log(z)/Math.log(2);e();return c.center(r)};c.angle=function(d){if(!arguments.length)return y;y=d;A=Math.cos(y);C=Math.sin(y);E=Math.cos(-y);B=Math.sin(-y);h();c.dispatch({type:"move"});return c};c.add=function(d){d.map(c); -return c};c.remove=function(d){d.map(null);return c};c.dispatch=s.dispatch(c);return c};S.maps=[];S.add=function(e){for(var h=0;hB;A--){u.insertBefore(C[-1],K);u.insertBefore(C[2],C[-4]);for(var j=C[2],n=2;n>-4;)C[n]=C[--n];C[n]=j}}function g(){function B(O){var H=O.zoom,T=H<0?1:1<=a)return null;return d.replace(/{(.)}/g,function(m,q){switch(q){case "S":return c[(Math.abs(g.zoom)+g.row+f)%c.length];case "Z":return g.zoom;case "X":return f;case "Y":return g.row;case "B":var t=s.map.coordinateLocation({row:g.row,column:f,zoom:g.zoom}),l=s.map.coordinateLocation({row:g.row+1,column:f+1,zoom:g.zoom}),i=Math.ceil(Math.log(g.zoom)/ +Math.LN2);return l.lat.toFixed(i)+","+t.lon.toFixed(i)+","+t.lat.toFixed(i)+","+l.lon.toFixed(i)}return q})}var c=[],k=true;h.template=function(g){if(!arguments.length)return d;d=g;return h};h.hosts=function(g){if(!arguments.length)return c;c=g;return h};h.repeat=function(g){if(!arguments.length)return k;k=g;return h};return h};s.dispatch=function(d){var h={};d.on=function(c,k){for(var g=h[c]||(h[c]=[]),a=0;a=a||!k.length)){g++;k.pop()()}}function h(f){for(var m=0;mu[1])t=u[1];l=t-(t=Math.round(t));i=Math.pow(2,l)}function h(){if(n){var e=45/Math.pow(2,t+l-3),r=Math.max(Math.abs(C*f.x+A*f.y),Math.abs(B*f.x+E*f.y)),o=V(K- +r*e/m.y);r=V(j+r*e/m.y);q.lat=Math.max(o,Math.min(r,q.lat));o=Math.max(Math.abs(C*f.y+A*f.x),Math.abs(B*f.y+E*f.x));q.lon=Math.max(n[0].lon-o*e/m.x,Math.min(n[1].lon+o*e/m.x,q.lon))}}var c={},k,g,a=Y,f=Y,m={x:256,y:256},q={lat:37.76487,lon:-122.41948},t=12,l=0,i=1,u=[1,18],y=0,A=1,C=0,E=1,B=0,K=-180,j=180,n=[{lat:V(K),lon:-Infinity},{lat:V(j),lon:Infinity}];c.locationCoordinate=function(e){e=s.map.locationCoordinate(e);var r=Math.pow(2,t);e.column*=r;e.row*=r;e.zoom+=t;return e};c.coordinateLocation= +s.map.coordinateLocation;c.coordinatePoint=function(e,r){var o=Math.pow(2,t-r.zoom),z=Math.pow(2,t-e.zoom),v=(r.column*o-e.column*z)*m.x*i;o=(r.row*o-e.row*z)*m.y*i;return{x:f.x+A*v-C*o,y:f.y+C*v+A*o}};c.pointCoordinate=function(e,r){var o=Math.pow(2,t-e.zoom),z=(r.x-f.x)/i,v=(r.y-f.y)/i;return{column:e.column*o+(E*z-B*v)/m.x,row:e.row*o+(B*z+E*v)/m.y,zoom:t}};c.locationPoint=function(e){var r=Math.pow(2,t+l-3)/45,o=(e.lon-q.lon)*r*m.x;e=(W(q.lat)-W(e.lat))*r*m.y;return{x:f.x+A*o-C*e,y:f.y+C*o+A* +e}};c.pointLocation=function(e){var r=45/Math.pow(2,t+l-3),o=(e.x-f.x)*r;e=(e.y-f.y)*r;return{lon:q.lon+(E*o-B*e)/m.x,lat:V(W(q.lat)-(B*o+E*e)/m.y)}};var w=s.svg("rect");w.setAttribute("visibility","hidden");w.setAttribute("pointer-events","all");c.container=function(e){if(!arguments.length)return k;k=e;k.setAttribute("class","map");k.appendChild(w);return c.resize()};c.focusableParent=function(){for(var e=k;e;e=e.parentNode)if(e.tabIndex>=0)return e;return window};c.mouse=function(e){var r=(k.ownerSVGElement|| +k).createSVGPoint();if($<0&&(window.scrollX||window.scrollY)){var o=document.body.appendChild(s.svg("svg"));o.style.position="absolute";o.style.top=o.style.left="0px";var z=o.getScreenCTM();$=!(z.f||z.e);document.body.removeChild(o)}if($){r.x=e.pageX;r.y=e.pageY}else{r.x=e.clientX;r.y=e.clientY}return r.matrixTransform(k.getScreenCTM().inverse())};c.size=function(e){if(!arguments.length)return a;g=e;return c.resize()};c.resize=function(){if(g){a=g;S.remove(c)}else{w.setAttribute("width","100%");w.setAttribute("height", +"100%");b=w.getBBox();a={x:b.width,y:b.height};S.add(c)}w.setAttribute("width",a.x);w.setAttribute("height",a.y);f={x:a.x/2,y:a.y/2};h();c.dispatch({type:"resize"});return c};c.tileSize=function(e){if(!arguments.length)return m;m=e;c.dispatch({type:"move"});return c};c.center=function(e){if(!arguments.length)return q;q=e;h();c.dispatch({type:"move"});return c};c.panBy=function(e){var r=45/Math.pow(2,t+l-3),o=e.x*r;e=e.y*r;return c.center({lon:q.lon+(B*e-E*o)/m.x,lat:V(W(q.lat)+(B*o+E*e)/m.y)})};c.centerRange= +function(e){if(!arguments.length)return n;if(n=e){K=n[0].lat>-90?W(n[0].lat):-Infinity;j=n[0].lat<90?W(n[1].lat):Infinity}else{K=-Infinity;j=Infinity}h();c.dispatch({type:"move"});return c};c.zoom=function(e){if(!arguments.length)return t+l;t=e;d();return c.center(q)};c.zoomBy=function(e,r,o){if(arguments.length<2)return c.zoom(t+l+e);if(arguments.length<3)o=c.pointLocation(r);t=t+l+e;d();var z=c.locationPoint(o);return c.panBy({x:r.x-z.x,y:r.y-z.y})};c.zoomRange=function(e){if(!arguments.length)return u; +u=e;return c.zoom(t+l)};c.extent=function(e){if(!arguments.length)return[c.pointLocation({x:0,y:a.y}),c.pointLocation({x:a.x,y:0})];var r=c.locationPoint(e[0]),o=c.locationPoint(e[1]),z=Math.max((o.x-r.x)/a.x,(r.y-o.y)/a.y);r=c.pointLocation({x:(r.x+o.x)/2,y:(r.y+o.y)/2});t=t+l-Math.log(z)/Math.log(2);d();return c.center(r)};c.angle=function(e){if(!arguments.length)return y;y=e;A=Math.cos(y);C=Math.sin(y);E=Math.cos(-y);B=Math.sin(-y);h();c.dispatch({type:"move"});return c};c.add=function(e){e.map(c); +return c};c.remove=function(e){e.map(null);return c};c.dispatch=s.dispatch(c);return c};S.maps=[];S.add=function(d){for(var h=0;hB;A--){u.insertBefore(C[-1],K);u.insertBefore(C[2],C[-4]);for(var j=C[2],n=2;n>-4;)C[n]=C[--n];C[n]=j}}function g(){function B(O){var H=O.zoom,T=H<0?1:1<>Q,row:T>>Q,zoom:U-Q}))&&P.ready){M[P.key]=f.load(J);P.proxyCount++;G.proxyRefs[P.key]=P;break}}M[G.key]=G}}var j=a.map(),n=j.zoom(),w=n-(n=Math.round(n)),d=j.size(),r=j.angle(),o=j.tileSize(),z=j.locationCoordinate(j.center());if(A!=n){if(An)k(n);else A=n;for(var v=-4;v<=2;v++){var L=C[v];L.setAttribute("class","zoom"+(v<0?"":"+")+v+" zoom"+(n+v));L.setAttribute("transform","scale("+Math.pow(2,-v)+")")}}u.setAttribute("transform", -"translate("+d.x/2+","+d.y/2+")"+(r?"rotate("+r/Math.PI*180+")":"")+(w?"scale("+Math.pow(2,w)+")":"")+(y?y.zoomFraction(w):""));var I=j.pointCoordinate(z,Y);v=j.pointCoordinate(z,{x:d.x,y:0});n=j.pointCoordinate(z,d);j=j.pointCoordinate(z,{x:0,y:d.y});if(!w&&!r&&!y){z.column=(Math.round(o.x*z.column)+(d.x&1)/2)/o.x;z.row=(Math.round(o.y*z.row)+(d.y&1)/2)/o.y}if(y){I=y.unapply(I);v=y.unapply(v);n=y.unapply(n);j=y.unapply(j);z=y.unapply(z)}var R=t?t(I.zoom)-I.zoom:0;if(R){d=Math.pow(2,R);I.column*= -d;I.row*=d;v.column*=d;v.row*=d;n.column*=d;n.row*=d;j.column*=d;j.row*=d;I.zoom=v.zoom=n.zoom=j.zoom+=R}w=f.locks();var M={};for(var F in w)w[F].proxyCount=0;if(q&&R>-5&&R<3){r=I.zoom<0?1:1<>v<>v<=1;E--)C[E]=u.appendChild(s.svg("g")); +P}else N=false;if(N)break}if(!N)for(Q=1;Q<=D;Q++)if((P=f.peek(J={column:O>>Q,row:T>>Q,zoom:U-Q}))&&P.ready){M[P.key]=f.load(J);P.proxyCount++;G.proxyRefs[P.key]=P;break}}M[G.key]=G}}var j=a.map(),n=j.zoom(),w=n-(n=Math.round(n)),e=j.size(),r=j.angle(),o=j.tileSize(),z=j.locationCoordinate(j.center());if(A!=n){if(An)k(n);else A=n;for(var v=-4;v<=2;v++){var L=C[v];L.setAttribute("class","zoom"+(v<0?"":"+")+v+" zoom"+(n+v));L.setAttribute("transform","scale("+Math.pow(2,-v)+")")}}u.setAttribute("transform", +"translate("+e.x/2+","+e.y/2+")"+(r?"rotate("+r/Math.PI*180+")":"")+(w?"scale("+Math.pow(2,w)+")":"")+(y?y.zoomFraction(w):""));var I=j.pointCoordinate(z,Y);v=j.pointCoordinate(z,{x:e.x,y:0});n=j.pointCoordinate(z,e);j=j.pointCoordinate(z,{x:0,y:e.y});if(!w&&!r&&!y){z.column=(Math.round(o.x*z.column)+(e.x&1)/2)/o.x;z.row=(Math.round(o.y*z.row)+(e.y&1)/2)/o.y}if(y){I=y.unapply(I);v=y.unapply(v);n=y.unapply(n);j=y.unapply(j);z=y.unapply(z)}var R=t?t(I.zoom)-I.zoom:0;if(R){e=Math.pow(2,R);I.column*= +e;I.row*=e;v.column*=e;v.row*=e;n.column*=e;n.row*=e;j.column*=e;j.row*=e;I.zoom=v.zoom=n.zoom=j.zoom+=R}w=f.locks();var M={};for(var F in w)w[F].proxyCount=0;if(q&&R>-5&&R<3){r=I.zoom<0?1:1<>v<>v<=1;E--)C[E]=u.appendChild(s.svg("g")); C[0]=u.appendChild(s.svg("g"));a.map=function(B){if(!arguments.length)return i;if(i){if(i==B){u.parentNode.appendChild(u);return a}i.off("move",g).off("resize",g);u.parentNode.removeChild(u)}if(i=B){i.container().appendChild(u);a.init&&a.init(u);i.on("move",g).on("resize",g);g()}return a};a.container=function(){return u};a.levels=function(){return C};a.id=function(B){if(!arguments.length)return l;l=B;u.setAttribute("id",B);return a};a.visible=function(B){if(!arguments.length)return q;(q=B)?u.removeAttribute("visibility"): u.setAttribute("visibility","hidden");i&&g();return a};a.transform=function(B){if(!arguments.length)return y;y=B;i&&g();return a};a.zoom=function(B){if(!arguments.length)return t;t=typeof B=="function"||B==null?B:function(){return B};i&&g();return a};a.tile=function(B){if(!arguments.length)return m;m=B;i&&g();return a};a.reload=function(){f.clear();i&&g();return a};a.dispatch=s.dispatch(a);a.on("load",function(B){if(B.tile.proxyRefs){for(var K in B.tile.proxyRefs){var j=B.tile.proxyRefs[K];--j.proxyCount<= -0&&f.unload(K)&&j.element.parentNode.removeChild(j.element)}delete B.tile.proxyRefs}});return a};s.image=function(){var e=s.layer(function(c){var k=c.element=s.svg("image"),g=e.map().tileSize();k.setAttribute("preserveAspectRatio","none");k.setAttribute("width",g.x);k.setAttribute("height",g.y);if(typeof h=="function"){k.setAttribute("opacity",0);c.request=s.queue.image(k,h(c),function(a){delete c.request;c.ready=true;c.img=a;k.removeAttribute("opacity");e.dispatch({type:"load",tile:c})})}else{c.ready= -true;h&&k.setAttributeNS(s.ns.xlink,"href",h);e.dispatch({type:"load",tile:c})}},function(c){c.request&&c.request.abort(true)}),h;e.url=function(c){if(!arguments.length)return h;h=typeof c=="string"&&/{.}/.test(c)?s.url(c):c;return e.reload()};return e};s.geoJson=function(e){function h(j){var n={lat:0,lon:0};return function(w){n.lat=w[1];n.lon=w[0];var d=j(n);w.x=d.x;w.y=d.y;return d}}function c(j,n){return j&&j.type in C&&C[j.type](j,n)}function k(j,n,w){return j.type in E&&E[j.type](j,n,w)}function g(){var j= -a.map().zoom(),n=a.cache.locks(),w,d,r,o,z,v,L;if(y=="fixed")for(w in n){if((d=n[w]).scale!=j){L="scale("+Math.pow(2,d.zoom-j)+")";o=-1;for(z=(r=d.features).length;++o9&&Math.abs(l.wheelDelta)/y>=50)ba=1;g=u}if(ba==1)i*=0.03;if(!a&&i){u=Date.now();if(u-k>200){i=i>0?+1:-1;k=u}else i=0}if(i)switch(f){case "mouse":u=q.mouse(l);m||(m=q.pointLocation(u)); -q.off("move",e).zoomBy(i,u,m).on("move",e);break;case "location":q.zoomBy(i,q.locationPoint(m),m);break;default:q.zoomBy(i);break}l.preventDefault();return false}var c={},k=0,g=0,a=true,f="mouse",m,q,t;c.smooth=function(l){if(!arguments.length)return a;a=l;return c};c.zoom=function(l,i){if(!arguments.length)return f;f=l;m=i;if(q)f=="mouse"?q.on("move",e):q.off("move",e);return c};c.map=function(l){if(!arguments.length)return q;if(q){t.removeEventListener("mousemove",e,false);t.removeEventListener("mousewheel", -h,false);t.removeEventListener("DOMMouseScroll",h,false);t=null;q.off("move",e)}if(q=l){f=="mouse"&&q.on("move",e);t=q.container();t.addEventListener("mousemove",e,false);t.addEventListener("mousewheel",h,false);t.addEventListener("DOMMouseScroll",h,false)}return c};return c};var ba=/WebKit\/533/.test(navigator.userAgent)?-1:0;s.arrow=function(){function e(y){if(!(y.ctrlKey||y.altKey||y.metaKey)){var A=Date.now(),C=0,E=0;switch(y.keyCode){case 37:if(!a.left){f=A;a.left=1;a.right||(C=l)}break;case 39:if(!a.right){f= -A;a.right=1;a.left||(C=-l)}break;case 38:if(!a.up){f=A;a.up=1;a.down||(E=l)}break;case 40:if(!a.down){f=A;a.down=1;a.up||(E=-l)}break;default:return}if(C||E)i.panBy({x:C,y:E});if(!m&&a.left|a.right|a.up|a.down)m=setInterval(k,t);y.preventDefault()}}function h(y){f=Date.now();switch(y.keyCode){case 37:a.left=0;break;case 39:a.right=0;break;case 38:a.up=0;break;case 40:a.down=0;break;default:return}if(m&&!(a.left|a.right|a.up|a.down))m=clearInterval(m);y.preventDefault()}function c(y){switch(y.charCode){case 45:case 95:i.zoom(Math.ceil(i.zoom())- -1);break;case 43:case 61:i.zoom(Math.floor(i.zoom())+1);break;default:return}y.preventDefault()}function k(){if(i)if(!(Date.now()w+d&&H.panBy(R)}function c(x){if(x.shiftKey){F={x0:H.mouse(x)};H.focusableParent().focus();return l(x)}}function k(x){if(F){F.x1=H.mouse(x);O.setAttribute("x",Math.min(F.x0.x,F.x1.x));O.setAttribute("y",Math.min(F.x0.y,F.x1.y));O.setAttribute("width",Math.abs(F.x0.x-F.x1.x));O.setAttribute("height",Math.abs(F.x0.y-F.x1.y));O.removeAttribute("display")}} -function g(){B.setAttribute("class","compass");if(F){if(F.x1){H.extent([H.pointLocation({x:Math.min(F.x0.x,F.x1.x),y:Math.max(F.x0.y,F.x1.y)}),H.pointLocation({x:Math.max(F.x0.x,F.x1.x),y:Math.min(F.x0.y,F.x1.y)})]);O.setAttribute("display","none")}F=null}if(I){clearInterval(I);I=0}}function a(x){return function(){x?this.setAttribute("class","active"):this.removeAttribute("class");R=x}}function f(x){return function(D){B.setAttribute("class","compass active");var G=H.zoom();H.zoom(x<0?Math.ceil(G)- -1:Math.floor(G)+1);return l(D)}}function m(x){return function(D){H.zoom(x);return l(D)}}function q(){this.setAttribute("class","active")}function t(){this.removeAttribute("class")}function l(x){x.stopPropagation();x.preventDefault();return false}function i(x){var D=Math.SQRT1_2*j,G=j*0.7,J=j*0.2,N=s.svg("g"),P=N.appendChild(s.svg("path")),Q=N.appendChild(s.svg("path"));P.setAttribute("class","direction");P.setAttribute("pointer-events","all");P.setAttribute("d","M0,0L"+D+","+D+"A"+j+","+j+" 0 0,1 "+ --D+","+D+"Z");Q.setAttribute("class","chevron");Q.setAttribute("d","M"+J+","+(G-J)+"L0,"+G+" "+-J+","+(G-J));Q.setAttribute("pointer-events","none");N.addEventListener("mousedown",e,false);N.addEventListener("mouseover",a(x),false);N.addEventListener("mouseout",a(null),false);N.addEventListener("dblclick",l,false);return N}function u(x){var D=j*0.4,G=D/2,J=s.svg("g"),N=J.appendChild(s.svg("path")),P=J.appendChild(s.svg("path")),Q=J.appendChild(s.svg("path")),X=J.appendChild(s.svg("path"));N.setAttribute("class", -"back");N.setAttribute("d","M"+-D+",0V"+-D+"A"+D+","+D+" 0 1,1 "+D+","+-D+"V0Z");P.setAttribute("class","direction");P.setAttribute("d",N.getAttribute("d"));Q.setAttribute("class","chevron");Q.setAttribute("d","M"+-G+","+-D+"H"+G+(x>0?"M0,"+(-D-G)+"V"+-G:""));X.setAttribute("class","fore");X.setAttribute("fill","none");X.setAttribute("d",N.getAttribute("d"));J.addEventListener("mousedown",f(x),false);J.addEventListener("mouseover",q,false);J.addEventListener("mouseout",t,false);J.addEventListener("dblclick", -l,false);return J}function y(x){var D=j*0.2,G=j*0.4,J=s.svg("g"),N=J.appendChild(s.svg("rect")),P=J.appendChild(s.svg("path"));N.setAttribute("pointer-events","all");N.setAttribute("fill","none");N.setAttribute("x",-G);N.setAttribute("y",-0.75*G);N.setAttribute("width",2*G);N.setAttribute("height",1.5*G);P.setAttribute("class","chevron");P.setAttribute("d","M"+-D+",0H"+D);J.addEventListener("mousedown",m(x),false);J.addEventListener("dblclick",l,false);return J}function A(){var x=j+6,D=x,G=H.size(); -switch(o){case "top-left":break;case "top-right":x=G.x-x;break;case "bottom-left":D=G.y-D;break;case "bottom-right":x=G.x-x;D=G.y-D;break}x="translate("+x+","+D+")";M&&M.setAttribute("transform",x);v&&v.setAttribute("transform",x);for(var J in K)J==H.zoom()?K[J].setAttribute("class","active"):K[J].removeAttribute("class")}function C(){for(;B.lastChild;)B.removeChild(B.lastChild);B.appendChild(O);if(L!="none"){M=B.appendChild(s.svg("g"));M.setAttribute("class","pan");var x=M.appendChild(s.svg("circle")); -x.setAttribute("class","back");x.setAttribute("r",j);M.appendChild(i({x:0,y:-n})).setAttribute("transform","rotate(0)");M.appendChild(i({x:n,y:0})).setAttribute("transform","rotate(90)");M.appendChild(i({x:0,y:n})).setAttribute("transform","rotate(180)");M.appendChild(i({x:-n,y:0})).setAttribute("transform","rotate(270)");x=M.appendChild(s.svg("circle"));x.setAttribute("fill","none");x.setAttribute("class","fore");x.setAttribute("r",j)}else M=null;if(z!="none"){v=B.appendChild(s.svg("g"));v.setAttribute("class", -"zoom");x=-0.5;if(z=="big"){K={};var D=H.zoomRange()[0];for(x=0;D<=H.zoomRange()[1];D++,x++)(K[D]=v.appendChild(y(D))).setAttribute("transform","translate(0,"+-(x+0.75)*j*0.4+")")}D=L=="none"?0.4:2;v.setAttribute("transform","translate(0,"+j*(/^top-/.test(o)?D+(x+0.5)*0.4:-D)+")");v.appendChild(u(+1)).setAttribute("transform","translate(0,"+-(x+0.5)*j*0.4+")");v.appendChild(u(-1)).setAttribute("transform","scale(-1)")}else v=null;A()}var E={},B=s.svg("g"),K={},j=30,n=16,w=0,d=250,r=50,o="top-left", -z="small",v,L="small",I,R,M,F,O=s.svg("rect"),H,T,U;B.setAttribute("class","compass");O.setAttribute("class","back fore");O.setAttribute("pointer-events","none");O.setAttribute("display","none");E.radius=function(x){if(!arguments.length)return j;j=x;H&&C();return E};E.speed=function(x){if(!arguments.length)return j;n=x;return E};E.position=function(x){if(!arguments.length)return o;o=x;H&&C();return E};E.pan=function(x){if(!arguments.length)return L;L=x;H&&C();return E};E.zoom=function(x){if(!arguments.length)return z; -z=x;H&&C();return E};E.map=function(x){if(!arguments.length)return H;if(H){T.removeEventListener("mousedown",c,false);T.removeChild(B);T=null;U.removeEventListener("mousemove",k,false);U.removeEventListener("mouseup",g,false);U=null;H.off("move",A).off("resize",A)}if(H=x){T=H.container();T.appendChild(B);T.addEventListener("mousedown",c,false);U=T.ownerDocument.defaultView;U.addEventListener("mousemove",k,false);U.addEventListener("mouseup",g,false);H.on("move",A).on("resize",A);C()}return E};return E}; -s.grid=function(){function e(){var g=k.firstChild,a=c.size(),f=c.pointLocation(Y);c.pointLocation(a);var m=Math.pow(2,4-Math.round(c.zoom()));f.lat=Math.floor(f.lat/m)*m;f.lon=Math.ceil(f.lon/m)*m;for(var q;(q=c.locationPoint(f).x)<=a.x;f.lon+=m){g||(g=k.appendChild(s.svg("line")));g.setAttribute("x1",q);g.setAttribute("x2",q);g.setAttribute("y1",0);g.setAttribute("y2",a.y);g=g.nextSibling}for(;(q=c.locationPoint(f).y)<=a.y;f.lat-=m){g||(g=k.appendChild(s.svg("line")));g.setAttribute("y1",q);g.setAttribute("y2", -q);g.setAttribute("x1",0);g.setAttribute("x2",a.x);g=g.nextSibling}for(;g;){a=g.nextSibling;k.removeChild(g);g=a}}var h={},c,k=s.svg("g");k.setAttribute("class","grid");h.map=function(g){if(!arguments.length)return c;if(c){k.parentNode.removeChild(k);c.off("move",e).off("resize",e)}if(c=g){c.on("move",e).on("resize",e);c.container().appendChild(k);c.dispatch({type:"move"})}return h};return h};s.stylist=function(){function e(g){var a=g.features.length,f=h.length,m=c.length,q,t,l,i,u,y;for(u=0;u9&&Math.abs(l.wheelDelta)/y>=50)ba=1;g=u}if(ba==1)i*=0.03;if(!a&&i){u=Date.now();if(u-k>200){i=i>0?+1:-1;k= +u}else i=0}if(i)switch(f){case "mouse":u=q.mouse(l);m||(m=q.pointLocation(u));q.off("move",d).zoomBy(i,u,m).on("move",d);break;case "location":q.zoomBy(i,q.locationPoint(m),m);break;default:q.zoomBy(i);break}l.preventDefault();return false}var c={},k=0,g=0,a=true,f="mouse",m,q,t;c.smooth=function(l){if(!arguments.length)return a;a=l;return c};c.zoom=function(l,i){if(!arguments.length)return f;f=l;m=i;if(q)f=="mouse"?q.on("move",d):q.off("move",d);return c};c.map=function(l){if(!arguments.length)return q; +if(q){t.removeEventListener("mousemove",d,false);t.removeEventListener("mousewheel",h,false);t.removeEventListener("DOMMouseScroll",h,false);t=null;q.off("move",d)}if(q=l){f=="mouse"&&q.on("move",d);t=q.container();t.addEventListener("mousemove",d,false);t.addEventListener("mousewheel",h,false);t.addEventListener("DOMMouseScroll",h,false)}return c};return c};var ba=/WebKit\/533/.test(navigator.userAgent)?-1:0;s.arrow=function(){function d(y){if(!(y.ctrlKey||y.altKey||y.metaKey)){var A=Date.now(), +C=0,E=0;switch(y.keyCode){case 37:if(!a.left){f=A;a.left=1;a.right||(C=l)}break;case 39:if(!a.right){f=A;a.right=1;a.left||(C=-l)}break;case 38:if(!a.up){f=A;a.up=1;a.down||(E=l)}break;case 40:if(!a.down){f=A;a.down=1;a.up||(E=-l)}break;default:return}if(C||E)i.panBy({x:C,y:E});if(!m&&a.left|a.right|a.up|a.down)m=setInterval(k,t);y.preventDefault()}}function h(y){f=Date.now();switch(y.keyCode){case 37:a.left=0;break;case 39:a.right=0;break;case 38:a.up=0;break;case 40:a.down=0;break;default:return}if(m&& +!(a.left|a.right|a.up|a.down))m=clearInterval(m);y.preventDefault()}function c(y){switch(y.charCode){case 45:case 95:i.zoom(Math.ceil(i.zoom())-1);break;case 43:case 61:i.zoom(Math.floor(i.zoom())+1);break;default:return}y.preventDefault()}function k(){if(i)if(!(Date.now()w+e&&H.panBy(R)}function c(x){if(x.shiftKey){F={x0:H.mouse(x)};H.focusableParent().focus();return l(x)}}function k(x){if(F){F.x1=H.mouse(x);O.setAttribute("x",Math.min(F.x0.x,F.x1.x));O.setAttribute("y", +Math.min(F.x0.y,F.x1.y));O.setAttribute("width",Math.abs(F.x0.x-F.x1.x));O.setAttribute("height",Math.abs(F.x0.y-F.x1.y));O.removeAttribute("display")}}function g(){B.setAttribute("class","compass");if(F){if(F.x1){H.extent([H.pointLocation({x:Math.min(F.x0.x,F.x1.x),y:Math.max(F.x0.y,F.x1.y)}),H.pointLocation({x:Math.max(F.x0.x,F.x1.x),y:Math.min(F.x0.y,F.x1.y)})]);O.setAttribute("display","none")}F=null}if(I){clearInterval(I);I=0}}function a(x){return function(){x?this.setAttribute("class","active"): +this.removeAttribute("class");R=x}}function f(x){return function(D){B.setAttribute("class","compass active");var G=H.zoom();H.zoom(x<0?Math.ceil(G)-1:Math.floor(G)+1);return l(D)}}function m(x){return function(D){H.zoom(x);return l(D)}}function q(){this.setAttribute("class","active")}function t(){this.removeAttribute("class")}function l(x){x.stopPropagation();x.preventDefault();return false}function i(x){var D=Math.SQRT1_2*j,G=j*0.7,J=j*0.2,N=s.svg("g"),P=N.appendChild(s.svg("path")),Q=N.appendChild(s.svg("path")); +P.setAttribute("class","direction");P.setAttribute("pointer-events","all");P.setAttribute("d","M0,0L"+D+","+D+"A"+j+","+j+" 0 0,1 "+-D+","+D+"Z");Q.setAttribute("class","chevron");Q.setAttribute("d","M"+J+","+(G-J)+"L0,"+G+" "+-J+","+(G-J));Q.setAttribute("pointer-events","none");N.addEventListener("mousedown",d,false);N.addEventListener("mouseover",a(x),false);N.addEventListener("mouseout",a(null),false);N.addEventListener("dblclick",l,false);return N}function u(x){var D=j*0.4,G=D/2,J=s.svg("g"), +N=J.appendChild(s.svg("path")),P=J.appendChild(s.svg("path")),Q=J.appendChild(s.svg("path")),X=J.appendChild(s.svg("path"));N.setAttribute("class","back");N.setAttribute("d","M"+-D+",0V"+-D+"A"+D+","+D+" 0 1,1 "+D+","+-D+"V0Z");P.setAttribute("class","direction");P.setAttribute("d",N.getAttribute("d"));Q.setAttribute("class","chevron");Q.setAttribute("d","M"+-G+","+-D+"H"+G+(x>0?"M0,"+(-D-G)+"V"+-G:""));X.setAttribute("class","fore");X.setAttribute("fill","none");X.setAttribute("d",N.getAttribute("d")); +J.addEventListener("mousedown",f(x),false);J.addEventListener("mouseover",q,false);J.addEventListener("mouseout",t,false);J.addEventListener("dblclick",l,false);return J}function y(x){var D=j*0.2,G=j*0.4,J=s.svg("g"),N=J.appendChild(s.svg("rect")),P=J.appendChild(s.svg("path"));N.setAttribute("pointer-events","all");N.setAttribute("fill","none");N.setAttribute("x",-G);N.setAttribute("y",-0.75*G);N.setAttribute("width",2*G);N.setAttribute("height",1.5*G);P.setAttribute("class","chevron");P.setAttribute("d", +"M"+-D+",0H"+D);J.addEventListener("mousedown",m(x),false);J.addEventListener("dblclick",l,false);return J}function A(){var x=j+6,D=x,G=H.size();switch(o){case "top-left":break;case "top-right":x=G.x-x;break;case "bottom-left":D=G.y-D;break;case "bottom-right":x=G.x-x;D=G.y-D;break}x="translate("+x+","+D+")";M&&M.setAttribute("transform",x);v&&v.setAttribute("transform",x);for(var J in K)J==H.zoom()?K[J].setAttribute("class","active"):K[J].removeAttribute("class")}function C(){for(;B.lastChild;)B.removeChild(B.lastChild); +B.appendChild(O);if(L!="none"){M=B.appendChild(s.svg("g"));M.setAttribute("class","pan");var x=M.appendChild(s.svg("circle"));x.setAttribute("class","back");x.setAttribute("r",j);M.appendChild(i({x:0,y:-n})).setAttribute("transform","rotate(0)");M.appendChild(i({x:n,y:0})).setAttribute("transform","rotate(90)");M.appendChild(i({x:0,y:n})).setAttribute("transform","rotate(180)");M.appendChild(i({x:-n,y:0})).setAttribute("transform","rotate(270)");x=M.appendChild(s.svg("circle"));x.setAttribute("fill", +"none");x.setAttribute("class","fore");x.setAttribute("r",j)}else M=null;if(z!="none"){v=B.appendChild(s.svg("g"));v.setAttribute("class","zoom");x=-0.5;if(z=="big"){K={};var D=H.zoomRange()[0];for(x=0;D<=H.zoomRange()[1];D++,x++)(K[D]=v.appendChild(y(D))).setAttribute("transform","translate(0,"+-(x+0.75)*j*0.4+")")}D=L=="none"?0.4:2;v.setAttribute("transform","translate(0,"+j*(/^top-/.test(o)?D+(x+0.5)*0.4:-D)+")");v.appendChild(u(+1)).setAttribute("transform","translate(0,"+-(x+0.5)*j*0.4+")"); +v.appendChild(u(-1)).setAttribute("transform","scale(-1)")}else v=null;A()}var E={},B=s.svg("g"),K={},j=30,n=16,w=0,e=250,r=50,o="top-left",z="small",v,L="small",I,R,M,F,O=s.svg("rect"),H,T,U;B.setAttribute("class","compass");O.setAttribute("class","back fore");O.setAttribute("pointer-events","none");O.setAttribute("display","none");E.radius=function(x){if(!arguments.length)return j;j=x;H&&C();return E};E.speed=function(x){if(!arguments.length)return j;n=x;return E};E.position=function(x){if(!arguments.length)return o; +o=x;H&&C();return E};E.pan=function(x){if(!arguments.length)return L;L=x;H&&C();return E};E.zoom=function(x){if(!arguments.length)return z;z=x;H&&C();return E};E.map=function(x){if(!arguments.length)return H;if(H){T.removeEventListener("mousedown",c,false);T.removeChild(B);T=null;U.removeEventListener("mousemove",k,false);U.removeEventListener("mouseup",g,false);U=null;H.off("move",A).off("resize",A)}if(H=x){T=H.container();T.appendChild(B);T.addEventListener("mousedown",c,false);U=T.ownerDocument.defaultView; +U.addEventListener("mousemove",k,false);U.addEventListener("mouseup",g,false);H.on("move",A).on("resize",A);C()}return E};return E};s.grid=function(){function d(){var g=k.firstChild,a=c.size(),f=c.pointLocation(Y);c.pointLocation(a);var m=Math.pow(2,4-Math.round(c.zoom()));f.lat=Math.floor(f.lat/m)*m;f.lon=Math.ceil(f.lon/m)*m;for(var q;(q=c.locationPoint(f).x)<=a.x;f.lon+=m){g||(g=k.appendChild(s.svg("line")));g.setAttribute("x1",q);g.setAttribute("x2",q);g.setAttribute("y1",0);g.setAttribute("y2", +a.y);g=g.nextSibling}for(;(q=c.locationPoint(f).y)<=a.y;f.lat-=m){g||(g=k.appendChild(s.svg("line")));g.setAttribute("y1",q);g.setAttribute("y2",q);g.setAttribute("x1",0);g.setAttribute("x2",a.x);g=g.nextSibling}for(;g;){a=g.nextSibling;k.removeChild(g);g=a}}var h={},c,k=s.svg("g");k.setAttribute("class","grid");h.map=function(g){if(!arguments.length)return c;if(c){k.parentNode.removeChild(k);c.off("move",d).off("resize",d)}if(c=g){c.on("move",d).on("resize",d);c.container().appendChild(k);c.dispatch({type:"move"})}return h}; +return h};s.stylist=function(){function d(g){var a=g.features.length,f=h.length,m=c.length,q,t,l,i,u,y;for(u=0;u= max)) { - return "about:blank"; + return null; } return template.replace(/{(.)}/g, function(s, v) { switch (v) {