-
Notifications
You must be signed in to change notification settings - Fork 0
/
nh1.html
38 lines (36 loc) · 87.1 KB
/
nh1.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<title>My Awesome Map</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<!--
<script src="https://unpkg.com/maplibre-gl/dist/maplibre-gl.js"></script>
<link rel="stylesheet" href="https://unpkg.com/maplibre-gl/dist/maplibre-gl.css"/>
-->
<script src="https://unpkg.com/[email protected]/dist/maplibre-gl.js"></script>
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/maplibre-gl.css"/>
<style>.layer-switcher-ctrl{background-color:#fff}.layer-switcher-ctrl a{background-color:#fff;_color:#404040;color:#a9a9a9;display:block;margin:0;padding:5px 10px;text-decoration:none;border-bottom:1px solid black;text-align:center}.layer-switcher-ctrl a:hover{background-color:#f8f8f8;color:#404040}.layer-switcher-ctrl a.active{background-color:#3887be;color:#fff}.layer-switcher-ctrl a.active:hover{background:#3074a4}.layer-switcher-ctrl-simple{background-color:#fff}.layer-switcher-ctrl-simple a{background-color:#fff;color:#a9a9a9;display:block;margin:0;padding:5px 10px;text-decoration:none;border-bottom:1px solid black;text-align:center}.layer-switcher-ctrl-simple a:hover{background-color:#f8f8f8;color:#404040}.layer-switcher-ctrl-simple a.active{color:#404040}.layer-switcher-ctrl-simple a.active:hover{_background:#3074a4;color:#a9a9a9}
html, body {height: 100%; margin: 0; padding: 0;} #pymaplibregl {width: 100%; height: 100%;}
</style>
<body>
<div id="pymaplibregl"></div>
<script>
(()=>{var H=Math.pow,w=(t,e,r)=>new Promise((n,i)=>{var o=c=>{try{s(r.next(c))}catch(u){i(u)}},a=c=>{try{s(r.throw(c))}catch(u){i(u)}},s=c=>c.done?n(c.value):Promise.resolve(c.value).then(o,a);s((r=r.apply(t,e)).next())}),k=Uint8Array,I=Uint16Array,Ye=Int32Array,Ee=new k([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Me=new k([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Qe=new k([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Se=function(t,e){for(var r=new I(31),n=0;n<31;++n)r[n]=e+=1<<t[n-1];for(var i=new Ye(r[30]),n=1;n<30;++n)for(var o=r[n];o<r[n+1];++o)i[o]=o-r[n]<<5|n;return{b:r,r:i}},Te=Se(Ee,2),Oe=Te.b,et=Te.r;Oe[28]=258,et[258]=28;var Pe=Se(Me,0),tt=Pe.b,ir=Pe.r,le=new I(32768);for(p=0;p<32768;++p)P=(p&43690)>>1|(p&21845)<<1,P=(P&52428)>>2|(P&13107)<<2,P=(P&61680)>>4|(P&3855)<<4,le[p]=((P&65280)>>8|(P&255)<<8)>>1;var P,p,F=function(t,e,r){for(var n=t.length,i=0,o=new I(e);i<n;++i)t[i]&&++o[t[i]-1];var a=new I(e);for(i=1;i<e;++i)a[i]=a[i-1]+o[i-1]<<1;var s;if(r){s=new I(1<<e);var c=15-e;for(i=0;i<n;++i)if(t[i])for(var u=i<<4|t[i],l=e-t[i],f=a[t[i]-1]++<<l,h=f|(1<<l)-1;f<=h;++f)s[le[f]>>c]=u}else for(s=new I(n),i=0;i<n;++i)t[i]&&(s[i]=le[a[t[i]-1]++]>>15-t[i]);return s},J=new k(288);for(p=0;p<144;++p)J[p]=8;var p;for(p=144;p<256;++p)J[p]=9;var p;for(p=256;p<280;++p)J[p]=7;var p;for(p=280;p<288;++p)J[p]=8;var p,Ae=new k(32);for(p=0;p<32;++p)Ae[p]=5;var p,rt=F(J,9,1),nt=F(Ae,5,1),se=function(t){for(var e=t[0],r=1;r<t.length;++r)t[r]>e&&(e=t[r]);return e},S=function(t,e,r){var n=e/8|0;return(t[n]|t[n+1]<<8)>>(e&7)&r},ce=function(t,e){var r=e/8|0;return(t[r]|t[r+1]<<8|t[r+2]<<16)>>(e&7)},it=function(t){return(t+7)/8|0},ot=function(t,e,r){(e==null||e<0)&&(e=0),(r==null||r>t.length)&&(r=t.length);var n=new k(r-e);return n.set(t.subarray(e,r)),n},at=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],D=function(t,e,r){var n=new Error(e||at[t]);if(n.code=t,Error.captureStackTrace&&Error.captureStackTrace(n,D),!r)throw n;return n},he=function(t,e,r,n){var i=t.length,o=n?n.length:0;if(!i||e.f&&!e.l)return r||new k(0);var a=!r||e.i!=2,s=e.i;r||(r=new k(i*3));var c=function(_e){var De=r.length;if(_e>De){var Le=new k(Math.max(De*2,_e));Le.set(r),r=Le}},u=e.f||0,l=e.p||0,f=e.b||0,h=e.l,v=e.d,m=e.m,g=e.n,b=i*8;do{if(!h){u=S(t,l,1);var y=S(t,l+1,3);if(l+=3,y)if(y==1)h=rt,v=nt,m=9,g=5;else if(y==2){var E=S(t,l,31)+257,R=S(t,l+10,15)+4,Q=E+S(t,l+5,31)+1;l+=14;for(var x=new k(Q),re=new k(19),U=0;U<R;++U)re[Qe[U]]=S(t,l+U*3,7);l+=R*3;for(var ye=se(re),Fe=(1<<ye)-1,Je=F(re,ye,1),U=0;U<Q;){var me=Je[S(t,l,Fe)];l+=me&15;var d=me>>4;if(d<16)x[U++]=d;else{var z=0,ee=0;for(d==16?(ee=3+S(t,l,3),l+=2,z=x[U-1]):d==17?(ee=3+S(t,l,7),l+=3):d==18&&(ee=11+S(t,l,127),l+=7);ee--;)x[U++]=z}}var we=x.subarray(0,E),M=x.subarray(E);m=se(we),g=se(M),h=F(we,m,1),v=F(M,g,1)}else D(1);else{var d=it(l)+4,O=t[d-4]|t[d-3]<<8,A=d+O;if(A>i){s&&D(0);break}a&&c(f+O),r.set(t.subarray(d,A),f),e.b=f+=O,e.p=l=A*8,e.f=u;continue}if(l>b){s&&D(0);break}}a&&c(f+131072);for(var qe=(1<<m)-1,Ge=(1<<g)-1,ne=l;;ne=l){var z=h[ce(t,l)&qe],B=z>>4;if(l+=z&15,l>b){s&&D(0);break}if(z||D(2),B<256)r[f++]=B;else if(B==256){ne=l,h=null;break}else{var be=B-254;if(B>264){var U=B-257,Z=Ee[U];be=S(t,l,(1<<Z)-1)+Oe[U],l+=Z}var ie=v[ce(t,l)&Ge],oe=ie>>4;ie||D(3),l+=ie&15;var M=tt[oe];if(oe>3){var Z=Me[oe];M+=ce(t,l)&(1<<Z)-1,l+=Z}if(l>b){s&&D(0);break}a&&c(f+131072);var ae=f+be;if(f<M){var xe=o-M,Xe=Math.min(M,ae);for(xe+f<0&&D(3);f<Xe;++f)r[f]=n[xe+f]}for(;f<ae;f+=4)r[f]=r[f-M],r[f+1]=r[f+1-M],r[f+2]=r[f+2-M],r[f+3]=r[f+3-M];f=ae}}e.l=h,e.p=ne,e.b=f,e.f=u,h&&(u=1,e.m=m,e.d=v,e.n=g)}while(!u);return f==r.length?r:ot(r,0,f)},st=new k(0),ct=function(t){(t[0]!=31||t[1]!=139||t[2]!=8)&&D(6,"invalid gzip data");var e=t[3],r=10;e&4&&(r+=(t[10]|t[11]<<8)+2);for(var n=(e>>3&1)+(e>>4&1);n>0;n-=!t[r++]);return r+(e&2)},lt=function(t){var e=t.length;return(t[e-4]|t[e-3]<<8|t[e-2]<<16|t[e-1]<<24)>>>0},ut=function(t,e){return((t[0]&15)!=8||t[0]>>4>7||(t[0]<<8|t[1])%31)&&D(6,"invalid zlib data"),(t[1]>>5&1)==+!e&&D(6,"invalid zlib data: "+(t[1]&32?"need":"unexpected")+" dictionary"),(t[1]>>3&4)+2};function ft(t,e){return he(t,{i:2},e&&e.out,e&&e.dictionary)}function ht(t,e){var r=ct(t);return r+8>t.length&&D(6,"invalid gzip data"),he(t.subarray(r,-8),{i:2},e&&e.out||new k(lt(t)),e&&e.dictionary)}function dt(t,e){return he(t.subarray(ut(t,e&&e.dictionary),-4),{i:2},e&&e.out,e&&e.dictionary)}function ue(t,e){return t[0]==31&&t[1]==139&&t[2]==8?ht(t,e):(t[0]&15)!=8||t[0]>>4>7||(t[0]<<8|t[1])%31?ft(t,e):dt(t,e)}var pt=typeof TextDecoder<"u"&&new TextDecoder,gt=0;try{pt.decode(st,{stream:!0}),gt=1}catch{}var Re=(t,e)=>t*H(2,e),j=(t,e)=>Math.floor(t/H(2,e)),te=(t,e)=>Re(t.getUint16(e+1,!0),8)+t.getUint8(e),ze=(t,e)=>Re(t.getUint32(e+2,!0),16)+t.getUint16(e,!0),vt=(t,e,r,n,i)=>{if(t!==n.getUint8(i))return t-n.getUint8(i);let o=te(n,i+1);if(e!==o)return e-o;let a=te(n,i+4);return r!==a?r-a:0},yt=(t,e,r,n)=>{let i=Be(t,e|128,r,n);return i?{z:e,x:r,y:n,offset:i[0],length:i[1],isDir:!0}:null},ke=(t,e,r,n)=>{let i=Be(t,e,r,n);return i?{z:e,x:r,y:n,offset:i[0],length:i[1],isDir:!1}:null},Be=(t,e,r,n)=>{let i=0,o=t.byteLength/17-1;for(;i<=o;){let a=o+i>>1,s=vt(e,r,n,t,a*17);if(s>0)i=a+1;else if(s<0)o=a-1;else return[ze(t,a*17+7),t.getUint32(a*17+13,!0)]}return null},mt=(t,e)=>t.isDir&&!e.isDir?1:!t.isDir&&e.isDir?-1:t.z!==e.z?t.z-e.z:t.x!==e.x?t.x-e.x:t.y-e.y,$e=(t,e)=>{let r=t.getUint8(e*17);return{z:r&127,x:te(t,e*17+1),y:te(t,e*17+4),offset:ze(t,e*17+7),length:t.getUint32(e*17+13,!0),isDir:r>>7===1}},Ue=t=>{let e=[],r=new DataView(t);for(let n=0;n<r.byteLength/17;n++)e.push($e(r,n));return wt(e)},wt=t=>{t.sort(mt);let e=new ArrayBuffer(17*t.length),r=new Uint8Array(e);for(let n=0;n<t.length;n++){let i=t[n],o=i.z;i.isDir&&(o=o|128),r[n*17]=o,r[n*17+1]=i.x&255,r[n*17+2]=i.x>>8&255,r[n*17+3]=i.x>>16&255,r[n*17+4]=i.y&255,r[n*17+5]=i.y>>8&255,r[n*17+6]=i.y>>16&255,r[n*17+7]=i.offset&255,r[n*17+8]=j(i.offset,8)&255,r[n*17+9]=j(i.offset,16)&255,r[n*17+10]=j(i.offset,24)&255,r[n*17+11]=j(i.offset,32)&255,r[n*17+12]=j(i.offset,48)&255,r[n*17+13]=i.length&255,r[n*17+14]=i.length>>8&255,r[n*17+15]=i.length>>16&255,r[n*17+16]=i.length>>24&255}return e},bt=(t,e)=>{if(t.byteLength<17)return null;let r=t.byteLength/17,n=$e(t,r-1);if(n.isDir){let i=n.z,o=e.z-i,a=Math.trunc(e.x/(1<<o)),s=Math.trunc(e.y/(1<<o));return{z:i,x:a,y:s}}return null};function xt(t){return w(this,null,function*(){let e=yield t.getBytes(0,512e3),r=new DataView(e.data),n=r.getUint32(4,!0),i=r.getUint16(8,!0),o=new TextDecoder("utf-8"),a=JSON.parse(o.decode(new DataView(e.data,10,n))),s=0;a.compression==="gzip"&&(s=2);let c=0;"minzoom"in a&&(c=+a.minzoom);let u=0;"maxzoom"in a&&(u=+a.maxzoom);let l=0,f=0,h=0,v=-180,m=-85,g=180,b=85;if(a.bounds){let d=a.bounds.split(",");v=+d[0],m=+d[1],g=+d[2],b=+d[3]}if(a.center){let d=a.center.split(",");l=+d[0],f=+d[1],h=+d[2]}return{specVersion:r.getUint16(2,!0),rootDirectoryOffset:10+n,rootDirectoryLength:i*17,jsonMetadataOffset:10,jsonMetadataLength:n,leafDirectoryOffset:0,leafDirectoryLength:void 0,tileDataOffset:0,tileDataLength:void 0,numAddressedTiles:0,numTileEntries:0,numTileContents:0,clustered:!1,internalCompression:1,tileCompression:s,tileType:1,minZoom:c,maxZoom:u,minLon:v,minLat:m,maxLon:g,maxLat:b,centerZoom:h,centerLon:l,centerLat:f,etag:e.etag}})}function _t(t,e,r,n,i,o,a){return w(this,null,function*(){let s=yield r.getArrayBuffer(e,t.rootDirectoryOffset,t.rootDirectoryLength,t);t.specVersion===1&&(s=Ue(s));let c=ke(new DataView(s),n,i,o);if(c){let f=(yield e.getBytes(c.offset,c.length,a)).data,h=new DataView(f);return h.getUint8(0)===31&&h.getUint8(1)===139&&(f=ue(new Uint8Array(f))),{data:f}}let u=bt(new DataView(s),{z:n,x:i,y:o});if(u){let l=yt(new DataView(s),u.z,u.x,u.y);if(l){let f=yield r.getArrayBuffer(e,l.offset,l.length,t);t.specVersion===1&&(f=Ue(f));let h=ke(new DataView(f),n,i,o);if(h){let m=(yield e.getBytes(h.offset,h.length,a)).data,g=new DataView(m);return g.getUint8(0)===31&&g.getUint8(1)===139&&(m=ue(new Uint8Array(m))),{data:m}}}}})}var Ie={getHeader:xt,getZxy:_t};var Dt=t=>(e,r)=>{if(r instanceof AbortController)return t(e,r);let n=new AbortController;return t(e,n).then(i=>r(void 0,i.data,i.cacheControl||"",i.expires||""),i=>r(i)).catch(i=>r(i)),{cancel:()=>n.abort()}},He=class{constructor(){this.tilev4=(t,e)=>w(this,null,function*(){if(t.type==="json"){let f=t.url.substr(10),h=this.tiles.get(f);h||(h=new Ce(f),this.tiles.set(f,h));let v=yield h.getHeader();return{data:{tiles:[`${t.url}/{z}/{x}/{y}`],minzoom:v.minZoom,maxzoom:v.maxZoom,bounds:[v.minLon,v.minLat,v.maxLon,v.maxLat]}}}let r=new RegExp(/pmtiles:\/\/(.+)\/(\d+)\/(\d+)\/(\d+)/),n=t.url.match(r);if(!n)throw new Error("Invalid PMTiles protocol URL");let i=n[1],o=this.tiles.get(i);o||(o=new Ce(i),this.tiles.set(i,o));let a=n[2],s=n[3],c=n[4],u=yield o.getHeader(),l=yield o?.getZxy(+a,+s,+c,e.signal);return l?{data:new Uint8Array(l.data),cacheControl:l.cacheControl,expires:l.expires}:u.tileType===1?{data:new Uint8Array}:{data:null}}),this.tile=Dt(this.tilev4),this.tiles=new Map}add(t){this.tiles.set(t.source.getKey(),t)}get(t){return this.tiles.get(t)}};function $(t,e){return(e>>>0)*4294967296+(t>>>0)}function Lt(t,e){let r=e.buf,n=r[e.pos++],i=(n&112)>>4;if(n<128||(n=r[e.pos++],i|=(n&127)<<3,n<128)||(n=r[e.pos++],i|=(n&127)<<10,n<128)||(n=r[e.pos++],i|=(n&127)<<17,n<128)||(n=r[e.pos++],i|=(n&127)<<24,n<128)||(n=r[e.pos++],i|=(n&1)<<31,n<128))return $(t,i);throw new Error("Expected varint not more than 10 bytes")}function W(t){let e=t.buf,r=e[t.pos++],n=r&127;return r<128||(r=e[t.pos++],n|=(r&127)<<7,r<128)||(r=e[t.pos++],n|=(r&127)<<14,r<128)||(r=e[t.pos++],n|=(r&127)<<21,r<128)?n:(r=e[t.pos],n|=(r&15)<<28,Lt(n,t))}function kt(t,e,r,n){if(n===0){r===1&&(e[0]=t-1-e[0],e[1]=t-1-e[1]);let i=e[0];e[0]=e[1],e[1]=i}}var Ut=[0,1,5,21,85,341,1365,5461,21845,87381,349525,1398101,5592405,22369621,89478485,357913941,1431655765,5726623061,22906492245,91625968981,366503875925,1466015503701,5864062014805,23456248059221,93824992236885,375299968947541,0x5555555555555];function Ct(t,e,r){if(t>26)throw Error("Tile zoom level exceeds max safe number limit (26)");if(e>H(2,t)-1||r>H(2,t)-1)throw Error("tile x/y outside zoom level bounds");let n=Ut[t],i=H(2,t),o=0,a=0,s=0,c=[e,r],u=i/2;for(;u>0;)o=(c[0]&u)>0?1:0,a=(c[1]&u)>0?1:0,s+=u*u*(3*o^a),kt(u,c,o,a),u=u/2;return n+s}function Ve(t,e){return w(this,null,function*(){if(e===1||e===0)return t;if(e===2){if(typeof globalThis.DecompressionStream>"u")return ue(new Uint8Array(t));let r=new Response(t).body;if(!r)throw Error("Failed to read response stream");let n=r.pipeThrough(new globalThis.DecompressionStream("gzip"));return new Response(n).arrayBuffer()}throw Error("Compression method not supported")})}var Et=127;function Mt(t,e){let r=0,n=t.length-1;for(;r<=n;){let i=n+r>>1,o=e-t[i].tileId;if(o>0)r=i+1;else if(o<0)n=i-1;else return t[i]}return n>=0&&(t[n].runLength===0||e-t[n].tileId<t[n].runLength)?t[n]:null}var St=class{constructor(t,e=new Headers){this.url=t,this.customHeaders=e,this.mustReload=!1}getKey(){return this.url}setHeaders(t){this.customHeaders=t}getBytes(t,e,r,n){return w(this,null,function*(){let i,o;r?o=r:(i=new AbortController,o=i.signal);let a=new Headers(this.customHeaders);a.set("range",`bytes=${t}-${t+e-1}`);let s;this.mustReload&&(s="reload");let c=yield fetch(this.url,{signal:o,cache:s,headers:a});if(t===0&&c.status===416){let h=c.headers.get("Content-Range");if(!h||!h.startsWith("bytes */"))throw Error("Missing content-length on 416 response");let v=+h.substr(8);c=yield fetch(this.url,{signal:o,cache:"reload",headers:{range:`bytes=0-${v-1}`}})}let u=c.headers.get("Etag");if(u?.startsWith("W/")&&(u=null),c.status===416||n&&u&&u!==n)throw this.mustReload=!0,new fe(n);if(c.status>=300)throw Error(`Bad response code: ${c.status}`);let l=c.headers.get("Content-Length");if(c.status===200&&(!l||+l>e))throw i&&i.abort(),Error("Server returned no content-length header or content-length exceeding request. Check that your storage backend supports HTTP Byte Serving.");return{data:yield c.arrayBuffer(),etag:u||void 0,cacheControl:c.headers.get("Cache-Control")||void 0,expires:c.headers.get("Expires")||void 0}})}};function T(t,e){let r=t.getUint32(e+4,!0),n=t.getUint32(e+0,!0);return r*H(2,32)+n}function Tt(t,e){let r=new DataView(t),n=r.getUint8(7);if(n>3)throw Error(`Archive is spec version ${n} but this library supports up to spec version 3`);return{specVersion:n,rootDirectoryOffset:T(r,8),rootDirectoryLength:T(r,16),jsonMetadataOffset:T(r,24),jsonMetadataLength:T(r,32),leafDirectoryOffset:T(r,40),leafDirectoryLength:T(r,48),tileDataOffset:T(r,56),tileDataLength:T(r,64),numAddressedTiles:T(r,72),numTileEntries:T(r,80),numTileContents:T(r,88),clustered:r.getUint8(96)===1,internalCompression:r.getUint8(97),tileCompression:r.getUint8(98),tileType:r.getUint8(99),minZoom:r.getUint8(100),maxZoom:r.getUint8(101),minLon:r.getInt32(102,!0)/1e7,minLat:r.getInt32(106,!0)/1e7,maxLon:r.getInt32(110,!0)/1e7,maxLat:r.getInt32(114,!0)/1e7,centerZoom:r.getUint8(118),centerLon:r.getInt32(119,!0)/1e7,centerLat:r.getInt32(123,!0)/1e7,etag:e}}function Ne(t){let e={buf:new Uint8Array(t),pos:0},r=W(e),n=[],i=0;for(let o=0;o<r;o++){let a=W(e);n.push({tileId:i+a,offset:0,length:0,runLength:1}),i+=a}for(let o=0;o<r;o++)n[o].runLength=W(e);for(let o=0;o<r;o++)n[o].length=W(e);for(let o=0;o<r;o++){let a=W(e);a===0&&o>0?n[o].offset=n[o-1].offset+n[o-1].length:n[o].offset=a-1}return n}function Ot(t){let e=new DataView(t);return e.getUint16(2,!0)===2?(console.warn("PMTiles spec version 2 has been deprecated; please see github.com/protomaps/PMTiles for tools to upgrade"),2):e.getUint16(2,!0)===1?(console.warn("PMTiles spec version 1 has been deprecated; please see github.com/protomaps/PMTiles for tools to upgrade"),1):3}var fe=class extends Error{};function Pt(t,e){return w(this,null,function*(){let r=yield t.getBytes(0,16384);if(new DataView(r.data).getUint16(0,!0)!==19792)throw new Error("Wrong magic number for PMTiles archive");if(Ot(r.data)<3)return[yield Ie.getHeader(t)];let i=r.data.slice(0,Et),o=Tt(i,r.etag),a=r.data.slice(o.rootDirectoryOffset,o.rootDirectoryOffset+o.rootDirectoryLength),s=`${t.getKey()}|${o.etag||""}|${o.rootDirectoryOffset}|${o.rootDirectoryLength}`,c=Ne(yield e(a,o.internalCompression));return[o,[s,c.length,c]]})}function At(t,e,r,n,i){return w(this,null,function*(){let o=yield t.getBytes(r,n,void 0,i.etag),a=yield e(o.data,i.internalCompression),s=Ne(a);if(s.length===0)throw new Error("Empty directory is invalid");return s})}var Rt=class{constructor(t=100,e=!0,r=Ve){this.cache=new Map,this.invalidations=new Map,this.maxCacheEntries=t,this.counter=1,this.decompress=r}getHeader(t){return w(this,null,function*(){let e=t.getKey(),r=this.cache.get(e);if(r)return r.lastUsed=this.counter++,yield r.data;let n=new Promise((i,o)=>{Pt(t,this.decompress).then(a=>{a[1]&&this.cache.set(a[1][0],{lastUsed:this.counter++,data:Promise.resolve(a[1][2])}),i(a[0]),this.prune()}).catch(a=>{o(a)})});return this.cache.set(e,{lastUsed:this.counter++,data:n}),n})}getDirectory(t,e,r,n){return w(this,null,function*(){let i=`${t.getKey()}|${n.etag||""}|${e}|${r}`,o=this.cache.get(i);if(o)return o.lastUsed=this.counter++,yield o.data;let a=new Promise((s,c)=>{At(t,this.decompress,e,r,n).then(u=>{s(u),this.prune()}).catch(u=>{c(u)})});return this.cache.set(i,{lastUsed:this.counter++,data:a}),a})}getArrayBuffer(t,e,r,n){return w(this,null,function*(){let i=`${t.getKey()}|${n.etag||""}|${e}|${r}`,o=this.cache.get(i);if(o)return o.lastUsed=this.counter++,yield o.data;let a=new Promise((s,c)=>{t.getBytes(e,r,void 0,n.etag).then(u=>{s(u.data),this.cache.has(i),this.prune()}).catch(u=>{c(u)})});return this.cache.set(i,{lastUsed:this.counter++,data:a}),a})}prune(){if(this.cache.size>=this.maxCacheEntries){let t=1/0,e;this.cache.forEach((r,n)=>{r.lastUsed<t&&(t=r.lastUsed,e=n)}),e&&this.cache.delete(e)}}invalidate(t){return w(this,null,function*(){let e=t.getKey();if(this.invalidations.get(e))return yield this.invalidations.get(e);this.cache.delete(t.getKey());let r=new Promise((n,i)=>{this.getHeader(t).then(o=>{n(),this.invalidations.delete(e)}).catch(o=>{i(o)})});this.invalidations.set(e,r)})}},Ce=class{constructor(t,e,r){typeof t=="string"?this.source=new St(t):this.source=t,r?this.decompress=r:this.decompress=Ve,e?this.cache=e:this.cache=new Rt}getHeader(){return w(this,null,function*(){return yield this.cache.getHeader(this.source)})}getZxyAttempt(t,e,r,n){return w(this,null,function*(){let i=Ct(t,e,r),o=yield this.cache.getHeader(this.source);if(o.specVersion<3)return Ie.getZxy(o,this.source,this.cache,t,e,r,n);if(t<o.minZoom||t>o.maxZoom)return;let a=o.rootDirectoryOffset,s=o.rootDirectoryLength;for(let c=0;c<=3;c++){let u=yield this.cache.getDirectory(this.source,a,s,o),l=Mt(u,i);if(l){if(l.runLength>0){let f=yield this.source.getBytes(o.tileDataOffset+l.offset,l.length,n,o.etag);return{data:yield this.decompress(f.data,o.tileCompression),cacheControl:f.cacheControl,expires:f.expires}}a=o.leafDirectoryOffset+l.offset,s=l.length}else return}throw Error("Maximum directory depth exceeded")})}getZxy(t,e,r,n){return w(this,null,function*(){try{return yield this.getZxyAttempt(t,e,r,n)}catch(i){if(i instanceof fe)return this.cache.invalidate(this.source),yield this.getZxyAttempt(t,e,r,n);throw i}})}getMetadataAttempt(){return w(this,null,function*(){let t=yield this.cache.getHeader(this.source),e=yield this.source.getBytes(t.jsonMetadataOffset,t.jsonMetadataLength,void 0,t.etag),r=yield this.decompress(e.data,t.internalCompression),n=new TextDecoder("utf-8");return JSON.parse(n.decode(r))})}getMetadata(){return w(this,null,function*(){try{return yield this.getMetadataAttempt()}catch(t){if(t instanceof fe)return this.cache.invalidate(this.source),yield this.getMetadataAttempt();throw t}})}};var q=class{constructor(e){this._options=e||{}}onAdd(e){return this._map=e,this._container=document.createElement("div"),this._container.className="maplibregl-ctrl maplibregl-ctrl-group",this._container.style.cssText=this._options.cssText||"padding: 10px;",this._container.innerHTML=this._options.content||"We out here.",this._container}onRemove(){this._container.parentNode.removeChild(this._container),this._map=void 0}};var zt={default:"layer-switcher-ctrl",simple:"layer-switcher-ctrl-simple"};function Bt(t,e){let r=document.createElement("a");r.id=e,r.href="#",r.textContent=e;let n=t.getLayoutProperty(e,"visibility");return(typeof n>"u"||n==="visible")&&(r.className="active"),r.onclick=function(i){let o=this.textContent,a=t.getLayoutProperty(o,"visibility");if(console.log(o,a),typeof a>"u"||a==="visible"){t.setLayoutProperty(o,"visibility","none"),this.className="";return}t.setLayoutProperty(o,"visibility","visible"),this.className="active"},r}function $t(t,e){let r=document.createElement("div");r.id="layer-switcher-menu";for(let n of e){let i=Bt(t,n);r.appendChild(i)}return r}var G=class{constructor(e){this._options=e}onAdd(e){this._map=e,this._container=document.createElement("div"),this._container.classList.add("maplibregl-ctrl"),this._container.classList.add(zt[this._options.theme||"default"]),this._container.style.cssText=this._options.cssText||"";let r=this._options.layerIds;return this._container.appendChild($t(e,r)),this._container}onRemove(){this._container.parentNode.removeChild(this._container),this._map=void 0}getDefaultPosition(){return"top-left"}};var It=Object.prototype.toString,N=Array.isArray||function(e){return It.call(e)==="[object Array]"};function pe(t){return typeof t=="function"}function Ht(t){return N(t)?"array":typeof t}function de(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function Ke(t,e){return t!=null&&typeof t=="object"&&e in t}function Vt(t,e){return t!=null&&typeof t!="object"&&t.hasOwnProperty&&t.hasOwnProperty(e)}var Nt=RegExp.prototype.test;function Kt(t,e){return Nt.call(t,e)}var Zt=/\S/;function jt(t){return!Kt(Zt,t)}var Wt={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};function Ft(t){return String(t).replace(/[&<>"'`=\/]/g,function(r){return Wt[r]})}var Jt=/\s*/,qt=/\s+/,Ze=/\s*=/,Gt=/\s*\}/,Xt=/#|\^|\/|>|\{|&|=|!/;function Yt(t,e){if(!t)return[];var r=!1,n=[],i=[],o=[],a=!1,s=!1,c="",u=0;function l(){if(a&&!s)for(;o.length;)delete i[o.pop()];else o=[];a=!1,s=!1}var f,h,v;function m(x){if(typeof x=="string"&&(x=x.split(qt,2)),!N(x)||x.length!==2)throw new Error("Invalid tags: "+x);f=new RegExp(de(x[0])+"\\s*"),h=new RegExp("\\s*"+de(x[1])),v=new RegExp("\\s*"+de("}"+x[1]))}m(e||C.tags);for(var g=new Y(t),b,y,d,O,A,E;!g.eos();){if(b=g.pos,d=g.scanUntil(f),d)for(var R=0,Q=d.length;R<Q;++R)O=d.charAt(R),jt(O)?(o.push(i.length),c+=O):(s=!0,r=!0,c+=" "),i.push(["text",O,b,b+1]),b+=1,O===`
`&&(l(),c="",u=0,r=!1);if(!g.scan(f))break;if(a=!0,y=g.scan(Xt)||"name",g.scan(Jt),y==="="?(d=g.scanUntil(Ze),g.scan(Ze),g.scanUntil(h)):y==="{"?(d=g.scanUntil(v),g.scan(Gt),g.scanUntil(h),y="&"):d=g.scanUntil(h),!g.scan(h))throw new Error("Unclosed tag at "+g.pos);if(y==">"?A=[y,d,b,g.pos,c,u,r]:A=[y,d,b,g.pos],u++,i.push(A),y==="#"||y==="^")n.push(A);else if(y==="/"){if(E=n.pop(),!E)throw new Error('Unopened section "'+d+'" at '+b);if(E[1]!==d)throw new Error('Unclosed section "'+E[1]+'" at '+b)}else y==="name"||y==="{"||y==="&"?s=!0:y==="="&&m(d)}if(l(),E=n.pop(),E)throw new Error('Unclosed section "'+E[1]+'" at '+g.pos);return er(Qt(i))}function Qt(t){for(var e=[],r,n,i=0,o=t.length;i<o;++i)r=t[i],r&&(r[0]==="text"&&n&&n[0]==="text"?(n[1]+=r[1],n[3]=r[3]):(e.push(r),n=r));return e}function er(t){for(var e=[],r=e,n=[],i,o,a=0,s=t.length;a<s;++a)switch(i=t[a],i[0]){case"#":case"^":r.push(i),n.push(i),r=i[4]=[];break;case"/":o=n.pop(),o[5]=i[2],r=n.length>0?n[n.length-1][4]:e;break;default:r.push(i)}return e}function Y(t){this.string=t,this.tail=t,this.pos=0}Y.prototype.eos=function(){return this.tail===""};Y.prototype.scan=function(e){var r=this.tail.match(e);if(!r||r.index!==0)return"";var n=r[0];return this.tail=this.tail.substring(n.length),this.pos+=n.length,n};Y.prototype.scanUntil=function(e){var r=this.tail.search(e),n;switch(r){case-1:n=this.tail,this.tail="";break;case 0:n="";break;default:n=this.tail.substring(0,r),this.tail=this.tail.substring(r)}return this.pos+=n.length,n};function V(t,e){this.view=t,this.cache={".":this.view},this.parent=e}V.prototype.push=function(e){return new V(e,this)};V.prototype.lookup=function(e){var r=this.cache,n;if(r.hasOwnProperty(e))n=r[e];else{for(var i=this,o,a,s,c=!1;i;){if(e.indexOf(".")>0)for(o=i.view,a=e.split("."),s=0;o!=null&&s<a.length;)s===a.length-1&&(c=Ke(o,a[s])||Vt(o,a[s])),o=o[a[s++]];else o=i.view[e],c=Ke(i.view,e);if(c){n=o;break}i=i.parent}r[e]=n}return pe(n)&&(n=n.call(this.view)),n};function _(){this.templateCache={_cache:{},set:function(e,r){this._cache[e]=r},get:function(e){return this._cache[e]},clear:function(){this._cache={}}}}_.prototype.clearCache=function(){typeof this.templateCache<"u"&&this.templateCache.clear()};_.prototype.parse=function(e,r){var n=this.templateCache,i=e+":"+(r||C.tags).join(":"),o=typeof n<"u",a=o?n.get(i):void 0;return a==null&&(a=Yt(e,r),o&&n.set(i,a)),a};_.prototype.render=function(e,r,n,i){var o=this.getConfigTags(i),a=this.parse(e,o),s=r instanceof V?r:new V(r,void 0);return this.renderTokens(a,s,n,e,i)};_.prototype.renderTokens=function(e,r,n,i,o){for(var a="",s,c,u,l=0,f=e.length;l<f;++l)u=void 0,s=e[l],c=s[0],c==="#"?u=this.renderSection(s,r,n,i,o):c==="^"?u=this.renderInverted(s,r,n,i,o):c===">"?u=this.renderPartial(s,r,n,o):c==="&"?u=this.unescapedValue(s,r):c==="name"?u=this.escapedValue(s,r,o):c==="text"&&(u=this.rawValue(s)),u!==void 0&&(a+=u);return a};_.prototype.renderSection=function(e,r,n,i,o){var a=this,s="",c=r.lookup(e[1]);function u(h){return a.render(h,r,n,o)}if(c){if(N(c))for(var l=0,f=c.length;l<f;++l)s+=this.renderTokens(e[4],r.push(c[l]),n,i,o);else if(typeof c=="object"||typeof c=="string"||typeof c=="number")s+=this.renderTokens(e[4],r.push(c),n,i,o);else if(pe(c)){if(typeof i!="string")throw new Error("Cannot use higher-order sections without the original template");c=c.call(r.view,i.slice(e[3],e[5]),u),c!=null&&(s+=c)}else s+=this.renderTokens(e[4],r,n,i,o);return s}};_.prototype.renderInverted=function(e,r,n,i,o){var a=r.lookup(e[1]);if(!a||N(a)&&a.length===0)return this.renderTokens(e[4],r,n,i,o)};_.prototype.indentPartial=function(e,r,n){for(var i=r.replace(/[^ \t]/g,""),o=e.split(`
`),a=0;a<o.length;a++)o[a].length&&(a>0||!n)&&(o[a]=i+o[a]);return o.join(`
`)};_.prototype.renderPartial=function(e,r,n,i){if(n){var o=this.getConfigTags(i),a=pe(n)?n(e[1]):n[e[1]];if(a!=null){var s=e[6],c=e[5],u=e[4],l=a;c==0&&u&&(l=this.indentPartial(a,u,s));var f=this.parse(l,o);return this.renderTokens(f,r,n,l,i)}}};_.prototype.unescapedValue=function(e,r){var n=r.lookup(e[1]);if(n!=null)return n};_.prototype.escapedValue=function(e,r,n){var i=this.getConfigEscape(n)||C.escape,o=r.lookup(e[1]);if(o!=null)return typeof o=="number"&&i===C.escape?String(o):i(o)};_.prototype.rawValue=function(e){return e[1]};_.prototype.getConfigTags=function(e){return N(e)?e:e&&typeof e=="object"?e.tags:void 0};_.prototype.getConfigEscape=function(e){if(e&&typeof e=="object"&&!N(e))return e.escape};var C={name:"mustache.js",version:"4.2.0",tags:["{{","}}"],clearCache:void 0,escape:void 0,parse:void 0,render:void 0,Scanner:void 0,Context:void 0,Writer:void 0,set templateCache(t){X.templateCache=t},get templateCache(){return X.templateCache}},X=new _;C.clearCache=function(){return X.clearCache()};C.parse=function(e,r){return X.parse(e,r)};C.render=function(e,r,n,i){if(typeof e!="string")throw new TypeError('Invalid template! Template should be a "string" but "'+Ht(e)+'" was given as the first argument for mustache#render(template, view, partials)');return X.render(e,r,n,i)};C.escape=Ft;C.Scanner=Y;C.Context=V;C.Writer=_;var ge=C;function ve(t,e,r){return r!==null?ge.render(r,t.properties):e===null?Object.keys(t.properties).map(i=>`${i}: ${t.properties[i]}`).join("</br>"):t.properties[e]}function je(t,e){let r=new maplibregl.Popup({closeOnClick:!1,closeButton:!1});return t.on("mouseout",n=>r.remove()),({coordinate:n,object:i})=>{i?(r.setHTML(ge.render(e,i)).setLngLat(n),r.addTo(t)):r.remove()}}function We(t){return{center:t.getCenter(),zoom:t.getZoom(),bounds:t.getBounds(),bearing:t.getBearing(),pitch:t.getPitch()}}var tr=new He;maplibregl.addProtocol("pmtiles",tr.tile);maplibregl.LayerSwitcherControl=G;maplibregl.InfoBoxControl=q;function rr(){if(typeof deck>"u")return;let t=new deck.JSONConfiguration({classes:deck});return new deck.JSONConverter({configuration:t})}typeof MapboxDraw<"u"&&(MapboxDraw.constants.classes.CONTROL_BASE="maplibregl-ctrl",MapboxDraw.constants.classes.CONTROL_PREFIX="maplibregl-ctrl-",MapboxDraw.constants.classes.CONTROL_GROUP="maplibregl-ctrl-group");var K=class{constructor(e){this._id=e.container,this._map=new maplibregl.Map(e),this._map.on("mouseover",()=>{this._map.getCanvas().style.cursor="pointer"}),this._map.on("mouseout",()=>{this._map.getCanvas().style.cursor=""}),this._JSONConverter=rr()}getMap(){return this._map}applyMapMethod(e,r){this._map[e](...r)}addControl(e,r,n){this._map.addControl(new maplibregl[e](r),n)}addMarker({lngLat:e,popup:r,options:n}){let i=new maplibregl.Marker(n).setLngLat(e);if(r){let o=new maplibregl.Popup(r.options).setHTML(r.text);i.setPopup(o)}i.addTo(this._map)}addLayer(e,r){this._map.addLayer(e,r),typeof Shiny<"u"&&this._map.on("click",e.id,n=>{console.log(n,n.features[0]);let i=`${this._id}_feature_clicked`,o={props:n.features[0].properties,layer_id:e.id};console.log(i,o),Shiny.onInputChange(i,o)})}addPopup(e,r=null,n=null){let i={closeButton:!1},o=new maplibregl.Popup(i);this._map.on("click",e,a=>{let s=a.features[0],c=ve(s,r,n);o.setLngLat(a.lngLat).setHTML(c).addTo(this._map)})}addTooltip(e,r=null,n=null){let i={closeButton:!1,closeOnClick:!1},o=new maplibregl.Popup(i);this._map.on("mousemove",e,a=>{let s=a.features[0],c=ve(s,r,n);o.setLngLat(a.lngLat).setHTML(c).addTo(this._map)}),this._map.on("mouseleave",e,()=>{o.remove()})}setSourceData(e,r){this._map.getSource(e).setData(r)}addDeckOverlay(e,r=null){if(typeof this._JSONConverter>"u"){console.log("deck or JSONConverter is undefined");return}let n=this._convertDeckLayers(e,r);this._deckOverlay=new deck.MapboxOverlay({interleaved:!0,layers:n}),this._map.addControl(this._deckOverlay)}_convertDeckLayers(e,r=null){return e.map(n=>{let i=r&&typeof r=="object"?r[n.id]:r,o=je(this._map,i);return n.onHover=({layer:a,coordinate:s,object:c})=>{if(i&&o({coordinate:s,object:c}),typeof Shiny<"u"){let u=`${this._id}_layer_${n.id}`;Shiny.onInputChange(u,c)}},this._JSONConverter.convert(n)})}setDeckLayers(e,r=null){console.log("Updating Deck.GL layers");let n=this._convertDeckLayers(e,r);this._deckOverlay.setProps({layers:n})}addMapboxDraw(e,r,n=null){let i=new MapboxDraw(e);this._map.addControl(i,r),n&&i.add(n),typeof Shiny<"u"&&this._map.on("draw.selectionchange",o=>{let a=`${this._id}_draw_features_selected`,s={features:o.features,random:Math.random()};console.log(a,s),Shiny.onInputChange(a,s)})}render(e){e.forEach(([r,n])=>{if(["addLayer","addPopup","addTooltip","addMarker","addPopup","addControl","setSourceData","addDeckOverlay","setDeckLayers","addMapboxDraw"].includes(r)){console.log("Custom method",r,n),this[r](...n);return}console.log("Map method",r),this.applyMapMethod(r,n)})}};var nr="0.2.6.1";console.log("py-maplibregl",nr);typeof Shiny>"u"&&(window.pymaplibregl=function({mapOptions:t,calls:e}){let r="pymaplibregl",n=document.getElementById(r),i=new K(Object.assign({container:n.id},t));i.getMap().on("load",()=>{i.render(e)})});if(typeof Shiny<"u"){class t extends Shiny.OutputBinding{find(r){return r.find(".shiny-maplibregl-output")}renderValue(r,n){console.log("id:",r.id,"payload:",n);let i=window._maplibreWidget=new K(Object.assign({container:r.id},n.mapData.mapOptions)),o=i.getMap();o.on("load",()=>{i.render(n.mapData.calls)}),o.on("click",s=>{let c=`${r.id}_clicked`,u={coords:s.lngLat,point:s.point};console.log(c,u),Shiny.onInputChange(c,u)});for(let s of["load","zoomend","moveend"])o.on(s,c=>{let u=`${r.id}_view_state`;Shiny.onInputChange(u,We(o))});let a=`pymaplibregl-${r.id}`;console.log(a),Shiny.addCustomMessageHandler(a,({id:s,calls:c})=>{console.log(s,c),i.render(c)})}}Shiny.outputBindings.register(new t,"shiny-maplibregl-output")}})();
/*! Bundled license information:
mustache/mustache.mjs:
(*!
* mustache.js - Logic-less {{mustache}} templates with JavaScript
* http://github.com/janl/mustache.js
*)
*/
// ...
(() => {
var data = {"mapOptions": {"bearing": 0, "center": [0, 20], "pitch": 0, "style": "https://tiles.openfreemap.org/styles/positron", "zoom": 1}, "calls": [["addControl", ["NavigationControl", {"showCompass": true, "showZoom": true, "visualizePitch": false}, "top-right"]], ["addControl", ["FullscreenControl", {}, "top-right"]], ["addControl", ["ScaleControl", {"unit": "metric"}, "bottom-left"]], ["addLayer", [{"id": "geojson", "type": "fill", "paint": {"fill-color": "#3388ff", "fill-opacity": 0.8, "fill-outline-color": "#ffffff"}, "source": {"data": {"type": "FeatureCollection", "features": [{"id": "0", "type": "Feature", "properties": {"area_id": 3569, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Best", "grade": "A", "label": "A1", "residential": true, "commercial": false, "industrial": false, "fill": "#76a865"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.9, 41.36885], [-72.90325, 41.36999], [-72.90644, 41.37108], [-72.90804, 41.36644], [-72.90102, 41.36493], [-72.89904, 41.36851], [-72.9, 41.36885]]]]}, "bbox": [-72.90804, 41.36493, -72.89904, 41.37108]}, {"id": "1", "type": "Feature", "properties": {"area_id": 3568, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Best", "grade": "A", "label": "A2", "residential": true, "commercial": false, "industrial": false, "fill": "#76a865"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.89401, 41.36331], [-72.89256, 41.36574], [-72.89904, 41.36851], [-72.90102, 41.36493], [-72.89401, 41.36331]]]]}, "bbox": [-72.90102, 41.36331, -72.89256, 41.36851]}, {"id": "2", "type": "Feature", "properties": {"area_id": 3566, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Best", "grade": "A", "label": "A3", "residential": true, "commercial": false, "industrial": false, "fill": "#76a865"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.90981, 41.35949], [-72.90284, 41.35795], [-72.90178, 41.36076], [-72.90132, 41.36172], [-72.90069, 41.36266], [-72.90062, 41.36305], [-72.90078, 41.36333], [-72.90073, 41.36396], [-72.90102, 41.36493], [-72.90804, 41.36644], [-72.90644, 41.37108], [-72.90768, 41.37158], [-72.90794, 41.37081], [-72.90844, 41.37044], [-72.90842, 41.36985], [-72.90868, 41.36905], [-72.90935, 41.3684], [-72.91134, 41.36756], [-72.9125, 41.36733], [-72.91544, 41.36673], [-72.91561, 41.36632], [-72.91753, 41.36557], [-72.91818, 41.36519], [-72.91832, 41.36462], [-72.91839, 41.3642], [-72.91383, 41.36306], [-72.91114, 41.36279], [-72.90932, 41.36237], [-72.9096, 41.35969], [-72.90981, 41.35949]]]]}, "bbox": [-72.91839, 41.35795, -72.90062, 41.37158]}, {"id": "3", "type": "Feature", "properties": {"area_id": 3567, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Best", "grade": "A", "label": "A4", "residential": true, "commercial": false, "industrial": false, "fill": "#76a865"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.90284, 41.35795], [-72.8999, 41.35712], [-72.89788, 41.36147], [-72.89564, 41.36069], [-72.89401, 41.36331], [-72.90102, 41.36493], [-72.90073, 41.36396], [-72.90078, 41.36333], [-72.90062, 41.36305], [-72.90069, 41.36266], [-72.90132, 41.36172], [-72.90178, 41.36076], [-72.90284, 41.35795]]]]}, "bbox": [-72.90284, 41.35712, -72.89401, 41.36493]}, {"id": "4", "type": "Feature", "properties": {"area_id": 3564, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Best", "grade": "A", "label": "A5", "residential": true, "commercial": false, "industrial": false, "fill": "#76a865"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.89801, 41.3493], [-72.89883, 41.34937], [-72.9027, 41.35013], [-72.90569, 41.34575], [-72.90976, 41.34024], [-72.90956, 41.33932], [-72.90925, 41.33868], [-72.90892, 41.33903], [-72.90857, 41.33906], [-72.90721, 41.33878], [-72.90567, 41.34024], [-72.90249, 41.33966], [-72.90192, 41.33845], [-72.89924, 41.34017], [-72.89837, 41.34152], [-72.90214, 41.34213], [-72.90237, 41.3438], [-72.90121, 41.34359], [-72.90016, 41.34354], [-72.89875, 41.34364], [-72.89792, 41.34374], [-72.89748, 41.34626], [-72.89735, 41.34745], [-72.89731, 41.34854], [-72.89758, 41.34911], [-72.89801, 41.3493]]]]}, "bbox": [-72.90976, 41.33845, -72.89731, 41.35013]}, {"id": "5", "type": "Feature", "properties": {"area_id": 3557, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Best", "grade": "A", "label": "A6", "residential": true, "commercial": false, "industrial": false, "fill": "#76a865"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.91231, 41.33334], [-72.91188, 41.33411], [-72.91159, 41.33406], [-72.91112, 41.3344], [-72.91074, 41.33492], [-72.91058, 41.33552], [-72.9105, 41.33682], [-72.91141, 41.33712], [-72.91171, 41.33737], [-72.91208, 41.33786], [-72.91202, 41.33821], [-72.91193, 41.33873], [-72.91209, 41.33904], [-72.91229, 41.33949], [-72.91221, 41.34001], [-72.91343, 41.34017], [-72.91762, 41.34071], [-72.91881, 41.34055], [-72.92014, 41.34026], [-72.92042, 41.33565], [-72.92105, 41.33392], [-72.91428, 41.3335], [-72.91361, 41.33346], [-72.91231, 41.33334]]]]}, "bbox": [-72.92105, 41.33334, -72.9105, 41.34071]}, {"id": "6", "type": "Feature", "properties": {"area_id": 3546, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Best", "grade": "A", "label": "A7", "residential": true, "commercial": false, "industrial": false, "fill": "#76a865"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.97003, 41.32192], [-72.97004, 41.32233], [-72.96973, 41.32306], [-72.96901, 41.32406], [-72.9686, 41.3248], [-72.96831, 41.32637], [-72.96816, 41.32683], [-72.96863, 41.32732], [-72.97228, 41.32704], [-72.9732, 41.32706], [-72.97594, 41.32787], [-72.97785, 41.32377], [-72.97003, 41.32192]]]]}, "bbox": [-72.97785, 41.32192, -72.96816, 41.32787]}, {"id": "7", "type": "Feature", "properties": {"area_id": 3556, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Best", "grade": "A", "label": "A8", "residential": true, "commercial": false, "industrial": false, "fill": "#76a865"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.91361, 41.33346], [-72.91428, 41.3335], [-72.92105, 41.33392], [-72.92214, 41.33118], [-72.92254, 41.32974], [-72.92288, 41.32673], [-72.92301, 41.32619], [-72.92377, 41.32448], [-72.92437, 41.32113], [-72.92451, 41.32039], [-72.91997, 41.31976], [-72.91668, 41.32694], [-72.91483, 41.33114], [-72.91361, 41.33346]], [[-72.92097, 41.32376], [-72.92059, 41.32154], [-72.92298, 41.32177], [-72.92303, 41.32415], [-72.9218, 41.32693], [-72.92167, 41.32826], [-72.91908, 41.32812], [-72.92097, 41.32376]]]]}, "bbox": [-72.92451, 41.31976, -72.91361, 41.33392]}, {"id": "8", "type": "Feature", "properties": {"area_id": 3570, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Still Desirable", "grade": "B", "label": "B1", "residential": true, "commercial": false, "industrial": false, "fill": "#7cb5bd"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.9, 41.36885], [-72.89688, 41.37502], [-72.90509, 41.37494], [-72.90644, 41.37108], [-72.90325, 41.36999], [-72.9, 41.36885]]]]}, "bbox": [-72.90644, 41.36885, -72.89688, 41.37502]}, {"id": "9", "type": "Feature", "properties": {"area_id": 3576, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Still Desirable", "grade": "B", "label": "B10", "residential": true, "commercial": false, "industrial": false, "fill": "#7cb5bd"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.86698, 41.2815], [-72.86971, 41.28222], [-72.87509, 41.2839], [-72.87617, 41.2807], [-72.87759, 41.27824], [-72.87921, 41.27576], [-72.88176, 41.2723], [-72.88222, 41.2715], [-72.88121, 41.27142], [-72.88041, 41.2713], [-72.87978, 41.27105], [-72.87881, 41.27005], [-72.87708, 41.2696], [-72.87537, 41.26935], [-72.87185, 41.2693], [-72.87033, 41.27212], [-72.86733, 41.27801], [-72.86708, 41.27844], [-72.86698, 41.2815]]]]}, "bbox": [-72.88222, 41.2693, -72.86698, 41.2839]}, {"id": "10", "type": "Feature", "properties": {"area_id": 3555, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Still Desirable", "grade": "B", "label": "B2", "residential": true, "commercial": false, "industrial": false, "fill": "#7cb5bd"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.91839, 41.3642], [-72.91836, 41.36351], [-72.91821, 41.36297], [-72.91765, 41.36245], [-72.91704, 41.36237], [-72.91655, 41.36221], [-72.91638, 41.36157], [-72.91638, 41.36127], [-72.91586, 41.36119], [-72.91615, 41.36013], [-72.91722, 41.35912], [-72.91696, 41.35877], [-72.91618, 41.35826], [-72.9158, 41.35759], [-72.9151, 41.35701], [-72.91276, 41.35537], [-72.91169, 41.35417], [-72.911, 41.35415], [-72.91077, 41.35394], [-72.91075, 41.35366], [-72.91094, 41.35345], [-72.91094, 41.35319], [-72.91081, 41.35303], [-72.91018, 41.35291], [-72.90827, 41.35274], [-72.90759, 41.35639], [-72.91019, 41.35699], [-72.90981, 41.35949], [-72.9096, 41.35969], [-72.90932, 41.36237], [-72.91114, 41.36279], [-72.91383, 41.36306], [-72.91839, 41.3642]]]]}, "bbox": [-72.91839, 41.35274, -72.90759, 41.3642]}, {"id": "11", "type": "Feature", "properties": {"area_id": 3554, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Still Desirable", "grade": "B", "label": "B3", "residential": true, "commercial": false, "industrial": false, "fill": "#7cb5bd"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.92014, 41.34026], [-72.91881, 41.34055], [-72.91762, 41.34071], [-72.91343, 41.34017], [-72.91221, 41.34001], [-72.91187, 41.34034], [-72.91112, 41.34094], [-72.91167, 41.34136], [-72.91193, 41.34191], [-72.91152, 41.34213], [-72.91006, 41.34184], [-72.91101, 41.34449], [-72.91199, 41.34693], [-72.91232, 41.34799], [-72.91281, 41.34855], [-72.91271, 41.34971], [-72.9128, 41.35074], [-72.91275, 41.35123], [-72.91244, 41.35176], [-72.91268, 41.35284], [-72.91302, 41.35322], [-72.91338, 41.35391], [-72.91393, 41.35455], [-72.9144, 41.35488], [-72.91486, 41.35512], [-72.91529, 41.35517], [-72.91587, 41.35543], [-72.91668, 41.3561], [-72.91732, 41.35618], [-72.91795, 41.35441], [-72.91818, 41.35429], [-72.91872, 41.35462], [-72.91872, 41.35541], [-72.91843, 41.35586], [-72.91849, 41.3565], [-72.91885, 41.35711], [-72.91937, 41.35717], [-72.92024, 41.35661], [-72.92118, 41.35634], [-72.92096, 41.35539], [-72.92101, 41.35505], [-72.92153, 41.35438], [-72.92234, 41.35372], [-72.92275, 41.35283], [-72.9213, 41.35194], [-72.91743, 41.34849], [-72.91599, 41.34556], [-72.92643, 41.34373], [-72.92612, 41.34175], [-72.92726, 41.34154], [-72.92732, 41.34082], [-72.92659, 41.34062], [-72.92289, 41.34046], [-72.92014, 41.34026]]]]}, "bbox": [-72.92732, 41.34001, -72.91006, 41.35717]}, {"id": "12", "type": "Feature", "properties": {"area_id": 3545, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Still Desirable", "grade": "B", "label": "B4", "residential": true, "commercial": false, "industrial": false, "fill": "#7cb5bd"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.95864, 41.32583], [-72.95945, 41.32648], [-72.95992, 41.32653], [-72.96181, 41.32716], [-72.96429, 41.3278], [-72.96594, 41.32804], [-72.9678, 41.32849], [-72.96875, 41.32884], [-72.97156, 41.33003], [-72.97417, 41.33163], [-72.97585, 41.33316], [-72.97711, 41.33207], [-72.97902, 41.3304], [-72.97997, 41.32934], [-72.98003, 41.32907], [-72.97594, 41.32787], [-72.9732, 41.32706], [-72.97228, 41.32704], [-72.96863, 41.32732], [-72.96816, 41.32683], [-72.96831, 41.32637], [-72.9686, 41.3248], [-72.96901, 41.32406], [-72.96973, 41.32306], [-72.97004, 41.32233], [-72.97003, 41.32192], [-72.97, 41.31991], [-72.97044, 41.319], [-72.9708, 41.3182], [-72.97101, 41.31711], [-72.97084, 41.31472], [-72.9692, 41.31437], [-72.96872, 41.31511], [-72.96774, 41.31484], [-72.96398, 41.31417], [-72.96358, 41.31551], [-72.95921, 41.31472], [-72.95966, 41.31548], [-72.95996, 41.31653], [-72.96014, 41.3175], [-72.96018, 41.3185], [-72.9599, 41.31932], [-72.95887, 41.32163], [-72.95894, 41.3225], [-72.95926, 41.32341], [-72.95971, 41.32373], [-72.95911, 41.32526], [-72.95864, 41.32583]]]]}, "bbox": [-72.98003, 41.31417, -72.95864, 41.33316]}, {"id": "13", "type": "Feature", "properties": {"area_id": 3549, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Still Desirable", "grade": "B", "label": "B5", "residential": true, "commercial": false, "industrial": false, "fill": "#7cb5bd"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.94138, 41.32064], [-72.94053, 41.32195], [-72.94022, 41.32292], [-72.9409, 41.32459], [-72.94107, 41.32676], [-72.94141, 41.32777], [-72.94238, 41.32882], [-72.94445, 41.33035], [-72.94883, 41.32294], [-72.94927, 41.32213], [-72.94938, 41.32109], [-72.94915, 41.31987], [-72.94893, 41.319], [-72.94595, 41.31795], [-72.94379, 41.32158], [-72.94138, 41.32064]]]]}, "bbox": [-72.94938, 41.31795, -72.94022, 41.33035]}, {"id": "14", "type": "Feature", "properties": {"area_id": 3558, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Still Desirable", "grade": "B", "label": "B6", "residential": true, "commercial": false, "industrial": false, "fill": "#7cb5bd"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.91257, 41.32536], [-72.91045, 41.33043], [-72.91207, 41.33057], [-72.91159, 41.3318], [-72.91231, 41.33334], [-72.91361, 41.33346], [-72.91483, 41.33114], [-72.91668, 41.32694], [-72.91997, 41.31976], [-72.91892, 41.31962], [-72.91696, 41.31934], [-72.91525, 41.32297], [-72.91414, 41.32575], [-72.91257, 41.32536]]]]}, "bbox": [-72.91997, 41.31934, -72.91045, 41.33346]}, {"id": "15", "type": "Feature", "properties": {"area_id": 3577, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Still Desirable", "grade": "B", "label": "B7", "residential": true, "commercial": false, "industrial": false, "fill": "#7cb5bd"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.89272, 41.26809], [-72.89161, 41.26906], [-72.89003, 41.27126], [-72.88874, 41.27371], [-72.88998, 41.27388], [-72.89382, 41.27423], [-72.89526, 41.27469], [-72.89416, 41.27798], [-72.89082, 41.27771], [-72.89025, 41.27964], [-72.89005, 41.28067], [-72.89003, 41.28132], [-72.8932, 41.28172], [-72.8985, 41.28223], [-72.89924, 41.28049], [-72.89798, 41.28026], [-72.8986, 41.27816], [-72.90078, 41.27256], [-72.90153, 41.27265], [-72.90128, 41.2691], [-72.90119, 41.26885], [-72.89686, 41.26824], [-72.89315, 41.26772], [-72.89272, 41.26809]]]]}, "bbox": [-72.90153, 41.26772, -72.88874, 41.28223]}, {"id": "16", "type": "Feature", "properties": {"area_id": 3537, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Still Desirable", "grade": "B", "label": "B8", "residential": true, "commercial": false, "industrial": false, "fill": "#7cb5bd"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.94927, 41.2685], [-72.94442, 41.26993], [-72.94047, 41.27153], [-72.94018, 41.27183], [-72.93621, 41.27265], [-72.93658, 41.27323], [-72.9365, 41.2741], [-72.93664, 41.27448], [-72.93699, 41.27492], [-72.93705, 41.2754], [-72.93713, 41.27618], [-72.93662, 41.27685], [-72.9375, 41.27788], [-72.93811, 41.27795], [-72.93798, 41.27839], [-72.9382, 41.2788], [-72.9389, 41.27894], [-72.93909, 41.27912], [-72.93901, 41.27926], [-72.93861, 41.27951], [-72.93855, 41.27983], [-72.93881, 41.28003], [-72.94012, 41.27962], [-72.94045, 41.28126], [-72.94577, 41.28436], [-72.94699, 41.28336], [-72.94706, 41.28329], [-72.95039, 41.28014], [-72.95448, 41.2766], [-72.95351, 41.27527], [-72.95289, 41.27463], [-72.95052, 41.27185], [-72.95032, 41.27133], [-72.94927, 41.2685]]]]}, "bbox": [-72.95448, 41.2685, -72.93621, 41.28436]}, {"id": "17", "type": "Feature", "properties": {"area_id": 3538, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Still Desirable", "grade": "B", "label": "B9", "residential": true, "commercial": false, "industrial": false, "fill": "#7cb5bd"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.94927, 41.2685], [-72.95032, 41.27133], [-72.95052, 41.27185], [-72.95289, 41.27463], [-72.95351, 41.27527], [-72.95448, 41.2766], [-72.95765, 41.27377], [-72.96083, 41.27177], [-72.96022, 41.27156], [-72.95995, 41.27119], [-72.95999, 41.27064], [-72.95953, 41.26898], [-72.95931, 41.26768], [-72.95893, 41.26548], [-72.95851, 41.26215], [-72.95822, 41.2609], [-72.95358, 41.26161], [-72.95373, 41.2624], [-72.95257, 41.2623], [-72.95084, 41.26193], [-72.95075, 41.26228], [-72.94783, 41.2626], [-72.94927, 41.2685]]]]}, "bbox": [-72.96083, 41.2609, -72.94783, 41.2766]}, {"id": "18", "type": "Feature", "properties": {"area_id": 3571, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C1", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.87187, 41.34507], [-72.8709, 41.34472], [-72.86903, 41.34475], [-72.867, 41.34509], [-72.86495, 41.34557], [-72.8631, 41.3464], [-72.86215, 41.3472], [-72.86076, 41.34796], [-72.86023, 41.34841], [-72.85932, 41.35023], [-72.85938, 41.35144], [-72.85974, 41.35275], [-72.85991, 41.35425], [-72.85401, 41.36132], [-72.85291, 41.36297], [-72.85282, 41.36458], [-72.85341, 41.36615], [-72.85413, 41.36658], [-72.86175, 41.35723], [-72.86519, 41.35317], [-72.87187, 41.34507]]]]}, "bbox": [-72.87187, 41.34472, -72.85282, 41.36658]}, {"id": "19", "type": "Feature", "properties": {"area_id": 3565, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C10", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.89891, 41.32746], [-72.89745, 41.32513], [-72.89685, 41.32516], [-72.8963, 41.32416], [-72.89498, 41.32457], [-72.89492, 41.32835], [-72.89891, 41.32746]]]]}, "bbox": [-72.89891, 41.32416, -72.89492, 41.32835]}, {"id": "20", "type": "Feature", "properties": {"area_id": 3562, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C11", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.89441, 41.30444], [-72.89188, 41.30462], [-72.89114, 41.30446], [-72.89088, 41.30537], [-72.89078, 41.3062], [-72.8904, 41.30639], [-72.89045, 41.30671], [-72.89024, 41.30689], [-72.88952, 41.30746], [-72.88958, 41.30797], [-72.88899, 41.30853], [-72.88869, 41.30903], [-72.89066, 41.30898], [-72.89541, 41.30872], [-72.89441, 41.30444]]], [[[-72.89547, 41.30971], [-72.88867, 41.31011], [-72.8889, 41.31121], [-72.88895, 41.31191], [-72.88872, 41.31221], [-72.88816, 41.31265], [-72.88777, 41.3131], [-72.88721, 41.31522], [-72.88713, 41.31559], [-72.88762, 41.31835], [-72.89125, 41.32058], [-72.89486, 41.31976], [-72.89787, 41.31884], [-72.89583, 41.31066], [-72.89547, 41.30971]]]]}, "bbox": [-72.89787, 41.30444, -72.88713, 41.32058]}, {"id": "21", "type": "Feature", "properties": {"area_id": 3572, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C12", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.87295, 41.32072], [-72.86656, 41.33156], [-72.8669, 41.33226], [-72.86662, 41.33428], [-72.86616, 41.33512], [-72.87314, 41.33446], [-72.88588, 41.3241], [-72.87715, 41.32088], [-72.87679, 41.32076], [-72.87424, 41.3199], [-72.87339, 41.32], [-72.87312, 41.32043], [-72.87295, 41.32072]]]]}, "bbox": [-72.88588, 41.3199, -72.86616, 41.33512]}, {"id": "22", "type": "Feature", "properties": {"area_id": 3573, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C13", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.88775, 41.28581], [-72.88889, 41.28677], [-72.88816, 41.2872], [-72.88749, 41.28795], [-72.88718, 41.28855], [-72.88662, 41.28921], [-72.88594, 41.2902], [-72.88571, 41.29064], [-72.88552, 41.29161], [-72.88544, 41.29247], [-72.88534, 41.29466], [-72.88518, 41.29559], [-72.88733, 41.2972], [-72.88545, 41.30418], [-72.8831, 41.30389], [-72.87975, 41.30387], [-72.87895, 41.30406], [-72.87804, 41.30486], [-72.87735, 41.30599], [-72.87561, 41.30927], [-72.8752, 41.31022], [-72.87491, 41.31408], [-72.87364, 41.31455], [-72.87273, 41.31538], [-72.87262, 41.31658], [-72.87207, 41.31813], [-72.87176, 41.31875], [-72.87179, 41.32025], [-72.87295, 41.32072], [-72.87312, 41.32043], [-72.87339, 41.32], [-72.87424, 41.3199], [-72.87679, 41.32076], [-72.8804, 41.3122], [-72.88478, 41.30939], [-72.88586, 41.3086], [-72.88672, 41.30779], [-72.88896, 41.30383], [-72.88776, 41.30343], [-72.88892, 41.29995], [-72.89054, 41.30016], [-72.89141, 41.30037], [-72.89231, 41.30095], [-72.89364, 41.29942], [-72.89398, 41.29892], [-72.89407, 41.29795], [-72.89385, 41.29616], [-72.89393, 41.29594], [-72.89421, 41.29517], [-72.89375, 41.29415], [-72.89356, 41.29326], [-72.8943, 41.29175], [-72.89544, 41.2894], [-72.89592, 41.28818], [-72.89674, 41.28612], [-72.8985, 41.28223], [-72.8932, 41.28172], [-72.89003, 41.28132], [-72.88989, 41.2813], [-72.88866, 41.2807], [-72.88759, 41.2793], [-72.88775, 41.28581]]]]}, "bbox": [-72.8985, 41.2793, -72.87176, 41.32076]}, {"id": "23", "type": "Feature", "properties": {"area_id": 3578, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C14", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.89272, 41.26809], [-72.89315, 41.26772], [-72.89686, 41.26824], [-72.89688, 41.26787], [-72.89835, 41.26802], [-72.89862, 41.26762], [-72.89791, 41.2664], [-72.89731, 41.26559], [-72.89623, 41.26431], [-72.89504, 41.26307], [-72.89491, 41.26246], [-72.89447, 41.26185], [-72.89379, 41.2607], [-72.89366, 41.25983], [-72.89336, 41.25891], [-72.89323, 41.25756], [-72.89359, 41.25698], [-72.89414, 41.25648], [-72.89607, 41.25632], [-72.89812, 41.25564], [-72.89998, 41.25479], [-72.90109, 41.25409], [-72.89962, 41.25254], [-72.89895, 41.25247], [-72.89798, 41.25208], [-72.8974, 41.25172], [-72.89701, 41.25092], [-72.89681, 41.25042], [-72.8944, 41.25083], [-72.89178, 41.25209], [-72.89129, 41.25262], [-72.89011, 41.25292], [-72.88971, 41.25331], [-72.88787, 41.25565], [-72.88706, 41.25639], [-72.88759, 41.25744], [-72.88798, 41.25779], [-72.88905, 41.25868], [-72.88943, 41.25929], [-72.88997, 41.25995], [-72.89015, 41.26097], [-72.88993, 41.26122], [-72.89003, 41.26196], [-72.89028, 41.26319], [-72.89014, 41.26417], [-72.89031, 41.26564], [-72.8908, 41.26605], [-72.89141, 41.26654], [-72.89272, 41.26809]]]]}, "bbox": [-72.90109, 41.25042, -72.88706, 41.26824]}, {"id": "24", "type": "Feature", "properties": {"area_id": 3539, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C15", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.94706, 41.28329], [-72.95773, 41.28912], [-72.95802, 41.28949], [-72.9581, 41.29144], [-72.95801, 41.29582], [-72.95861, 41.2967], [-72.95907, 41.29664], [-72.95943, 41.2972], [-72.95976, 41.29707], [-72.96328, 41.29571], [-72.96219, 41.29335], [-72.96018, 41.29405], [-72.96012, 41.29264], [-72.95999, 41.28822], [-72.95963, 41.28696], [-72.95822, 41.28269], [-72.95805, 41.28172], [-72.95793, 41.28085], [-72.95752, 41.28029], [-72.95448, 41.2766], [-72.95039, 41.28014], [-72.94706, 41.28329]]]]}, "bbox": [-72.96328, 41.2766, -72.94706, 41.2972]}, {"id": "25", "type": "Feature", "properties": {"area_id": 3536, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C16", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.93746, 41.26145], [-72.93853, 41.26468], [-72.93687, 41.26605], [-72.93545, 41.26696], [-72.93366, 41.2653], [-72.93202, 41.26405], [-72.9309, 41.26456], [-72.93091, 41.26532], [-72.93057, 41.26555], [-72.92954, 41.26662], [-72.93014, 41.26663], [-72.93024, 41.26727], [-72.93087, 41.26873], [-72.93253, 41.26982], [-72.93386, 41.27058], [-72.93482, 41.27141], [-72.93585, 41.27206], [-72.93621, 41.27265], [-72.94018, 41.27183], [-72.94047, 41.27153], [-72.94442, 41.26993], [-72.94927, 41.2685], [-72.94783, 41.2626], [-72.9466, 41.26273], [-72.94578, 41.25996], [-72.94516, 41.26001], [-72.9425, 41.2602], [-72.93746, 41.26145]]]]}, "bbox": [-72.94927, 41.25996, -72.92954, 41.27265]}, {"id": "26", "type": "Feature", "properties": {"area_id": 3535, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C17", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.94578, 41.25996], [-72.9466, 41.26273], [-72.94783, 41.2626], [-72.95075, 41.26228], [-72.95084, 41.26193], [-72.95257, 41.2623], [-72.95373, 41.2624], [-72.95358, 41.26161], [-72.95822, 41.2609], [-72.95735, 41.25554], [-72.96168, 41.25315], [-72.96212, 41.25331], [-72.96159, 41.25588], [-72.96128, 41.25687], [-72.96126, 41.25774], [-72.96201, 41.25852], [-72.96309, 41.25902], [-72.96376, 41.25925], [-72.96408, 41.25944], [-72.96609, 41.25804], [-72.96469, 41.25678], [-72.96459, 41.25444], [-72.96575, 41.25518], [-72.96657, 41.25557], [-72.96708, 41.25617], [-72.96752, 41.25521], [-72.96853, 41.25584], [-72.96988, 41.25667], [-72.97243, 41.25415], [-72.97385, 41.25255], [-72.97528, 41.25128], [-72.97726, 41.24918], [-72.9783, 41.24792], [-72.97885, 41.24702], [-72.98157, 41.24373], [-72.9783, 41.24237], [-72.97244, 41.23954], [-72.97324, 41.23817], [-72.97414, 41.23689], [-72.97558, 41.23619], [-72.97688, 41.23649], [-72.98125, 41.23725], [-72.98473, 41.23792], [-72.98659, 41.2382], [-72.9879, 41.2382], [-72.98853, 41.23757], [-72.99321, 41.23119], [-72.98739, 41.23109], [-72.98749, 41.23233], [-72.98672, 41.23329], [-72.98712, 41.23392], [-72.98718, 41.23471], [-72.98684, 41.23545], [-72.98596, 41.23561], [-72.98511, 41.23546], [-72.98458, 41.23569], [-72.98374, 41.23555], [-72.98123, 41.23452], [-72.98058, 41.23433], [-72.97965, 41.23431], [-72.97876, 41.2332], [-72.97775, 41.23288], [-72.97663, 41.23293], [-72.97515, 41.23322], [-72.97471, 41.23381], [-72.97385, 41.23466], [-72.97151, 41.23699], [-72.97142, 41.23802], [-72.97098, 41.23951], [-72.97054, 41.24074], [-72.97018, 41.24271], [-72.96904, 41.24401], [-72.96701, 41.24539], [-72.96438, 41.24677], [-72.96332, 41.24785], [-72.9628, 41.25076], [-72.96229, 41.25165], [-72.96073, 41.25242], [-72.96087, 41.25185], [-72.95959, 41.25183], [-72.95864, 41.25175], [-72.9579, 41.25215], [-72.95649, 41.25188], [-72.95661, 41.25268], [-72.95661, 41.25342], [-72.95609, 41.25388], [-72.95446, 41.25424], [-72.95358, 41.25504], [-72.9544, 41.25681], [-72.951, 41.25908], [-72.95083, 41.25951], [-72.94578, 41.25996]]]]}, "bbox": [-72.99321, 41.23109, -72.94578, 41.26273]}, {"id": "27", "type": "Feature", "properties": {"area_id": 3580, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C18", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.86362, 41.32967], [-72.86462, 41.32758], [-72.86934, 41.31636], [-72.86264, 41.3146], [-72.86249, 41.31426], [-72.86318, 41.3127], [-72.86238, 41.31254], [-72.86265, 41.31124], [-72.8604, 41.31072], [-72.85986, 41.31049], [-72.85924, 41.31011], [-72.85589, 41.31419], [-72.85595, 41.31593], [-72.85589, 41.31717], [-72.85576, 41.31834], [-72.85554, 41.3196], [-72.85522, 41.32066], [-72.85475, 41.32227], [-72.85639, 41.32199], [-72.85926, 41.32177], [-72.85866, 41.32288], [-72.85776, 41.32517], [-72.85746, 41.32528], [-72.85618, 41.32505], [-72.85534, 41.32763], [-72.86362, 41.32967]]]]}, "bbox": [-72.86934, 41.31011, -72.85475, 41.32967]}, {"id": "28", "type": "Feature", "properties": {"area_id": 3575, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C19", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.88759, 41.2793], [-72.88689, 41.27907], [-72.88574, 41.2789], [-72.88494, 41.27894], [-72.88394, 41.27927], [-72.88233, 41.27875], [-72.88237, 41.27829], [-72.88294, 41.27751], [-72.87921, 41.27576], [-72.87759, 41.27824], [-72.87617, 41.2807], [-72.87509, 41.2839], [-72.86971, 41.28222], [-72.86698, 41.2815], [-72.86708, 41.28375], [-72.87563, 41.28664], [-72.88775, 41.28581], [-72.88759, 41.2793]]]]}, "bbox": [-72.88775, 41.27576, -72.86698, 41.28664]}, {"id": "29", "type": "Feature", "properties": {"area_id": 3553, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C2", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.93474, 41.34301], [-72.93402, 41.34588], [-72.93144, 41.35115], [-72.92898, 41.35047], [-72.92519, 41.35632], [-72.92121, 41.36248], [-72.91913, 41.36594], [-72.92271, 41.36721], [-72.92346, 41.36625], [-72.92529, 41.36708], [-72.92745, 41.36423], [-72.92873, 41.36451], [-72.93176, 41.36066], [-72.93175, 41.35939], [-72.93207, 41.35856], [-72.93257, 41.35794], [-72.93384, 41.35714], [-72.93515, 41.35679], [-72.93685, 41.35654], [-72.93585, 41.35249], [-72.94143, 41.35192], [-72.94251, 41.35252], [-72.94468, 41.34874], [-72.94491, 41.34818], [-72.9459, 41.34637], [-72.94391, 41.34554], [-72.94121, 41.34553], [-72.94064, 41.3438], [-72.94077, 41.34308], [-72.93474, 41.34301]]]]}, "bbox": [-72.9459, 41.34301, -72.91913, 41.36721]}, {"id": "30", "type": "Feature", "properties": {"area_id": 3579, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C20", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.87222, 41.26694], [-72.87284, 41.26284], [-72.87292, 41.26088], [-72.87631, 41.25815], [-72.87619, 41.25615], [-72.87626, 41.25505], [-72.87679, 41.25347], [-72.87743, 41.25213], [-72.87746, 41.25152], [-72.87774, 41.25066], [-72.87824, 41.25023], [-72.87904, 41.25], [-72.88878, 41.24899], [-72.88936, 41.2488], [-72.89477, 41.24758], [-72.8953, 41.24762], [-72.89607, 41.24752], [-72.89685, 41.24709], [-72.89728, 41.24661], [-72.89776, 41.24557], [-72.89675, 41.24497], [-72.8958, 41.24425], [-72.89524, 41.24291], [-72.89505, 41.24241], [-72.89464, 41.24208], [-72.89373, 41.24195], [-72.89347, 41.24215], [-72.8936, 41.24306], [-72.89306, 41.24358], [-72.89269, 41.24358], [-72.89159, 41.24416], [-72.89026, 41.24469], [-72.88801, 41.24471], [-72.88675, 41.24459], [-72.88554, 41.24431], [-72.88437, 41.24373], [-72.88283, 41.24332], [-72.88156, 41.24261], [-72.88084, 41.24226], [-72.88028, 41.24231], [-72.88028, 41.24256], [-72.88014, 41.24302], [-72.87861, 41.24358], [-72.8776, 41.24379], [-72.87639, 41.24425], [-72.8757, 41.24468], [-72.87338, 41.24465], [-72.87271, 41.24453], [-72.87174, 41.24446], [-72.87128, 41.24484], [-72.87071, 41.24477], [-72.87024, 41.24512], [-72.86802, 41.24493], [-72.86633, 41.24505], [-72.86425, 41.24509], [-72.86335, 41.2456], [-72.86298, 41.24588], [-72.86288, 41.24625], [-72.863, 41.24681], [-72.86342, 41.24687], [-72.86381, 41.247], [-72.86388, 41.24827], [-72.86342, 41.2486], [-72.86304, 41.24904], [-72.86302, 41.24939], [-72.86327, 41.24949], [-72.86561, 41.24924], [-72.8658, 41.24982], [-72.86593, 41.25099], [-72.86603, 41.25279], [-72.86628, 41.25429], [-72.86692, 41.25503], [-72.86767, 41.25528], [-72.86836, 41.25514], [-72.86809, 41.25872], [-72.86814, 41.26057], [-72.86616, 41.26065], [-72.86435, 41.26082], [-72.86291, 41.26094], [-72.86359, 41.25882], [-72.86257, 41.25856], [-72.86033, 41.25835], [-72.85936, 41.26008], [-72.85769, 41.2599], [-72.85595, 41.25981], [-72.85628, 41.25902], [-72.85634, 41.25856], [-72.85618, 41.25828], [-72.8534, 41.25792], [-72.85244, 41.25928], [-72.85227, 41.26134], [-72.85271, 41.26263], [-72.85327, 41.26379], [-72.85395, 41.26405], [-72.85497, 41.26382], [-72.85618, 41.26393], [-72.85705, 41.26417], [-72.85778, 41.26439], [-72.85822, 41.2649], [-72.85895, 41.26497], [-72.8619, 41.26514], [-72.86431, 41.2654], [-72.86629, 41.26574], [-72.86971, 41.26636], [-72.87222, 41.26694]]]]}, "bbox": [-72.89776, 41.24195, -72.85227, 41.26694]}, {"id": "31", "type": "Feature", "properties": {"area_id": 3552, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C3", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.92105, 41.33392], [-72.92042, 41.33565], [-72.92014, 41.34026], [-72.92289, 41.34046], [-72.92659, 41.34062], [-72.92641, 41.33704], [-72.93505, 41.33822], [-72.93505, 41.33894], [-72.93498, 41.34171], [-72.93474, 41.34301], [-72.94077, 41.34308], [-72.94108, 41.34238], [-72.94142, 41.34192], [-72.94151, 41.34049], [-72.94127, 41.33952], [-72.94091, 41.33845], [-72.94161, 41.33809], [-72.94198, 41.33697], [-72.94246, 41.33662], [-72.94247, 41.33596], [-72.93927, 41.33559], [-72.93156, 41.33477], [-72.92105, 41.33392]]]]}, "bbox": [-72.94247, 41.33392, -72.92014, 41.34308]}, {"id": "32", "type": "Feature", "properties": {"area_id": 3563, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C4", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.89492, 41.32835], [-72.89472, 41.34173], [-72.89507, 41.34163], [-72.89569, 41.34127], [-72.89641, 41.3412], [-72.90044, 41.33689], [-72.90177, 41.33781], [-72.90207, 41.33778], [-72.90204, 41.33365], [-72.90192, 41.33294], [-72.90176, 41.33202], [-72.90143, 41.33132], [-72.90074, 41.33052], [-72.9003, 41.33002], [-72.89937, 41.32913], [-72.89929, 41.32807], [-72.89891, 41.32746], [-72.89492, 41.32835]]]]}, "bbox": [-72.90207, 41.32746, -72.89472, 41.34173]}, {"id": "33", "type": "Feature", "properties": {"area_id": 3551, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C5", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.92105, 41.33392], [-72.93156, 41.33477], [-72.93927, 41.33559], [-72.9394, 41.33179], [-72.93901, 41.33126], [-72.93803, 41.33024], [-72.93786, 41.32969], [-72.93747, 41.32798], [-72.93692, 41.32667], [-72.93683, 41.32606], [-72.93682, 41.32462], [-72.9372, 41.3238], [-72.93793, 41.32299], [-72.93477, 41.32278], [-72.93325, 41.32668], [-72.92827, 41.32557], [-72.92636, 41.32548], [-72.92488, 41.32517], [-72.92589, 41.32257], [-72.92602, 41.32149], [-72.92943, 41.32148], [-72.92697, 41.31613], [-72.9263, 41.31525], [-72.92496, 41.31393], [-72.92519, 41.31632], [-72.92511, 41.31774], [-72.92484, 41.31856], [-72.92451, 41.32039], [-72.92437, 41.32113], [-72.92377, 41.32448], [-72.92301, 41.32619], [-72.92288, 41.32673], [-72.92254, 41.32974], [-72.92214, 41.33118], [-72.92105, 41.33392]]]]}, "bbox": [-72.9394, 41.31393, -72.92105, 41.33559]}, {"id": "34", "type": "Feature", "properties": {"area_id": 3544, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C6", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.95864, 41.32583], [-72.95853, 41.32574], [-72.95819, 41.32569], [-72.95658, 41.32491], [-72.9556, 41.32421], [-72.95434, 41.32307], [-72.9555, 41.31946], [-72.95571, 41.31883], [-72.95567, 41.318], [-72.95508, 41.31728], [-72.95375, 41.31597], [-72.9511, 41.31523], [-72.95205, 41.31302], [-72.94382, 41.31115], [-72.94352, 41.312], [-72.93639, 41.31045], [-72.93464, 41.31293], [-72.94492, 41.31667], [-72.94415, 41.31814], [-72.943, 41.31772], [-72.94138, 41.32064], [-72.94379, 41.32158], [-72.94595, 41.31795], [-72.94893, 41.319], [-72.94915, 41.31987], [-72.94938, 41.32109], [-72.94927, 41.32213], [-72.94883, 41.32294], [-72.94445, 41.33035], [-72.94702, 41.33234], [-72.94852, 41.33378], [-72.94931, 41.33343], [-72.9499, 41.33332], [-72.95048, 41.33344], [-72.95466, 41.32835], [-72.95537, 41.32869], [-72.95547, 41.32914], [-72.95532, 41.32973], [-72.9564, 41.33054], [-72.95659, 41.33107], [-72.95647, 41.33151], [-72.95811, 41.33176], [-72.95972, 41.33073], [-72.95764, 41.32856], [-72.96, 41.32791], [-72.96062, 41.32921], [-72.96178, 41.3305], [-72.9626, 41.33072], [-72.96532, 41.33084], [-72.9657, 41.33044], [-72.96658, 41.3309], [-72.96632, 41.33116], [-72.9669, 41.33201], [-72.96824, 41.3355], [-72.97585, 41.33316], [-72.97417, 41.33163], [-72.97156, 41.33003], [-72.96875, 41.32884], [-72.9678, 41.32849], [-72.96594, 41.32804], [-72.96429, 41.3278], [-72.96181, 41.32716], [-72.95992, 41.32653], [-72.95945, 41.32648], [-72.95864, 41.32583]]]]}, "bbox": [-72.97585, 41.31045, -72.93464, 41.3355]}, {"id": "35", "type": "Feature", "properties": {"area_id": 3542, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C7", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.93516, 41.3007], [-72.9456, 41.29811], [-72.94557, 41.29752], [-72.9439, 41.29749], [-72.94237, 41.29598], [-72.94406, 41.29487], [-72.94458, 41.29426], [-72.94448, 41.29347], [-72.93936, 41.2892], [-72.93168, 41.28244], [-72.9286, 41.28299], [-72.93114, 41.2915], [-72.93238, 41.29133], [-72.93516, 41.3007]]], [[[-72.9453, 41.30339], [-72.94457, 41.30267], [-72.94388, 41.30126], [-72.9436, 41.30037], [-72.94518, 41.29922], [-72.93353, 41.30212], [-72.93293, 41.30426], [-72.93428, 41.30481], [-72.93375, 41.30561], [-72.93712, 41.30711], [-72.93595, 41.30878], [-72.94403, 41.3106], [-72.94382, 41.31115], [-72.95205, 41.31302], [-72.95338, 41.31033], [-72.95264, 41.30621], [-72.95007, 41.30631], [-72.94564, 41.30664], [-72.94472, 41.30863], [-72.9394, 41.30757], [-72.93952, 41.30419], [-72.9453, 41.30339]]]]}, "bbox": [-72.95338, 41.28244, -72.9286, 41.31302]}, {"id": "36", "type": "Feature", "properties": {"area_id": 3559, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C8", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.91257, 41.32536], [-72.91414, 41.32575], [-72.91525, 41.32297], [-72.91696, 41.31934], [-72.91892, 41.31962], [-72.92186, 41.31236], [-72.92014, 41.31189], [-72.91846, 41.31131], [-72.90851, 41.32409], [-72.91045, 41.32479], [-72.91257, 41.32536]]]]}, "bbox": [-72.92186, 41.31131, -72.90851, 41.32575]}, {"id": "37", "type": "Feature", "properties": {"area_id": 3560, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Definitely Declining", "grade": "C", "label": "C9", "residential": true, "commercial": false, "industrial": false, "fill": "#ffff00"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.91846, 41.31131], [-72.91817, 41.31124], [-72.90687, 41.3185], [-72.90613, 41.3199], [-72.90549, 41.32083], [-72.90584, 41.32191], [-72.90656, 41.32291], [-72.9075, 41.32353], [-72.90851, 41.32409], [-72.91846, 41.31131]]]]}, "bbox": [-72.91846, 41.31124, -72.90549, 41.32409]}, {"id": "38", "type": "Feature", "properties": {"area_id": 3548, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Hazardous", "grade": "D", "label": "D1", "residential": true, "commercial": false, "industrial": false, "fill": "#d9838d"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.97068, 41.34167], [-72.96973, 41.34196], [-72.96998, 41.34321], [-72.97037, 41.34376], [-72.9712, 41.34438], [-72.97172, 41.34499], [-72.97218, 41.3456], [-72.9853, 41.34166], [-72.98583, 41.33973], [-72.98587, 41.33927], [-72.9857, 41.33865], [-72.98532, 41.33808], [-72.98385, 41.33654], [-72.98363, 41.33738], [-72.97701, 41.33967], [-72.97068, 41.34167]]]]}, "bbox": [-72.98587, 41.33654, -72.96973, 41.3456]}, {"id": "39", "type": "Feature", "properties": {"area_id": 3547, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Hazardous", "grade": "D", "label": "D2", "residential": true, "commercial": false, "industrial": false, "fill": "#d9838d"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.96824, 41.3355], [-72.97068, 41.34167], [-72.97701, 41.33967], [-72.98363, 41.33738], [-72.98385, 41.33654], [-72.98247, 41.3353], [-72.98137, 41.33468], [-72.97994, 41.33416], [-72.97872, 41.33369], [-72.97748, 41.33289], [-72.97718, 41.33246], [-72.97711, 41.33207], [-72.97585, 41.33316], [-72.96824, 41.3355]]]]}, "bbox": [-72.98385, 41.33207, -72.96824, 41.34167]}, {"id": "40", "type": "Feature", "properties": {"area_id": 3543, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Hazardous", "grade": "D", "label": "D3", "residential": true, "commercial": false, "industrial": false, "fill": "#d9838d"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.9453, 41.30339], [-72.93952, 41.30419], [-72.9394, 41.30757], [-72.94472, 41.30863], [-72.94564, 41.30664], [-72.95007, 41.30631], [-72.95264, 41.30621], [-72.95252, 41.30544], [-72.95094, 41.30206], [-72.94914, 41.30244], [-72.94976, 41.30549], [-72.94746, 41.3057], [-72.94672, 41.30479], [-72.9453, 41.30339]]]]}, "bbox": [-72.95264, 41.30206, -72.9394, 41.30863]}, {"id": "41", "type": "Feature", "properties": {"area_id": 3550, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Hazardous", "grade": "D", "label": "D4", "residential": true, "commercial": false, "industrial": false, "fill": "#d9838d"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.92943, 41.32148], [-72.93132, 41.32194], [-72.93477, 41.32278], [-72.93793, 41.32299], [-72.93793, 41.3224], [-72.9373, 41.32179], [-72.93724, 41.32152], [-72.93739, 41.32093], [-72.93858, 41.31843], [-72.93986, 41.31942], [-72.94138, 41.32064], [-72.943, 41.31772], [-72.93539, 41.31477], [-72.93499, 41.31559], [-72.93329, 41.31391], [-72.9307, 41.31496], [-72.9289, 41.31512], [-72.92897, 41.31569], [-72.9263, 41.31525], [-72.92697, 41.31613], [-72.92943, 41.32148]]]]}, "bbox": [-72.943, 41.31391, -72.9263, 41.32299]}, {"id": "42", "type": "Feature", "properties": {"area_id": 3561, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Hazardous", "grade": "D", "label": "D5", "residential": true, "commercial": false, "industrial": false, "fill": "#d9838d"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.91052, 41.3035], [-72.90648, 41.30354], [-72.90647, 41.30456], [-72.90757, 41.30515], [-72.90842, 41.3057], [-72.90852, 41.30647], [-72.90815, 41.30839], [-72.90849, 41.3084], [-72.90886, 41.30855], [-72.9103, 41.30838], [-72.91925, 41.30715], [-72.92004, 41.3045], [-72.92046, 41.30407], [-72.9207, 41.30136], [-72.9194, 41.30091], [-72.91076, 41.30087], [-72.91052, 41.3035]]], [[[-72.89441, 41.30444], [-72.89541, 41.30872], [-72.90047, 41.30833], [-72.90568, 41.30795], [-72.90583, 41.30733], [-72.90526, 41.30726], [-72.9055, 41.30697], [-72.90576, 41.30654], [-72.90573, 41.30615], [-72.90541, 41.30524], [-72.90505, 41.30394], [-72.90504, 41.30352], [-72.89441, 41.30444]]], [[[-72.89787, 41.31884], [-72.90335, 41.31608], [-72.90812, 41.31629], [-72.91842, 41.30962], [-72.9188, 41.30822], [-72.90791, 41.30962], [-72.90765, 41.31185], [-72.9077, 41.31277], [-72.90751, 41.31314], [-72.90711, 41.31339], [-72.90694, 41.31365], [-72.90718, 41.31411], [-72.90708, 41.31453], [-72.90704, 41.31495], [-72.907, 41.31535], [-72.90658, 41.31554], [-72.90587, 41.31541], [-72.90563, 41.31514], [-72.9057, 41.31454], [-72.90564, 41.31421], [-72.90618, 41.31402], [-72.9071, 41.31282], [-72.90712, 41.31196], [-72.90722, 41.31076], [-72.90668, 41.31094], [-72.90637, 41.31077], [-72.90581, 41.31063], [-72.90538, 41.31084], [-72.90526, 41.31003], [-72.90538, 41.30916], [-72.9046, 41.30903], [-72.89823, 41.30956], [-72.89547, 41.30971], [-72.89583, 41.31066], [-72.89787, 41.31884]]], [[[-72.89651, 41.32228], [-72.89716, 41.32253], [-72.89778, 41.32188], [-72.89895, 41.32189], [-72.89956, 41.3223], [-72.89996, 41.32238], [-72.90056, 41.32214], [-72.90087, 41.32245], [-72.90139, 41.3218], [-72.90193, 41.32222], [-72.90217, 41.32175], [-72.90301, 41.32184], [-72.90273, 41.321], [-72.90253, 41.32034], [-72.9044, 41.31699], [-72.90364, 41.31681], [-72.90144, 41.31758], [-72.90077, 41.31803], [-72.89798, 41.32008], [-72.89724, 41.32084], [-72.89651, 41.32228]]]]}, "bbox": [-72.9207, 41.30087, -72.89441, 41.32253]}, {"id": "43", "type": "Feature", "properties": {"area_id": 3574, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Hazardous", "grade": "D", "label": "D6", "residential": true, "commercial": false, "industrial": false, "fill": "#d9838d"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.89393, 41.29594], [-72.89726, 41.29784], [-72.90069, 41.29571], [-72.90207, 41.29471], [-72.90278, 41.29088], [-72.9005, 41.29054], [-72.90064, 41.28894], [-72.89592, 41.28818], [-72.89544, 41.2894], [-72.8943, 41.29175], [-72.89356, 41.29326], [-72.89375, 41.29415], [-72.89421, 41.29517], [-72.89393, 41.29594]]]]}, "bbox": [-72.90278, 41.28818, -72.89356, 41.29784]}, {"id": "44", "type": "Feature", "properties": {"area_id": 3541, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Hazardous", "grade": "D", "label": "D7", "residential": true, "commercial": false, "industrial": false, "fill": "#d9838d"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.96394, 41.30239], [-72.96502, 41.30434], [-72.96565, 41.30509], [-72.96924, 41.30769], [-72.97297, 41.30551], [-72.97667, 41.30404], [-72.97664, 41.30361], [-72.97816, 41.30021], [-72.97871, 41.29933], [-72.97939, 41.29875], [-72.98027, 41.29823], [-72.97999, 41.29609], [-72.97644, 41.29617], [-72.97644, 41.29424], [-72.97775, 41.29323], [-72.9802, 41.2923], [-72.98032, 41.29213], [-72.9806, 41.29105], [-72.98052, 41.28788], [-72.98669, 41.28408], [-72.98709, 41.28157], [-72.98666, 41.281], [-72.98612, 41.28075], [-72.98487, 41.28081], [-72.98383, 41.2811], [-72.98302, 41.28127], [-72.98053, 41.28007], [-72.97942, 41.27928], [-72.97638, 41.28135], [-72.97451, 41.28003], [-72.97152, 41.28202], [-72.97269, 41.28302], [-72.97266, 41.28349], [-72.96353, 41.28783], [-72.96212, 41.28641], [-72.96884, 41.28317], [-72.96812, 41.2823], [-72.96726, 41.28166], [-72.96042, 41.28438], [-72.95939, 41.28305], [-72.9618, 41.28201], [-72.96137, 41.28138], [-72.96108, 41.28052], [-72.96079, 41.27922], [-72.9604, 41.27807], [-72.95981, 41.27698], [-72.95966, 41.27694], [-72.95928, 41.2766], [-72.95929, 41.27612], [-72.95883, 41.27512], [-72.95808, 41.27409], [-72.95765, 41.27377], [-72.95448, 41.2766], [-72.95752, 41.28029], [-72.95793, 41.28085], [-72.95805, 41.28172], [-72.95822, 41.28269], [-72.95963, 41.28696], [-72.95999, 41.28822], [-72.96012, 41.29264], [-72.96018, 41.29405], [-72.96219, 41.29335], [-72.96328, 41.29571], [-72.95976, 41.29707], [-72.96275, 41.30087], [-72.96394, 41.30239]]]]}, "bbox": [-72.98709, 41.27377, -72.95448, 41.30769]}, {"id": "45", "type": "Feature", "properties": {"area_id": 3540, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Hazardous", "grade": "D", "label": "D8", "residential": true, "commercial": false, "industrial": false, "fill": "#d9838d"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.94577, 41.28436], [-72.94498, 41.28493], [-72.94621, 41.2862], [-72.94769, 41.28755], [-72.94954, 41.28918], [-72.95003, 41.28922], [-72.95121, 41.28922], [-72.95508, 41.29642], [-72.95397, 41.29702], [-72.95375, 41.29745], [-72.95333, 41.29813], [-72.95333, 41.29884], [-72.95367, 41.2994], [-72.95453, 41.29978], [-72.95712, 41.3018], [-72.95996, 41.30106], [-72.961, 41.30325], [-72.96394, 41.30239], [-72.96275, 41.30087], [-72.95976, 41.29707], [-72.95943, 41.2972], [-72.95907, 41.29664], [-72.95861, 41.2967], [-72.95801, 41.29582], [-72.9581, 41.29144], [-72.95802, 41.28949], [-72.95773, 41.28912], [-72.94706, 41.28329], [-72.94699, 41.28336], [-72.94577, 41.28436]]]]}, "bbox": [-72.96394, 41.28329, -72.94498, 41.30325]}, {"id": "46", "type": "Feature", "properties": {"area_id": 3534, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Hazardous", "grade": "D", "label": "D9", "residential": true, "commercial": false, "industrial": false, "fill": "#d9838d"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.95358, 41.25504], [-72.95233, 41.25571], [-72.95174, 41.25569], [-72.95043, 41.25618], [-72.94906, 41.25658], [-72.94735, 41.25702], [-72.94619, 41.25711], [-72.93982, 41.25875], [-72.93776, 41.25944], [-72.93622, 41.25988], [-72.93695, 41.26158], [-72.93746, 41.26145], [-72.9425, 41.2602], [-72.94516, 41.26001], [-72.94578, 41.25996], [-72.95083, 41.25951], [-72.951, 41.25908], [-72.9544, 41.25681], [-72.95358, 41.25504]]]]}, "bbox": [-72.9544, 41.25504, -72.93622, 41.26158]}, {"id": "47", "type": "Feature", "properties": {"area_id": 11378, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Industrial", "grade": null, "label": "Industrial", "residential": false, "commercial": false, "industrial": true, "fill": "#000000"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.94448, 41.29347], [-72.94895, 41.29752], [-72.95397, 41.29702], [-72.95508, 41.29642], [-72.95121, 41.28922], [-72.95003, 41.28922], [-72.94954, 41.28918], [-72.94769, 41.28755], [-72.94621, 41.2862], [-72.94498, 41.28493], [-72.94577, 41.28436], [-72.94045, 41.28126], [-72.94012, 41.27962], [-72.93881, 41.28003], [-72.93854, 41.28182], [-72.9367, 41.28363], [-72.9343, 41.28325], [-72.93287, 41.28256], [-72.93297, 41.28163], [-72.93215, 41.28042], [-72.92993, 41.28023], [-72.92556, 41.28363], [-72.9286, 41.28299], [-72.93168, 41.28244], [-72.93936, 41.2892], [-72.94448, 41.29347]]], [[[-72.91522, 41.30089], [-72.9194, 41.30091], [-72.9207, 41.30136], [-72.92332, 41.30099], [-72.92465, 41.29978], [-72.9287, 41.29488], [-72.93069, 41.29359], [-72.93015, 41.29167], [-72.93114, 41.2915], [-72.92971, 41.28672], [-72.92873, 41.2882], [-72.92943, 41.28972], [-72.9293, 41.29124], [-72.9281, 41.29231], [-72.92642, 41.2925], [-72.92525, 41.29469], [-72.92427, 41.29661], [-72.92142, 41.29776], [-72.92075, 41.29647], [-72.91958, 41.29578], [-72.9187, 41.29628], [-72.91993, 41.29766], [-72.91851, 41.29925], [-72.91566, 41.29773], [-72.91506, 41.29804], [-72.91522, 41.30089]]], [[[-72.89231, 41.30095], [-72.89278, 41.30146], [-72.89357, 41.3013], [-72.89503, 41.29973], [-72.89977, 41.29916], [-72.90142, 41.29944], [-72.90202, 41.29747], [-72.90208, 41.29638], [-72.90357, 41.29742], [-72.9042, 41.29276], [-72.90338, 41.29295], [-72.90455, 41.29188], [-72.90461, 41.29017], [-72.90344, 41.28782], [-72.90329, 41.28694], [-72.90401, 41.28563], [-72.90373, 41.28458], [-72.90455, 41.28349], [-72.90411, 41.28247], [-72.90496, 41.28125], [-72.8985, 41.28223], [-72.89674, 41.28612], [-72.89592, 41.28818], [-72.90064, 41.28894], [-72.9005, 41.29054], [-72.90278, 41.29088], [-72.90207, 41.29471], [-72.90069, 41.29571], [-72.89726, 41.29784], [-72.89393, 41.29594], [-72.89385, 41.29616], [-72.89407, 41.29795], [-72.89398, 41.29892], [-72.89364, 41.29942], [-72.89231, 41.30095]]], [[[-72.90778, 41.30125], [-72.9086, 41.30182], [-72.90775, 41.30353], [-72.91052, 41.3035], [-72.91076, 41.30087], [-72.91328, 41.30088], [-72.91341, 41.29659], [-72.91069, 41.29669], [-72.90632, 41.29816], [-72.90534, 41.29904], [-72.90756, 41.30037], [-72.90778, 41.30125]]], [[[-72.89231, 41.30095], [-72.89141, 41.30037], [-72.89054, 41.30016], [-72.88892, 41.29995], [-72.88776, 41.30343], [-72.88896, 41.30383], [-72.89025, 41.30199], [-72.89044, 41.3008], [-72.89231, 41.30095]]], [[[-72.89781, 41.30135], [-72.89272, 41.30251], [-72.89114, 41.30446], [-72.89188, 41.30462], [-72.89441, 41.30444], [-72.90255, 41.30374], [-72.90218, 41.30101], [-72.89781, 41.30135]]], [[[-72.92602, 41.32149], [-72.92589, 41.32257], [-72.92488, 41.32517], [-72.92636, 41.32548], [-72.92827, 41.32557], [-72.93325, 41.32668], [-72.93477, 41.32278], [-72.93132, 41.32194], [-72.92943, 41.32148], [-72.92602, 41.32149]]], [[[-72.89479, 41.33724], [-72.89492, 41.32835], [-72.89498, 41.32457], [-72.8963, 41.32416], [-72.89651, 41.32228], [-72.89724, 41.32084], [-72.89798, 41.32008], [-72.90077, 41.31803], [-72.90144, 41.31758], [-72.90144, 41.31704], [-72.89787, 41.31884], [-72.89486, 41.31976], [-72.89125, 41.32058], [-72.88901, 41.32077], [-72.88537, 41.31896], [-72.88385, 41.31868], [-72.88415, 41.3165], [-72.88277, 41.31408], [-72.88252, 41.31245], [-72.88586, 41.3086], [-72.88478, 41.30939], [-72.8804, 41.3122], [-72.87679, 41.32076], [-72.87715, 41.32088], [-72.88588, 41.3241], [-72.87314, 41.33446], [-72.87177, 41.33686], [-72.87914, 41.33686], [-72.88765, 41.33681], [-72.89479, 41.33724]]], [[[-72.91892, 41.36042], [-72.91958, 41.36094], [-72.91968, 41.36151], [-72.91905, 41.36299], [-72.91913, 41.36594], [-72.92121, 41.36248], [-72.92519, 41.35632], [-72.92898, 41.35047], [-72.93144, 41.35115], [-72.93402, 41.34588], [-72.93474, 41.34301], [-72.93498, 41.34171], [-72.93505, 41.33894], [-72.93505, 41.33822], [-72.93117, 41.33769], [-72.92659, 41.34062], [-72.92732, 41.34082], [-72.92726, 41.34154], [-72.92612, 41.34175], [-72.92643, 41.34373], [-72.91599, 41.34556], [-72.91743, 41.34849], [-72.9213, 41.35194], [-72.92275, 41.35283], [-72.92373, 41.35427], [-72.92256, 41.35417], [-72.9218, 41.35472], [-72.92164, 41.35558], [-72.92243, 41.35681], [-72.92158, 41.35764], [-72.92148, 41.3585], [-72.9224, 41.35973], [-72.92148, 41.36023], [-72.92085, 41.35933], [-72.91892, 41.35983], [-72.91892, 41.36042]]]]}, "bbox": [-72.95508, 41.27962, -72.87177, 41.36594]}, {"id": "48", "type": "Feature", "properties": {"area_id": 11427, "city": "New Haven", "state": "CT", "city_survey": true, "category": "Industrial", "grade": null, "label": "Industrial", "residential": false, "commercial": false, "industrial": true, "fill": "#000000"}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[-72.88869, 41.30903], [-72.88867, 41.31011], [-72.89547, 41.30971], [-72.89823, 41.30956], [-72.9046, 41.30903], [-72.90538, 41.30916], [-72.90568, 41.30795], [-72.90047, 41.30833], [-72.89541, 41.30872], [-72.89066, 41.30898], [-72.88869, 41.30903]]], [[[-72.943, 41.31772], [-72.94415, 41.31814], [-72.94492, 41.31667], [-72.93464, 41.31293], [-72.93639, 41.31045], [-72.94352, 41.312], [-72.94382, 41.31115], [-72.94403, 41.3106], [-72.93595, 41.30878], [-72.93712, 41.30711], [-72.93375, 41.30561], [-72.93428, 41.30481], [-72.93293, 41.30426], [-72.93353, 41.30212], [-72.94518, 41.29922], [-72.9456, 41.29811], [-72.93516, 41.3007], [-72.93238, 41.29133], [-72.93114, 41.2915], [-72.93015, 41.29167], [-72.93069, 41.29359], [-72.9287, 41.29488], [-72.92465, 41.29978], [-72.92332, 41.30099], [-72.9207, 41.30136], [-72.92046, 41.30407], [-72.92004, 41.3045], [-72.91925, 41.30715], [-72.9103, 41.30838], [-72.90886, 41.30855], [-72.90849, 41.3084], [-72.90815, 41.30839], [-72.90791, 41.30962], [-72.9188, 41.30822], [-72.91842, 41.30962], [-72.90812, 41.31629], [-72.90904, 41.31711], [-72.91817, 41.31124], [-72.91846, 41.31131], [-72.91889, 41.31146], [-72.92014, 41.31189], [-72.92186, 41.31236], [-72.9241, 41.31067], [-72.9256, 41.31176], [-72.92835, 41.31276], [-72.9289, 41.31512], [-72.9307, 41.31496], [-72.93329, 41.31391], [-72.93499, 41.31559], [-72.93539, 41.31477], [-72.943, 41.31772]]]]}, "bbox": [-72.9456, 41.29133, -72.88867, 41.31814]}], "bbox": [-72.99321, 41.23109, -72.85227, 41.37502]}, "type": "geojson"}}, null]], ["addPopup", ["geojson", null, null]], ["fitBounds", [[-72.99321, 41.23109, -72.85227, 41.37502]]], ["setLayoutProperty", ["geojson", "visibility", "visible"]], ["setPaintProperty", ["geojson", "fill-opacity", 0.8]]]};
pymaplibregl(data);
})();
</script>
</body>
</html>