Skip to content

Instantly share code, notes, and snippets.

@rveciana
Last active February 9, 2022 09:43
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rveciana/653784cfab5d859610926733cfb14773 to your computer and use it in GitHub Desktop.
Save rveciana/653784cfab5d859610926733cfb14773 to your computer and use it in GitHub Desktop.
Svelte mapping: circles
licence: mit

Fourth example of a map drawn with Svelte and the d3 projections. Shows how to use elements on the map (circles in this case) that get transformed too.

Check this blog post from Geoexamples for more explanations.

To test it, clone the standard svelte template by

npx degit sveltejs/template svelte-app cd svelte-app

And copy the App.svelte, Feature.svelte and cities.js files into the src directory.

<script>
import { geoAlbers, geoPath, geoProjection } from "d3-geo";
import { geoAlbersUk } from "d3-composite-projections";
import { scaleLinear, scaleSqrt } from "d3-scale";
import { extent } from "d3-array";
import { onMount } from "svelte";
import { feature } from "topojson";
import { tweened } from "svelte/motion";
import { interpolate } from "d3-interpolate";
import Feature from "./Feature.svelte";
import { cities } from "./cities";
let data = [];
let colorScale = () => {};
const width = "960";
const height = "500";
const projectionAlbers = geoAlbers()
.rotate([4.4, 0.8])
.center([0, 55.4])
.parallels([50, 60])
.scale(3800)
.translate([width / 2, (1.8 * height) / 2]);
const projectionAlbersUk = geoAlbersUk()
.translate([width / 2, (1.85 * height) / 2])
.scale(5200);
const projectionTween = (projection0, projection1) => {
return function(t) {
function project(λ, φ) {
(λ *= 180 / Math.PI), (φ *= 180 / Math.PI);
var p0 = projection0([λ, φ]),
p1 = projection1([λ, φ]);
if (!p0 || !p1) return [0, 0];
return [(1 - t) * p0[0] + t * p1[0], (1 - t) * -p0[1] + t * -p1[1]];
}
return geoProjection(project)
.scale(1)
.translate([0, 0]);
};
};
const currentProj = tweened(projectionAlbers, {
duration: 1000,
interpolate: projectionTween
});
$: path = geoPath().projection($currentProj);
const opacity = tweened(0, {
duration: 1000
});
const circleScale = scaleSqrt()
.domain([
0,
Math.max.apply(
Math,
cities.map(function(o) {
return o.population;
})
)
])
.range([2, 15]);
const circleColorScale = scaleSqrt()
.domain([
0,
Math.max.apply(
Math,
cities.map(function(o) {
return o.population;
})
)
])
.range(["#ffffff", "#5555ff"]);
onMount(async function() {
const response = await fetch(
"https://gist.githubusercontent.com/rveciana/27272a581e975835aaa321ddf816d726/raw/c40062a328843322208b8e98c2104dc8f6ad5301/uk-counties.json"
);
const json = await response.json();
const topoData = feature(json, json.objects.UK);
const land = {
...topoData,
features: topoData.features.filter(
d => d.properties.NAME_1 === "Scotland"
)
};
const namesExtent = extent(land.features, d => d.properties.NAME_2.length);
colorScale = scaleLinear()
.domain(namesExtent)
.range(["#feedde", "#fd8d3c"]);
data = land.features;
});
</script>
<style>
svg {
width: 100%;
height: calc(100% - 5em);
background-color: "#eeeeee";
}
.borders {
fill: #ddd;
}
.city {
stroke: #777777;
}
</style>
<button
on:click={() => {
currentProj.set($currentProj === projectionAlbers ? projectionAlbersUk : projectionAlbers);
opacity.set($currentProj === projectionAlbers ? 1 : 0);
}}>
Change projection
</button>
<svg width="960" height="500">
<path
class="borders"
d={projectionAlbersUk.getCompositionBorders()}
style="opacity: {$opacity}" />
{#each data as feature}
<Feature
featurePath={path(feature)}
initialColor={colorScale(feature.properties.NAME_2.length)} />
{/each}
{#each cities as city}
<circle
class="city"
cx={$currentProj([city.lon, city.lat])[0]}
cy={$currentProj([city.lon, city.lat])[1]}
r={circleScale(city.population)}
fill={circleColorScale(city.population)} />
{/each}
</svg>
svg.svelte-1xdlizl{width:960;height:500;background-color:"#eeeeee"}.borders.svelte-1xdlizl{fill:#ddd}.city.svelte-1xdlizl{stroke:#777777}
.provinceShape.svelte-116txg3{stroke:#444444;stroke-width:0.5}
/*# sourceMappingURL=bundle.css.map */
var app=function(){"use strict";function n(){}const t=n=>n;function r(n,t){for(const r in t)n[r]=t[r];return n}function e(n){return n()}function i(){return Object.create(null)}function o(n){n.forEach(e)}function u(n){return"function"==typeof n}function a(n,t){return n!=n?t==t:n!==t||n&&"object"==typeof n||"function"==typeof n}function l(n,t,r){n.$$.on_destroy.push(function(n,t){const r=n.subscribe(t);return r.unsubscribe?()=>r.unsubscribe():r}(t,r))}const c="undefined"!=typeof window;let s=c?()=>window.performance.now():()=>Date.now(),f=c?n=>requestAnimationFrame(n):n;const h=new Set;function p(n){h.forEach(t=>{t.c(n)||(h.delete(t),t.f())}),0!==h.size&&f(p)}function g(n,t){n.appendChild(t)}function d(n,t,r){n.insertBefore(t,r||null)}function v(n){n.parentNode.removeChild(n)}function m(n,t){for(let r=0;r<n.length;r+=1)n[r]&&n[r].d(t)}function y(n){return document.createElementNS("http://www.w3.org/2000/svg",n)}function b(n){return document.createTextNode(n)}function w(n,t,r,e){return n.addEventListener(t,r,e),()=>n.removeEventListener(t,r,e)}function M(n,t,r){null==r?n.removeAttribute(t):n.getAttribute(t)!==r&&n.setAttribute(t,r)}function x(n,t,r,e){n.style.setProperty(t,r,e?"important":"")}let _;function E(n){_=n}function N(n){(function(){if(!_)throw new Error("Function called outside component initialization");return _})().$$.on_mount.push(n)}const S=[],k=[],$=[],A=[],P=Promise.resolve();let j=!1;function C(n){$.push(n)}function z(){const n=new Set;do{for(;S.length;){const n=S.shift();E(n),q(n.$$)}for(;k.length;)k.pop()();for(let t=0;t<$.length;t+=1){const r=$[t];n.has(r)||(r(),n.add(r))}$.length=0}while(S.length);for(;A.length;)A.pop()();j=!1}function q(n){null!==n.fragment&&(n.update(),o(n.before_update),n.fragment&&n.fragment.p(n.ctx,n.dirty),n.dirty=[-1],n.after_update.forEach(C))}const R=new Set;let T;function L(n,t){n&&n.i&&(R.delete(n),n.i(t))}function O(n,t,r,e){if(n&&n.o){if(R.has(n))return;R.add(n),T.c.push(()=>{R.delete(n),e&&(r&&n.d(1),e())}),n.o(t)}}function F(n,t,r){const{fragment:i,on_mount:a,on_destroy:l,after_update:c}=n.$$;i&&i.m(t,r),C(()=>{const t=a.map(e).filter(u);l?l.push(...t):o(t),n.$$.on_mount=[]}),c.forEach(C)}function I(n,t){const r=n.$$;null!==r.fragment&&(o(r.on_destroy),r.fragment&&r.fragment.d(t),r.on_destroy=r.fragment=null,r.ctx=[])}function D(n,t){-1===n.$$.dirty[0]&&(S.push(n),j||(j=!0,P.then(z)),n.$$.dirty.fill(0)),n.$$.dirty[t/31|0]|=1<<t%31}function B(t,r,e,u,a,l,c=[-1]){const s=_;E(t);const f=r.props||{},h=t.$$={fragment:null,ctx:null,props:l,update:n,not_equal:a,bound:i(),on_mount:[],on_destroy:[],before_update:[],after_update:[],context:new Map(s?s.$$.context:[]),callbacks:i(),dirty:c};let p=!1;h.ctx=e?e(t,f,(n,r,e=r)=>(h.ctx&&a(h.ctx[n],h.ctx[n]=e)&&(h.bound[n]&&h.bound[n](e),p&&D(t,n)),r)):[],h.update(),p=!0,o(h.before_update),h.fragment=!!u&&u(h.ctx),r.target&&(r.hydrate?h.fragment&&h.fragment.l(function(n){return Array.from(n.childNodes)}(r.target)):h.fragment&&h.fragment.c(),r.intro&&L(t.$$.fragment),F(t,r.target,r.anchor),z()),E(s)}class H{$destroy(){I(this,1),this.$destroy=n}$on(n,t){const r=this.$$.callbacks[n]||(this.$$.callbacks[n]=[]);return r.push(t),()=>{const n=r.indexOf(t);-1!==n&&r.splice(n,1)}}$set(){}}function G(){return new Z}function Z(){this.reset()}Z.prototype={constructor:Z,reset:function(){this.s=this.t=0},add:function(n){V(U,n,this.t),V(this,U.s,this.s),this.s?this.t+=U.t:this.s=U.t},valueOf:function(){return this.s}};var U=new Z;function V(n,t,r){var e=n.s=t+r,i=e-t,o=e-i;n.t=t-o+(r-i)}var X=1e-6,K=Math.PI,Q=K/2,W=K/4,Y=2*K,J=180/K,nn=K/180,tn=Math.abs,rn=Math.atan,en=Math.atan2,on=Math.cos,un=Math.sin,an=Math.sign||function(n){return n>0?1:n<0?-1:0},ln=Math.sqrt;function cn(n){return n>1?Q:n<-1?-Q:Math.asin(n)}function sn(){}function fn(n,t){n&&pn.hasOwnProperty(n.type)&&pn[n.type](n,t)}var hn={Feature:function(n,t){fn(n.geometry,t)},FeatureCollection:function(n,t){for(var r=n.features,e=-1,i=r.length;++e<i;)fn(r[e].geometry,t)}},pn={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var r=n.coordinates,e=-1,i=r.length;++e<i;)n=r[e],t.point(n[0],n[1],n[2])},LineString:function(n,t){gn(n.coordinates,t,0)},MultiLineString:function(n,t){for(var r=n.coordinates,e=-1,i=r.length;++e<i;)gn(r[e],t,0)},Polygon:function(n,t){dn(n.coordinates,t)},MultiPolygon:function(n,t){for(var r=n.coordinates,e=-1,i=r.length;++e<i;)dn(r[e],t)},GeometryCollection:function(n,t){for(var r=n.geometries,e=-1,i=r.length;++e<i;)fn(r[e],t)}};function gn(n,t,r){var e,i=-1,o=n.length-r;for(t.lineStart();++i<o;)e=n[i],t.point(e[0],e[1],e[2]);t.lineEnd()}function dn(n,t){var r=-1,e=n.length;for(t.polygonStart();++r<e;)gn(n[r],t,1);t.polygonEnd()}function vn(n,t){n&&hn.hasOwnProperty(n.type)?hn[n.type](n,t):fn(n,t)}function mn(n){return[en(n[1],n[0]),cn(n[2])]}function yn(n){var t=n[0],r=n[1],e=on(r);return[e*on(t),e*un(t),un(r)]}function bn(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function wn(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mn(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xn(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function _n(n){var t=ln(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function En(n,t){function r(r,e){return r=n(r,e),t(r[0],r[1])}return n.invert&&t.invert&&(r.invert=function(r,e){return(r=t.invert(r,e))&&n.invert(r[0],r[1])}),r}function Nn(n,t){return[tn(n)>K?n+Math.round(-n/Y)*Y:n,t]}function Sn(n){return function(t,r){return[(t+=n)>K?t-Y:t<-K?t+Y:t,r]}}function kn(n){var t=Sn(n);return t.invert=Sn(-n),t}function $n(n,t){var r=on(n),e=un(n),i=on(t),o=un(t);function u(n,t){var u=on(t),a=on(n)*u,l=un(n)*u,c=un(t),s=c*r+a*e;return[en(l*i-s*o,a*r-c*e),cn(s*i+l*o)]}return u.invert=function(n,t){var u=on(t),a=on(n)*u,l=un(n)*u,c=un(t),s=c*i-l*o;return[en(l*i+c*o,a*r+s*e),cn(s*r-a*e)]},u}function An(n,t){(t=yn(t))[0]-=n,_n(t);var r,e=(r=-t[1])>1?0:r<-1?K:Math.acos(r);return((-t[2]<0?-e:e)+Y-X)%Y}function Pn(){var n,t=[];return{point:function(t,r){n.push([t,r])},lineStart:function(){t.push(n=[])},lineEnd:sn,rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))},result:function(){var r=t;return t=[],n=null,r}}}function jn(n,t){return tn(n[0]-t[0])<X&&tn(n[1]-t[1])<X}function Cn(n,t,r,e){this.x=n,this.z=t,this.o=r,this.e=e,this.v=!1,this.n=this.p=null}function zn(n,t,r,e,i){var o,u,a=[],l=[];if(n.forEach((function(n){if(!((t=n.length-1)<=0)){var t,r,e=n[0],u=n[t];if(jn(e,u)){for(i.lineStart(),o=0;o<t;++o)i.point((e=n[o])[0],e[1]);i.lineEnd()}else a.push(r=new Cn(e,n,null,!0)),l.push(r.o=new Cn(e,null,r,!1)),a.push(r=new Cn(u,n,null,!1)),l.push(r.o=new Cn(u,null,r,!0))}})),a.length){for(l.sort(t),qn(a),qn(l),o=0,u=l.length;o<u;++o)l[o].e=r=!r;for(var c,s,f=a[0];;){for(var h=f,p=!0;h.v;)if((h=h.n)===f)return;c=h.z,i.lineStart();do{if(h.v=h.o.v=!0,h.e){if(p)for(o=0,u=c.length;o<u;++o)i.point((s=c[o])[0],s[1]);else e(h.x,h.n.x,1,i);h=h.n}else{if(p)for(c=h.p.z,o=c.length-1;o>=0;--o)i.point((s=c[o])[0],s[1]);else e(h.x,h.p.x,-1,i);h=h.p}c=(h=h.o).z,p=!p}while(!h.v);i.lineEnd()}}}function qn(n){if(t=n.length){for(var t,r,e=0,i=n[0];++e<t;)i.n=r=n[e],r.p=i,i=r;i.n=r=n[0],r.p=i}}Nn.invert=Nn;var Rn=G();function Tn(n){return tn(n[0])<=K?n[0]:an(n[0])*((tn(n[0])+K)%Y-K)}function Ln(n,t){return n<t?-1:n>t?1:n>=t?0:NaN}var On,Fn,In=(1===(On=Ln).length&&(Fn=On,On=function(n,t){return Ln(Fn(n),t)}),{left:function(n,t,r,e){for(null==r&&(r=0),null==e&&(e=n.length);r<e;){var i=r+e>>>1;On(n[i],t)<0?r=i+1:e=i}return r},right:function(n,t,r,e){for(null==r&&(r=0),null==e&&(e=n.length);r<e;){var i=r+e>>>1;On(n[i],t)>0?e=i:r=i+1}return r}}).right;var Dn=Math.sqrt(50),Bn=Math.sqrt(10),Hn=Math.sqrt(2);function Gn(n,t,r){var e=(t-n)/Math.max(0,r),i=Math.floor(Math.log(e)/Math.LN10),o=e/Math.pow(10,i);return i>=0?(o>=Dn?10:o>=Bn?5:o>=Hn?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=Dn?10:o>=Bn?5:o>=Hn?2:1)}function Zn(n){for(var t,r,e,i=n.length,o=-1,u=0;++o<i;)u+=n[o].length;for(r=new Array(u);--i>=0;)for(t=(e=n[i]).length;--t>=0;)r[--u]=e[t];return r}function Un(n,t,r,e){return function(i){var o,u,a,l=t(i),c=Pn(),s=t(c),f=!1,h={point:p,lineStart:d,lineEnd:v,polygonStart:function(){h.point=m,h.lineStart=y,h.lineEnd=b,u=[],o=[]},polygonEnd:function(){h.point=p,h.lineStart=d,h.lineEnd=v,u=Zn(u);var n=function(n,t){var r=Tn(t),e=t[1],i=un(e),o=[un(r),-on(r),0],u=0,a=0;Rn.reset(),1===i?e=Q+X:-1===i&&(e=-Q-X);for(var l=0,c=n.length;l<c;++l)if(f=(s=n[l]).length)for(var s,f,h=s[f-1],p=Tn(h),g=h[1]/2+W,d=un(g),v=on(g),m=0;m<f;++m,p=b,d=M,v=x,h=y){var y=s[m],b=Tn(y),w=y[1]/2+W,M=un(w),x=on(w),_=b-p,E=_>=0?1:-1,N=E*_,S=N>K,k=d*M;if(Rn.add(en(k*E*un(N),v*x+k*on(N))),u+=S?_+E*Y:_,S^p>=r^b>=r){var $=wn(yn(h),yn(y));_n($);var A=wn(o,$);_n(A);var P=(S^_>=0?-1:1)*cn(A[2]);(e>P||e===P&&($[0]||$[1]))&&(a+=S^_>=0?1:-1)}}return(u<-X||u<X&&Rn<-X)^1&a}(o,e);u.length?(f||(i.polygonStart(),f=!0),zn(u,Xn,n,r,i)):n&&(f||(i.polygonStart(),f=!0),i.lineStart(),r(null,null,1,i),i.lineEnd()),f&&(i.polygonEnd(),f=!1),u=o=null},sphere:function(){i.polygonStart(),i.lineStart(),r(null,null,1,i),i.lineEnd(),i.polygonEnd()}};function p(t,r){n(t,r)&&i.point(t,r)}function g(n,t){l.point(n,t)}function d(){h.point=g,l.lineStart()}function v(){h.point=p,l.lineEnd()}function m(n,t){a.push([n,t]),s.point(n,t)}function y(){s.lineStart(),a=[]}function b(){m(a[0][0],a[0][1]),s.lineEnd();var n,t,r,e,l=s.clean(),h=c.result(),p=h.length;if(a.pop(),o.push(a),a=null,p)if(1&l){if((t=(r=h[0]).length-1)>0){for(f||(i.polygonStart(),f=!0),i.lineStart(),n=0;n<t;++n)i.point((e=r[n])[0],e[1]);i.lineEnd()}}else p>1&&2&l&&h.push(h.pop().concat(h.shift())),u.push(h.filter(Vn))}return h}}function Vn(n){return n.length>1}function Xn(n,t){return((n=n.x)[0]<0?n[1]-Q-X:Q-n[1])-((t=t.x)[0]<0?t[1]-Q-X:Q-t[1])}var Kn=Un((function(){return!0}),(function(n){var t,r=NaN,e=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(o,u){var a=o>0?K:-K,l=tn(o-r);tn(l-K)<X?(n.point(r,e=(e+u)/2>0?Q:-Q),n.point(i,e),n.lineEnd(),n.lineStart(),n.point(a,e),n.point(o,e),t=0):i!==a&&l>=K&&(tn(r-i)<X&&(r-=i*X),tn(o-a)<X&&(o-=a*X),e=function(n,t,r,e){var i,o,u=un(n-r);return tn(u)>X?rn((un(t)*(o=on(e))*un(r)-un(e)*(i=on(t))*un(n))/(i*o*u)):(t+e)/2}(r,e,o,u),n.point(i,e),n.lineEnd(),n.lineStart(),n.point(a,e),t=0),n.point(r=o,e=u),i=a},lineEnd:function(){n.lineEnd(),r=e=NaN},clean:function(){return 2-t}}}),(function(n,t,r,e){var i;if(null==n)i=r*Q,e.point(-K,i),e.point(0,i),e.point(K,i),e.point(K,0),e.point(K,-i),e.point(0,-i),e.point(-K,-i),e.point(-K,0),e.point(-K,i);else if(tn(n[0]-t[0])>X){var o=n[0]<t[0]?K:-K;i=r*o/2,e.point(-o,i),e.point(0,i),e.point(o,i)}else e.point(t[0],t[1])}),[-K,-Q]);function Qn(n){var t=on(n),r=6*nn,e=t>0,i=tn(t)>X;function o(n,r){return on(n)*on(r)>t}function u(n,r,e){var i=[1,0,0],o=wn(yn(n),yn(r)),u=bn(o,o),a=o[0],l=u-a*a;if(!l)return!e&&n;var c=t*u/l,s=-t*a/l,f=wn(i,o),h=xn(i,c);Mn(h,xn(o,s));var p=f,g=bn(h,p),d=bn(p,p),v=g*g-d*(bn(h,h)-1);if(!(v<0)){var m=ln(v),y=xn(p,(-g-m)/d);if(Mn(y,h),y=mn(y),!e)return y;var b,w=n[0],M=r[0],x=n[1],_=r[1];M<w&&(b=w,w=M,M=b);var E=M-w,N=tn(E-K)<X;if(!N&&_<x&&(b=x,x=_,_=b),N||E<X?N?x+_>0^y[1]<(tn(y[0]-w)<X?x:_):x<=y[1]&&y[1]<=_:E>K^(w<=y[0]&&y[0]<=M)){var S=xn(p,(-g+m)/d);return Mn(S,h),[y,mn(S)]}}}function a(t,r){var i=e?n:K-n,o=0;return t<-i?o|=1:t>i&&(o|=2),r<-i?o|=4:r>i&&(o|=8),o}return Un(o,(function(n){var t,r,l,c,s;return{lineStart:function(){c=l=!1,s=1},point:function(f,h){var p,g=[f,h],d=o(f,h),v=e?d?0:a(f,h):d?a(f+(f<0?K:-K),h):0;if(!t&&(c=l=d)&&n.lineStart(),d!==l&&(!(p=u(t,g))||jn(t,p)||jn(g,p))&&(g[0]+=X,g[1]+=X,d=o(g[0],g[1])),d!==l)s=0,d?(n.lineStart(),p=u(g,t),n.point(p[0],p[1])):(p=u(t,g),n.point(p[0],p[1]),n.lineEnd()),t=p;else if(i&&t&&e^d){var m;v&r||!(m=u(g,t,!0))||(s=0,e?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!d||t&&jn(t,g)||n.point(g[0],g[1]),t=g,l=d,r=v},lineEnd:function(){l&&n.lineEnd(),t=null},clean:function(){return s|(c&&l)<<1}}}),(function(t,e,i,o){!function(n,t,r,e,i,o){if(r){var u=on(t),a=un(t),l=e*r;null==i?(i=t+e*Y,o=t-l/2):(i=An(u,i),o=An(u,o),(e>0?i<o:i>o)&&(i+=e*Y));for(var c,s=i;e>0?s>o:s<o;s-=l)c=mn([u,-a*on(s),-a*un(s)]),n.point(c[0],c[1])}}(o,n,r,i,t,e)}),e?[0,-n]:[-K,n-K])}var Wn=1e9,Yn=-Wn;function Jn(n,t,r,e){function i(i,o){return n<=i&&i<=r&&t<=o&&o<=e}function o(i,o,a,c){var s=0,f=0;if(null==i||(s=u(i,a))!==(f=u(o,a))||l(i,o)<0^a>0)do{c.point(0===s||3===s?n:r,s>1?e:t)}while((s=(s+a+4)%4)!==f);else c.point(o[0],o[1])}function u(e,i){return tn(e[0]-n)<X?i>0?0:3:tn(e[0]-r)<X?i>0?2:1:tn(e[1]-t)<X?i>0?1:0:i>0?3:2}function a(n,t){return l(n.x,t.x)}function l(n,t){var r=u(n,1),e=u(t,1);return r!==e?r-e:0===r?t[1]-n[1]:1===r?n[0]-t[0]:2===r?n[1]-t[1]:t[0]-n[0]}return function(u){var l,c,s,f,h,p,g,d,v,m,y,b=u,w=Pn(),M={point:x,lineStart:function(){M.point=_,c&&c.push(s=[]);m=!0,v=!1,g=d=NaN},lineEnd:function(){l&&(_(f,h),p&&v&&w.rejoin(),l.push(w.result()));M.point=x,v&&b.lineEnd()},polygonStart:function(){b=w,l=[],c=[],y=!0},polygonEnd:function(){var t=function(){for(var t=0,r=0,i=c.length;r<i;++r)for(var o,u,a=c[r],l=1,s=a.length,f=a[0],h=f[0],p=f[1];l<s;++l)o=h,u=p,f=a[l],h=f[0],p=f[1],u<=e?p>e&&(h-o)*(e-u)>(p-u)*(n-o)&&++t:p<=e&&(h-o)*(e-u)<(p-u)*(n-o)&&--t;return t}(),r=y&&t,i=(l=Zn(l)).length;(r||i)&&(u.polygonStart(),r&&(u.lineStart(),o(null,null,1,u),u.lineEnd()),i&&zn(l,a,t,o,u),u.polygonEnd());b=u,l=c=s=null}};function x(n,t){i(n,t)&&b.point(n,t)}function _(o,u){var a=i(o,u);if(c&&s.push([o,u]),m)f=o,h=u,p=a,m=!1,a&&(b.lineStart(),b.point(o,u));else if(a&&v)b.point(o,u);else{var l=[g=Math.max(Yn,Math.min(Wn,g)),d=Math.max(Yn,Math.min(Wn,d))],w=[o=Math.max(Yn,Math.min(Wn,o)),u=Math.max(Yn,Math.min(Wn,u))];!function(n,t,r,e,i,o){var u,a=n[0],l=n[1],c=0,s=1,f=t[0]-a,h=t[1]-l;if(u=r-a,f||!(u>0)){if(u/=f,f<0){if(u<c)return;u<s&&(s=u)}else if(f>0){if(u>s)return;u>c&&(c=u)}if(u=i-a,f||!(u<0)){if(u/=f,f<0){if(u>s)return;u>c&&(c=u)}else if(f>0){if(u<c)return;u<s&&(s=u)}if(u=e-l,h||!(u>0)){if(u/=h,h<0){if(u<c)return;u<s&&(s=u)}else if(h>0){if(u>s)return;u>c&&(c=u)}if(u=o-l,h||!(u<0)){if(u/=h,h<0){if(u>s)return;u>c&&(c=u)}else if(h>0){if(u<c)return;u<s&&(s=u)}return c>0&&(n[0]=a+c*f,n[1]=l+c*h),s<1&&(t[0]=a+s*f,t[1]=l+s*h),!0}}}}}(l,w,n,t,r,e)?a&&(b.lineStart(),b.point(o,u),y=!1):(v||(b.lineStart(),b.point(l[0],l[1])),b.point(w[0],w[1]),a||b.lineEnd(),y=!1)}g=o,d=u,v=a}return M}}function nt(n){return n}var tt,rt,et,it,ot=G(),ut=G(),at={point:sn,lineStart:sn,lineEnd:sn,polygonStart:function(){at.lineStart=lt,at.lineEnd=ft},polygonEnd:function(){at.lineStart=at.lineEnd=at.point=sn,ot.add(tn(ut)),ut.reset()},result:function(){var n=ot/2;return ot.reset(),n}};function lt(){at.point=ct}function ct(n,t){at.point=st,tt=et=n,rt=it=t}function st(n,t){ut.add(it*n-et*t),et=n,it=t}function ft(){st(tt,rt)}var ht=1/0,pt=ht,gt=-ht,dt=gt,vt={point:function(n,t){n<ht&&(ht=n);n>gt&&(gt=n);t<pt&&(pt=t);t>dt&&(dt=t)},lineStart:sn,lineEnd:sn,polygonStart:sn,polygonEnd:sn,result:function(){var n=[[ht,pt],[gt,dt]];return gt=dt=-(pt=ht=1/0),n}};var mt,yt,bt,wt,Mt=0,xt=0,_t=0,Et=0,Nt=0,St=0,kt=0,$t=0,At=0,Pt={point:jt,lineStart:Ct,lineEnd:Rt,polygonStart:function(){Pt.lineStart=Tt,Pt.lineEnd=Lt},polygonEnd:function(){Pt.point=jt,Pt.lineStart=Ct,Pt.lineEnd=Rt},result:function(){var n=At?[kt/At,$t/At]:St?[Et/St,Nt/St]:_t?[Mt/_t,xt/_t]:[NaN,NaN];return Mt=xt=_t=Et=Nt=St=kt=$t=At=0,n}};function jt(n,t){Mt+=n,xt+=t,++_t}function Ct(){Pt.point=zt}function zt(n,t){Pt.point=qt,jt(bt=n,wt=t)}function qt(n,t){var r=n-bt,e=t-wt,i=ln(r*r+e*e);Et+=i*(bt+n)/2,Nt+=i*(wt+t)/2,St+=i,jt(bt=n,wt=t)}function Rt(){Pt.point=jt}function Tt(){Pt.point=Ot}function Lt(){Ft(mt,yt)}function Ot(n,t){Pt.point=Ft,jt(mt=bt=n,yt=wt=t)}function Ft(n,t){var r=n-bt,e=t-wt,i=ln(r*r+e*e);Et+=i*(bt+n)/2,Nt+=i*(wt+t)/2,St+=i,kt+=(i=wt*n-bt*t)*(bt+n),$t+=i*(wt+t),At+=3*i,jt(bt=n,wt=t)}function It(n){this._context=n}It.prototype={_radius:4.5,pointRadius:function(n){return this._radius=n,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(n,t){switch(this._point){case 0:this._context.moveTo(n,t),this._point=1;break;case 1:this._context.lineTo(n,t);break;default:this._context.moveTo(n+this._radius,t),this._context.arc(n,t,this._radius,0,Y)}},result:sn};var Dt,Bt,Ht,Gt,Zt,Ut=G(),Vt={point:sn,lineStart:function(){Vt.point=Xt},lineEnd:function(){Dt&&Kt(Bt,Ht),Vt.point=sn},polygonStart:function(){Dt=!0},polygonEnd:function(){Dt=null},result:function(){var n=+Ut;return Ut.reset(),n}};function Xt(n,t){Vt.point=Kt,Bt=Gt=n,Ht=Zt=t}function Kt(n,t){Gt-=n,Zt-=t,Ut.add(ln(Gt*Gt+Zt*Zt)),Gt=n,Zt=t}function Qt(){this._string=[]}function Wt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Yt(n){return function(t){var r=new Jt;for(var e in n)r[e]=n[e];return r.stream=t,r}}function Jt(){}function nr(n,t,r){var e=n.clipExtent&&n.clipExtent();return n.scale(150).translate([0,0]),null!=e&&n.clipExtent(null),vn(r,n.stream(vt)),t(vt.result()),null!=e&&n.clipExtent(e),n}function tr(n,t,r){return nr(n,(function(r){var e=t[1][0]-t[0][0],i=t[1][1]-t[0][1],o=Math.min(e/(r[1][0]-r[0][0]),i/(r[1][1]-r[0][1])),u=+t[0][0]+(e-o*(r[1][0]+r[0][0]))/2,a=+t[0][1]+(i-o*(r[1][1]+r[0][1]))/2;n.scale(150*o).translate([u,a])}),r)}Qt.prototype={_radius:4.5,_circle:Wt(4.5),pointRadius:function(n){return(n=+n)!==this._radius&&(this._radius=n,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(n,t){switch(this._point){case 0:this._string.push("M",n,",",t),this._point=1;break;case 1:this._string.push("L",n,",",t);break;default:null==this._circle&&(this._circle=Wt(this._radius)),this._string.push("M",n,",",t,this._circle)}},result:function(){if(this._string.length){var n=this._string.join("");return this._string=[],n}return null}},Jt.prototype={constructor:Jt,point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var rr=16,er=on(30*nn);function ir(n,t){return+t?function(n,t){function r(e,i,o,u,a,l,c,s,f,h,p,g,d,v){var m=c-e,y=s-i,b=m*m+y*y;if(b>4*t&&d--){var w=u+h,M=a+p,x=l+g,_=ln(w*w+M*M+x*x),E=cn(x/=_),N=tn(tn(x)-1)<X||tn(o-f)<X?(o+f)/2:en(M,w),S=n(N,E),k=S[0],$=S[1],A=k-e,P=$-i,j=y*A-m*P;(j*j/b>t||tn((m*A+y*P)/b-.5)>.3||u*h+a*p+l*g<er)&&(r(e,i,o,u,a,l,k,$,N,w/=_,M/=_,x,d,v),v.point(k,$),r(k,$,N,w,M,x,c,s,f,h,p,g,d,v))}}return function(t){var e,i,o,u,a,l,c,s,f,h,p,g,d={point:v,lineStart:m,lineEnd:b,polygonStart:function(){t.polygonStart(),d.lineStart=w},polygonEnd:function(){t.polygonEnd(),d.lineStart=m}};function v(r,e){r=n(r,e),t.point(r[0],r[1])}function m(){s=NaN,d.point=y,t.lineStart()}function y(e,i){var o=yn([e,i]),u=n(e,i);r(s,f,c,h,p,g,s=u[0],f=u[1],c=e,h=o[0],p=o[1],g=o[2],rr,t),t.point(s,f)}function b(){d.point=v,t.lineEnd()}function w(){m(),d.point=M,d.lineEnd=x}function M(n,t){y(e=n,t),i=s,o=f,u=h,a=p,l=g,d.point=y}function x(){r(s,f,c,h,p,g,i,o,e,u,a,l,rr,t),d.lineEnd=b,b()}return d}}(n,t):function(n){return Yt({point:function(t,r){t=n(t,r),this.stream.point(t[0],t[1])}})}(n)}var or=Yt({point:function(n,t){this.stream.point(n*nn,t*nn)}});function ur(n,t,r){function e(e,i){return[t+n*e,r-n*i]}return e.invert=function(e,i){return[(e-t)/n,(r-i)/n]},e}function ar(n,t,r,e){var i=on(e),o=un(e),u=i*n,a=o*n,l=i/n,c=o/n,s=(o*r-i*t)/n,f=(o*t+i*r)/n;function h(n,e){return[u*n-a*e+t,r-a*n-u*e]}return h.invert=function(n,t){return[l*n-c*t+s,f-c*n-l*t]},h}function lr(n){var t,r,e,i,o,u,a,l,c,s,f=150,h=480,p=250,g=0,d=0,v=0,m=0,y=0,b=0,w=null,M=Kn,x=null,_=nt,E=.5;function N(n){return l(n[0]*nn,n[1]*nn)}function S(n){return(n=l.invert(n[0],n[1]))&&[n[0]*J,n[1]*J]}function k(){var n=ar(f,0,0,b).apply(null,t(g,d)),e=(b?ar:ur)(f,h-n[0],p-n[1],b);return r=function(n,t,r){return(n%=Y)?t||r?En(kn(n),$n(t,r)):kn(n):t||r?$n(t,r):Nn}(v,m,y),a=En(t,e),l=En(r,a),u=ir(a,E),$()}function $(){return c=s=null,N}return N.stream=function(n){return c&&s===n?c:c=or(function(n){return Yt({point:function(t,r){var e=n(t,r);return this.stream.point(e[0],e[1])}})}(r)(M(u(_(s=n)))))},N.preclip=function(n){return arguments.length?(M=n,w=void 0,$()):M},N.postclip=function(n){return arguments.length?(_=n,x=e=i=o=null,$()):_},N.clipAngle=function(n){return arguments.length?(M=+n?Qn(w=n*nn):(w=null,Kn),$()):w*J},N.clipExtent=function(n){return arguments.length?(_=null==n?(x=e=i=o=null,nt):Jn(x=+n[0][0],e=+n[0][1],i=+n[1][0],o=+n[1][1]),$()):null==x?null:[[x,e],[i,o]]},N.scale=function(n){return arguments.length?(f=+n,k()):f},N.translate=function(n){return arguments.length?(h=+n[0],p=+n[1],k()):[h,p]},N.center=function(n){return arguments.length?(g=n[0]%360*nn,d=n[1]%360*nn,k()):[g*J,d*J]},N.rotate=function(n){return arguments.length?(v=n[0]%360*nn,m=n[1]%360*nn,y=n.length>2?n[2]%360*nn:0,k()):[v*J,m*J,y*J]},N.angle=function(n){return arguments.length?(b=n%360*nn,k()):b*J},N.precision=function(n){return arguments.length?(u=ir(a,E=n*n),$()):ln(E)},N.fitExtent=function(n,t){return tr(N,n,t)},N.fitSize=function(n,t){return function(n,t,r){return tr(n,[[0,0],t],r)}(N,n,t)},N.fitWidth=function(n,t){return function(n,t,r){return nr(n,(function(r){var e=+t,i=e/(r[1][0]-r[0][0]),o=(e-i*(r[1][0]+r[0][0]))/2,u=-i*r[0][1];n.scale(150*i).translate([o,u])}),r)}(N,n,t)},N.fitHeight=function(n,t){return function(n,t,r){return nr(n,(function(r){var e=+t,i=e/(r[1][1]-r[0][1]),o=-i*r[0][0],u=(e-i*(r[1][1]+r[0][1]))/2;n.scale(150*i).translate([o,u])}),r)}(N,n,t)},function(){return t=n.apply(this,arguments),N.invert=t.invert&&S,k()}}function cr(n,t){var r=un(n),e=(r+un(t))/2;if(tn(e)<X)return function(n){var t=on(n);function r(n,r){return[n*t,un(r)/t]}return r.invert=function(n,r){return[n/t,cn(r*t)]},r}(n);var i=1+r*(2*e-r),o=ln(i)/e;function u(n,t){var r=ln(i-2*e*un(t))/e;return[r*un(n*=e),o-r*on(n)]}return u.invert=function(n,t){var r=o-t;return[en(n,tn(r))/e*an(r),cn((i-(n*n+r*r)*e*e)/(2*e))]},u}function sr(){return(n=cr,t=0,r=K/3,e=lr(n),i=e(t,r),i.parallels=function(n){return arguments.length?e(t=n[0]*nn,r=n[1]*nn):[t*J,r*J]},i).scale(155.424).center([0,33.6442]);var n,t,r,e,i}function fr(){return sr().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])}var hr=1e-6;function pr(){}var gr=1/0,dr=gr,vr=-gr,mr=vr,yr={point:function(n,t){n<gr&&(gr=n);n>vr&&(vr=n);t<dr&&(dr=t);t>mr&&(mr=t)},lineStart:pr,lineEnd:pr,polygonStart:pr,polygonEnd:pr,result:function(){var n=[[gr,dr],[vr,mr]];return vr=mr=-(dr=gr=1/0),n}};function br(n,t,r){var e=t[1][0]-t[0][0],i=t[1][1]-t[0][1],o=n.clipExtent&&n.clipExtent();n.scale(150).translate([0,0]),null!=o&&n.clipExtent(null),vn(r,n.stream(yr));var u=yr.result(),a=Math.min(e/(u[1][0]-u[0][0]),i/(u[1][1]-u[0][1])),l=+t[0][0]+(e-a*(u[1][0]+u[0][0]))/2,c=+t[0][1]+(i-a*(u[1][1]+u[0][1]))/2;return null!=o&&n.clipExtent(o),n.scale(150*a).translate([l,c])}var wr=Math.PI,Mr=2*wr,xr=Mr-1e-6;function _r(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function Er(){return new _r}function Nr(){var n,t,r,e,i,o=fr().rotate([4.4,.8]).center([0,55.4]).parallels([50,60]),u=fr().rotate([4.4,.8]).center([0,55.4]).parallels([50,60]),a={point:function(n,t){i=[n,t]}};function l(n){var t=n[0],o=n[1];return i=null,r.point(t,o),i||(e.point(t,o),i)}function c(){return n=t=null,l}return l.invert=function(n){var t=o.scale(),r=o.translate(),e=(n[0]-r[0])/t,i=(n[1]-r[1])/t;return(i>=-.089&&i<.06&&e>=.029&&e<.046?u:o).invert(n)},l.stream=function(r){return n&&t===r?n:(e=[o.stream(t=r),u.stream(r)],i=e.length,n={point:function(n,t){for(var r=-1;++r<i;)e[r].point(n,t)},sphere:function(){for(var n=-1;++n<i;)e[n].sphere()},lineStart:function(){for(var n=-1;++n<i;)e[n].lineStart()},lineEnd:function(){for(var n=-1;++n<i;)e[n].lineEnd()},polygonStart:function(){for(var n=-1;++n<i;)e[n].polygonStart()},polygonEnd:function(){for(var n=-1;++n<i;)e[n].polygonEnd()}});var e,i},l.precision=function(n){return arguments.length?(o.precision(n),u.precision(n),c()):o.precision()},l.scale=function(n){return arguments.length?(o.scale(n),u.scale(n),l.translate(o.translate())):o.scale()},l.translate=function(n){if(!arguments.length)return o.translate();var t=o.scale(),i=+n[0],l=+n[1];return r=o.translate(n).clipExtent([[i-.065*t,l-.089*t],[i+.075*t,l+.089*t]]).stream(a),e=u.translate([i+.01*t,l+.025*t]).clipExtent([[i+.029*t+hr,l-.089*t+hr],[i+.046*t-hr,l-.06*t-hr]]).stream(a),c()},l.fitExtent=function(n,t){return br(l,n,t)},l.fitSize=function(n,t){return function(n,t,r){return br(n,[[0,0],t],r)}(l,n,t)},l.drawCompositionBorders=function(n){var t,r,e,i;t=o([-1.113205870242365,59.64920050773357]),r=o([.807899092399606,59.59085836472269]),e=o([.5778611961420386,57.93467822832577]),i=o([-1.25867782078448,57.99029450085142]),n.moveTo(t[0],t[1]),n.lineTo(r[0],r[1]),n.lineTo(e[0],e[1]),n.lineTo(i[0],i[1]),n.closePath()},l.getCompositionBorders=function(){var n=Er();return this.drawCompositionBorders(n),n.toString()},l.scale(2800)}function Sr(n,t){switch(arguments.length){case 0:break;case 1:this.range(n);break;default:this.range(t).domain(n)}return this}function kr(n,t,r){n.prototype=t.prototype=r,r.constructor=n}function $r(n,t){var r=Object.create(n.prototype);for(var e in t)r[e]=t[e];return r}function Ar(){}_r.prototype=Er.prototype={constructor:_r,moveTo:function(n,t){this._+="M"+(this._x0=this._x1=+n)+","+(this._y0=this._y1=+t)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(n,t){this._+="L"+(this._x1=+n)+","+(this._y1=+t)},quadraticCurveTo:function(n,t,r,e){this._+="Q"+ +n+","+ +t+","+(this._x1=+r)+","+(this._y1=+e)},bezierCurveTo:function(n,t,r,e,i,o){this._+="C"+ +n+","+ +t+","+ +r+","+ +e+","+(this._x1=+i)+","+(this._y1=+o)},arcTo:function(n,t,r,e,i){n=+n,t=+t,r=+r,e=+e,i=+i;var o=this._x1,u=this._y1,a=r-n,l=e-t,c=o-n,s=u-t,f=c*c+s*s;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=n)+","+(this._y1=t);else if(f>1e-6)if(Math.abs(s*a-l*c)>1e-6&&i){var h=r-o,p=e-u,g=a*a+l*l,d=h*h+p*p,v=Math.sqrt(g),m=Math.sqrt(f),y=i*Math.tan((wr-Math.acos((g+f-d)/(2*v*m)))/2),b=y/m,w=y/v;Math.abs(b-1)>1e-6&&(this._+="L"+(n+b*c)+","+(t+b*s)),this._+="A"+i+","+i+",0,0,"+ +(s*h>c*p)+","+(this._x1=n+w*a)+","+(this._y1=t+w*l)}else this._+="L"+(this._x1=n)+","+(this._y1=t);else;},arc:function(n,t,r,e,i,o){n=+n,t=+t,o=!!o;var u=(r=+r)*Math.cos(e),a=r*Math.sin(e),l=n+u,c=t+a,s=1^o,f=o?e-i:i-e;if(r<0)throw new Error("negative radius: "+r);null===this._x1?this._+="M"+l+","+c:(Math.abs(this._x1-l)>1e-6||Math.abs(this._y1-c)>1e-6)&&(this._+="L"+l+","+c),r&&(f<0&&(f=f%Mr+Mr),f>xr?this._+="A"+r+","+r+",0,1,"+s+","+(n-u)+","+(t-a)+"A"+r+","+r+",0,1,"+s+","+(this._x1=l)+","+(this._y1=c):f>1e-6&&(this._+="A"+r+","+r+",0,"+ +(f>=wr)+","+s+","+(this._x1=n+r*Math.cos(i))+","+(this._y1=t+r*Math.sin(i))))},rect:function(n,t,r,e){this._+="M"+(this._x0=this._x1=+n)+","+(this._y0=this._y1=+t)+"h"+ +r+"v"+ +e+"h"+-r+"Z"},toString:function(){return this._}};var Pr="\\s*([+-]?\\d+)\\s*",jr="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",Cr="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",zr=/^#([0-9a-f]{3,8})$/,qr=new RegExp("^rgb\\("+[Pr,Pr,Pr]+"\\)$"),Rr=new RegExp("^rgb\\("+[Cr,Cr,Cr]+"\\)$"),Tr=new RegExp("^rgba\\("+[Pr,Pr,Pr,jr]+"\\)$"),Lr=new RegExp("^rgba\\("+[Cr,Cr,Cr,jr]+"\\)$"),Or=new RegExp("^hsl\\("+[jr,Cr,Cr]+"\\)$"),Fr=new RegExp("^hsla\\("+[jr,Cr,Cr,jr]+"\\)$"),Ir={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function Dr(){return this.rgb().formatHex()}function Br(){return this.rgb().formatRgb()}function Hr(n){var t,r;return n=(n+"").trim().toLowerCase(),(t=zr.exec(n))?(r=t[1].length,t=parseInt(t[1],16),6===r?Gr(t):3===r?new Xr(t>>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):8===r?new Xr(t>>24&255,t>>16&255,t>>8&255,(255&t)/255):4===r?new Xr(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|240&t,((15&t)<<4|15&t)/255):null):(t=qr.exec(n))?new Xr(t[1],t[2],t[3],1):(t=Rr.exec(n))?new Xr(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=Tr.exec(n))?Zr(t[1],t[2],t[3],t[4]):(t=Lr.exec(n))?Zr(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=Or.exec(n))?Yr(t[1],t[2]/100,t[3]/100,1):(t=Fr.exec(n))?Yr(t[1],t[2]/100,t[3]/100,t[4]):Ir.hasOwnProperty(n)?Gr(Ir[n]):"transparent"===n?new Xr(NaN,NaN,NaN,0):null}function Gr(n){return new Xr(n>>16&255,n>>8&255,255&n,1)}function Zr(n,t,r,e){return e<=0&&(n=t=r=NaN),new Xr(n,t,r,e)}function Ur(n){return n instanceof Ar||(n=Hr(n)),n?new Xr((n=n.rgb()).r,n.g,n.b,n.opacity):new Xr}function Vr(n,t,r,e){return 1===arguments.length?Ur(n):new Xr(n,t,r,null==e?1:e)}function Xr(n,t,r,e){this.r=+n,this.g=+t,this.b=+r,this.opacity=+e}function Kr(){return"#"+Wr(this.r)+Wr(this.g)+Wr(this.b)}function Qr(){var n=this.opacity;return(1===(n=isNaN(n)?1:Math.max(0,Math.min(1,n)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===n?")":", "+n+")")}function Wr(n){return((n=Math.max(0,Math.min(255,Math.round(n)||0)))<16?"0":"")+n.toString(16)}function Yr(n,t,r,e){return e<=0?n=t=r=NaN:r<=0||r>=1?n=t=NaN:t<=0&&(n=NaN),new ne(n,t,r,e)}function Jr(n){if(n instanceof ne)return new ne(n.h,n.s,n.l,n.opacity);if(n instanceof Ar||(n=Hr(n)),!n)return new ne;if(n instanceof ne)return n;var t=(n=n.rgb()).r/255,r=n.g/255,e=n.b/255,i=Math.min(t,r,e),o=Math.max(t,r,e),u=NaN,a=o-i,l=(o+i)/2;return a?(u=t===o?(r-e)/a+6*(r<e):r===o?(e-t)/a+2:(t-r)/a+4,a/=l<.5?o+i:2-o-i,u*=60):a=l>0&&l<1?0:u,new ne(u,a,l,n.opacity)}function ne(n,t,r,e){this.h=+n,this.s=+t,this.l=+r,this.opacity=+e}function te(n,t,r){return 255*(n<60?t+(r-t)*n/60:n<180?r:n<240?t+(r-t)*(240-n)/60:t)}kr(Ar,Hr,{copy:function(n){return Object.assign(new this.constructor,this,n)},displayable:function(){return this.rgb().displayable()},hex:Dr,formatHex:Dr,formatHsl:function(){return Jr(this).formatHsl()},formatRgb:Br,toString:Br}),kr(Xr,Vr,$r(Ar,{brighter:function(n){return n=null==n?1/.7:Math.pow(1/.7,n),new Xr(this.r*n,this.g*n,this.b*n,this.opacity)},darker:function(n){return n=null==n?.7:Math.pow(.7,n),new Xr(this.r*n,this.g*n,this.b*n,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Kr,formatHex:Kr,formatRgb:Qr,toString:Qr})),kr(ne,(function(n,t,r,e){return 1===arguments.length?Jr(n):new ne(n,t,r,null==e?1:e)}),$r(Ar,{brighter:function(n){return n=null==n?1/.7:Math.pow(1/.7,n),new ne(this.h,this.s,this.l*n,this.opacity)},darker:function(n){return n=null==n?.7:Math.pow(.7,n),new ne(this.h,this.s,this.l*n,this.opacity)},rgb:function(){var n=this.h%360+360*(this.h<0),t=isNaN(n)||isNaN(this.s)?0:this.s,r=this.l,e=r+(r<.5?r:1-r)*t,i=2*r-e;return new Xr(te(n>=240?n-240:n+120,i,e),te(n,i,e),te(n<120?n+240:n-120,i,e),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var n=this.opacity;return(1===(n=isNaN(n)?1:Math.max(0,Math.min(1,n)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===n?")":", "+n+")")}}));var re=Math.PI/180,ee=180/Math.PI,ie=.96422,oe=1,ue=.82521,ae=4/29,le=6/29,ce=3*le*le,se=le*le*le;function fe(n){if(n instanceof pe)return new pe(n.l,n.a,n.b,n.opacity);if(n instanceof ye)return be(n);n instanceof Xr||(n=Ur(n));var t,r,e=me(n.r),i=me(n.g),o=me(n.b),u=ge((.2225045*e+.7168786*i+.0606169*o)/oe);return e===i&&i===o?t=r=u:(t=ge((.4360747*e+.3850649*i+.1430804*o)/ie),r=ge((.0139322*e+.0971045*i+.7141733*o)/ue)),new pe(116*u-16,500*(t-u),200*(u-r),n.opacity)}function he(n,t,r,e){return 1===arguments.length?fe(n):new pe(n,t,r,null==e?1:e)}function pe(n,t,r,e){this.l=+n,this.a=+t,this.b=+r,this.opacity=+e}function ge(n){return n>se?Math.pow(n,1/3):n/ce+ae}function de(n){return n>le?n*n*n:ce*(n-ae)}function ve(n){return 255*(n<=.0031308?12.92*n:1.055*Math.pow(n,1/2.4)-.055)}function me(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function ye(n,t,r,e){this.h=+n,this.c=+t,this.l=+r,this.opacity=+e}function be(n){if(isNaN(n.h))return new pe(n.l,0,0,n.opacity);var t=n.h*re;return new pe(n.l,Math.cos(t)*n.c,Math.sin(t)*n.c,n.opacity)}function we(n){return function(){return n}}function Me(n){return 1==(n=+n)?xe:function(t,r){return r-t?function(n,t,r){return n=Math.pow(n,r),t=Math.pow(t,r)-n,r=1/r,function(e){return Math.pow(n+e*t,r)}}(t,r,n):we(isNaN(t)?r:t)}}function xe(n,t){var r=t-n;return r?function(n,t){return function(r){return n+r*t}}(n,r):we(isNaN(n)?t:n)}kr(pe,he,$r(Ar,{brighter:function(n){return new pe(this.l+18*(null==n?1:n),this.a,this.b,this.opacity)},darker:function(n){return new pe(this.l-18*(null==n?1:n),this.a,this.b,this.opacity)},rgb:function(){var n=(this.l+16)/116,t=isNaN(this.a)?n:n+this.a/500,r=isNaN(this.b)?n:n-this.b/200;return new Xr(ve(3.1338561*(t=ie*de(t))-1.6168667*(n=oe*de(n))-.4906146*(r=ue*de(r))),ve(-.9787684*t+1.9161415*n+.033454*r),ve(.0719453*t-.2289914*n+1.4052427*r),this.opacity)}})),kr(ye,(function(n,t,r,e){return 1===arguments.length?function(n){if(n instanceof ye)return new ye(n.h,n.c,n.l,n.opacity);if(n instanceof pe||(n=fe(n)),0===n.a&&0===n.b)return new ye(NaN,0<n.l&&n.l<100?0:NaN,n.l,n.opacity);var t=Math.atan2(n.b,n.a)*ee;return new ye(t<0?t+360:t,Math.sqrt(n.a*n.a+n.b*n.b),n.l,n.opacity)}(n):new ye(n,t,r,null==e?1:e)}),$r(Ar,{brighter:function(n){return new ye(this.h,this.c,this.l+18*(null==n?1:n),this.opacity)},darker:function(n){return new ye(this.h,this.c,this.l-18*(null==n?1:n),this.opacity)},rgb:function(){return be(this).rgb()}}));var _e=function n(t){var r=Me(t);function e(n,t){var e=r((n=Vr(n)).r,(t=Vr(t)).r),i=r(n.g,t.g),o=r(n.b,t.b),u=xe(n.opacity,t.opacity);return function(t){return n.r=e(t),n.g=i(t),n.b=o(t),n.opacity=u(t),n+""}}return e.gamma=n,e}(1);function Ee(n,t){t||(t=[]);var r,e=n?Math.min(t.length,n.length):0,i=t.slice();return function(o){for(r=0;r<e;++r)i[r]=n[r]*(1-o)+t[r]*o;return i}}function Ne(n,t){var r,e=t?t.length:0,i=n?Math.min(e,n.length):0,o=new Array(i),u=new Array(e);for(r=0;r<i;++r)o[r]=Ce(n[r],t[r]);for(;r<e;++r)u[r]=t[r];return function(n){for(r=0;r<i;++r)u[r]=o[r](n);return u}}function Se(n,t){var r=new Date;return n=+n,t=+t,function(e){return r.setTime(n*(1-e)+t*e),r}}function ke(n,t){return n=+n,t=+t,function(r){return n*(1-r)+t*r}}function $e(n,t){var r,e={},i={};for(r in null!==n&&"object"==typeof n||(n={}),null!==t&&"object"==typeof t||(t={}),t)r in n?e[r]=Ce(n[r],t[r]):i[r]=t[r];return function(n){for(r in e)i[r]=e[r](n);return i}}var Ae=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Pe=new RegExp(Ae.source,"g");function je(n,t){var r,e,i,o=Ae.lastIndex=Pe.lastIndex=0,u=-1,a=[],l=[];for(n+="",t+="";(r=Ae.exec(n))&&(e=Pe.exec(t));)(i=e.index)>o&&(i=t.slice(o,i),a[u]?a[u]+=i:a[++u]=i),(r=r[0])===(e=e[0])?a[u]?a[u]+=e:a[++u]=e:(a[++u]=null,l.push({i:u,x:ke(r,e)})),o=Pe.lastIndex;return o<t.length&&(i=t.slice(o),a[u]?a[u]+=i:a[++u]=i),a.length<2?l[0]?function(n){return function(t){return n(t)+""}}(l[0].x):function(n){return function(){return n}}(t):(t=l.length,function(n){for(var r,e=0;e<t;++e)a[(r=l[e]).i]=r.x(n);return a.join("")})}function Ce(n,t){var r,e,i=typeof t;return null==t||"boolean"===i?we(t):("number"===i?ke:"string"===i?(r=Hr(t))?(t=r,_e):je:t instanceof Hr?_e:t instanceof Date?Se:(e=t,!ArrayBuffer.isView(e)||e instanceof DataView?Array.isArray(t)?Ne:"function"!=typeof t.valueOf&&"function"!=typeof t.toString||isNaN(t)?$e:ke:Ee))(n,t)}function ze(n,t){return n=+n,t=+t,function(r){return Math.round(n*(1-r)+t*r)}}function qe(n,t){var r=xe((n=he(n)).l,(t=he(t)).l),e=xe(n.a,t.a),i=xe(n.b,t.b),o=xe(n.opacity,t.opacity);return function(t){return n.l=r(t),n.a=e(t),n.b=i(t),n.opacity=o(t),n+""}}function Re(n){return+n}var Te=[0,1];function Le(n){return n}function Oe(n,t){return(t-=n=+n)?function(r){return(r-n)/t}:(r=isNaN(t)?NaN:.5,function(){return r});var r}function Fe(n,t,r){var e=n[0],i=n[1],o=t[0],u=t[1];return i<e?(e=Oe(i,e),o=r(u,o)):(e=Oe(e,i),o=r(o,u)),function(n){return o(e(n))}}function Ie(n,t,r){var e=Math.min(n.length,t.length)-1,i=new Array(e),o=new Array(e),u=-1;for(n[e]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++u<e;)i[u]=Oe(n[u],n[u+1]),o[u]=r(t[u],t[u+1]);return function(t){var r=In(n,t,1,e)-1;return o[r](i[r](t))}}function De(n,t){return t.domain(n.domain()).range(n.range()).interpolate(n.interpolate()).clamp(n.clamp()).unknown(n.unknown())}function Be(){var n,t,r,e,i,o,u=Te,a=Te,l=Ce,c=Le;function s(){var n,t,r,l=Math.min(u.length,a.length);return c!==Le&&(n=u[0],t=u[l-1],n>t&&(r=n,n=t,t=r),c=function(r){return Math.max(n,Math.min(t,r))}),e=l>2?Ie:Fe,i=o=null,f}function f(t){return isNaN(t=+t)?r:(i||(i=e(u.map(n),a,l)))(n(c(t)))}return f.invert=function(r){return c(t((o||(o=e(a,u.map(n),ke)))(r)))},f.domain=function(n){return arguments.length?(u=Array.from(n,Re),s()):u.slice()},f.range=function(n){return arguments.length?(a=Array.from(n),s()):a.slice()},f.rangeRound=function(n){return a=Array.from(n),l=ze,s()},f.clamp=function(n){return arguments.length?(c=!!n||Le,s()):c!==Le},f.interpolate=function(n){return arguments.length?(l=n,s()):l},f.unknown=function(n){return arguments.length?(r=n,f):r},function(r,e){return n=r,t=e,s()}}function He(n,t){if((r=(n=t?n.toExponential(t-1):n.toExponential()).indexOf("e"))<0)return null;var r,e=n.slice(0,r);return[e.length>1?e[0]+e.slice(2):e,+n.slice(r+1)]}function Ge(n){return(n=He(Math.abs(n)))?n[1]:NaN}var Ze,Ue=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Ve(n){if(!(t=Ue.exec(n)))throw new Error("invalid format: "+n);var t;return new Xe({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}function Xe(n){this.fill=void 0===n.fill?" ":n.fill+"",this.align=void 0===n.align?">":n.align+"",this.sign=void 0===n.sign?"-":n.sign+"",this.symbol=void 0===n.symbol?"":n.symbol+"",this.zero=!!n.zero,this.width=void 0===n.width?void 0:+n.width,this.comma=!!n.comma,this.precision=void 0===n.precision?void 0:+n.precision,this.trim=!!n.trim,this.type=void 0===n.type?"":n.type+""}function Ke(n,t){var r=He(n,t);if(!r)return n+"";var e=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+e:e.length>i+1?e.slice(0,i+1)+"."+e.slice(i+1):e+new Array(i-e.length+2).join("0")}Ve.prototype=Xe.prototype,Xe.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var Qe={"%":function(n,t){return(100*n).toFixed(t)},b:function(n){return Math.round(n).toString(2)},c:function(n){return n+""},d:function(n){return Math.round(n).toString(10)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},g:function(n,t){return n.toPrecision(t)},o:function(n){return Math.round(n).toString(8)},p:function(n,t){return Ke(100*n,t)},r:Ke,s:function(n,t){var r=He(n,t);if(!r)return n+"";var e=r[0],i=r[1],o=i-(Ze=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,u=e.length;return o===u?e:o>u?e+new Array(o-u+1).join("0"):o>0?e.slice(0,o)+"."+e.slice(o):"0."+new Array(1-o).join("0")+He(n,Math.max(0,t+o-1))[0]},X:function(n){return Math.round(n).toString(16).toUpperCase()},x:function(n){return Math.round(n).toString(16)}};function We(n){return n}var Ye,Je,ni,ti=Array.prototype.map,ri=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function ei(n){var t,r,e=void 0===n.grouping||void 0===n.thousands?We:(t=ti.call(n.grouping,Number),r=n.thousands+"",function(n,e){for(var i=n.length,o=[],u=0,a=t[0],l=0;i>0&&a>0&&(l+a+1>e&&(a=Math.max(1,e-l)),o.push(n.substring(i-=a,i+a)),!((l+=a+1)>e));)a=t[u=(u+1)%t.length];return o.reverse().join(r)}),i=void 0===n.currency?"":n.currency[0]+"",o=void 0===n.currency?"":n.currency[1]+"",u=void 0===n.decimal?".":n.decimal+"",a=void 0===n.numerals?We:function(n){return function(t){return t.replace(/[0-9]/g,(function(t){return n[+t]}))}}(ti.call(n.numerals,String)),l=void 0===n.percent?"%":n.percent+"",c=void 0===n.minus?"-":n.minus+"",s=void 0===n.nan?"NaN":n.nan+"";function f(n){var t=(n=Ve(n)).fill,r=n.align,f=n.sign,h=n.symbol,p=n.zero,g=n.width,d=n.comma,v=n.precision,m=n.trim,y=n.type;"n"===y?(d=!0,y="g"):Qe[y]||(void 0===v&&(v=12),m=!0,y="g"),(p||"0"===t&&"="===r)&&(p=!0,t="0",r="=");var b="$"===h?i:"#"===h&&/[boxX]/.test(y)?"0"+y.toLowerCase():"",w="$"===h?o:/[%p]/.test(y)?l:"",M=Qe[y],x=/[defgprs%]/.test(y);function _(n){var i,o,l,h=b,_=w;if("c"===y)_=M(n)+_,n="";else{var E=(n=+n)<0;if(n=isNaN(n)?s:M(Math.abs(n),v),m&&(n=function(n){n:for(var t,r=n.length,e=1,i=-1;e<r;++e)switch(n[e]){case".":i=t=e;break;case"0":0===i&&(i=e),t=e;break;default:if(i>0){if(!+n[e])break n;i=0}}return i>0?n.slice(0,i)+n.slice(t+1):n}(n)),E&&0==+n&&(E=!1),h=(E?"("===f?f:c:"-"===f||"("===f?"":f)+h,_=("s"===y?ri[8+Ze/3]:"")+_+(E&&"("===f?")":""),x)for(i=-1,o=n.length;++i<o;)if(48>(l=n.charCodeAt(i))||l>57){_=(46===l?u+n.slice(i+1):n.slice(i))+_,n=n.slice(0,i);break}}d&&!p&&(n=e(n,1/0));var N=h.length+n.length+_.length,S=N<g?new Array(g-N+1).join(t):"";switch(d&&p&&(n=e(S+n,S.length?g-_.length:1/0),S=""),r){case"<":n=h+n+_+S;break;case"=":n=h+S+n+_;break;case"^":n=S.slice(0,N=S.length>>1)+h+n+_+S.slice(N);break;default:n=S+h+n+_}return a(n)}return v=void 0===v?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,v)):Math.max(0,Math.min(20,v)),_.toString=function(){return n+""},_}return{format:f,formatPrefix:function(n,t){var r=f(((n=Ve(n)).type="f",n)),e=3*Math.max(-8,Math.min(8,Math.floor(Ge(t)/3))),i=Math.pow(10,-e),o=ri[8+e/3];return function(n){return r(i*n)+o}}}}function ii(n,t,r,e){var i,o=function(n,t,r){var e=Math.abs(t-n)/Math.max(0,r),i=Math.pow(10,Math.floor(Math.log(e)/Math.LN10)),o=e/i;return o>=Dn?i*=10:o>=Bn?i*=5:o>=Hn&&(i*=2),t<n?-i:i}(n,t,r);switch((e=Ve(null==e?",f":e)).type){case"s":var u=Math.max(Math.abs(n),Math.abs(t));return null!=e.precision||isNaN(i=function(n,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Ge(t)/3)))-Ge(Math.abs(n)))}(o,u))||(e.precision=i),ni(e,u);case"":case"e":case"g":case"p":case"r":null!=e.precision||isNaN(i=function(n,t){return n=Math.abs(n),t=Math.abs(t)-n,Math.max(0,Ge(t)-Ge(n))+1}(o,Math.max(Math.abs(n),Math.abs(t))))||(e.precision=i-("e"===e.type));break;case"f":case"%":null!=e.precision||isNaN(i=function(n){return Math.max(0,-Ge(Math.abs(n)))}(o))||(e.precision=i-2*("%"===e.type))}return Je(e)}function oi(n){var t=n.domain;return n.ticks=function(n){var r=t();return function(n,t,r){var e,i,o,u,a=-1;if(r=+r,(n=+n)===(t=+t)&&r>0)return[n];if((e=t<n)&&(i=n,n=t,t=i),0===(u=Gn(n,t,r))||!isFinite(u))return[];if(u>0)for(n=Math.ceil(n/u),t=Math.floor(t/u),o=new Array(i=Math.ceil(t-n+1));++a<i;)o[a]=(n+a)*u;else for(n=Math.floor(n*u),t=Math.ceil(t*u),o=new Array(i=Math.ceil(n-t+1));++a<i;)o[a]=(n-a)/u;return e&&o.reverse(),o}(r[0],r[r.length-1],null==n?10:n)},n.tickFormat=function(n,r){var e=t();return ii(e[0],e[e.length-1],null==n?10:n,r)},n.nice=function(r){null==r&&(r=10);var e,i=t(),o=0,u=i.length-1,a=i[o],l=i[u];return l<a&&(e=a,a=l,l=e,e=o,o=u,u=e),(e=Gn(a,l,r))>0?e=Gn(a=Math.floor(a/e)*e,l=Math.ceil(l/e)*e,r):e<0&&(e=Gn(a=Math.ceil(a*e)/e,l=Math.floor(l*e)/e,r)),e>0?(i[o]=Math.floor(a/e)*e,i[u]=Math.ceil(l/e)*e,t(i)):e<0&&(i[o]=Math.ceil(a*e)/e,i[u]=Math.floor(l*e)/e,t(i)),n},n}function ui(){var n=Be()(Le,Le);return n.copy=function(){return De(n,ui())},Sr.apply(n,arguments),oi(n)}function ai(n){return function(t){return t<0?-Math.pow(-t,n):Math.pow(t,n)}}function li(n){return n<0?-Math.sqrt(-n):Math.sqrt(n)}function ci(n){return n<0?-n*n:n*n}function si(){var n=function(n){var t=n(Le,Le),r=1;function e(){return 1===r?n(Le,Le):.5===r?n(li,ci):n(ai(r),ai(1/r))}return t.exponent=function(n){return arguments.length?(r=+n,e()):r},oi(t)}(Be());return n.copy=function(){return De(n,si()).exponent(n.exponent())},Sr.apply(n,arguments),n}function fi(){return si.apply(null,arguments).exponent(.5)}function hi(n){return n}function pi(n,t){var r=t.id,e=t.bbox,i=null==t.properties?{}:t.properties,o=function(n,t){var r=function(n){if(null==n)return hi;var t,r,e=n.scale[0],i=n.scale[1],o=n.translate[0],u=n.translate[1];return function(n,a){a||(t=r=0);var l=2,c=n.length,s=new Array(c);for(s[0]=(t+=n[0])*e+o,s[1]=(r+=n[1])*i+u;l<c;)s[l]=n[l],++l;return s}}(n.transform),e=n.arcs;function i(n,t){t.length&&t.pop();for(var i=e[n<0?~n:n],o=0,u=i.length;o<u;++o)t.push(r(i[o],o));n<0&&function(n,t){for(var r,e=n.length,i=e-t;i<--e;)r=n[i],n[i++]=n[e],n[e]=r}(t,u)}function o(n){return r(n)}function u(n){for(var t=[],r=0,e=n.length;r<e;++r)i(n[r],t);return t.length<2&&t.push(t[0]),t}function a(n){for(var t=u(n);t.length<4;)t.push(t[0]);return t}function l(n){return n.map(a)}return function n(t){var r,e=t.type;switch(e){case"GeometryCollection":return{type:e,geometries:t.geometries.map(n)};case"Point":r=o(t.coordinates);break;case"MultiPoint":r=t.coordinates.map(o);break;case"LineString":r=u(t.arcs);break;case"MultiLineString":r=t.arcs.map(u);break;case"Polygon":r=l(t.arcs);break;case"MultiPolygon":r=t.arcs.map(l);break;default:return null}return{type:e,coordinates:r}}(t)}(n,t);return null==r&&null==e?{type:"Feature",properties:i,geometry:o}:null==e?{type:"Feature",id:r,properties:i,geometry:o}:{type:"Feature",id:r,bbox:e,properties:i,geometry:o}}Ye=ei({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"}),Je=Ye.format,ni=Ye.formatPrefix;const gi=[];function di(n){return"[object Date]"===Object.prototype.toString.call(n)}function vi(n,t){if(n===t||n!=n)return()=>n;const r=typeof n;if(r!==typeof t||Array.isArray(n)!==Array.isArray(t))throw new Error("Cannot interpolate values of different type");if(Array.isArray(n)){const r=t.map((t,r)=>vi(n[r],t));return n=>r.map(t=>t(n))}if("object"===r){if(!n||!t)throw new Error("Object cannot be null");if(di(n)&&di(t)){n=n.getTime();const r=(t=t.getTime())-n;return t=>new Date(n+t*r)}const r=Object.keys(t),e={};return r.forEach(r=>{e[r]=vi(n[r],t[r])}),n=>{const t={};return r.forEach(r=>{t[r]=e[r](n)}),t}}if("number"===r){const r=t-n;return t=>n+t*r}throw new Error(`Cannot interpolate ${r} values`)}function mi(e,i={}){const o=function(t,r=n){let e;const i=[];function o(n){if(a(t,n)&&(t=n,e)){const n=!gi.length;for(let n=0;n<i.length;n+=1){const r=i[n];r[1](),gi.push(r,t)}if(n){for(let n=0;n<gi.length;n+=2)gi[n][0](gi[n+1]);gi.length=0}}}return{set:o,update:function(n){o(n(t))},subscribe:function(u,a=n){const l=[u,a];return i.push(l),1===i.length&&(e=r(o)||n),u(t),()=>{const n=i.indexOf(l);-1!==n&&i.splice(n,1),0===i.length&&(e(),e=null)}}}}(e);let u,l=e;function c(n,a){if(null==e)return o.set(e=n),Promise.resolve();l=n;let c=u,g=!1,{delay:d=0,duration:v=400,easing:m=t,interpolate:y=vi}=r(r({},i),a);const b=s()+d;let w;return u=function(n){let t;return 0===h.size&&f(p),{promise:new Promise(r=>{h.add(t={c:n,f:r})}),abort(){h.delete(t)}}}(t=>{if(t<b)return!0;g||(w=y(e,n),"function"==typeof v&&(v=v(e,n)),g=!0),c&&(c.abort(),c=null);const r=t-b;return r>v?(o.set(e=n),!1):(o.set(e=w(m(r/v))),!0)}),u.promise}return{set:c,update:(n,t)=>c(n(l,e),t),subscribe:o.subscribe}}function yi(t){let r,e;return{c(){r=y("path"),M(r,"d",t[0]),M(r,"class","provinceShape svelte-116txg3"),M(r,"fill",t[2]),e=[w(r,"mouseover",t[4]),w(r,"mouseout",t[5])]},m(n,t){d(n,r,t)},p(n,[t]){1&t&&M(r,"d",n[0]),4&t&&M(r,"fill",n[2])},i:n,o:n,d(n){n&&v(r),o(e)}}}function bi(n,t,r){let e,{featurePath:i}=t,{initialColor:o}=t;const u=mi(o,{duration:300,interpolate:qe});l(n,u,n=>r(2,e=n));return n.$set=n=>{"featurePath"in n&&r(0,i=n.featurePath),"initialColor"in n&&r(1,o=n.initialColor)},[i,o,e,u,()=>{u.set(Vr(o).brighter(.3))},()=>{u.set(o)}]}class wi extends H{constructor(n){super(),B(this,n,bi,yi,a,{featurePath:0,initialColor:1})}}const Mi=[{name:"Perth",lat:56.396999,lon:-3.437,population:47180},{name:"Glasgow",lat:55.860916,lon:-4.251433,population:598830},{name:"Dundee",lat:56.462002,lon:-2.9707,population:148270},{name:"Dundee",lat:56.462002,lon:-2.9707,population:148270},{name:"Elgin",lat:57.653484,lon:-3.335724,population:23128},{name:"Edinburgh",lat:55.953251,lon:-3.188267,population:482005},{name:"Edinburgh",lat:55.953251,lon:-3.188267,population:482005},{name:"Inverness",lat:57.477772,lon:-4.224721,population:46870},{name:"Lerwick",lat:60.154167,lon:-1.148611,population:6958}];function xi(n,t,r){const e=n.slice();return e[13]=t[r],e}function _i(n,t,r){const e=n.slice();return e[16]=t[r],e}function Ei(n){let t;const r=new wi({props:{featurePath:n[2](n[16]),initialColor:n[1](n[16].properties.NAME_2.length)}});return{c(){var n;(n=r.$$.fragment)&&n.c()},m(n,e){F(r,n,e),t=!0},p(n,t){const e={};5&t&&(e.featurePath=n[2](n[16])),3&t&&(e.initialColor=n[1](n[16].properties.NAME_2.length)),r.$set(e)},i(n){t||(L(r.$$.fragment,n),t=!0)},o(n){O(r.$$.fragment,n),t=!1},d(n){I(r,n)}}}function Ni(n){let t,r,e,i,o;return{c(){t=y("circle"),M(t,"class","city svelte-1xdlizl"),M(t,"cx",r=n[3]([n[13].lon,n[13].lat])[0]),M(t,"cy",e=n[3]([n[13].lon,n[13].lat])[1]),M(t,"r",i=n[9](n[13].population)),M(t,"fill",o=n[10](n[13].population))},m(n,r){d(n,t,r)},p(n,i){8&i&&r!==(r=n[3]([n[13].lon,n[13].lat])[0])&&M(t,"cx",r),8&i&&e!==(e=n[3]([n[13].lon,n[13].lat])[1])&&M(t,"cy",e)},d(n){n&&v(t)}}}function Si(n){let t,r,e,i,u,a,l,c,s=n[0],f=[];for(let t=0;t<s.length;t+=1)f[t]=Ei(_i(n,s,t));const h=n=>O(f[n],1,1,()=>{f[n]=null});let p=Mi,_=[];for(let t=0;t<p.length;t+=1)_[t]=Ni(xi(n,p,t));return{c(){var o;o="button",t=document.createElement(o),t.textContent="Change projection",r=b(" "),e=y("svg"),i=y("path");for(let n=0;n<f.length;n+=1)f[n].c();a=b("");for(let n=0;n<_.length;n+=1)_[n].c();M(i,"class","borders svelte-1xdlizl"),M(i,"d",u=n[6].getCompositionBorders()),x(i,"opacity",n[4]),M(e,"width","960"),M(e,"height","500"),M(e,"class","svelte-1xdlizl"),c=w(t,"click",n[12])},m(n,o){d(n,t,o),d(n,r,o),d(n,e,o),g(e,i);for(let n=0;n<f.length;n+=1)f[n].m(e,null);g(e,a);for(let n=0;n<_.length;n+=1)_[n].m(e,null);l=!0},p(n,[t]){if((!l||16&t)&&x(i,"opacity",n[4]),7&t){let r;for(s=n[0],r=0;r<s.length;r+=1){const i=_i(n,s,r);f[r]?(f[r].p(i,t),L(f[r],1)):(f[r]=Ei(i),f[r].c(),L(f[r],1),f[r].m(e,a))}for(T={r:0,c:[],p:T},r=s.length;r<f.length;r+=1)h(r);T.r||o(T.c),T=T.p}if(1544&t){let r;for(p=Mi,r=0;r<p.length;r+=1){const i=xi(n,p,r);_[r]?_[r].p(i,t):(_[r]=Ni(i),_[r].c(),_[r].m(e,null))}for(;r<_.length;r+=1)_[r].d(1);_.length=p.length}},i(n){if(!l){for(let n=0;n<s.length;n+=1)L(f[n]);l=!0}},o(n){f=f.filter(Boolean);for(let n=0;n<f.length;n+=1)O(f[n]);l=!1},d(n){n&&v(t),n&&v(r),n&&v(e),m(f,n),m(_,n),c()}}}const ki="960",$i="500";function Ai(n,t,r){let e,i,o=[],u=()=>{};const a=fr().rotate([4.4,.8]).center([0,55.4]).parallels([50,60]).scale(3800).translate([ki/2,1.8*$i/2]),c=Nr().translate([ki/2,1.85*$i/2]).scale(5200),s=(n,t)=>(function(r){return function(n){return lr((function(){return n}))()}((function(e,i){e*=180/Math.PI,i*=180/Math.PI;var o=n([e,i]),u=t([e,i]);return o&&u?[(1-r)*o[0]+r*u[0],(1-r)*-o[1]+r*-u[1]]:[0,0]})).scale(1).translate([0,0])}),f=mi(a,{duration:1e3,interpolate:s});l(n,f,n=>r(3,e=n));const h=mi(0,{duration:1e3});l(n,h,n=>r(4,i=n));const p=fi().domain([0,Math.max.apply(Math,Mi.map((function(n){return n.population})))]).range([2,15]),g=fi().domain([0,Math.max.apply(Math,Mi.map((function(n){return n.population})))]).range(["#ffffff","#5555ff"]);N((async function(){const n=await fetch("https://gist.githubusercontent.com/rveciana/27272a581e975835aaa321ddf816d726/raw/c40062a328843322208b8e98c2104dc8f6ad5301/uk-counties.json"),t=await n.json(),e=(i=t,"GeometryCollection"===(a=t.objects.UK).type?{type:"FeatureCollection",features:a.geometries.map((function(n){return pi(i,n)}))}:pi(i,a));var i,a;const l={...e,features:e.features.filter(n=>"Scotland"===n.properties.NAME_1)},c=function(n,t){var r,e,i,o=n.length,u=-1;if(null==t){for(;++u<o;)if(null!=(r=n[u])&&r>=r)for(e=i=r;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),i<r&&(i=r))}else for(;++u<o;)if(null!=(r=t(n[u],u,n))&&r>=r)for(e=i=r;++u<o;)null!=(r=t(n[u],u,n))&&(e>r&&(e=r),i<r&&(i=r));return[e,i]}(l.features,n=>n.properties.NAME_2.length);r(1,u=ui().domain(c).range(["#feedde","#fd8d3c"])),r(0,o=l.features)}));let d;return n.$$.update=()=>{8&n.$$.dirty&&r(2,d=function(n,t){var r,e,i=4.5;function o(n){return n&&("function"==typeof i&&e.pointRadius(+i.apply(this,arguments)),vn(n,r(e))),e.result()}return o.area=function(n){return vn(n,r(at)),at.result()},o.measure=function(n){return vn(n,r(Vt)),Vt.result()},o.bounds=function(n){return vn(n,r(vt)),vt.result()},o.centroid=function(n){return vn(n,r(Pt)),Pt.result()},o.projection=function(t){return arguments.length?(r=null==t?(n=null,nt):(n=t).stream,o):n},o.context=function(n){return arguments.length?(e=null==n?(t=null,new Qt):new It(t=n),"function"!=typeof i&&e.pointRadius(i),o):t},o.pointRadius=function(n){return arguments.length?(i="function"==typeof n?n:(e.pointRadius(+n),+n),o):i},o.projection(n).context(t)}().projection(e))},[o,u,d,e,i,a,c,f,h,p,g,s,()=>{f.set(e===a?c:a),h.set(e===a?1:0)}]}return new class extends H{constructor(n){super(),B(this,n,Ai,Si,a,{})}}({target:document.body})}();
//# sourceMappingURL=bundle.js.map
export const cities = [
{ name: "Perth", lat: 56.396999, lon: -3.437, population: 47180 },
{ name: "Glasgow", lat: 55.860916, lon: -4.251433, population: 598830 },
{ name: "Dundee", lat: 56.462002, lon: -2.9707, population: 148270 },
{ name: "Dundee", lat: 56.462002, lon: -2.9707, population: 148270 },
{ name: "Elgin", lat: 57.653484, lon: -3.335724, population: 23128 },
{ name: "Edinburgh", lat: 55.953251, lon: -3.188267, population: 482005 },
{ name: "Edinburgh", lat: 55.953251, lon: -3.188267, population: 482005 },
{ name: "Inverness", lat: 57.477772, lon: -4.224721, population: 46870 },
{ name: "Lerwick", lat: 60.154167, lon: -1.148611, population: 6958 }
];
<script>
import { tweened } from "svelte/motion";
import { interpolateLab } from "d3-interpolate";
import { rgb } from "d3-color";
export let featurePath;
export let initialColor;
const color = tweened(initialColor, {
duration: 300,
interpolate: interpolateLab
});
</script>
<style>
.provinceShape {
stroke: #444444;
stroke-width: 0.5;
}
</style>
<path
d={featurePath}
class="provinceShape"
fill={$color}
on:mouseover={() => {
color.set(rgb(initialColor).brighter(0.3));
}}
on:mouseout={() => {
color.set(initialColor);
}} />
html, body {
position: relative;
width: 100%;
height: 100%;
}
body {
color: #333;
margin: 0;
padding: 8px;
box-sizing: border-box;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
}
a {
color: rgb(0,100,200);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
a:visited {
color: rgb(0,80,160);
}
label {
display: block;
}
input, button, select, textarea {
font-family: inherit;
font-size: inherit;
padding: 0.4em;
margin: 0 0 0.5em 0;
box-sizing: border-box;
border: 1px solid #ccc;
border-radius: 2px;
}
input:disabled {
color: #ccc;
}
input[type="range"] {
height: 0;
}
button {
color: #333;
background-color: #f4f4f4;
outline: none;
}
button:disabled {
color: #999;
}
button:not(:disabled):active {
background-color: #ddd;
}
button:focus {
border-color: #666;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>Svelte app</title>
<link rel="stylesheet" href="bundle.css" />
<script defer src="bundle.js"></script>
</head>
<body></body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment