From d47d61ee5fa49ff1ddafe8c45944c8bf03174764 Mon Sep 17 00:00:00 2001 From: bert hubert Date: Sun, 22 Sep 2019 18:04:46 +0200 Subject: [PATCH] missing files --- html/ext/d3-geo-projection.v2.min.js | 2 + html/ext/topojson.v1.min.js | 2 + html/observer.html | 48 ++++++ html/observer.js | 240 +++++++++++++++++++++++++++ html/observers.html | 60 +++++++ html/observers.js | 94 +++++++++++ html/overview.html | 60 +++++++ html/overview.js | 97 +++++++++++ html/sv.html | 60 +++++++ html/sv.js | 99 +++++++++++ 10 files changed, 762 insertions(+) create mode 100644 html/ext/d3-geo-projection.v2.min.js create mode 100644 html/ext/topojson.v1.min.js create mode 100644 html/observer.html create mode 100644 html/observer.js create mode 100644 html/observers.html create mode 100644 html/observers.js create mode 100644 html/overview.html create mode 100644 html/overview.js create mode 100644 html/sv.html create mode 100644 html/sv.js diff --git a/html/ext/d3-geo-projection.v2.min.js b/html/ext/d3-geo-projection.v2.min.js new file mode 100644 index 0000000..ed584e1 --- /dev/null +++ b/html/ext/d3-geo-projection.v2.min.js @@ -0,0 +1,2 @@ +// https://d3js.org/d3-geo-projection/ v2.7.0 Copyright 2019 Mike Bostock +!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("d3-geo"),require("d3-array")):"function"==typeof define&&define.amd?define(["exports","d3-geo","d3-array"],r):r(n.d3=n.d3||{},n.d3,n.d3)}(this,function(n,r,e){"use strict";var t=Math.abs,o=Math.atan,i=Math.atan2,u=Math.cos,a=Math.exp,c=Math.floor,f=Math.log,l=Math.max,g=Math.min,v=Math.pow,s=Math.round,p=Math.sign||function(n){return n>0?1:n<0?-1:0},h=Math.sin,d=Math.tan,w=1e-6,y=1e-12,m=Math.PI,P=m/2,R=m/4,b=Math.SQRT1_2,j=G(2),M=G(m),E=2*m,S=180/m,A=m/180;function k(n){return n>1?P:n<-1?-P:Math.asin(n)}function x(n){return n>1?0:n<-1?m:Math.acos(n)}function G(n){return n>0?Math.sqrt(n):0}function C(n){return(a(n)-a(-n))/2}function N(n){return(a(n)+a(-n))/2}function F(n){var r=d(n/2),e=2*f(u(n/2))/(r*r);function o(n,r){var t=u(n),o=u(r),i=h(r),a=o*t,c=-((1-a?f((1+a)/2)/(1-a):-.5)+e/(1+a));return[c*o*h(n),c*i]}return o.invert=function(r,o){var a,c=G(r*r+o*o),l=-n/2,g=50;if(!c)return[0,0];do{var v=l/2,s=u(v),p=h(v),y=d(v),m=f(1/s);l-=a=(2/y*m-e*y-c)/(-m/(p*p)+1-e/(2*s*s))}while(t(a)>w&&--g>0);var P=h(l);return[i(r*P,c*u(l)),k(o*P/c)]},o}function z(n,r){var e=u(r),t=function(n){return n?n/Math.sin(n):1}(x(e*u(n/=2)));return[2*e*h(n)*t,h(r)*t]}function L(n){var r=h(n),e=u(n),o=n>=0?1:-1,a=d(o*n),c=(1+r-e)/2;function f(n,t){var f=u(t),l=u(n/=2);return[(1+f)*h(n),(o*t>-i(l,a)-.001?0:10*-o)+c+h(t)*e-(1+f)*r*l]}return f.invert=function(n,f){var l=0,g=0,v=50;do{var s=u(l),p=h(l),d=u(g),y=h(g),m=1+d,P=m*p-n,R=c+y*e-m*r*s-f,b=m*s/2,j=-p*y,M=r*m*p/2,E=e*d+r*s*y,S=j*M-E*b,A=(R*j-P*E)/S/2,k=(P*M-R*b)/S;l-=A,g-=k}while((t(A)>w||t(k)>w)&&--v>0);return o*g>-i(u(l),a)-.001?[2*l,g]:null},f}function H(n,r){var e=d(r/2),t=G(1-e*e),o=1+t*u(n/=2),i=h(n)*t/o,a=e/o,c=i*i,f=a*a;return[4/3*i*(3+c-3*f),4/3*a*(3+3*c-f)]}z.invert=function(n,r){if(!(n*n+4*r*r>m*m+w)){var e=n,o=r,i=25;do{var a,c=h(e),f=h(e/2),l=u(e/2),g=h(o),v=u(o),s=h(2*o),p=g*g,d=v*v,y=f*f,P=1-d*l*l,R=P?x(v*l)*G(a=1/P):a=0,b=2*R*v*f-n,j=R*g-r,M=a*(d*y+R*v*l*p),E=a*(.5*c*s-2*R*g*f),S=.25*a*(s*f-R*g*d*c),A=a*(p*l+R*y*v),k=E*S-A*M;if(!k)break;var C=(j*E-b*A)/k,N=(b*S-j*M)/k;e-=C,o-=N}while((t(C)>w||t(N)>w)&&--i>0);return[e,o]}},H.invert=function(n,r){if(r*=3/8,!(n*=3/8)&&t(r)>1)return null;var e=1+n*n+r*r,o=G((e-G(e*e-4*r*r))/2),a=k(o)/3,c=o?function(n){return f(n+G(n*n-1))}(t(r/o))/3:function(n){return f(n+G(n*n+1))}(t(n))/3,l=u(a),g=N(c),v=g*g-l*l;return[2*p(n)*i(C(c)*l,.25-v),2*p(r)*i(g*h(a),.25+v)]};var q=G(8),B=f(1+j);function W(n,r){var e=t(r);return eP){var c=i(a[1],a[0]),f=G(a[0]*a[0]+a[1]*a[1]),l=e*s((c-P)/e)+P,g=i(h(c-=l),2-u(c));c=l+k(m/f*h(g))-g,a[0]=f*u(c),a[1]=f*h(c)}return a}return a.invert=function(n,t){var a=G(n*n+t*t);if(a>P){var c=i(t,n),f=e*s((c-P)/e)+P,l=c>f?-1:1,g=a*u(f-c),v=1/d(l*x((g-m)/G(m*(m-2*g)+a*a)));c=f+2*o((v+l*G(v*v-3))/3),n=a*u(c),t=a*h(c)}return r.geoAzimuthalEquidistantRaw.invert(n,t)},a}function D(n,e){if(arguments.length<2&&(e=n),1===e)return r.geoAzimuthalEqualAreaRaw;if(e===1/0)return Q;function t(t,o){var i=r.geoAzimuthalEqualAreaRaw(t/e,o);return i[0]*=n,i}return t.invert=function(t,o){var i=r.geoAzimuthalEqualAreaRaw.invert(t/n,o);return i[0]*=e,i},t}function Q(n,r){return[n*u(r)/u(r/=2),2*h(r)]}function T(){var n=D(1.68,2);return function(r,e){if(r+e<-1.4){var t=(r-e+1.6)*(r+e+1.4)/8;r+=t,e-=.8*t*h(e+m/2)}var o=n(r,e),i=(1-u(r*e))/12;return o[1]<0&&(o[0]*=1+i),o[1]>0&&(o[1]*=1+i/1.5*o[0]*o[0]),o}}function V(n,r){var e,o=n*h(r),i=30;do{r-=e=(r+h(r)-o)/(1+u(r))}while(t(e)>w&&--i>0);return r/2}function _(n,r,e){function t(t,o){return[n*t*u(o=V(e,o)),r*h(o)]}return t.invert=function(t,o){return o=k(o/r),[t/(n*u(o)),k((2*o+h(2*o))/e)]},t}W.invert=function(n,r){if((i=t(r))y&&--l>0);return[n/(u(c)*(q-1/h(c))),p(r)*c]},Q.invert=function(n,r){var e=2*k(r/2);return[n*u(e/2)/u(e),e]};var K=_(j/P,j,m);var O=2.00276,U=1.11072;function J(n,r){var e=V(m,r);return[O*n/(1/u(r)+U/u(e)),(r+j*h(e))/O]}function X(n){var e=0,t=r.geoProjectionMutator(n),o=t(e);return o.parallel=function(n){return arguments.length?t(e=n*A):e*S},o}function Y(n,r){return[n*u(r),r]}function Z(n){if(!n)return Y;var r=1/d(n);function e(e,t){var o=r+n-t,i=o?e*u(t)/o:o;return[o*h(i),r-o*u(i)]}return e.invert=function(e,t){var o=G(e*e+(t=r-t)*t),a=r+n-o;return[o/u(a)*i(e,t),a]},e}function $(n){function r(r,e){var t=P-e,o=t?r*n*h(t)/t:t;return[t*h(o)/n,P-t*u(o)]}return r.invert=function(r,e){var t=r*n,o=P-e,u=G(t*t+o*o),a=i(t,o);return[(u?u/h(u):1)*a/n,P-u]},r}J.invert=function(n,r){var e,o,i=O*r,a=r<0?-R:R,c=25;do{o=i-j*h(a),a-=e=(h(2*a)+2*a-m*h(o))/(2*u(2*a)+2+m*u(o)*j*u(a))}while(t(e)>w&&--c>0);return o=i-j*h(a),[n*(1/u(o)+U/u(a))/O,o]},Y.invert=function(n,r){return[n/u(r),r]};var nn=_(1,4/m,m);function rn(n,r,e,o,a,c){var f,l=u(c);if(t(n)>1||t(c)>1)f=x(e*a+r*o*l);else{var g=h(n/2),v=h(c/2);f=2*k(G(g*g+r*o*v*v))}return t(f)>w?[f,i(o*h(c),r*a-e*o*l)]:[0,0]}function en(n,r,e){return x((n*n+r*r-e*e)/(2*n*r))}function tn(n){return n-2*m*c((n+m)/(2*m))}function on(n,r,e){for(var t,o=[[n[0],n[1],h(n[1]),u(n[1])],[r[0],r[1],h(r[1]),u(r[1])],[e[0],e[1],h(e[1]),u(e[1])]],i=o[2],a=0;a<3;++a,i=t)t=o[a],i.v=rn(t[1]-i[1],i[3],i[2],t[3],t[2],t[0]-i[0]),i.point=[0,0];var c=en(o[0].v[0],o[2].v[0],o[1].v[0]),f=en(o[0].v[0],o[1].v[0],o[2].v[0]),l=m-c;o[2].point[1]=0,o[0].point[0]=-(o[1].point[0]=o[0].v[0]/2);var g=[o[2].point[0]=o[0].point[0]+o[2].v[0]*u(c),2*(o[0].point[1]=o[1].point[1]=o[2].v[0]*h(c))];return function(n,r){var e,t=h(r),i=u(r),a=new Array(3);for(e=0;e<3;++e){var c=o[e];if(a[e]=rn(r-c[1],c[3],c[2],i,t,n-c[0]),!a[e][0])return c.point;a[e][1]=tn(a[e][1]-c.v[1])}var v=g.slice();for(e=0;e<3;++e){var s=2==e?0:e+1,p=en(o[e].v[0],a[e][0],a[s][0]);a[e][1]<0&&(p=-p),e?1==e?(p=f-p,v[0]-=a[e][0]*u(p),v[1]-=a[e][0]*h(p)):(p=l-p,v[0]+=a[e][0]*u(p),v[1]+=a[e][0]*h(p)):(v[0]+=a[e][0]*u(p),v[1]-=a[e][0]*h(p))}return v[0]/=3,v[1]/=3,v}}function un(n){return n[0]*=A,n[1]*=A,n}function an(n,e,t){var o=r.geoCentroid({type:"MultiPoint",coordinates:[n,e,t]}),i=[-o[0],-o[1]],u=r.geoRotation(i),a=r.geoProjection(on(un(u(n)),un(u(e)),un(u(t)))).rotate(i),c=a.center;return delete a.rotate,a.center=function(n){return arguments.length?c(u(n)):u.invert(c())},a.clipAngle(90)}function cn(n,r){var e=G(1-h(r));return[2/M*n*e,M*(1-e)]}function fn(n){var r=d(n);function e(n,e){return[n,(n?n/h(n):1)*(h(e)*u(n)-r*u(e))]}return e.invert=r?function(n,e){n&&(e*=h(n)/n);var t=u(n);return[n,2*i(G(t*t+r*r-e*e)-t,r-e)]}:function(n,r){return[n,k(n?r*d(n)/n:r)]},e}cn.invert=function(n,r){var e=(e=r/M-1)*e;return[e>0?n*G(m/e)/2:0,k(1-e)]};var ln=G(3);function gn(n,r){return[ln*n*(2*u(2*r/3)-1)/M,ln*M*h(r/3)]}function vn(n){var r=u(n);function e(n,e){return[n*r,h(e)/r]}return e.invert=function(n,e){return[n/r,k(e*r)]},e}function sn(n){var r=u(n);function e(n,e){return[n*r,(1+r)*d(e/2)]}return e.invert=function(n,e){return[n/r,2*o(e/(1+r))]},e}function pn(n,r){var e=G(8/(3*m));return[e*n*(1-t(r)/m),e*r]}function hn(n,r){var e=G(4-3*h(t(r)));return[2/G(6*m)*n*e,p(r)*G(2*m/3)*(2-e)]}function dn(n,r){var e=G(m*(4+m));return[2/e*n*(1+G(1-4*r*r/(m*m))),4/e*r]}function wn(n,r){var e=(2+P)*h(r);r/=2;for(var o=0,i=1/0;o<10&&t(i)>w;o++){var a=u(r);r-=i=(r+h(r)*(a+2)-e)/(2*a*(1+a))}return[2/G(m*(4+m))*n*(1+u(r)),2*G(m/(4+m))*h(r)]}function yn(n,r){return[n*(1+u(r))/G(2+m),2*r/G(2+m)]}function mn(n,r){for(var e=(1+P)*h(r),o=0,i=1/0;o<10&&t(i)>w;o++)r-=i=(r+h(r)-e)/(1+u(r));return e=G(2+m),[n*(1+u(r))/e,2*r/e]}gn.invert=function(n,r){var e=3*k(r/(ln*M));return[M*n/(ln*(2*u(2*e/3)-1)),e]},pn.invert=function(n,r){var e=G(8/(3*m)),o=r/e;return[n/(e*(1-t(o)/m)),o]},hn.invert=function(n,r){var e=2-t(r)/G(2*m/3);return[n*G(6*m)/(2*e),p(r)*k((4-e*e)/3)]},dn.invert=function(n,r){var e=G(m*(4+m))/2;return[n*e/(1+G(1-r*r*(4+m)/(4*m))),r*e/2]},wn.invert=function(n,r){var e=r*G((4+m)/m)/2,t=k(e),o=u(t);return[n/(2/G(m*(4+m))*(1+o)),k((t+e*(o+2))/(2+P))]},yn.invert=function(n,r){var e=G(2+m),t=r*e/2;return[e*n/(1+u(t)),t]},mn.invert=function(n,r){var e=1+P,t=G(e/2);return[2*n*t/(1+u(r*=t)),k((r+h(r))/e)]};var Pn=3+2*j;function Rn(n,r){var e=h(n/=2),t=u(n),i=G(u(r)),a=u(r/=2),c=h(r)/(a+j*t*i),l=G(2/(1+c*c)),g=G((j*a+(t+e)*i)/(j*a+(t-e)*i));return[Pn*(l*(g-1/g)-2*f(g)),Pn*(l*c*(g+1/g)-2*o(c))]}Rn.invert=function(n,r){if(!(e=H.invert(n/1.2,1.065*r)))return null;var e,i=e[0],a=e[1],c=20;n/=Pn,r/=Pn;do{var v=i/2,s=a/2,p=h(v),d=u(v),y=h(s),m=u(s),R=u(a),M=G(R),E=y/(m+j*d*M),S=E*E,A=G(2/(1+S)),k=(j*m+(d+p)*M)/(j*m+(d-p)*M),x=G(k),C=x-1/x,N=x+1/x,F=A*C-2*f(x)-n,z=A*E*N-2*o(E)-r,L=y&&b*M*p*S/y,q=(j*d*m+M)/(2*(m+j*d*M)*(m+j*d*M)*M),B=-.5*E*A*A*A,W=B*L,I=B*q,D=(D=2*m+j*M*(d-p))*D*x,Q=(j*d*m*M+R)/D,T=-j*p*y/(M*D),V=C*W-2*Q/x+A*(Q+Q/k),_=C*I-2*T/x+A*(T+T/k),K=E*N*W-2*L/(1+S)+A*N*L+A*E*(Q-Q/k),O=E*N*I-2*q/(1+S)+A*N*q+A*E*(T-T/k),U=_*K-O*V;if(!U)break;var J=(z*_-F*O)/U,X=(F*K-z*V)/U;i-=J,a=l(-P,g(P,a-X))}while((t(J)>w||t(X)>w)&&--c>0);return t(t(a)-P)0&&t(o)>w);return a<0?NaN:e}function Sn(n){var r=1-n,e=o(m,0)[0]-o(-m,0)[0],t=G(2*(o(0,P)[1]-o(0,-P)[1])/e);function o(e,t){var o=u(t),i=h(t);return[o/(r+n*o)*e,r*t+n*i]}function i(n,r){var e=o(n,r);return[e[0]*t,e[1]/t]}function a(n){return i(0,n)[1]}return i.invert=function(e,o){var i=En(a,o);return[e/t*(n+r/u(i)),i]},i}function An(n){return[n[0]/2,k(d(n[1]/2*A))*S]}function kn(n){return[2*n[0],2*o(h(n[1]*A))*S]}function xn(n,e){var o=2*m/e,a=n*n;function c(e,c){var f=r.geoAzimuthalEquidistantRaw(e,c),l=f[0],g=f[1],v=l*l+g*g;if(v>a){var p=G(v),d=i(g,l),y=o*s(d/o),R=d-y,b=n*u(R),j=(n*h(R)-R*h(b))/(P-b),M=Gn(R,j),E=(m-n)/Cn(M,b,m);l=p;var S,A=50;do{l-=S=(n+Cn(M,b,l)*E-p)/(M(l)*E)}while(t(S)>w&&--A>0);g=R*h(l),la){var l=G(f),g=i(c,e),v=o*s(g/o),p=g-v;e=l*u(p),c=l*h(p);for(var d=e-P,w=h(e),R=c/w,b=ew||t(s)>w)&&--y>0);return[p,d]},l}jn.invert=function(n,r){var e=r/(1+bn);return[n&&n/(bn*G(1-e*e)),2*o(e)]},Mn.invert=function(n,r){var e=o(r/M),t=u(e),i=2*e;return[n*M/2/(u(i)*t*t),i]};var Fn=Nn(2.8284,-1.6988,.75432,-.18071,1.76003,-.38914,.042555);var zn=Nn(2.583819,-.835827,.170354,-.038094,1.543313,-.411435,.082742);var Ln=Nn(5/6*m,-.62636,-.0344,0,1.3493,-.05524,0,.045);function Hn(n,r){var e=n*n,t=r*r;return[n*(1-.162388*t)*(.87-952426e-9*e*e),r*(1+t/12)]}Hn.invert=function(n,r){var e,o=n,i=r,u=50;do{var a=i*i;i-=e=(i*(1+a/12)-r)/(1+a/4)}while(t(e)>w&&--u>0);u=50,n/=1-.162388*a;do{var c=(c=o*o)*c;o-=e=(o*(.87-952426e-9*c)-n)/(.87-.00476213*c)}while(t(e)>w&&--u>0);return[o,i]};var qn=Nn(2.6516,-.76534,.19123,-.047094,1.36289,-.13965,.031762);function Bn(n){var r=n(P,0)[0]-n(-P,0)[0];function e(e,t){var o=e>0?-.5:.5,i=n(e+o*m,t);return i[0]-=o*r,i}return n.invert&&(e.invert=function(e,t){var o=e>0?-.5:.5,i=n.invert(e+o*r,t),u=i[0]-o*m;return u<-m?u+=2*m:u>m&&(u-=2*m),i[0]=u,i}),e}function Wn(n,r){var e=p(n),o=p(r),a=u(r),c=u(n)*a,f=h(n)*a,l=h(o*r);n=t(i(f,l)),r=k(c),t(n-P)>w&&(n%=P);var g=function(n,r){if(r===P)return[0,0];var e,o,i=h(r),a=i*i,c=a*a,f=1+c,l=1+3*c,g=1-c,v=k(1/G(f)),s=g+a*f*v,p=(1-i)/s,d=G(p),y=p*f,R=G(y),b=d*g;if(0===n)return[0,-(b+a*R)];var j,M=u(r),E=1/M,S=2*i*M,A=(-s*M-(-3*a+v*l)*S*(1-i))/(s*s),x=-E*S,C=-E*(a*f*A+p*l*S),N=-2*E*(g*(.5*A/d)-2*a*d*S),F=4*n/m;if(n>.222*m||r.175*m){if(e=(b+a*G(y*(1+c)-b*b))/(1+c),n>m/4)return[e,e];var z=e,L=.5*e;e=.5*(L+z),o=50;do{var H=G(y-e*e),q=e*(N+x*H)+C*k(e/R)-F;if(!q)break;q<0?L=e:z=e,e=.5*(L+z)}while(t(z-L)>w&&--o>0)}else{e=w,o=25;do{var B=e*e,W=G(y-B),I=N+x*W,D=e*I+C*k(e/R)-F,Q=I+(C-x*B)/W;e-=j=W?D/Q:0}while(t(j)>w&&--o>0)}return[e,-b-a*G(y-e*e)]}(n>m/4?P-n:n,r);return n>m/4&&(l=g[0],g[0]=-g[1],g[1]=-l),g[0]*=e,g[1]*=-o,g}function In(n,r){var e,i,c,f,l,g;if(r=1-w)return e=(1-r)/4,c=1/(i=N(n)),[(f=((g=a(2*(g=n)))-1)/(g+1))+e*((l=i*C(n))-n)/(i*i),c-e*f*c*(l-n),c+e*f*c*(l+n),2*o(a(n))-P+e*(l-n)/i];var v=[1,0,0,0,0,0,0,0,0],s=[G(r),0,0,0,0,0,0,0,0],p=0;for(i=G(1-r),l=1;t(s[p]/v[p])>w&&p<8;)e=v[p++],s[p]=(e-i)/2,v[p]=(e+i)/2,i=G(e*i),l*=2;c=l*v[p]*n;do{c=(k(f=s[p]*h(i=c)/v[p])+c)/2}while(--p);return[h(c),f=u(c),f/u(c-i),c]}function Dn(n,r){if(!r)return n;if(1===r)return f(d(n/2+R));for(var e=1,i=G(1-r),u=G(r),a=0;t(u)>w;a++){if(n%m){var c=o(i*d(n)/e);c<0&&(c+=m),n+=c+~~(n/m)*m}else n+=n;u=(e+i)/2,i=G(e*i),u=((e=u)-i)/2}return n/(v(2,a)*e)}function Qn(n,r){var e=(j-1)/(j+1),c=G(1-e*e),l=Dn(P,c*c),g=f(d(m/4+t(r)/2)),v=a(-1*g)/G(e),s=function(n,r){var e=n*n,t=r+1,o=1-e-r*r;return[.5*((n>=0?P:-P)-i(o,2*n)),-.25*f(o*o+4*e)+.5*f(t*t+e)]}(v*u(-1*n),v*h(-1*n)),w=function(n,r,e){var i=t(n),u=C(t(r));if(i){var a=1/h(i),c=1/(d(i)*d(i)),f=-(c+e*(u*u*a*a)-1+e),l=(-f+G(f*f-(e-1)*c*4))/2;return[Dn(o(1/G(l)),e)*p(n),Dn(o(G((l/c-1)/e)),1-e)*p(r)]}return[0,Dn(o(u),1-e)*p(r)]}(s[0],s[1],c*c);return[-w[1],(r>=0?1:-1)*(.5*l-w[0])]}function Tn(n){var r=h(n),e=u(n),o=Vn(n);function a(n,i){var a=o(n,i);n=a[0],i=a[1];var c=h(i),f=u(i),l=u(n),g=x(r*c+e*f*l),v=h(g),s=t(v)>w?g/v:1;return[s*e*h(n),(t(n)>P?s:-s)*(r*f-e*c*l)]}return o.invert=Vn(-n),a.invert=function(n,e){var t=G(n*n+e*e),a=-h(t),c=u(t),f=t*c,l=-e*a,g=t*r,v=G(f*f+l*l-g*g),s=i(f*g+l*v,l*g-f*v),p=(t>P?-1:1)*i(n*a,t*u(s)*c+e*h(s)*a);return o.invert(p,s)},a}function Vn(n){var r=h(n),e=u(n);return function(n,t){var o=u(t),a=u(n)*o,c=h(n)*o,f=h(t);return[i(c,a*e-f*r),k(f*e+a*r)]}}Wn.invert=function(n,r){t(n)>1&&(n=2*p(n)-n),t(r)>1&&(r=2*p(r)-r);var e=p(n),o=p(r),a=-e*n,c=-o*r,f=c/a<1,l=function(n,r){var e=0,o=1,i=.5,a=50;for(;;){var c=i*i,f=G(i),l=k(1/G(1+c)),g=1-c+i*(1+c)*l,v=(1-f)/g,s=G(v),p=v*(1+c),h=s*(1-c),d=p-n*n,w=G(d),P=r+h+i*w;if(t(o-e)0?e=i:o=i,i=.5*(e+o)}if(!a)return null;var R=k(f),b=u(R),j=1/b,M=2*f*b,E=(-g*b-(-3*i+l*(1+3*c))*M*(1-f))/(g*g);return[m/4*(n*(-2*j*(.5*E/s*(1-c)-2*i*s*M)+-j*M*w)+-j*(i*(1+c)*E+v*(1+3*c)*M)*k(n/G(p))),R]}(f?c:a,f?a:c),g=l[0],v=l[1],s=u(v);return f&&(g=-P-g),[e*(i(h(g)*s,-h(v))+m),o*k(u(g)*s)]},Qn.invert=function(n,r){var e,t,u,c,l,g,v=(j-1)/(j+1),s=G(1-v*v),p=Dn(P,s*s),h=(t=-n,u=s*s,(e=.5*p-r)?(c=In(e,u),t?(g=(l=In(t,1-u))[1]*l[1]+u*c[0]*c[0]*l[0]*l[0],[[c[0]*l[2]/g,c[1]*c[2]*l[0]*l[1]/g],[c[1]*l[1]/g,-c[0]*c[2]*l[0]*l[2]/g],[c[2]*l[1]*l[2]/g,-u*c[0]*c[1]*l[0]/g]]):[[c[0],0],[c[1],0],[c[2],0]]):[[0,(l=In(t,1-u))[0]/l[1]],[1/l[1],0],[l[2]/l[1],0]]),d=function(n,r){var e=r[0]*r[0]+r[1]*r[1];return[(n[0]*r[0]+n[1]*r[1])/e,(n[1]*r[0]-n[0]*r[1])/e]}(h[0],h[1]);return[i(d[1],d[0])/-1,2*o(a(-.5*f(v*d[0]*d[0]+v*d[1]*d[1])))-P]};var _n=41+48/36+37/3600,Kn=vn(0);function On(n){var r=_n*A,e=cn(m,r)[0]-cn(-m,r)[0],o=Kn(0,r)[1],i=cn(0,r)[1],u=M-i,a=E/n,f=4/E,v=o+u*u*4/E;function s(s,p){var h,d=t(p);if(d>r){var w=g(n-1,l(0,c((s+m)/a)));(h=cn(s+=m*(n-1)/n-w*a,d))[0]=h[0]*E/e-E*(n-1)/(2*n)+w*E/n,h[1]=o+4*(h[1]-i)*u/E,p<0&&(h[1]=-h[1])}else h=Kn(s,p);return h[0]*=f,h[1]/=v,h}return s.invert=function(r,s){r/=f;var p=t(s*=v);if(p>o){var h=g(n-1,l(0,c((r+m)/a)));r=(r+m*(n-1)/n-h*a)*e/E;var d=cn.invert(r,.25*(p-o)*E/u+i);return d[0]-=m*(n-1)/n-h*a,s<0&&(d[1]=-d[1]),d}return Kn.invert(r,s)},s}function Un(n,r){return[n,1&r?90-w:_n]}function Jn(n,r){return[n,1&r?-90+w:-_n]}function Xn(n){return[n[0]*(1-w),n[1]]}function Yn(n){var r,e=1+n,o=k(h(1/e)),a=2*G(m/(r=m+4*o*e)),c=.5*a*(e+G(n*(2+n))),f=n*n,l=e*e;function g(g,v){var s,p,d=1-h(v);if(d&&d<2){var w,R=P-v,b=25;do{var j=h(R),M=u(R),E=o+i(j,e-M),S=1+l-2*e*M;R-=w=(R-f*o-e*j+S*E-.5*d*r)/(2*e*j*E)}while(t(w)>y&&--b>0);s=a*G(S),p=g*E/m}else s=a*(n+d),p=g*o/m;return[s*h(p),c-s*u(p)]}return g.invert=function(n,t){var u=n*n+(t-=c)*t,g=(1+l-u/(a*a))/(2*e),v=x(g),s=h(v),p=o+i(s,e-g);return[k(n/G(u))*m/p,k(1-2*(v-f*o-e*s+(1+l-2*e*g)*p)/r)]},g}var Zn=.7109889596207567,$n=.0528035274542;function nr(n,r){return r>-Zn?((n=K(n,r))[1]+=$n,n):Y(n,r)}function rr(n,r){return t(r)>Zn?((n=K(n,r))[1]-=r>0?$n:-$n,n):Y(n,r)}function er(n,r,e,t){var o=G(4*m/(2*e+(1+n-r/2)*h(2*e)+(n+r)/2*h(4*e)+r/2*h(6*e))),i=G(t*h(e)*G((1+n*u(2*e)+r*u(4*e))/(1+n+r))),a=e*f(1);function c(e){return G(1+n*u(2*e)+r*u(4*e))}function f(t){var o=t*e;return(2*o+(1+n-r/2)*h(2*o)+(n+r)/2*h(4*o)+r/2*h(6*o))/e}function l(n){return c(n)*h(n)}var g=function(n,r){var t=e*En(f,a*h(r)/e,r/m);isNaN(t)&&(t=e*p(r));var l=o*c(t);return[l*i*n/m*u(t),l/i*h(t)]};return g.invert=function(n,r){var t=En(l,r*i/o);return[n*m/(u(t)*o*i*c(t)),k(e*f(t/e)/a)]},0===e&&(o=G(t/m),(g=function(n,r){return[n*o,h(r)/o]}).invert=function(n,r){return[n/o,k(r*o)]}),g}function tr(n,r,e,t,o){void 0===t&&(t=1e-8),void 0===o&&(o=20);var i=n(r),u=n(.5*(r+e)),a=n(e);return function n(r,e,t,o,i,u,a,c,f,l,g){if(g.nanEncountered)return NaN;var v,s,p,h,d,w,y,m,P,R;if(s=r(e+.25*(v=t-e)),p=r(t-.25*v),isNaN(s))g.nanEncountered=!0;else{if(!isNaN(p))return R=((w=(h=v*(o+4*s+i)/12)+(d=v*(i+4*p+u)/12))-a)/15,l>f?(g.maxDepthCount++,w+R):Math.abs(R)>1;do{f[t]>n?e=t:r=t,t=r+e>>1}while(t>r);var o=f[t+1]-f[t];return o&&(o=(n-f[t+1])/o),(t+1+o)/a}var s=2*g(1)/m*u/e,d=function(n,r){var e=g(t(h(r))),i=o(e)*n;return e/=s,[i,r>=0?e:-e]};return d.invert=function(n,r){var e;return t(r*=s)<1&&(e=p(r)*k(i(t(r))*u)),[n/o(t(r)),e]},d}function ir(n,r){return t(n[0]-r[0])i[u][2][0];++u);var c=n(r-i[u][1][0],e);return c[0]+=n(i[u][1][0],o*e>o*i[u][0][1]?i[u][0][1]:e)[0],c}n.invert&&(u.invert=function(r,e){for(var o=i[+(e<0)],a=t[+(e<0)],c=0,f=o.length;c=0;--c)t=(r=n[1][c])[0][0],o=r[0][1],i=r[1][1],u=r[2][0],a=r[2][1],f.push(ur([[u-w,a-w],[u-w,i+w],[t+w,i+w],[t+w,o-w]],30));return{type:"Polygon",coordinates:[e.merge(f)]}}(r),t=r.map(function(n){return n.map(function(n){return[[n[0][0]*A,n[0][1]*A],[n[1][0]*A,n[1][1]*A],[n[2][0]*A,n[2][1]*A]]})}),i=t.map(function(r){return r.map(function(r){var e,t=n(r[0][0],r[0][1])[0],o=n(r[2][0],r[2][1])[0],i=n(r[1][0],r[0][1])[1],u=n(r[1][0],r[1][1])[1];return i>u&&(e=i,i=u,u=e),[[t,i],[o,u]]})}),a):t.map(function(n){return n.map(function(n){return[[n[0][0]*S,n[0][1]*S],[n[1][0]*S,n[1][1]*S],[n[2][0]*S,n[2][1]*S]]})})},null!=t&&a.lobes(t),a}nr.invert=function(n,r){return r>-Zn?K.invert(n,r-$n):Y.invert(n,r)},rr.invert=function(n,r){return t(r)>Zn?K.invert(n,r+(r>0?$n:-$n)):Y.invert(n,r)};var cr=[[[[-180,0],[-100,90],[-40,0]],[[-40,0],[30,90],[180,0]]],[[[-180,0],[-160,-90],[-100,0]],[[-100,0],[-60,-90],[-20,0]],[[-20,0],[20,-90],[80,0]],[[80,0],[140,-90],[180,0]]]];var fr=[[[[-180,0],[-100,90],[-40,0]],[[-40,0],[30,90],[180,0]]],[[[-180,0],[-160,-90],[-100,0]],[[-100,0],[-60,-90],[-20,0]],[[-20,0],[20,-90],[80,0]],[[80,0],[140,-90],[180,0]]]];var lr=[[[[-180,0],[-100,90],[-40,0]],[[-40,0],[30,90],[180,0]]],[[[-180,0],[-160,-90],[-100,0]],[[-100,0],[-60,-90],[-20,0]],[[-20,0],[20,-90],[80,0]],[[80,0],[140,-90],[180,0]]]];var gr=[[[[-180,0],[-90,90],[0,0]],[[0,0],[90,90],[180,0]]],[[[-180,0],[-90,-90],[0,0]],[[0,0],[90,-90],[180,0]]]];var vr=[[[[-180,35],[-30,90],[0,35]],[[0,35],[30,90],[180,35]]],[[[-180,-10],[-102,-90],[-65,-10]],[[-65,-10],[5,-90],[77,-10]],[[77,-10],[103,-90],[180,-10]]]];var sr=[[[[-180,0],[-110,90],[-40,0]],[[-40,0],[0,90],[40,0]],[[40,0],[110,90],[180,0]]],[[[-180,0],[-110,-90],[-40,0]],[[-40,0],[0,-90],[40,0]],[[40,0],[110,-90],[180,0]]]];function pr(n,r){return[3/E*n*G(m*m/3-r*r),r]}function hr(n){function r(r,e){if(t(t(e)-P)2)return null;var u=(r/=2)*r,a=(e/=2)*e,c=2*e/(1+u+a);return c=v((1+c)/(1-c),1/n),[i(2*r,1-u-a)/n,k((c-1)/(c+1))]},r}pr.invert=function(n,r){return[E/3*n/G(m*m/3-r*r),r]};var dr=m/j;function wr(n,r){return[n*(1+G(u(r)))/2,r/(u(r/2)*u(n/6))]}function yr(n,r){var e=n*n,t=r*r;return[n*(.975534+t*(-.0143059*e-.119161+-.0547009*t)),r*(1.00384+e*(.0802894+-.02855*t+199025e-9*e)+t*(.0998909+-.0491032*t))]}function mr(n,r){return[h(n)/u(r),d(r)*u(n)]}function Pr(n){var r=u(n),e=d(R+n/2);function o(o,i){var u=i-n,a=t(u)=0;)v=(g=n[l])[0]+c*(o=v)-f*s,s=g[1]+c*s+f*o;return[v=c*(o=v)-f*s,s=c*s+f*o]}return e.invert=function(e,a){var c=20,f=e,l=a;do{for(var g,v=r,s=n[v],p=s[0],d=s[1],y=0,m=0;--v>=0;)y=p+f*(g=y)-l*m,m=d+f*m+l*g,p=(s=n[v])[0]+f*(g=p)-l*d,d=s[1]+f*d+l*g;var P,R,b=(y=p+f*(g=y)-l*m)*y+(m=d+f*m+l*g)*m;f-=P=((p=f*(g=p)-l*d-e)*y+(d=f*d+l*g-a)*m)/b,l-=R=(d*y-p*m)/b}while(t(P)+t(R)>w*w&&--c>0);if(c){var j=G(f*f+l*l),M=2*o(.5*j),E=h(M);return[i(f*E,j*u(M)),j?k(l*E/j):0]}},e}wr.invert=function(n,r){var e=t(n),o=t(r),i=w,a=P;ow||t(P)>w)&&--i>0);return i&&[e,o]},mr.invert=function(n,r){var e=n*n,t=r*r+1,o=e+t,i=n?b*G((o-G(o*o-4*e))/e):1/G(t);return[k(n*i),p(r)*x(i)]},Rr.invert=function(n,r){return[n,2.5*o(a(.8*r))-.625*m]};var jr=[[.9972523,0],[.0052513,-.0041175],[.0074606,.0048125],[-.0153783,-.1968253],[.0636871,-.1408027],[.3660976,-.2937382]],Mr=[[.98879,0],[0,0],[-.050909,0],[0,0],[.075528,0]],Er=[[.984299,0],[.0211642,.0037608],[-.1036018,-.0575102],[-.0329095,-.0320119],[.0499471,.1223335],[.026046,.0899805],[7388e-7,-.1435792],[.0075848,-.1334108],[-.0216473,.0776645],[-.0225161,.0853673]],Sr=[[.9245,0],[0,0],[.01943,0]],Ar=[[.721316,0],[0,0],[-.00881625,-.00617325]];function kr(n,e){var t=r.geoProjection(br(n)).rotate(e).clipAngle(90),o=r.geoRotation(e),i=t.center;return delete t.rotate,t.center=function(n){return arguments.length?i(o(n)):o.invert(i())},t}var xr=G(6),Gr=G(7);function Cr(n,r){var e=k(7*h(r)/(3*xr));return[xr*n*(2*u(2*e/3)-1)/Gr,9*h(e/3)/Gr]}function Nr(n,r){for(var e,o=(1+b)*h(r),i=r,a=0;a<25&&(i-=e=(h(i/2)+h(i)-o)/(.5*u(i/2)+u(i)),!(t(e)y&&--c>0);return[n/(.84719-.13063*(o=a*a)+(u=o*(i=o*o))*u*(.05494*o-.04515-.02326*i+.00331*u)),a]},Lr.invert=function(n,r){for(var e=r/2,o=0,i=1/0;o<10&&t(i)>w;++o){var a=u(r/2);r-=i=(r-d(r/2)-e)/(1-.5/(a*a))}return[2*n/(1+u(r)),r]};var Hr=[[[[-180,0],[-90,90],[0,0]],[[0,0],[90,90],[180,0]]],[[[-180,0],[-90,-90],[0,0]],[[0,0],[90,-90],[180,0]]]];function qr(n,r){var e=h(r),o=u(r),i=p(n);if(0===n||t(r)===P)return[0,r];if(0===r)return[n,0];if(t(n)===P)return[n*o,P*e];var a=m/(2*n)-2*n/m,c=2*r/m,f=(1-c*c)/(e-c),l=a*a,g=f*f,v=1+l/g,s=1+g/l,d=(a*e/f-a/2)/v,w=(g*e/l+f/2)/s,y=w*w-(g*e*e/l+f*e-1)/s;return[P*(d+G(d*d+o*o/v)*i),P*(w+G(y<0?0:y)*p(-r*a)*i)]}qr.invert=function(n,r){var e=(n/=P)*n,t=e+(r/=P)*r,o=m*m;return[n?(t-1+G((1-t)*(1-t)+4*e))/(2*n)*P:0,En(function(n){return t*(m*h(n)-2*n)*m+4*n*n*(r-h(n))+2*m*n-o*r},0)]};var Br=1.0148,Wr=.23185,Ir=-.14499,Dr=.02406,Qr=Br,Tr=5*Wr,Vr=7*Ir,_r=9*Dr;function Kr(n,r){var e=r*r;return[n,r*(Br+e*e*(Wr+e*(Ir+Dr*e)))]}function Or(n,r){if(t(r)=0;)if(t=r[a],e[0]===t[0]&&e[1]===t[1]){if(i)return[i,e];i=e}}}(r.face,e.face),o=Ur(t.map(e.project),t.map(r.project));r.transform=e.transform?Jr(e.transform,o):o;for(var i=e.edges,u=0,a=i.length;u1.790857183?r=1.790857183:r<-1.790857183&&(r=-1.790857183);var e,o=r;do{var i=o*o;o-=e=(o*(Br+i*i*(Wr+i*(Ir+Dr*i)))-r)/(Qr+i*i*(Tr+i*(Vr+_r*i)))}while(t(e)>w);return[n,o]},Or.invert=function(n,r){if(t(r)w&&--a>0);return c=d(i),[(t(r)t^s>t&&e<(v-f)*(t-l)/(s-l)+f&&(o=!o)}return o}(n[0],e))return n.push(r),!0})||n.push([r])}),se=[],n.length?n.length>1?{type:"MultiPolygon",coordinates:n}:{type:"Polygon",coordinates:n[0]}:null}};function we(n){var e=n(P,0)[0]-n(-P,0)[0];function o(r,o){var i=t(r)0?r-m:r+m,o),a=(u[0]-u[1])*b,c=(u[0]+u[1])*b;if(i)return[a,c];var f=e*b,l=a>0^c>0?-1:1;return[l*a-p(c)*f,l*c-p(a)*f]}return n.invert&&(o.invert=function(r,o){var i=(r+o)*b,u=(o-r)*b,a=t(i)<.5*e&&t(u)<.5*e;if(!a){var c=e*b,f=i>0^u>0?-1:1,l=-f*r+(u>0?1:-1)*c,g=-f*o+(i>0?1:-1)*c;i=(-l-g)*b,u=(l-g)*b}var v=n.invert(i,u);return a||(v[0]+=i>0?m:-m),v}),r.geoProjection(o).rotate([-90,-90,45]).clipAngle(179.999)}function ye(){return we(Qn).scale(111.48)}function me(n){var r=h(n);function e(e,t){var i=r?d(e*r/2)/r:e/2;if(!t)return[2*i,-n];var a=2*o(i*h(t)),c=1/d(t);return[h(a)*c,t+(1-u(a))*c-n]}return e.invert=function(e,i){if(t(i+=n)w&&--l>0);var p=e*(g=d(f)),y=d(t(i)0?P:-P)*(v+u*(p-f)/2+u*u*(p-2*v+f)/2)]}function be(n,r){var e=function(n){function r(r,e){var t=u(e),o=(n-1)/(n-t*u(r));return[o*t*h(r),o*h(e)]}return r.invert=function(r,e){var t=r*r+e*e,o=G(t),u=(n-G(1-t*(n+1)/(n-1)))/((n-1)/o+o/(n-1));return[i(r*u,o*G(1-u*u)),o?k(e*u/o):0]},r}(n);if(!r)return e;var t=u(r),o=h(r);function a(r,i){var u=e(r,i),a=u[1],c=a*o/(n-1)+t;return[u[0]*t/c,a/c]}return a.invert=function(r,i){var u=(n-1)/(n-1-i*o);return e.invert(u*r,u*i*t)},a}Pe.forEach(function(n){n[1]*=1.0144}),Re.invert=function(n,r){var e=r/P,o=90*e,i=g(18,t(o/5)),u=l(0,c(i));do{var a=Pe[u][1],f=Pe[u+1][1],v=Pe[g(19,u+2)][1],s=v-a,p=v-2*f+a,h=2*(t(e)-f)/s,d=p/s,w=h*(1-d*h*(1-2*d*h));if(w>=0||1===u){o=(r>=0?5:-5)*(w+i);var m,R=50;do{w=(i=g(18,t(o)/5))-(u=c(i)),a=Pe[u][1],f=Pe[u+1][1],v=Pe[g(19,u+2)][1],o-=(m=(r>=0?P:-P)*(f+w*(v-a)/2+w*w*(v-2*f+a)/2)-r)*S}while(t(m)>y&&--R>0);break}}while(--u>=0);var b=Pe[u][0],j=Pe[u+1][0],M=Pe[g(19,u+2)][0];return[n/(j+w*(M-b)/2+w*w*(M-2*j+b)/2),o*A]};var je=1e4,Me=-180,Ee=Me+1e-4,Se=180,Ae=Se-1e-4,ke=-90,xe=ke+1e-4,Ge=90,Ce=Ge-1e-4;function Ne(n){return n.length>0}function Fe(n){return n===ke||n===Ge?[0,n]:[Me,(r=n,Math.floor(r*je)/je)];var r}function ze(n){var r=n[0],e=n[1],t=!1;return r<=Ee?(r=Me,t=!0):r>=Ae&&(r=Se,t=!0),e<=xe?(e=ke,t=!0):e>=Ce&&(e=Ge,t=!0),t?[r,e]:n}function Le(n){return n.map(ze)}function He(n,r,e){for(var t=0,o=n.length;t=Ae||l<=xe||l>=Ce){i[u]=ze(c);for(var g=u+1;gEe&&sxe&&p=a)break;e.push({index:-1,polygon:r,ring:i=i.slice(g-1)}),i[0]=Fe(i[0][1]),u=-1,a=i.length}}}}function qe(n){var r,e,t,o,i,u,a=n.length,c={},f={};for(r=0;r0?m-c:c)*S],l=r.geoProjection(n(a)).rotate(f),g=r.geoRotation(f),v=l.center;return delete l.rotate,l.center=function(n){return arguments.length?v(g(n)):g.invert(v())},l.clipAngle(90)}function Qe(n){var e=u(n);function t(n,t){var o=r.geoGnomonicRaw(n,t);return o[0]*=e,o}return t.invert=function(n,t){return r.geoGnomonicRaw.invert(n/e,t)},t}function Te(n,r){return De(Qe,n,r)}function Ve(n){if(!(n*=2))return r.geoAzimuthalEquidistantRaw;var e=-n/2,t=-e,o=n*n,a=d(t),c=.5/h(t);function f(r,i){var a=x(u(i)*u(r-e)),c=x(u(i)*u(r-t));return[((a*=a)-(c*=c))/(2*n),(i<0?-1:1)*G(4*o*c-(o-a+c)*(o-a+c))/(2*n)]}return f.invert=function(n,r){var o,f,l=r*r,g=u(G(l+(o=n+e)*o)),v=u(G(l+(o=n+t)*o));return[i(f=g-v,o=(g+v)*a),(r<0?-1:1)*x(G(o*o+f*f)*c)]},f}function _e(n,r){return De(Ve,n,r)}function Ke(n,r){if(t(r)w&&--c>0);return[p(n)*(G(i*i+4)+i)*m/4,P*a]};var Ye=4*m+3*G(3),Ze=2*G(2*m*G(3)/Ye),$e=_(Ze*G(3)/m,Ze,Ye/6);function nt(n,r){return[n*G(1-3*r*r/(m*m)),r]}function rt(n,r){var e=.90631*h(r),t=G(1-e*e),o=G(2/(1+t*u(n/=3)));return[2.66723*t*o*h(n),1.24104*e*o]}function et(n,r){var e=u(r),t=u(n)*e,o=1-t,a=u(n=i(h(n)*e,-h(r))),c=h(n);return[c*(e=G(1-t*t))-a*o,-a*e-c*o]}function tt(n,r){var e=z(n,r);return[(e[0]+n/P)/2,(e[1]+r)/2]}nt.invert=function(n,r){return[n/G(1-3*r*r/(m*m)),r]},rt.invert=function(n,r){var e=n/2.66723,t=r/1.24104,o=G(e*e+t*t),u=2*k(o/2);return[3*i(n*d(u),2.66723*o),o&&k(r*h(u)/(1.24104*.90631*o))]},et.invert=function(n,r){var e=(n*n+r*r)/-2,t=G(-e*(2+e)),o=r*e+n*t,u=n*e-r*t,a=G(u*u+o*o);return[i(t*o,a*(1+e)),a?-k(t*u/a):0]},tt.invert=function(n,r){var e=n,o=r,i=25;do{var a,c=u(o),f=h(o),l=h(2*o),g=f*f,v=c*c,s=h(e),p=u(e/2),d=h(e/2),y=d*d,m=1-v*p*p,R=m?x(c*p)*G(a=1/m):a=0,b=.5*(2*R*c*d+e/P)-n,j=.5*(R*f+o)-r,M=.5*a*(v*y+R*c*p*g)+.5/P,E=a*(s*l/4-R*f*d),S=.125*a*(l*d-R*f*v*s),A=.5*a*(g*p+R*y*c)+.5,k=E*S-A*M,C=(j*E-b*A)/k,N=(b*S-j*M)/k;e-=C,o-=N}while((t(C)>w||t(N)>w)&&--i>0);return[e,o]},n.geoNaturalEarth=r.geoNaturalEarth1,n.geoNaturalEarthRaw=r.geoNaturalEarth1Raw,n.geoAiry=function(){var n=P,e=r.geoProjectionMutator(F),t=e(n);return t.radius=function(r){return arguments.length?e(n=r*A):n*S},t.scale(179.976).clipAngle(147)},n.geoAiryRaw=F,n.geoAitoff=function(){return r.geoProjection(z).scale(152.63)},n.geoAitoffRaw=z,n.geoArmadillo=function(){var n=20*A,e=n>=0?1:-1,t=d(e*n),o=r.geoProjectionMutator(L),a=o(n),c=a.stream;return a.parallel=function(r){return arguments.length?(t=d((e=(n=r*A)>=0?1:-1)*n),o(n)):n*S},a.stream=function(r){var o=a.rotate(),f=c(r),l=(a.rotate([0,0]),c(r)),g=a.precision();return a.rotate(o),f.sphere=function(){l.polygonStart(),l.lineStart();for(var r=-180*e;e*r<180;r+=90*e)l.point(r,90*e);if(n)for(;e*(r-=3*e*g)>=-180;)l.point(r,e*-i(u(r*A/2),t)*S);l.lineEnd(),l.polygonEnd()},f},a.scale(218.695).center([0,28.0974])},n.geoArmadilloRaw=L,n.geoAugust=function(){return r.geoProjection(H).scale(66.1603)},n.geoAugustRaw=H,n.geoBaker=function(){return r.geoProjection(W).scale(112.314)},n.geoBakerRaw=W,n.geoBerghaus=function(){var n=5,e=r.geoProjectionMutator(I),t=e(n),o=t.stream,a=-u(.01*A),c=h(.01*A);return t.lobes=function(r){return arguments.length?e(n=+r):n},t.stream=function(r){var e=t.rotate(),f=o(r),l=(t.rotate([0,0]),o(r));return t.rotate(e),f.sphere=function(){l.polygonStart(),l.lineStart();for(var r=0,e=360/n,t=2*m/n,o=90-180/n,f=P;r=0;)n.point((r=e[o])[0],r[1]);n.lineEnd(),n.polygonEnd()},n},t.scale(79.4187).parallel(45).clipAngle(179.999)},n.geoHammerRetroazimuthalRaw=Tn,n.geoHealpix=function(){var n=4,t=r.geoProjectionMutator(On),o=t(n),i=o.stream;return o.lobes=function(r){return arguments.length?t(n=+r):n},o.stream=function(t){var u=o.rotate(),a=i(t),c=(o.rotate([0,0]),i(t));return o.rotate(u),a.sphere=function(){var t,o;r.geoStream((t=180/n,o=[].concat(e.range(-180,180+t/2,t).map(Un),e.range(180,-180-t/2,-t).map(Jn)),{type:"Polygon",coordinates:[180===t?o.map(Xn):o]}),c)},a},o.scale(239.75)},n.geoHealpixRaw=On,n.geoHill=function(){var n=1,e=r.geoProjectionMutator(Yn),t=e(n);return t.ratio=function(r){return arguments.length?e(n=+r):n},t.scale(167.774).center([0,18.67])},n.geoHillRaw=Yn,n.geoHomolosine=function(){return r.geoProjection(rr).scale(152.63)},n.geoHomolosineRaw=rr,n.geoHufnagel=function(){var n=1,e=0,t=45*A,o=2,i=r.geoProjectionMutator(er),u=i(n,e,t,o);return u.a=function(r){return arguments.length?i(n=+r,e,t,o):n},u.b=function(r){return arguments.length?i(n,e=+r,t,o):e},u.psiMax=function(r){return arguments.length?i(n,e,t=+r*A,o):t*S},u.ratio=function(r){return arguments.length?i(n,e,t,o=+r):o},u.scale(180.739)},n.geoHufnagelRaw=er,n.geoHyperelliptical=function(){var n=0,e=2.5,t=1.183136,o=r.geoProjectionMutator(or),i=o(n,e,t);return i.alpha=function(r){return arguments.length?o(n=+r,e,t):n},i.k=function(r){return arguments.length?o(n,e=+r,t):e},i.gamma=function(r){return arguments.length?o(n,e,t=+r):t},i.scale(152.63)},n.geoHyperellipticalRaw=or,n.geoInterrupt=ar,n.geoInterruptedBoggs=function(){return ar(J,cr).scale(160.857)},n.geoInterruptedHomolosine=function(){return ar(rr,fr).scale(152.63)},n.geoInterruptedMollweide=function(){return ar(K,lr).scale(169.529)},n.geoInterruptedMollweideHemispheres=function(){return ar(K,gr).scale(169.529).rotate([20,0])},n.geoInterruptedSinuMollweide=function(){return ar(nr,vr).rotate([-20,-55]).scale(164.263).center([0,-5.4036])},n.geoInterruptedSinusoidal=function(){return ar(Y,sr).scale(152.63).rotate([-20,0])},n.geoKavrayskiy7=function(){return r.geoProjection(pr).scale(158.837)},n.geoKavrayskiy7Raw=pr,n.geoLagrange=function(){var n=.5,e=r.geoProjectionMutator(hr),t=e(n);return t.spacing=function(r){return arguments.length?e(n=+r):n},t.scale(124.75)},n.geoLagrangeRaw=hr,n.geoLarrivee=function(){return r.geoProjection(wr).scale(97.2672)},n.geoLarriveeRaw=wr,n.geoLaskowski=function(){return r.geoProjection(yr).scale(139.98)},n.geoLaskowskiRaw=yr,n.geoLittrow=function(){return r.geoProjection(mr).scale(144.049).clipAngle(89.999)},n.geoLittrowRaw=mr,n.geoLoximuthal=function(){return X(Pr).parallel(40).scale(158.837)},n.geoLoximuthalRaw=Pr,n.geoMiller=function(){return r.geoProjection(Rr).scale(108.318)},n.geoMillerRaw=Rr,n.geoModifiedStereographic=kr,n.geoModifiedStereographicRaw=br,n.geoModifiedStereographicAlaska=function(){return kr(jr,[152,-64]).scale(1500).center([-160.908,62.4864]).clipAngle(25)},n.geoModifiedStereographicGs48=function(){return kr(Mr,[95,-38]).scale(1e3).clipAngle(55).center([-96.5563,38.8675])},n.geoModifiedStereographicGs50=function(){return kr(Er,[120,-45]).scale(359.513).clipAngle(55).center([-117.474,53.0628])},n.geoModifiedStereographicMiller=function(){return kr(Sr,[-20,-18]).scale(209.091).center([20,16.7214]).clipAngle(82)},n.geoModifiedStereographicLee=function(){return kr(Ar,[165,10]).scale(250).clipAngle(130).center([-165,-10])},n.geoMollweide=function(){return r.geoProjection(K).scale(169.529)},n.geoMollweideRaw=K,n.geoMtFlatPolarParabolic=function(){return r.geoProjection(Cr).scale(164.859)},n.geoMtFlatPolarParabolicRaw=Cr,n.geoMtFlatPolarQuartic=function(){return r.geoProjection(Nr).scale(188.209)},n.geoMtFlatPolarQuarticRaw=Nr,n.geoMtFlatPolarSinusoidal=function(){return r.geoProjection(Fr).scale(166.518)},n.geoMtFlatPolarSinusoidalRaw=Fr,n.geoNaturalEarth2=function(){return r.geoProjection(zr).scale(175.295)},n.geoNaturalEarth2Raw=zr,n.geoNellHammer=function(){return r.geoProjection(Lr).scale(152.63)},n.geoNellHammerRaw=Lr,n.geoInterruptedQuarticAuthalic=function(){return ar(D(1/0),Hr).rotate([20,0]).scale(152.63)},n.geoNicolosi=function(){return r.geoProjection(qr).scale(127.267)},n.geoNicolosiRaw=qr,n.geoPatterson=function(){return r.geoProjection(Kr).scale(139.319)},n.geoPattersonRaw=Kr,n.geoPolyconic=function(){return r.geoProjection(Or).scale(103.74)},n.geoPolyconicRaw=Or,n.geoPolyhedral=Zr,n.geoPolyhedralButterfly=function(n){n=n||function(n){var e=r.geoCentroid({type:"MultiPoint",coordinates:n});return r.geoGnomonic().scale(1).translate([0,0]).rotate([-e[0],-e[1]])};var e=ee.map(function(r){return{face:r,project:n(r)}});return[-1,0,0,1,0,1,4,5].forEach(function(n,r){var t=e[n];t&&(t.children||(t.children=[])).push(e[r])}),Zr(e[0],function(n,r){return e[n<-m/2?r<0?6:4:n<0?r<0?2:0:n0?[-e[0],0]:[180-e[0],180])};var e=ee.map(function(r){return{face:r,project:n(r)}});return[-1,0,0,1,0,1,4,5].forEach(function(n,r){var t=e[n];t&&(t.children||(t.children=[])).push(e[r])}),Zr(e[0],function(n,r){return e[n<-m/2?r<0?6:4:n<0?r<0?2:0:n2||i[0]!=r[0]||i[1]!=r[1])&&(t.push(i),r=i)}return 1===t.length&&n.length>1&&t.push(e(n[n.length-1])),t}function o(n){return n.map(t)}function i(n){if(null==n)return n;var r;switch(n.type){case"GeometryCollection":r={type:"GeometryCollection",geometries:n.geometries.map(i)};break;case"Point":r={type:"Point",coordinates:e(n.coordinates)};break;case"MultiPoint":r={type:n.type,coordinates:function(n){return n.map(e)}(n.coordinates)};break;case"LineString":r={type:n.type,coordinates:t(n.coordinates)};break;case"MultiLineString":case"Polygon":r={type:n.type,coordinates:o(n.coordinates)};break;case"MultiPolygon":r={type:"MultiPolygon",coordinates:n.coordinates.map(o)};break;default:return n}return null!=n.bbox&&(r.bbox=n.bbox),r}function u(n){var r={type:"Feature",properties:n.properties,geometry:i(n.geometry)};return null!=n.id&&(r.id=n.id),null!=n.bbox&&(r.bbox=n.bbox),r}if(null!=n)switch(n.type){case"Feature":return u(n);case"FeatureCollection":var a={type:"FeatureCollection",features:n.features.map(u)};return null!=n.bbox&&(a.bbox=n.bbox),a;default:return i(n)}return n},n.geoQuincuncial=we,n.geoRectangularPolyconic=function(){return X(me).scale(131.215)},n.geoRectangularPolyconicRaw=me,n.geoRobinson=function(){return r.geoProjection(Re).scale(152.63)},n.geoRobinsonRaw=Re,n.geoSatellite=function(){var n=2,e=0,t=r.geoProjectionMutator(be),o=t(n,e);return o.distance=function(r){return arguments.length?t(n=+r,e):n},o.tilt=function(r){return arguments.length?t(n,e=r*A):e*S},o.scale(432.147).clipAngle(x(1/n)*S-1e-6)},n.geoSatelliteRaw=be,n.geoSinuMollweide=function(){return r.geoProjection(nr).rotate([-20,-55]).scale(164.263).center([0,-5.4036])},n.geoSinuMollweideRaw=nr,n.geoSinusoidal=function(){return r.geoProjection(Y).scale(152.63)},n.geoSinusoidalRaw=Y,n.geoStitch=function(n){if(null==n)return n;switch(n.type){case"Feature":return Be(n);case"FeatureCollection":var r={type:"FeatureCollection",features:n.features.map(Be)};return null!=n.bbox&&(r.bbox=n.bbox),r;default:return We(n)}},n.geoTimes=function(){return r.geoProjection(Ie).scale(146.153)},n.geoTimesRaw=Ie,n.geoTwoPointAzimuthal=Te,n.geoTwoPointAzimuthalRaw=Qe,n.geoTwoPointAzimuthalUsa=function(){return Te([-158,21.5],[-77,39]).clipAngle(60).scale(400)},n.geoTwoPointEquidistant=_e,n.geoTwoPointEquidistantRaw=Ve,n.geoTwoPointEquidistantUsa=function(){return _e([-158,21.5],[-77,39]).clipAngle(130).scale(122.571)},n.geoVanDerGrinten=function(){return r.geoProjection(Ke).scale(79.4183)},n.geoVanDerGrintenRaw=Ke,n.geoVanDerGrinten2=function(){return r.geoProjection(Oe).scale(79.4183)},n.geoVanDerGrinten2Raw=Oe,n.geoVanDerGrinten3=function(){return r.geoProjection(Ue).scale(79.4183)},n.geoVanDerGrinten3Raw=Ue,n.geoVanDerGrinten4=function(){return r.geoProjection(Je).scale(127.16)},n.geoVanDerGrinten4Raw=Je,n.geoWagner=function(){var n=65*A,e=60*A,t=20,o=200,i=r.geoProjectionMutator(Xe),u=i(n,e,t,o);return u.poleline=function(r){return arguments.length?i(n=+r*A,e,t,o):n*S},u.parallels=function(r){return arguments.length?i(n,e=+r*A,t,o):e*S},u.inflation=function(r){return arguments.length?i(n,e,t=+r,o):t},u.ratio=function(r){return arguments.length?i(n,e,t,o=+r):o},u.scale(163.775)},n.geoWagnerRaw=Xe,n.geoWagner4=function(){return r.geoProjection($e).scale(176.84)},n.geoWagner4Raw=$e,n.geoWagner6=function(){return r.geoProjection(nt).scale(152.63)},n.geoWagner6Raw=nt,n.geoWagner7=function(){return r.geoProjection(rt).scale(172.632)},n.geoWagner7Raw=rt,n.geoWiechel=function(){return r.geoProjection(et).rotate([0,-90,45]).scale(124.75).clipAngle(179.999)},n.geoWiechelRaw=et,n.geoWinkel3=function(){return r.geoProjection(tt).scale(158.837)},n.geoWinkel3Raw=tt,Object.defineProperty(n,"__esModule",{value:!0})}); diff --git a/html/ext/topojson.v1.min.js b/html/ext/topojson.v1.min.js new file mode 100644 index 0000000..6ebef9a --- /dev/null +++ b/html/ext/topojson.v1.min.js @@ -0,0 +1,2 @@ +// https://github.com/topojson/topojson-client Version 1.8.0. Copyright 2016 Mike Bostock. +!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(n.topojson=n.topojson||{})}(this,function(n){"use strict";function t(n){if(!n)return h;var t,r,e=n.scale[0],o=n.scale[1],i=n.translate[0],u=n.translate[1];return function(n,f){f||(t=r=0),n[0]=(t+=n[0])*e+i,n[1]=(r+=n[1])*o+u}}function r(n){if(!n)return h;var t,r,e=n.scale[0],o=n.scale[1],i=n.translate[0],u=n.translate[1];return function(n,f){f||(t=r=0);var c=Math.round((n[0]-i)/e),a=Math.round((n[1]-u)/o);n[0]=c-t,n[1]=a-r,t=c,r=a}}function e(n,t){for(var r,e=n.length,o=e-t;o<--e;)r=n[o],n[o++]=n[e],n[e]=r}function o(n,t){for(var r=0,e=n.length;r>>1;n[o]1){var c,a=[],s={LineString:o,MultiLineString:i,Polygon:i,MultiPolygon:function(n){n.forEach(i)}};u(t),a.forEach(arguments.length<3?function(n){f.push(n[0].i)}:function(n){r(n[0].g,n[n.length-1].g)&&f.push(n[0].i)})}else for(var l=0,h=n.arcs.length;l1)for(var u,f,c=1,a=e(i[0]);ca&&(f=i[0],i[0]=i[c],i[c]=f,a=u);return i})}}function l(n,t){return n[1][2]-t[1][2]}var h=function(){},p=function(n,t){return"GeometryCollection"===t.type?{type:"FeatureCollection",features:t.geometries.map(function(t){return i(n,t)})}:i(n,t)},v=function(n,t){function r(t){var r,e=n.arcs[t<0?~t:t],o=e[0];return n.transform?(r=[0,0],e.forEach(function(n){r[0]+=n[0],r[1]+=n[1]})):r=e[e.length-1],t<0?[r,o]:[o,r]}function e(n,t){for(var r in n){var e=n[r];delete t[e.start],delete e.start,delete e.end,e.forEach(function(n){o[n<0?~n:n]=1}),f.push(e)}}var o={},i={},u={},f=[],c=-1;return t.forEach(function(r,e){var o,i=n.arcs[r<0?~r:r];i.length<3&&!i[1][0]&&!i[1][1]&&(o=t[++c],t[c]=r,t[e]=o)}),t.forEach(function(n){var t,e,o=r(n),f=o[0],c=o[1];if(t=u[f])if(delete u[t.end],t.push(n),t.end=c,e=i[c]){delete i[e.start];var a=e===t?t:t.concat(e);i[a.start=t.start]=u[a.end=e.end]=a}else i[t.start]=u[t.end]=t;else if(t=i[c])if(delete i[t.start],t.unshift(n),t.start=f,e=u[f]){delete u[e.end];var s=e===t?t:e.concat(t);i[s.start=e.start]=u[s.end=t.end]=s}else i[t.start]=u[t.end]=t;else t=[n],i[t.start=f]=u[t.end=c]=t}),e(u,i),e(i,u),t.forEach(function(n){o[n<0?~n:n]||f.push([n])}),f},g=function(n){return u(n,f.apply(this,arguments))},d=function(n){return u(n,s.apply(this,arguments))},y=function(n){function t(n,t){n.forEach(function(n){n<0&&(n=~n);var r=i[n];r?r.push(t):i[n]=[t]})}function r(n,r){n.forEach(function(n){t(n,r)})}function e(n,t){"GeometryCollection"===n.type?n.geometries.forEach(function(n){e(n,t)}):n.type in f&&f[n.type](n.arcs,t)}var i={},u=n.map(function(){return[]}),f={LineString:t,MultiLineString:r,Polygon:r,MultiPolygon:function(n,t){n.forEach(function(n){r(n,t)})}};n.forEach(e);for(var c in i)for(var a=i[c],s=a.length,l=0;l0;){var r=(t+1>>1)-1,o=e[r];if(l(n,o)>=0)break;e[o._=t]=o,e[n._=t=r]=n}}function t(n,t){for(;;){var r=t+1<<1,i=r-1,u=t,f=e[u];if(i0&&(n=e[o],t(e[n._=0]=n,0)),r}},r.remove=function(r){var i,u=r._;if(e[u]===r)return u!==--o&&(i=e[o],(l(i,r)<0?n:t)(e[i._=u]=i,u)),u},r},E=function(n,e){function o(n){f.remove(n),n[1][2]=e(n),f.push(n)}var i=t(n.transform),u=r(n.transform),f=m();return null==e&&(e=c),n.arcs.forEach(function(n){var t,r,c,a,s=[],l=0;for(r=0,c=n.length;r + + + + Last update: . More information about this Galileo/GPS/BeiDou/Glonass open source monitor can be found here. Live map here!. Contact me if you want access to the Grafana dashboard.
+
+
+ +
+
+
+
+
+
+ +

+ This table shows live output from four Galileo/GPS/BeiDou/GLONASS receivers hosted in Nootdorp, The Netherlands and California, United States. + It is very much a work in progress, and will not be available at all times. Extremely rough code is on + GitHub. + + Some technical detail behind this setup can be found in this post. + + For updates, follow @GalileoSats on Twitter, or join us on our IRC channel (chat) via the + web gateway. + + + + + + diff --git a/html/observer.js b/html/observer.js new file mode 100644 index 0000000..79dbc10 --- /dev/null +++ b/html/observer.js @@ -0,0 +1,240 @@ +"use strict"; +var repeat; + +moment.relativeTimeThreshold('m', 120); + +function flippedStereographic(x, y) { + var cx = Math.cos(x), cy = Math.cos(y), k = 1 / (1 + cx * cy); + return [k * cy * Math.sin(x), -k * Math.sin(y)]; +} + +var gnss_position=[]; +function componentDidMount() { + var sats = d3.select(".Drawing").html("").append("svg"); + + var width = 500; //sats.clientWidth; + var height = 500; //sats.clientHeight; + + sats.attr("width", 500); + sats.attr("height", 500); + + var projection = d3.geoProjection(flippedStereographic) + .scale(width * 0.40) + .clipAngle(130) + .rotate([0, -90]) + .translate([width / 2 + 0.5, height / 2 + 0.5]) + .precision(1); + + + var path = d3.geoPath().projection(projection); + + sats.append("path") + .datum(d3.geoCircle().center([0, 90]).radius(90)) + .attr("stroke-width", 1.5) + .attr("d", path); + + sats.append("path") + .datum(d3.geoGraticule()) + .attr("stroke-width", 0.15) + .attr("d", path); +// .attr("fill", "none").attr("stroke", "black").attr("width", "100%").attr("height", "100%"); + + + sats.append("g") + .selectAll("line") + .data(d3.range(360)) + .enter().append("line") + .each(function(d) { + var p0 = projection([d, 0]), + p1 = projection([d, d % 10 ? -1 : -2]); + + d3.select(this) + .attr("x1", p0[0]) + .attr("y1", p0[1]) + .attr("x2", p1[0]) + .attr("y2", p1[1]); + }); + + sats.append("g") + .attr("fill", "black") + .attr("stroke", "none") + .selectAll("text") + .data(d3.range(0, 360, 10)) + .enter().append("text") + .each(function(d) { + var p = projection([d, -4]); + d3.select(this).attr("x", p[0]).attr("y", p[1]); + }) + .attr("dy", "0.35em") + .text(function(d) { return d === 0 ? "N" : d === 90 ? "E" : d === 180 ? "S" : d === 270 ? "W" : d + "°"; }) + .data(d3.range(0, 360, 90), function(d) { return d; }) + .attr("font-weight", "bold") + .attr("font-size", 14); + + sats.append("g") + .attr("fill", "#A3ACA9") + .attr("stroke", "none") + .selectAll("text") + .data(d3.range(10, 91, 10)) + .enter().append("text") + .each(function(d) { + var p = projection([0, d]); + d3.select(this).attr("x", p[0]).attr("y", p[1]); + }) + .attr("dy", "-0.4em") + .text(function(d) { return d + "°"; }); + + sats.select('g.satellites').remove(); + console.log(gnss_position); + + let points = sats + .insert("g") + .attr("class", "satellites") + .selectAll('g.satellite') + .data(gnss_position) + .enter() + .append('g') + .attr("transform", function(d) { + var p = projection(d); + return 'translate(' + p[0] + ', ' + p[1] + ')'; + }); + + points + .attr('class', 'satellite') + .append("circle") + .attr("stroke", function(d) { + return d[3] > 0 ? "transparent" : d[5]; + }) + .attr("r", function(d) { + return d[3] > 0 ? d[3]*0.5 : 3; + }) + .attr("fill", function(d) { + return d[3] > 0 ? d[5] : "transparent"; + }); + + points + .attr("r", 50) + .append("text") + .attr("class", "sats-label") + .attr('dy', function(d) { + return d[3] > 0 ? `${10+(d[3]/2)}px` : "1.3em"; + }) + .attr('dx', function(d) { + return d[3] > 0 ? `${3+(d[3]/2)}px` : "0.7em"; + }) + .text(function(d){return d[2]}) + +} + +function makeTable(str, obj) +{ + var table=d3.select(str); + table.html(""); + var thead=table.append("thead"); + var tbody=table.append("tbody"); + var arr=[]; + gnss_position=[]; + Object.keys(obj).forEach(function(e) { + if(e=="svs") { + + Object.keys(obj[e]).forEach(function(k) { + arr.push({id: k, elev: obj[e][k].elev.toFixed(1), + sigid: obj[e][k].sigid, + db: obj[e][k].db, azi: obj[e][k].azi.toFixed(1), prres: obj[e][k].prres.toFixed(1), "age-s": obj[e][k]["age-s"]}); + let color="blue"; + let gnssid = obj[e][k].gnss; + if(gnssid == 0) + color="green"; + else if(gnssid == 2) + color="blue"; + else if(gnssid==3) + color="red" + else if(gnssid==6) + color="yellow"; + gnss_position.push([obj[e][k].azi, obj[e][k].elev, k.split("@")[0] , obj[e][k].db/4,4, color]); + }); + } + else + arr.push({id: e, value: obj[e]}); + + }); + + var rows=tbody.selectAll("tr"). + data(arr). + enter(). + append("tr"); + + var columns= ["id", "value", "sigid", "azi", "elev", "db", "prres", "age-s"]; + + // append the header row + thead.append("tr") + .selectAll("th") + .data(columns) + .enter() + .append("th") + .text(function(d) { + return d; + }); + + var cells = rows.selectAll("td"). + data(function(row) { + return columns.map(function(column) { + var ret={}; + ret.align = "right"; + if(column=="id1" || column == "id2") + ret.value = row[column]+":"; + else + ret.value = row[column]; + + ret.color= null; + return ret; + })}). + enter().append("td").html(function(d) { + return d.value; + + }).attr("align", d=> d.align).style("background-color", d=> d.color); + +} + +var sats={}; +var lastseen=null; +var observer=0; + +function update() +{ + var seconds = 10; + clearTimeout(repeat); + repeat=setTimeout(update, 1000.0*seconds); + + if(lastseen != null) + d3.select("#freshness").html(lastseen.fromNow()); + d3.json("./global.json", function(d) { + lastseen = moment(1000*d["last-seen"]); + d3.select("#freshness").html(lastseen.fromNow()); + }); + + + d3.queue(1).defer(d3.json, "./observers.json").defer(d3.json, "./almanac.json").awaitAll(ready); + + function ready(error, results) { + var obj = {}; + for(var n = 0 ; n < results[0].length; ++n) { + if(results[0][n].id == observer) { + obj=results[0][n]; + break; + } + } + + makeTable("#galileo", obj); + componentDidMount(); + }; + +} + +console.log(window.location.href); +var url = new URL(window.location.href); +observer = url.searchParams.get("observer"); + +repeat=update(); + + diff --git a/html/observers.html b/html/observers.html new file mode 100644 index 0000000..8417f60 --- /dev/null +++ b/html/observers.html @@ -0,0 +1,60 @@ + + + + + Last update: . More information about this Galileo/GPS/BeiDou/Glonass open source monitor can be found here. Live map here!. Contact me if you want access to the Grafana dashboard.
+
+

+ This table shows live output from four Galileo/GPS/BeiDou/GLONASS receivers hosted in Nootdorp, The Netherlands and California, United States. + It is very much a work in progress, and will not be available at all times. Extremely rough code is on + GitHub. + + Some technical detail behind this setup can be found in this post. + + For updates, follow @GalileoSats on Twitter, or join us on our IRC channel (chat) via the + web gateway. + + + + + + diff --git a/html/observers.js b/html/observers.js new file mode 100644 index 0000000..7433738 --- /dev/null +++ b/html/observers.js @@ -0,0 +1,94 @@ +"use strict"; +var repeat; + +moment.relativeTimeThreshold('m', 120); + +function makeTable(str, arr) +{ + var table=d3.select(str); + table.html(""); + var thead=table.append("thead"); + var tbody=table.append("tbody"); + + var rows=tbody.selectAll("tr"). + data(arr). + enter(). + append("tr"); + + var columns= ["id", "last-seen", "latitude", "longitude", "satellites"]; + + // append the header row + thead.append("tr") + .selectAll("th") + .data(columns) + .enter() + .append("th") + .text(function(d) { + return d; + }); + + var cells = rows.selectAll("td"). + data(function(row) { + return columns.map(function(column) { + var ret={}; + ret.align = "right"; + ret.color = null; + if(column == "last-seen") { + ret.value = moment(1000*row["last-seen"]).fromNow(); + let lastSeen = moment(1000*row["last-seen"]); + let age = (moment() - lastSeen); +// console.log(age.valueOf()/1000); + if(age.valueOf() / 60000 > 5) + ret.color = "red"; + + } + else if(column == "satellites") { + ret.value = ""; + Object.keys(row["svs"]).forEach(function(d) {ret.value = ret.value +" " + d; }); + ret.value += ""; + ret.align = "left"; + } + + else { + ret.value = row[column]; + } + return ret; + })}). + enter().append("td").html(function(d) { + return d.value; + + }).attr("align", d=> d.align).style("background-color", d=> d.color); + +} + +var sats={}; +var lastseen=null; +function update() +{ + var seconds = 2; + clearTimeout(repeat); + repeat=setTimeout(update, 5000.0*seconds); + + if(lastseen != null) + d3.select("#freshness").html(lastseen.fromNow()); + d3.json("./global.json", function(d) { + lastseen = moment(1000*d["last-seen"]); + d3.select("#freshness").html(lastseen.fromNow()); + }); + + + d3.queue(1).defer(d3.json, "./svs.json").defer(d3.json, "./observers.json").awaitAll(ready); + + function ready(error, results) { + var arr=[]; + Object.keys(results[1]).forEach(function(e) { + arr.push(results[1][e]); + }); + makeTable("#galileo", arr, results[0]); + }; + +} + +repeat=update(); + + diff --git a/html/overview.html b/html/overview.html new file mode 100644 index 0000000..fc45761 --- /dev/null +++ b/html/overview.html @@ -0,0 +1,60 @@ + + + + + Last update: . More information about this Galileo/GPS/BeiDou/Glonass open source monitor can be found here. Live map here!. Contact me if you want access to the Grafana dashboard.
+
+

+ This table shows live output from four Galileo/GPS/BeiDou/GLONASS receivers hosted in Nootdorp, The Netherlands and California, United States. + It is very much a work in progress, and will not be available at all times. Extremely rough code is on + GitHub. + + Some technical detail behind this setup can be found in this post. + + For updates, follow @GalileoSats on Twitter, or join us on our IRC channel (chat) via the + web gateway. + + + + + + diff --git a/html/overview.js b/html/overview.js new file mode 100644 index 0000000..dac068a --- /dev/null +++ b/html/overview.js @@ -0,0 +1,97 @@ +"use strict"; +var repeat; + +moment.relativeTimeThreshold('m', 120); + +function makeTable(str, arr, svs) +{ + var table=d3.select(str); + table.html(""); + var thead=table.append("thead"); + var tbody=table.append("tbody"); + + var header=["",""]; + var rows=tbody.selectAll("tr"). + data(header). + enter(). + append("tr"); + + var columns = arr; + columns.unshift("@"); + console.log(columns); + + // append the header row + thead.append("tr") + .selectAll("th") + .data(columns) + .enter() + .append("th") + .text(function(d) { + return d; + }); + + var sigid = 1; + var cells = rows.selectAll("td"). + data(function(row) { + var oldsigid = sigid; + sigid = 5; + return columns.map(function(column) { + var ret={}; + ret.sigid = oldsigid; + console.log("column: "+column); + console.log("sigid: "+oldsigid); + if(column=="@") + ret.value = oldsigid; + else if(sigid == 1) + ret.value = svs[column+"@"+sigid].e1bhs; + else if(sigid == 5) + ret.value = svs[column+"@"+sigid].e5bhs; + + if(ret.value == 0 || column=='@') + ret.color = null; + else if(ret.value == 3) + ret.color="orange"; + else ret.color = "red"; + + return ret; + })}). + enter().append("td").html(function(d) { + return d.value; + + }).attr("align", "right").style("background-color", d=> d.color); + +} + +var sats={}; +var lastseen=null; +function update() +{ + var seconds = 2; + clearTimeout(repeat); + repeat=setTimeout(update, 5000.0*seconds); + + if(lastseen != null) + d3.select("#freshness").html(lastseen.fromNow()); + d3.json("global", function(d) { + lastseen = moment(1000*d["last-seen"]); + d3.select("#freshness").html(lastseen.fromNow()); + }); + + + d3.queue(1).defer(d3.json, "../svs").defer(d3.json, "../almanac").defer(d3.json, "../observers").awaitAll(ready); + + function ready(error, results) { + var arr=[]; + Object.keys(results[0]).forEach(function(e) { +// console.log(results[0][e]); + if(results[0][e].gnssid == 2 && results[0][e].sigid==1) + arr.push(e.slice(0,3)); + }); + makeTable("#galileo", arr, results[0]); + }; + +} + +repeat=update(); + + diff --git a/html/sv.html b/html/sv.html new file mode 100644 index 0000000..b567a72 --- /dev/null +++ b/html/sv.html @@ -0,0 +1,60 @@ + + + + + Last update: . More information about this Galileo/GPS/BeiDou/Glonass open source monitor can be found here. Live map here!. Contact me if you want access to the Grafana dashboard.
+
+

+ This table shows live output from four Galileo/GPS/BeiDou/GLONASS receivers hosted in Nootdorp, The Netherlands and California, United States. + It is very much a work in progress, and will not be available at all times. Extremely rough code is on + GitHub. + + Some technical detail behind this setup can be found in this post. + + For updates, follow @GalileoSats on Twitter, or join us on our IRC channel (chat) via the + web gateway. + + + + + + diff --git a/html/sv.js b/html/sv.js new file mode 100644 index 0000000..f75d9bd --- /dev/null +++ b/html/sv.js @@ -0,0 +1,99 @@ +"use strict"; +var repeat; + +moment.relativeTimeThreshold('m', 120); + +function makeTable(str, arr) +{ + var table=d3.select(str); + table.html(""); + var thead=table.append("thead"); + var tbody=table.append("tbody"); + + var rows=tbody.selectAll("tr"). + data(arr). + enter(). + append("tr"); + + var columns= ["id1", "value1", "id2", "value2"]; + + // append the header row + thead.append("tr") + .selectAll("th") + .data(columns) + .enter() + .append("th") + .text(function(d) { + return d; + }); + + var cells = rows.selectAll("td"). + data(function(row) { + return columns.map(function(column) { + var ret={}; + ret.align = "right"; + if(column=="id1" || column == "id2") + ret.value = row[column]+":"; + else + ret.value = row[column]; + + ret.color= null; + return ret; + })}). + enter().append("td").html(function(d) { + return d.value; + + }).attr("align", d=> d.align).style("background-color", d=> d.color); + +} + +var sats={}; +var lastseen=null; +var sv=2; +var gnssid=3; + +function update() +{ + var seconds = 2; + clearTimeout(repeat); + repeat=setTimeout(update, 1000.0*seconds); + + if(lastseen != null) + d3.select("#freshness").html(lastseen.fromNow()); + d3.json("./global.json", function(d) { + lastseen = moment(1000*d["last-seen"]); + d3.select("#freshness").html(lastseen.fromNow()); + }); + + + d3.queue(1).defer(d3.json, "./sv.json?gnssid="+gnssid+"&sv="+sv).defer(d3.json, "./almanac.json").awaitAll(ready); + + function ready(error, results) { + var arr=[]; + Object.keys(results[0]).forEach(function(e) { + arr.push({id: e, value: results[0][e]}); + }); + + var newarr=[]; + for(var n=0 ; n < arr.length; n+=2) { + if(n + 1 < arr.length) + newarr.push({id1: arr[n].id, value1: arr[n].value, id2: arr[n+1].id, value2: arr[n+1].value}); + else + newarr.push({id1: arr[n].id, value1: arr[n].value, id2: "", value2: ""}); + } + makeTable("#galileo", newarr, results[0]); + }; + +} + +console.log(window.location.href); +var url = new URL(window.location.href); +sv = url.searchParams.get("sv"); +gnssid = url.searchParams.get("gnssid"); + + + + +repeat=update(); + +