diff --git a/README.md b/README.md index ffd1a6a230..c06e9576fb 100755 --- a/README.md +++ b/README.md @@ -10,12 +10,11 @@ $ npm install $ npm run test-live # build watching file changes and run demos -$ npm run dev +$ npm run start # run demos $ npm run demos ``` -visit online demo -https://antv.alipay.com/zh-cn/l7/1.x/demo/index.html + ## How to Contribute diff --git a/demos/01_animatePoint.html b/demos/01_animatePoint.html index 65c681a953..f1f7e61013 100644 --- a/demos/01_animatePoint.html +++ b/demos/01_animatePoint.html @@ -43,7 +43,6 @@ return { ] } } -console.log(pointOnCircle(10)) const scene = new L7.Scene({ id: 'map', mapStyle: 'light', // 样式URL @@ -76,7 +75,7 @@ scene.on('loaded', () => { circleLayer.setData(pointOnCircle(timestamp / 1000)); requestAnimationFrame(animateMarker); } - //animateMarker(0); + animateMarker(0); /** const layerText = scene.PointLayer({ diff --git a/demos/greatcircle.html b/demos/01_circle.html similarity index 50% rename from demos/greatcircle.html rename to demos/01_circle.html index b2d1fe28f5..c427571ff5 100644 --- a/demos/greatcircle.html +++ b/demos/01_circle.html @@ -3,7 +3,7 @@ - 弧线图 + 气泡图 @@ -13,39 +13,37 @@ - - + diff --git a/demos/01_point_distribute.html b/demos/01_point_distribute.html index a3d1bd8f73..2d5267344c 100644 --- a/demos/01_point_distribute.html +++ b/demos/01_point_distribute.html @@ -45,7 +45,8 @@ scene.on('loaded', () => { .style({ stroke: 'rgb(255,255,255)', strokeWidth: 0, - opacity: 1.0 + opacity: 1.0, + bending:'additive' }) .render(); }); diff --git a/demos/03_1_extrude_polygon.html b/demos/03_1_extrude_polygon.html index f8b80004ae..42b3d5f250 100644 --- a/demos/03_1_extrude_polygon.html +++ b/demos/03_1_extrude_polygon.html @@ -31,6 +31,7 @@ const scene = new L7.Scene({ }); window.scene = scene; + scene.on('loaded', () => { $.getJSON('https://gw.alipayobjects.com/os/rmsportal/xxvoBnsYNEPiAXGRmlPD.json', city => { citylayer = scene.PolygonLayer() @@ -39,7 +40,7 @@ scene.on('loaded', () => { .shape('extrude') .size('max',(value)=>{ - if(value<0)value =0; + if(value<0)value =1; return value * 1000; }) .active(true) @@ -48,7 +49,6 @@ scene.on('loaded', () => { }) .render(); - const citylayer2 = scene.PolygonLayer() .source(city) .shape('line') @@ -56,7 +56,7 @@ scene.on('loaded', () => { .style({ opacity: 1 }) - .render(); + .render(); }); }); diff --git a/demos/03_choropleths_polygon.html b/demos/03_choropleths_polygon.html index 0700fcf2b9..e141d1476c 100644 --- a/demos/03_choropleths_polygon.html +++ b/demos/03_choropleths_polygon.html @@ -81,7 +81,6 @@ scene.on('loaded', () => { } }) .shape('fill') - .pattern('id1') .active(true) .style({ opacity: 1 @@ -97,7 +96,10 @@ scene.on('loaded', () => { }) //.render(); - console.log(citylayer); + + citylayer.on('mouseleave',(e)=>{ + console.log(e); + }) citylayer.on('click',(e)=>{ $("#info").css({'left': e.pixel.x,'top':e.pixel.y, display:'block'}); $("#info").html(`

${e.feature.properties.area || e.feature.properties.name }${e.feature.properties.pm2_5_24h || 0}

`); diff --git a/demos/06_text.html b/demos/06_text.html index 3fd2bc4f61..45708e187f 100644 --- a/demos/06_text.html +++ b/demos/06_text.html @@ -29,7 +29,7 @@ const scene = new L7.Scene({ }); window.scene = scene; scene.on('loaded', () => { - $.get('./data/provincePoint.json', data => { + $.get('https://gw.alipayobjects.com/os/basement_prod/abcfe339-b8bc-46ce-8ff4-c96185b6235f.json', data => { scene.PointLayer({ zIndex: 2 }) diff --git a/demos/08_arc_line.html b/demos/08_arc_line.html index 8a130d82e9..ff6eb262c0 100644 --- a/demos/08_arc_line.html +++ b/demos/08_arc_line.html @@ -31,47 +31,26 @@ const scene = new L7.Scene({ }); scene.on('loaded', () => { $.get('https://gw.alipayobjects.com/os/rmsportal/UEXQMifxtkQlYfChpPwT.txt', data => { - const rows = data.split('\n'); - var features =[]; - for(var i =1;i diff --git a/demos/gaode.html b/demos/gaode.html new file mode 100644 index 0000000000..e8588096ed --- /dev/null +++ b/demos/gaode.html @@ -0,0 +1,81 @@ + + + + + + + + + 简易行政区图-世界 + + +
+ + + + + \ No newline at end of file diff --git a/demos/08_point_shape.html b/demos/great_circle.html similarity index 58% rename from demos/08_point_shape.html rename to demos/great_circle.html index 5629d0ccc5..ba61152db6 100644 --- a/demos/08_point_shape.html +++ b/demos/great_circle.html @@ -6,7 +6,7 @@ - point_circle + hexagon demo @@ -15,48 +15,45 @@
+ diff --git a/demos/grid.html b/demos/grid.html index ba02a4fa0e..d64144ef14 100644 --- a/demos/grid.html +++ b/demos/grid.html @@ -53,16 +53,19 @@ scene.on('loaded', () => { }, { type: 'grid', - size: 15000, + size: 160000, field:'v', method:'sum' } ] }) - .shape('grid') + .shape('squareColumn') + .size('count',(value)=>{ + return value * 1000; + }) .active({fill:'red'}) .style({ - coverage: 0.8 + coverage: 0.6 }) .color('count', ["#002466","#105CB3","#2894E0","#CFF6FF","#FFF5B8","#FFAB5C","#F27049","#730D1C"]) .render(); diff --git a/demos/hexgon.html b/demos/hexgon.html index 3cc2da6a73..bbfd0379d6 100644 --- a/demos/hexgon.html +++ b/demos/hexgon.html @@ -25,7 +25,7 @@ const scene = new L7.Scene({ mapStyle: 'dark', // 样式URL center: [120.132624,30.281774], pitch: 0, - zoom: 10 + zoom: 7 }); scene.on('loaded', () => { $.get('https://gw.alipayobjects.com/os/basement_prod/7359a5e9-3c5e-453f-b207-bc892fb23b84.csv', data => { @@ -53,16 +53,19 @@ scene.on('loaded', () => { }, { type: 'hexagon', - size: 6000, + size: 10000, field:'v', method:'sum' } ] }) .active(true) - .shape('hexagon') + .size('count',(value)=>{ + return value * 1000; + }) + .shape('square') .style({ - coverage: 0.9, + coverage: 0.8, angle: 0, }) .color('count', ["#002466","#105CB3","#2894E0","#CFF6FF","#FFF5B8","#FFAB5C","#F27049","#730D1C"]) diff --git a/demos/hz.html b/demos/hz.html new file mode 100644 index 0000000000..fe2058e2a1 --- /dev/null +++ b/demos/hz.html @@ -0,0 +1,73 @@ + + + + + + + + + city demo + + + + +
+
+ + + + + + + + diff --git a/demos/json.html b/demos/json.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/demos/meshline.html b/demos/meshline.html deleted file mode 100644 index 612c43868b..0000000000 --- a/demos/meshline.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - line demo - - - - -
- - - - - - - diff --git a/demos/polygon_jsondata.html b/demos/polygon_jsondata.html index cca750f0ca..036e5eb549 100644 --- a/demos/polygon_jsondata.html +++ b/demos/polygon_jsondata.html @@ -19,7 +19,7 @@ - + + + + + + + + diff --git a/demos/vectorTilepolygon.html b/demos/vectorTilepolygon.html index 5a66c20b1e..3352b1a8b9 100644 --- a/demos/vectorTilepolygon.html +++ b/demos/vectorTilepolygon.html @@ -23,7 +23,7 @@ + + + + + + + diff --git a/package.json b/package.json index 1ce7cd393b..7d647aaafa 100755 --- a/package.json +++ b/package.json @@ -48,6 +48,13 @@ "open": "~0.0.5", "parseurl": "~1.3.2", "pre-commit": "~1.2.2", + "rollup": "^1.16.2", + "rollup-plugin-buble": "^0.19.6", + "rollup-plugin-commonjs": "^9.2.1", + "rollup-plugin-json": "^4.0.0", + "rollup-plugin-node-builtins": "^2.1.2", + "rollup-plugin-node-resolve": "^4.0.1", + "rollup-plugin-terser": "^4.0.4", "serve-static": "^1.13.2", "shelljs": "~0.7.8", "string-replace-loader": "~1.3.0", @@ -58,6 +65,10 @@ "worker-loader": "^2.0.0" }, "scripts": { + "build-dev": "rollup -c --environment BUILD:dev && npm run demos-web", + "watch-dev": "rollup -c --environment BUILD:dev --watch & npm run demos-web ", + "build-prod": "rollup -c --environment BUILD:production", + "build-prod-min": "rollup -c --environment BUILD:production,MINIFY:true", "build": "webpack", "build-lib": "babel src --out-dir lib", "bundler": "electron ./bundler/app.js", @@ -78,7 +89,7 @@ "mkdir-dist": "node ./bin/mkdir-dist.js", "prepublishOnly": "npm run build-lib && npm run dist", "screenshot": "node ./bin/screenshot.js", - "start": "npm run dev", + "start": "npm run watch-dev", "test": "torch --compile-opts ./.torch.compile.opts.js --compile --renderer --recursive test/unit", "test-all": "npm run test && npm run test-bugs", "test-bugs": "torch --compile --renderer --recursive test/bugs", diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000000..860a9ca350 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,100 @@ +import fs from 'fs'; +// import sourcemaps from 'rollup-plugin-sourcemaps'; +import json from 'rollup-plugin-json'; +import buble from 'rollup-plugin-buble'; +import resolve from 'rollup-plugin-node-resolve'; +import commonjs from 'rollup-plugin-commonjs'; +import builtins from 'rollup-plugin-node-builtins'; +import { createFilter } from 'rollup-pluginutils'; +import { terser } from 'rollup-plugin-terser'; +const { BUILD, MINIFY } = process.env; +const minified = MINIFY === 'true'; +const production = BUILD === 'production'; +const outputFile = !production + ? 'build/L7.js' + : minified + ? 'build/l7.js' + : 'build/l7-unminified.js'; + +const config = [ + { + input: [ 'src/index.js', 'src/worker/worker.js' ], + output: { + dir: 'rollup/build/l7', + format: 'amd', + sourcemap: 'inline', + indent: false, + chunkFileNames: 'shared.js' + }, + // experimentalCodeSplitting: true, + treeshake: production, + onwarn(warning, warn) { + if (warning.code === 'CIRCULAR_DEPENDENCY') return; + warn(warning); + }, + plugins: [ + glsl( + [ './src/geom/shader/*.glsl', './src/core/engine/picking/*.glsl', './src/geom/shader/**/*.glsl' ], + production + ), + minified ? terser() : false, + json(), + buble({ + transforms: { dangerousForOf: true }, + objectAssign: 'Object.assign' + }), + resolve({ + browser: true, + preferBuiltins: false + }), + commonjs({ + ignoreGlobal: true + }), + builtins() + ] + }, + { + input: 'rollup/l7.js', + output: { + name: 'L7', + file: outputFile, + format: 'umd', + sourcemap: production ? true : 'inline', + indent: false, + intro: fs.readFileSync( + require.resolve('./rollup/bundle_prelude.js'), + 'utf8' + ) + }, + treeshake: false, + plugins: [ + ] + } +]; + +export default config; +function glsl(include, minify) { + const filter = createFilter(include); + return { + name: 'glsl', + transform(code, id) { + if (!filter(id)) return; + + // barebones GLSL minification + if (minify) { + code = code + .trim() // strip whitespace at the start/end + .replace(/\s*\/\/[^\n]*\n/g, '\n') // strip double-slash comments + .replace(/\n+/g, '\n') // collapse multi line breaks + .replace(/\n\s+/g, '\n') // strip identation + .replace(/\s?([+-\/*=,])\s?/g, '$1') // strip whitespace around operators + .replace(/([;\(\),\{\}])\n(?=[^#])/g, '$1'); // strip more line breaks + } + + return { + code: `export default ${JSON.stringify(code)};`, + map: { mappings: '' } + }; + } + }; +} diff --git a/rollup/bundle_prelude.js b/rollup/bundle_prelude.js new file mode 100644 index 0000000000..11ccad5f30 --- /dev/null +++ b/rollup/bundle_prelude.js @@ -0,0 +1,19 @@ +/* eslint-disable */ + +var shared, worker, L7; +// define gets called three times: one for each chunk. we rely on the order +// they're imported to know which is which +function define(_, chunk) { +if (!shared) { + shared = chunk; +} else if (!worker) { + worker = chunk; +} else { + var workerBundleString = 'var sharedChunk = {}; (' + shared + ')(sharedChunk); (' + worker + ')(sharedChunk);' + + var sharedChunk = {}; + shared(sharedChunk); + L7 = chunk(sharedChunk); + L7.workerUrl = window.URL.createObjectURL(new Blob([workerBundleString], { type: 'text/javascript' })); +} +} diff --git a/rollup/l7.js b/rollup/l7.js new file mode 100644 index 0000000000..6c8a28613b --- /dev/null +++ b/rollup/l7.js @@ -0,0 +1,4 @@ +import './build/l7/shared'; +import './build/l7/worker'; +import './build/l7/index'; +export default L7; \ No newline at end of file diff --git a/src/attr/color-util.js b/src/attr/color-util.js index 2fb2187adf..96b7bfee4b 100644 --- a/src/attr/color-util.js +++ b/src/attr/color-util.js @@ -4,16 +4,32 @@ */ import Util from '../util'; const RGB_REG = /rgba?\(([\s.,0-9]+)\)/; -// const RGBA_REG = /rgba\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(\d+)\s*\)/; - -// 创建辅助 tag 取颜色 -function createTmp() { - const i = document.createElement('i'); - i.title = 'Web Colour Picker'; - i.style.display = 'none'; - document.body.appendChild(i); - return i; -} +const ColorKeywords = { + aliceblue: '#F0F8FF', antiquewhite: '#FAEBD7', aqua: '#00FFFF', aquamarine: '#7FFFD4', azure: '#F0FFFF', + beige: '#F5F5DC', bisque: '#FFE4C4', black: '#000000', blanchedalmond: '#FFEBCD', blue: '#0000FF', blueviolet: '#8A2BE2', + brown: '#A52A2A', burlywood: '#DEB887', cadetblue: '#5F9EA0', chartreuse: '#7FFF00', chocolate: '#D2691E', coral: '#FF7F50', + cornflowerblue: '#6495ED', cornsilk: '#FFF8DC', crimson: '#DC143C', cyan: '#00FFFF', darkblue: '#00008B', darkcyan: '#008B8B', + darkgoldenrod: '#B8860B', darkgray: '#A9A9A9', darkgreen: '#006400', darkgrey: '#A9A9A9', darkkhaki: '#BDB76B', darkmagenta: '#8B008B', + darkolivegreen: '#556B2F', darkorange: '#FF8C00', darkorchid: '#9932CC', darkred: '#8B0000', darksalmon: '#E9967A', darkseagreen: '#8FBC8F', + darkslateblue: '#483D8B', darkslategray: '#2F4F4F', darkslategrey: '#2F4F4F', darkturquoise: '#00CED1', darkviolet: '#9400D3', + deeppink: '#FF1493', deepskyblue: '#00BFFF', dimgray: '#696969', dimgrey: '#696969', dodgerblue: '#1E90FF', firebrick: '#B22222', + floralwhite: '#FFFAF0', forestgreen: '#228B22', fuchsia: '#FF00FF', gainsboro: '#DCDCDC', ghostwhite: '#F8F8FF', gold: '#FFD700', + goldenrod: '#DAA520', gray: '#808080', green: '#008000', greenyellow: '#ADFF2F', grey: '#808080', honeydew: '#F0FFF0', hotpink: '#FF69B4', + indianred: '#CD5C5C', indigo: '#4B0082', ivory: '#FFFFF0', khaki: '#F0E68C', lavender: '#E6E6FA', lavenderblush: '#FFF0F5', lawngreen: '#7CFC00', + lemonchiffon: '#FFFACD', lightblue: '#ADD8E6', lightcoral: '#F08080', lightcyan: '#E0FFFF', lightgoldenrodyellow: '#FAFAD2', lightgray: '#D3D3D3', + lightgreen: '#90EE90', lightgrey: '#D3D3D3', lightpink: '#FFB6C1', lightsalmon: '#FFA07A', lightseagreen: '#20B2AA', lightskyblue: '#87CEFA', + lightslategray: '#778899', lightslategrey: '#778899', lightsteelblue: '#B0C4DE', lightyellow: '#FFFFE0', lime: '#00FF00', limegreen: '#32CD32', + linen: '#FAF0E6', magenta: '#FF00FF', maroon: '#800000', mediumaquamarine: '#66CDAA', mediumblue: '#0000CD', mediumorchid: '#BA55D3', + mediumpurple: '#9370DB', mediumseagreen: '#3CB371', mediumslateblue: '#7B68EE', mediumspringgreen: '#00FA9A', mediumturquoise: '#48D1CC', + mediumvioletred: '#C71585', midnightblue: '#191970', mintcream: '#F5FFFA', mistyrose: '#FFE4E1', moccasin: '#FFE4B5', navajowhite: '#FFDEAD', + navy: '#000080', oldlace: '#FDF5E6', olive: '#808000', olivedrab: '#6B8E23', orange: '#FFA500', orangered: '#FF4500', orchid: '#DA70D6', + palegoldenrod: '#EEE8AA', palegreen: '#98FB98', paleturquoise: '#AFEEEE', palevioletred: '#DB7093', papayawhip: '#FFEFD5', peachpuff: '#FFDAB9', + peru: '#CD853F', pink: '#FFC0CB', plum: '#DDA0DD', powderblue: '#B0E0E6', purple: '#800080', rebeccapurple: '#663399', red: '#FF0000', rosybrown: '#BC8F8F', + royalblue: '#4169E1', saddlebrown: '#8B4513', salmon: '#FA8072', sandybrown: '#F4A460', seagreen: '#2E8B57', seashell: '#FFF5EE', + sienna: '#A0522D', silver: '#C0C0C0', skyblue: '#87CEEB', slateblue: '#6A5ACD', slategray: '#708090', slategrey: '#708090', snow: '#FFFAFA', + springgreen: '#00FF7F', steelblue: '#4682B4', tan: '#D2B48C', teal: '#008080', thistle: '#D8BFD8', tomato: '#FF6347', turquoise: '#40E0D0', + violet: '#EE82EE', wheat: '#F5DEB3', white: '#FFFFFF', whitesmoke: '#F5F5F5', yellow: '#FFFF00', yellowgreen: '#9ACD32' +}; // 获取颜色之间的插值 function getValue(start, end, percent, index) { @@ -36,13 +52,15 @@ function calColor(colors, percent) { // rgb 颜色转换成数组 function rgb2arr(str) { const arr = []; + if (str.length === 4) { + str = `#${str[1]}${str[1]}${str[2]}${str[2]}${str[3]}${str[3]}`; + } arr.push(parseInt(str.substr(1, 2), 16)); arr.push(parseInt(str.substr(3, 2), 16)); arr.push(parseInt(str.substr(5, 2), 16)); return arr; } const colorCache = {}; -let iEl = null; const ColorUtil = { /** * 将颜色转换到 rgb 的格式 @@ -51,33 +69,29 @@ const ColorUtil = { */ toRGB(color) { // 如果已经是 rgb的格式 - if (color[0] === '#' && color.length === 7) { - const colorArray = rgb2arr(color); + let colorArray = [ 255, 255, 255, 255 ]; + if (ColorKeywords[color]) { // color name 2 hex + const hexColor = ColorKeywords[color]; + colorArray = rgb2arr(hexColor); + colorArray.push(255.0); + } + if (color[0] === '#' && (color.length === 7 || color.length === 4)) { // hex2array + colorArray = rgb2arr(color); colorArray.push(255.0); return colorArray; } - if (!iEl) { // 防止防止在页头报错 - iEl = createTmp(); - } - let rst; - if (colorCache[color]) { - rst = colorCache[color]; - } else { - iEl.style.color = color; - rst = document.defaultView.getComputedStyle(iEl, '').getPropertyValue('color'); - const matchs = RGB_REG.exec(rst); - const cArray = matchs[1].split(/\s*,\s*/); - if (cArray.length === 4) { - cArray[3] *= 255; + if (RGB_REG.test(color)) { + const matchs = RGB_REG.exec(color); + colorArray = matchs[1].split(/\s*,\s*/); + if (colorArray.length === 4) { + colorArray[3] *= 255; } - if (cArray.length === 3) { - cArray.push(255.0); + if (colorArray.length === 3) { + colorArray.push(255.0); } - - colorCache[color] = cArray; - rst = cArray; } - return rst; + colorCache[color] = colorArray; + return colorArray; }, // 转成 WebGl color buffer color2Arr(str) { diff --git a/src/core/controller/pick.js b/src/core/controller/pick.js index a27b79cde4..11d391978e 100644 --- a/src/core/controller/pick.js +++ b/src/core/controller/pick.js @@ -38,7 +38,8 @@ export default class PickContoller { } addPickMesh(mesh) { const pickmaterial = mesh.material.clone(); - pickmaterial.fragmentShader = pickingFragmentShader; + pickmaterial.defines.PICK = true; + // pickmaterial.fragmentShader = pickingFragmentShader; const pickingMesh = new THREE[mesh.type](mesh.geometry, pickmaterial); pickingMesh.name = mesh.name; pickingMesh.onBeforeRender = () => { diff --git a/src/core/engine/picking/pickingMaterial.js b/src/core/engine/picking/pickingMaterial.js index 49ded2d043..04dcd45d8d 100755 --- a/src/core/engine/picking/pickingMaterial.js +++ b/src/core/engine/picking/pickingMaterial.js @@ -7,6 +7,9 @@ export default function PickingMaterial(options) { uniforms: { u_zoom: { value: options.u_zoom || 1 } }, + defines: { + PICK: true + }, vertexShader: options.vs, fragmentShader: picking_frag, transparent: false diff --git a/src/core/engine/renderer.js b/src/core/engine/renderer.js index 4607a8fe3b..aedae63622 100644 --- a/src/core/engine/renderer.js +++ b/src/core/engine/renderer.js @@ -17,7 +17,7 @@ export default class Renderer { this.renderer.setPixelRatio(this.pixelRatio); this.renderer.gammaInput = true; this.renderer.gammaOutput = true; - this.renderer.shadowMap.enabled = true; + this.renderer.shadowMap.enabled = false; this.container.appendChild(this.renderer.domElement); } updateSize() { diff --git a/src/core/layer.js b/src/core/layer.js index 668e9756b2..f5f5354b9b 100644 --- a/src/core/layer.js +++ b/src/core/layer.js @@ -39,11 +39,12 @@ export default class Layer extends Base { attrs: {}, // 样式配置项 styleOptions: { - stroke: 'none', + stroke: [ 1, 1, 1, 1 ], strokeWidth: 1.0, opacity: 1.0, strokeOpacity: 1.0, - texture: false + texture: false, + blending: 'normal' }, destroyed: false, // 选中时的配置项 @@ -68,6 +69,8 @@ export default class Layer extends Base { this._object3D.renderOrder = this.get('zIndex') || 0; this._mapEventHandlers = []; const layerId = this._getUniqueId(); + this.set('layerId', layerId); + this.set('mapType', this.scene.mapType); this.layerId = layerId; this._activeIds = null; const world = scene._engine.world; @@ -75,7 +78,6 @@ export default class Layer extends Base { this.layerMesh = null; this.layerLineMesh = null; this._initEvents(); - } /** * 将图层添加加到 Object @@ -127,7 +129,23 @@ export default class Layer extends Base { this.set('visible', visible); this._object3D.visible = this.get('visible'); } + // 兼容瓦片source,非瓦片source + source(data, cfg = {}) { + // 根据Source类型判断,是不是瓦片图层 + if (this.scene.getTileSource(data)) { + this.set('layerType', 'tile'); + this.set('sourceOption', { + id: data, + ...cfg + }); + this.scene.style.addLayer(this); + // 初始化tiles + this.tiles = new THREE.Object3D(); + this._object3D.add(this.tiles); + return this; + } + if (data instanceof source) { this.layerSource = data; return this; @@ -244,9 +262,6 @@ export default class Layer extends Base { Util.assign(animateOptions, cfg); this.set('animateOptions', animateOptions); return this; - } - texture() { - } fitBounds() { const extent = this.layerSource.data.extent; @@ -276,13 +291,13 @@ export default class Layer extends Base { } _setAttrOptions(attrName, attrCfg) { const options = this.get('attrOptions'); - if (attrName === 'size' && this._zoomScale) { attrCfg.zoom = this.map.getZoom(); } options[attrName] = attrCfg; } _createAttrOption(attrName, field, cfg, defaultValues) { + const attrCfg = {}; attrCfg.field = field; if (cfg) { @@ -306,6 +321,10 @@ export default class Layer extends Base { } render() { + if (this.get('layerType') === 'tile') { + this.scene.style.update(this._attrs); + return this; + } this.init(); this.scene._engine.update(); return this; @@ -386,8 +405,8 @@ export default class Layer extends Base { const nextStyle = this.get('styleOptions'); if (preAttrs === undefined && preStyle === undefined) { // 首次渲染 // this._mapping(); + // this._scaleByZoom(); this._setPreOption(); - this._scaleByZoom(); this._initInteraction(); this._initMapEvent(); this.draw(); @@ -460,6 +479,7 @@ export default class Layer extends Base { this.scene.on('pick-' + this.layerId, e => { let { featureId, point2d, type } = e; // TODO 瓦片图层获取选中数据信息 + const lnglat = this.scene.containerToLngLat(point2d); let feature = null; let style = null; diff --git a/src/core/scene.js b/src/core/scene.js index 6786dde1db..bb6498cb66 100644 --- a/src/core/scene.js +++ b/src/core/scene.js @@ -3,12 +3,13 @@ import { LAYER_MAP } from '../layer'; import Base from './base'; import LoadImage from './image'; import FontAtlasManager from '../geom/buffer/point/text/font-manager'; -// import WorkerPool from './worker'; // import { MapProvider } from '../map/AMap'; import { getMap } from '../map/index'; import Global from '../global'; import { getInteraction } from '../interaction/index'; import { compileBuiltinModules } from '../geom/shader'; +import Style from './style'; +import { epsg3857 } from '@antv/geo-coord/lib/geo/crs/crs-epsg3857'; export default class Scene extends Base { getDefaultCfg() { return Global.scene; @@ -16,6 +17,7 @@ export default class Scene extends Base { constructor(cfg) { super(cfg); this._initMap(); + this.crs = epsg3857; // this._initAttribution(); // 暂时取消,后面作为组件去加载 this.addImage(); this.fontAtlasManager = new FontAtlasManager(); @@ -25,8 +27,8 @@ export default class Scene extends Base { _initEngine(mapContainer) { this._engine = new Engine(mapContainer, this); - this.registerMapEvent(); - // this._engine.run(); + // this.registerMapEvent(); + this._engine.run(); compileBuiltinModules(); } // 为pickup场景添加 object 对象 @@ -52,6 +54,7 @@ export default class Scene extends Base { const interaction = new Ctor({ layer: this }); interaction._onHashChange(); } + this.style = new Style(this, {}); this.emit('loaded'); this._engine.update(); }); @@ -66,6 +69,13 @@ export default class Scene extends Base { } } + // 添加 Tile Source + addTileSource(id, Sourcecfg) { + this.style.addSource(id, Sourcecfg); + } + getTileSource(id) { + return this.style.getSource(id); + } on(type, hander) { if (this.map) { this.map.on(type, hander); } super.on(type, hander); diff --git a/src/core/source.js b/src/core/source.js index cd22c837f5..dae12d9c07 100644 --- a/src/core/source.js +++ b/src/core/source.js @@ -33,7 +33,9 @@ export default class Source extends Base { // 数据转换 统计,聚合,分类 this._executeTrans(); // 坐标转换 - this._projectCoords(); + if (!this.get('projected')) { + this._projectCoords(); + } } setData(data, cfg = {}) { Object.assign(this._attrs, cfg); @@ -60,7 +62,7 @@ export default class Source extends Base { // dataArray: clone(this.originData.dataArray) // }; // TODO 关闭数据备份 this.data = this.originData; - if (this.data !== null) { + if (this.data !== null && !this.get('projected')) { this.data.extent = extent(this.data.dataArray); } } diff --git a/src/core/style.js b/src/core/style.js new file mode 100644 index 0000000000..2ffec1bcda --- /dev/null +++ b/src/core/style.js @@ -0,0 +1,85 @@ +import Base from '../core/base'; +import WorkerPool from '../worker/worker_pool'; +import throttle from '../util/throttle'; +import { toLngLat, Bounds } from '@antv/geo-coord'; +import SourceCache from '../source/source_cache'; +import WorkerController from '../worker/worker_controller'; +// 统一管理所有的Source +// 统一管理地图样式 +export default class Style extends Base { + constructor(scene, cfg) { + super(cfg); + this.scene = scene; + this._sourceCaches = {}; + this.WorkerPool = new WorkerPool(); + this._tileMap = {}; + this.WorkerController = new WorkerController(this.WorkerPool, this); + this.layerStyles = {}; + this.layers = []; + this.addMapEvent(); + } + addSource(id, sourceCfg) { + if (this._sourceCaches[id] !== undefined) { + throw new Error('SourceID 已存在'); + } + sourceCfg.sourceID = id; + this._sourceCaches[id] = new SourceCache(this.scene, sourceCfg); + } + getSource(id) { + return this._sourceCaches[id]; + } + addLayer(layer) { + const id = layer.layerId; + this.layers[id] = layer; + } + // 设置 + _addTileStyle(layerCfg) { + const layerid = layerCfg.layerId; + this.layerStyles[layerid] = layerCfg; + this._layerStyleGroupBySourceID(); + this.WorkerController.broadcast('setLayers', this.layerStyles); + // TODO 更新 style + + } + removeTileStyle(id) { + delete this.layerStyles[id]; + this._layerStyleGroupBySourceID(); + + } + _layerStyleGroupBySourceID() { + const sourceStyles = []; + // 支持VectorLayer + for (const layerId in this.layerStyles) { + const sourceID = this.layerStyles[layerId].sourceOption.id; + const sourcelayer = this.layerStyles[layerId].sourceOption.parser.sourceLayer; + if (!sourceStyles[sourceID]) sourceStyles[sourceID] = {}; + if (!sourceStyles[sourceID][sourcelayer]) sourceStyles[sourceID][sourcelayer] = []; + sourceStyles[sourceID][sourcelayer].push(this.layerStyles[layerId]); + } + this.sourceStyles = sourceStyles; + } + update(parameters) { + this._addTileStyle(parameters); + for (const key in this._sourceCaches) { + this._sourceCaches[key].update(this.layers, this.sourceStyles[key]); + } + + } + addMapEvent() { + this.mapEventHander = throttle(() => { + requestAnimationFrame(() => { + for (const key in this._sourceCaches) { + this._sourceCaches[key].update(this.layers, this.sourceStyles[key]); + } + }); + }, 200); + this.scene.map.on('zoomchange', this.mapEventHander); + this.scene.map.on('dragend', this.mapEventHander); + } + clearMapEvent() { + this.scene.map.off('zoomchange', this.mapEventHander); + this.scene.map.off('dragend', this.mapEventHander); + } + // 计算视野内的瓦片坐标 + +} diff --git a/src/core/three.js b/src/core/three.js index f832dfbf66..1ded90bb06 100644 --- a/src/core/three.js +++ b/src/core/three.js @@ -1,4 +1,5 @@ import 'three/src/polyfills.js'; +import { BufferAttribute } from 'three/src/core/BufferAttribute.js'; export * from 'three/src/constants.js'; export { Scene } from 'three/src/scenes/Scene.js'; export { WebGLRenderer } from 'three/src/renderers/WebGLRenderer.js'; @@ -30,7 +31,7 @@ export { DataTexture } from 'three/src/textures/DataTexture.js'; export { Color } from 'three/src/math/Color.js'; export { Float64BufferAttribute, - Float32BufferAttribute, + // Float32BufferAttribute, Uint32BufferAttribute, Int32BufferAttribute, Uint16BufferAttribute, @@ -43,3 +44,14 @@ export { export { InstancedBufferAttribute } from 'three/src/core/InstancedBufferAttribute' // export * from '../../build/three.js'; +function Float32BufferAttribute( array, itemSize, normalized ) { + if(Array.isArray( array )){ + array = new Float32Array( array ) + } + BufferAttribute.call( this, array, itemSize, normalized ); + +} + +Float32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Float32BufferAttribute.prototype.constructor = Float32BufferAttribute; +export { Float32BufferAttribute } \ No newline at end of file diff --git a/src/core/worker.js b/src/core/worker.js index 91fcc4dd56..8d23b7e603 100644 --- a/src/core/worker.js +++ b/src/core/worker.js @@ -1,4 +1,3 @@ -import Worker from '../worker/main.worker.js'; class WorkerPool { constructor(workerCount) { this.workerCount = workerCount || Math.max(Math.floor(window.navigator.hardwareConcurrency / 2), 1); diff --git a/src/geom/buffer/buffer.js b/src/geom/buffer/buffer.js new file mode 100644 index 0000000000..95b08d231a --- /dev/null +++ b/src/geom/buffer/buffer.js @@ -0,0 +1,124 @@ +import Base from '../../core/base'; +export default class BufferBase extends Base { + constructor(cfg) { + super(cfg); + this.attributes = { + }; + this.verticesCount = 0; + this.indexCount = 0; + this.indexArray = new Int32Array(0); + this._init(); + } + _init() { + this._calculateFeatures(); + this._initAttributes(); + this._buildFeatures(); + } + _initAttributes() { + this.attributes.positions = new Float32Array(this.verticesCount * 3); + this.attributes.colors = new Float32Array(this.verticesCount * 4); + this.attributes.pickingIds = new Float32Array(this.verticesCount); + this.attributes.sizes = new Float32Array(this.verticesCount); + this.attributes.pickingIds = new Float32Array(this.verticesCount); + if (this.get('uv')) { + this.attributes.uv = new Float32Array(this.verticesCount * 2); + } + this.indexArray = new Int32Array(this.indexCount); + } + addFeature() { + + } + // 更新渲染 + upload() { + + } + destroy() { + + } + resize() { + + } + checkIsClosed(points) { + const p1 = points[0][0]; + const p2 = points[0][points[0].length - 1]; + return (p1[0] === p2[0] && p1[1] === p2[1]); + } + concat(arrayType, arrays) { + let totalLength = 0; + for (const arr of arrays) { + totalLength += arr.length; + } + const arrayBuffer = new ArrayBuffer(totalLength * arrayType.BYTES_PER_ELEMENT); + let offset = 0; + const result = new arrayType(arrayBuffer); + for (const arr of arrays) { + result.set(arr, offset); + offset += arr.length; + } + return result; + } + _encodeArray(feature, num) { + const { color, id, pattern, size } = feature; + const { verticesOffset } = feature.bufferInfo; + const imagePos = this.get('imagePos'); + const start1 = verticesOffset; + for (let i = 0; i < num; i++) { + if (feature.hasOwnProperty('color')) { + this.attributes.colors[start1 * 4 + i * 4] = color[0]; + this.attributes.colors[start1 * 4 + i * 4 + 1] = color[1]; + this.attributes.colors[start1 * 4 + i * 4 + 2] = color[2]; + this.attributes.colors[start1 * 4 + i * 4 + 3] = color[3]; + + } + if (feature.hasOwnProperty('id')) { + this.attributes.pickingIds[start1 + i] = id; + } + if (feature.hasOwnProperty('size')) { + let size2 = size; + if (Array.isArray(size) && size.length === 2) { + size2 = [ size[0] ]; + } + if (!Array.isArray(size)) { + size2 = [ size ]; + } + this.attributes.sizes.set(size2, (start1 + i) * size2.length); + } + if (feature.hasOwnProperty('pattern')) { + + const patternPos = imagePos[pattern] || { x: 0, y: 0 }; + this.attributes.patterns[start1 * 2 + i * 2 ] = patternPos.x; + this.attributes.patterns[start1 * 2 + i * 2 + 1] = patternPos.y; + } + } + + } + _calculateWall(feature) { + const size = feature.size; + const { vertices, indexOffset, verticesOffset, faceNum } = feature.bufferInfo; + this._encodeArray(feature, faceNum * 4); + for (let i = 0; i < faceNum; i++) { + const prePoint = vertices.slice(i * 3, i * 3 + 3); + const nextPoint = vertices.slice(i * 3 + 3, i * 3 + 6); + this._calculateExtrudeFace(prePoint, nextPoint, verticesOffset + i * 4, indexOffset + i * 6, size); + feature.bufferInfo.verticesOffset += 4; + feature.bufferInfo.indexOffset += 6; + } + } + + _calculateExtrudeFace(prePoint, nextPoint, positionOffset, indexOffset, size) { + this.attributes.positions.set([ + prePoint[0], prePoint[1], size, + nextPoint[0], nextPoint[1], size, + prePoint[0], prePoint[1], 0, + nextPoint[0], nextPoint[1], 0 + ], + positionOffset * 3); + const indexArray = [ 1, 2, 0, 3, 2, 1 ].map(v => { return v + positionOffset; }); + if (this.get('uv')) { + this.attributes.uv.set([ 0.1, 0, 0, 0, 0.1, size / 2000, 0, size / 2000 ], positionOffset * 2); + } + this.indexArray.set(indexArray, indexOffset); + } + + +} diff --git a/src/geom/buffer/bufferBase.js b/src/geom/buffer/bufferBase.js deleted file mode 100644 index c6a802e71b..0000000000 --- a/src/geom/buffer/bufferBase.js +++ /dev/null @@ -1,404 +0,0 @@ -import Base from '../../core/base'; -import * as THREE from '../../core/three'; -import { faceNormals } from '../normals'; -import extrude from '../extrude'; - -export default class BufferBase extends Base { - constructor(cfg) { - super(cfg); - this.bufferStruct = { - }; - - this.geometryBuffer(); - } - geometryBuffer() { - } - _normals() { - const { position, indices, normals = [] } = this.bufferStruct; - - indices.forEach((index, i) => { - normals.push(faceNormals(index, position[i])); - }); - this.bufferStruct.normals = normals; - } - _extrude(coordinate, heightValue) { - const extrudeData = extrude(coordinate, heightValue); - return extrudeData; - } - _mergeAttributes(attributes) { - const lengths = {}; - - // Find array lengths - attributes.forEach(_attributes => { - for (const k in _attributes) { - if (!lengths[k]) { - lengths[k] = 0; - } - - lengths[k] += _attributes[k].length; - } - }); - - const mergedAttributes = {}; - - // Set up arrays to merge into - for (const k in lengths) { - mergedAttributes[k] = new Float32Array(lengths[k]); - } - - const lastLengths = {}; - - attributes.forEach(_attributes => { - for (const k in _attributes) { - if (!lastLengths[k]) { - lastLengths[k] = 0; - } - - mergedAttributes[k].set(_attributes[k], lastLengths[k]); - - lastLengths[k] += _attributes[k].length; - } - }); - - return mergedAttributes; - } - _toPolygonAttributes(polygon) { - // Three components per vertex per face (3 x 3 = 9) - const { style, indices, position, indexCount } = polygon; - const vertices = new Float32Array(indexCount * 3); - const normals = new Float32Array(indexCount * 3); - const colors = new Float32Array(indexCount * 4); - const pickingIds = new Float32Array(indexCount); - const pA = new THREE.Vector3(); - const pB = new THREE.Vector3(); - const pC = new THREE.Vector3(); - - const cb = new THREE.Vector3(); - const ab = new THREE.Vector3(); - let lastIndex = 0; - indices.forEach((indice, pIndex) => { - for (let i = 0; i < indice.length / 3; i++) { - let index = indice[i * 3]; - const color = style[pIndex].color; - const _pickingId = style[pIndex].id; - const ax = position[pIndex][index][0]; - const ay = position[pIndex][index][1]; - const az = position[pIndex][index][2]; - index = indice[i * 3 + 1]; - const bx = position[pIndex][index][0]; - const by = position[pIndex][index][1]; - const bz = position[pIndex][index][2]; - index = indice[i * 3 + 2]; - const cx = position[pIndex][index][0]; - const cy = position[pIndex][index][1]; - const cz = position[pIndex][index][2]; - - pA.set(ax, ay, az); - pB.set(bx, by, bz); - pC.set(cx, cy, cz); - - cb.subVectors(pC, pB); - ab.subVectors(pA, pB); - cb.cross(ab); - - cb.normalize(); - - const nx = cb.x; - const ny = cb.y; - const nz = cb.z; - - vertices[lastIndex * 9 + 0] = ax; - vertices[lastIndex * 9 + 1] = ay; - vertices[lastIndex * 9 + 2] = az; - - normals[lastIndex * 9 + 0] = nx; - normals[lastIndex * 9 + 1] = ny; - normals[lastIndex * 9 + 2] = nz; - - colors[lastIndex * 12 + 0] = color[0]; - colors[lastIndex * 12 + 1] = color[1]; - colors[lastIndex * 12 + 2] = color[2]; - colors[lastIndex * 12 + 3] = color[3]; - - - vertices[lastIndex * 9 + 3] = bx; - vertices[lastIndex * 9 + 4] = by; - vertices[lastIndex * 9 + 5] = bz; - - normals[lastIndex * 9 + 3] = nx; - normals[lastIndex * 9 + 4] = ny; - normals[lastIndex * 9 + 5] = nz; - - colors[lastIndex * 12 + 4] = color[0]; - colors[lastIndex * 12 + 5] = color[1]; - colors[lastIndex * 12 + 6] = color[2]; - colors[lastIndex * 12 + 7] = color[3]; - - vertices[lastIndex * 9 + 6] = cx; - vertices[lastIndex * 9 + 7] = cy; - vertices[lastIndex * 9 + 8] = cz; - - normals[lastIndex * 9 + 6] = nx; - normals[lastIndex * 9 + 7] = ny; - normals[lastIndex * 9 + 8] = nz; - - colors[lastIndex * 12 + 8] = color[0]; - colors[lastIndex * 12 + 9] = color[1]; - colors[lastIndex * 12 + 10] = color[2]; - colors[lastIndex * 12 + 11] = color[3]; - - pickingIds[lastIndex * 3 + 0] = _pickingId; - pickingIds[lastIndex * 3 + 1] = _pickingId; - pickingIds[lastIndex * 3 + 2] = _pickingId; - - lastIndex++; - } - }); - - const attributes = { - vertices, - normals, - colors, - pickingIds, - faceUv: new Float32Array(polygon.faceUv), - sizes: new Float32Array(polygon.sizes) - - }; - - return attributes; - } - _toPointShapeAttributes(polygon) { - // Three components per vertex per face (3 x 3 = 9) - const { style, indices, position, indexCount, shapes, sizes } = polygon; - const vertices = new Float32Array(indexCount * 3); - const shapePositions = new Float32Array(indexCount * 3); - const a_size = new Float32Array(indexCount * 3); - const normals = new Float32Array(indexCount * 3); - const colors = new Float32Array(indexCount * 4); - const pickingIds = new Float32Array(indexCount); - const pA = new THREE.Vector3(); - const pB = new THREE.Vector3(); - const pC = new THREE.Vector3(); - - const cb = new THREE.Vector3(); - const ab = new THREE.Vector3(); - let lastIndex = 0; - indices.forEach((indice, pIndex) => { - for (let i = 0; i < indice.length / 3; i++) { - let index = indice[i * 3]; - const color = style[pIndex].color; - const coor1 = position[pIndex]; - const size = sizes[pIndex]; - const _pickingId = style[pIndex].id; - const ax = shapes[pIndex][index][0]; - const ay = shapes[pIndex][index][1]; - const az = shapes[pIndex][index][2]; - index = indice[i * 3 + 1]; - const bx = shapes[pIndex][index][0]; - const by = shapes[pIndex][index][1]; - const bz = shapes[pIndex][index][2]; - index = indice[i * 3 + 2]; - const cx = shapes[pIndex][index][0]; - const cy = shapes[pIndex][index][1]; - const cz = shapes[pIndex][index][2]; - - pA.set(ax, ay, az); - pB.set(bx, by, bz); - pC.set(cx, cy, cz); - - cb.subVectors(pC, pB); - ab.subVectors(pA, pB); - cb.cross(ab); - - cb.normalize(); - - const nx = cb.x; - const ny = cb.y; - const nz = cb.z; - - vertices[lastIndex * 9 + 0] = coor1[0]; - vertices[lastIndex * 9 + 1] = coor1[1]; - vertices[lastIndex * 9 + 2] = coor1[2]; - - shapePositions[lastIndex * 9 + 0] = ax; - shapePositions[lastIndex * 9 + 1] = ay; - shapePositions[lastIndex * 9 + 2] = az; - - a_size[lastIndex * 9 + 0] = size[0]; - a_size[lastIndex * 9 + 1] = size[1]; - a_size[lastIndex * 9 + 2] = size[2]; - - normals[lastIndex * 9 + 0] = nx; - normals[lastIndex * 9 + 1] = ny; - normals[lastIndex * 9 + 2] = nz; - - colors[lastIndex * 12 + 0] = color[0]; - colors[lastIndex * 12 + 1] = color[1]; - colors[lastIndex * 12 + 2] = color[2]; - colors[lastIndex * 12 + 3] = color[3]; - - - vertices[lastIndex * 9 + 3] = coor1[0]; - vertices[lastIndex * 9 + 4] = coor1[1]; - vertices[lastIndex * 9 + 5] = coor1[2]; - - shapePositions[lastIndex * 9 + 3] = bx; - shapePositions[lastIndex * 9 + 4] = by; - shapePositions[lastIndex * 9 + 5] = bz; - - a_size[lastIndex * 9 + 3] = size[0]; - a_size[lastIndex * 9 + 4] = size[1]; - a_size[lastIndex * 9 + 5] = size[2]; - - normals[lastIndex * 9 + 3] = nx; - normals[lastIndex * 9 + 4] = ny; - normals[lastIndex * 9 + 5] = nz; - - colors[lastIndex * 12 + 4] = color[0]; - colors[lastIndex * 12 + 5] = color[1]; - colors[lastIndex * 12 + 6] = color[2]; - colors[lastIndex * 12 + 7] = color[3]; - - vertices[lastIndex * 9 + 6] = coor1[0]; - vertices[lastIndex * 9 + 7] = coor1[1]; - vertices[lastIndex * 9 + 8] = coor1[2]; - - - a_size[lastIndex * 9 + 6] = size[0]; - a_size[lastIndex * 9 + 7] = size[1]; - a_size[lastIndex * 9 + 8] = size[2]; - - shapePositions[lastIndex * 9 + 6] = cx; - shapePositions[lastIndex * 9 + 7] = cy; - shapePositions[lastIndex * 9 + 8] = cz; - - normals[lastIndex * 9 + 6] = nx; - normals[lastIndex * 9 + 7] = ny; - normals[lastIndex * 9 + 8] = nz; - - colors[lastIndex * 12 + 8] = color[0]; - colors[lastIndex * 12 + 9] = color[1]; - colors[lastIndex * 12 + 10] = color[2]; - colors[lastIndex * 12 + 11] = color[3]; - - pickingIds[lastIndex * 3 + 0] = _pickingId; - pickingIds[lastIndex * 3 + 1] = _pickingId; - pickingIds[lastIndex * 3 + 2] = _pickingId; - - lastIndex++; - } - }); - - const attributes = { - vertices, - normals, - colors, - pickingIds, - shapePositions, - a_size, - faceUv: new Float32Array(polygon.faceUv) - - }; - - return attributes; - } - _toPolygonLineAttributes(polygonline) { - const { style, indices, position, indexCount } = polygonline; - const vertices = new Float32Array(indexCount * 3); - const colors = new Float32Array(indexCount * 4); - const pickingIds = new Float32Array(indexCount); - let lastIndex = 0; - indices.forEach((indice, pIndex) => { - for (let i = 0; i < indice.length; i++) { - const index = indice[i]; - const color = style[pIndex].color; - const _pickingId = style[pIndex].id; - vertices[lastIndex * 3] = position[pIndex][index][0]; - vertices[lastIndex * 3 + 1] = position[pIndex][index][1]; - vertices[lastIndex * 3 + 2] = position[pIndex][index][2]; - colors[lastIndex * 4] = color[0]; - colors[lastIndex * 4 + 1] = color[1]; - colors[lastIndex * 4 + 2] = color[2]; - colors[lastIndex * 4 + 3] = color[3]; - pickingIds[lastIndex] = _pickingId; - lastIndex++; - } - }); - const attributes = { - vertices, - colors, - pickingIds - }; - - return attributes; - } - - _toPointsAttributes(point) { - const { style, position } = point; - const count = position.length; - const vertices = new Float32Array(count * 3); - const colors = new Float32Array(count * 4); - const sizes = new Float32Array(count); - const shapes = new Float32Array(count); - const pickingIds = new Float32Array(count); - position.forEach((pos, index) => { - vertices[index * 3] = pos[0]; - vertices[index * 3 + 1] = pos[1]; - vertices[index * 3 + 2] = pos[2]; - colors[index * 4] = style[index].color[0]; - colors[index * 4 + 1] = style[index].color[1]; - colors[index * 4 + 2] = style[index].color[2]; - colors[index * 4 + 3] = style[index].color[3]; - pickingIds[index] = style[index].id; - sizes[index] = style[index].size * window.devicePixelRatio; - if (style[index].shape) { shapes[index] = style[index].shape; } - }); - const attributes = { - vertices, - colors, - sizes, - shapes, - pickingIds - - }; - return attributes; - } - _generateTexture() { - // build a small canvas 32x64 and paint it in white - const canvas = document.createElement('canvas'); - canvas.width = 32; - canvas.height = 64; - const context = canvas.getContext('2d'); - // plain it in white - context.fillStyle = '#ffffff'; - context.fillRect(0, 0, 32, 64); - // draw the window rows - with a small noise to simulate light variations in each room - for (let y = 8; y < 64; y += 8) { - for (let x = 0; x < 32; x += 2) { - const value = Math.floor(Math.random() * 64); - context.fillStyle = 'rgb(' + [ value, value, value ].join(',') + ')'; - context.fillRect(x, y, 2, 4); - } - } - context.fillStyle = '#105CB3'; - context.fillRect(0, 60, 32, 64); - // build a bigger canvas and copy the small one in it - // This is a trick to upscale the texture without filtering - const canvas2 = document.createElement('canvas'); - canvas2.width = 512; - canvas2.height = 1024; - const context2 = canvas2.getContext('2d'); - // disable smoothing - context2.imageSmoothingEnabled = false; - context2.webkitImageSmoothingEnabled = false; - context2.mozImageSmoothingEnabled = false; - // then draw the image - context2.drawImage(canvas, 0, 0, canvas2.width, canvas2.height); - // return the just built canvas2 - const texture = new THREE.Texture(canvas2); - // texture.anisotropy = renderer.getMaxAnisotropy(); - texture.needsUpdate = true; - - return texture; - } -} diff --git a/src/geom/buffer/heatmap/grid_3d.js b/src/geom/buffer/heatmap/grid_3d.js new file mode 100644 index 0000000000..01b1e0bc51 --- /dev/null +++ b/src/geom/buffer/heatmap/grid_3d.js @@ -0,0 +1,89 @@ +import BufferBase from '../buffer'; +export default class Grid3D extends BufferBase { + _buildFeatures() { + const layerData = this.get('layerData'); + this._offset = 0; + const shapeType = this.get('shapeType'); + layerData.forEach(feature => { + this._calculateTop(feature); + if (shapeType === 'squareColumn') { + this._calculateWall(feature); + } + delete feature.bufferInfo; + }); + } + _initAttributes() { + super._initAttributes(); + this.attributes.miters = new Float32Array(this.verticesCount * 3); + this.attributes.normals = new Float32Array(this.verticesCount * 3); + } + _calculateFeatures() { + const layerData = this.get('layerData'); + const shapeType = this.get('shapeType'); + if (shapeType === 'squareColumn') { + this.verticesCount = layerData.length * 20; + } else { + this.verticesCount = layerData.length * 4; + } + this.indexCount = this.verticesCount * 1.5; + } + _calculateTop(feature) { + const [ x, y ] = feature.coordinates; + let { size } = feature; + + feature.bufferInfo = { + verticesOffset: this._offset + }; + const shapeType = this.get('shapeType'); + if (shapeType !== 'squareColumn') { + size = 0; + } + this._encodeArray(feature, 4); + this.attributes.positions.set([ x, y, size, x, y, size, x, y, size, x, y, size ], this._offset * 3); + this.attributes.miters.set([ -1, 1, 1, 1, 1, 1, -1, -1, 1, 1, -1, 1 ], this._offset * 3); + this.attributes.normals.set([ 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1 ], this._offset * 3); // top normal + const indexArray = [ 0, 2, 1, 2, 3, 1 ].map(v => { return v + this._offset; }); + this.indexArray.set(indexArray, this._offset * 1.5); + this._offset += 4; + } + _calculateWall(feature) { + const { size } = feature; + const [ x, y ] = feature.coordinates; + const vertices = [ 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1 ]; + feature.bufferInfo = { + verticesOffset: this._offset + }; + this._encodeArray(feature, 20); + // front left, back right + this.attributes.normals.set([ + 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, // bottom + -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, // left + 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, // top + 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0 // right + ], this._offset * 3); // top normal + + for (let i = 0; i < 4; i++) { + this.attributes.positions.set([ x, y, 1, x, y, 1, x, y, 1, x, y, 1 ], this._offset * 3); + const prePoint = vertices.slice(i * 3, i * 3 + 3); + const nextPoint = vertices.slice(i * 3 + 3, i * 3 + 6); + this._calculateExtrudeFace(prePoint, nextPoint, this._offset, this._offset * 1.5, size); + this._offset += 4; + } + } + _calculateExtrudeFace(prePoint, nextPoint, positionOffset, indexOffset, size) { + this.attributes.miters.set([ + prePoint[0], prePoint[1], size, + nextPoint[0], nextPoint[1], size, + prePoint[0], prePoint[1], 0, + nextPoint[0], nextPoint[1], 0 + ], + positionOffset * 3); + const indexArray = [ 0, 1, 2, 1, 3, 2 ].map(v => { return v + positionOffset; }); + if (this.get('uv')) { + // temp 点亮城市demo + this.attributes.uv.set([ 0.1, 0, 0, 0, 0.1, size / 2000, 0, size / 2000 ], positionOffset * 2); + } + this.indexArray.set(indexArray, indexOffset); + } + +} diff --git a/src/geom/buffer/heatmap/heatmap.js b/src/geom/buffer/heatmap/heatmap.js index dac3f1aca0..e59c43c8b4 100644 --- a/src/geom/buffer/heatmap/heatmap.js +++ b/src/geom/buffer/heatmap/heatmap.js @@ -1,10 +1,14 @@ -import BufferBase from '../bufferBase'; +// import BufferBase from '../bufferBase'; import { colorScales } from '../../../attr/colorscales'; import * as THREE from '../../../core/three'; +import Base from '../../../core/base'; - -export default class HeatmapBuffer extends BufferBase { - geometryBuffer() { +export default class HeatmapBuffer extends Base { + constructor(cfg) { + super(cfg); + this.init(); + } + init() { const data = this.get('data'); const positions = []; const dirs = []; diff --git a/src/geom/buffer/heatmap/hexagon.js b/src/geom/buffer/heatmap/hexagon.js deleted file mode 100644 index eb95ef5d5b..0000000000 --- a/src/geom/buffer/heatmap/hexagon.js +++ /dev/null @@ -1,31 +0,0 @@ -import { fill } from '../../shape/polygon'; -export default function hexagonBuffer(layerData) { - const attribute = { - vertices: [], - miter: [], - colors: [], - pickingIds: [] - }; - const a = Math.cos(Math.PI / 6); - const points = [ - [ 0, -1, 0 ], - [ -a, -0.5, 0 ], - [ -a, 0.5, 0 ], - [ 0, 1, 0 ], - [ a, 0.5, 0 ], - [ a, -0.5, 0 ], - [ 0, -1, 0 ] - ]; - // const hexgonPoints = polygonPath(6); - const hexgonFill = fill([ points ]); - const { positionsIndex, positions } = hexgonFill; - layerData.forEach(element => { - positionsIndex.forEach(pointIndex => { - attribute.vertices.push(...element.coordinates); - attribute.miter.push(positions[pointIndex][0], positions[pointIndex][1]); - attribute.pickingIds.push(element.id); - attribute.colors.push(...element.color); - }); - }); - return attribute; -} diff --git a/src/geom/buffer/heatmap/hexagon_3d.js b/src/geom/buffer/heatmap/hexagon_3d.js new file mode 100644 index 0000000000..aec1e3936e --- /dev/null +++ b/src/geom/buffer/heatmap/hexagon_3d.js @@ -0,0 +1,40 @@ +/** + * instantcebufferGeometry的组装方式 + */ +import BufferBase from '../buffer'; +import { fillPolygon, extrude_Polygon } from '../../extrude'; +import Global from '../../../global'; +import * as shapePath from '../../shape/path'; + +export default class Hexagon3D extends BufferBase { + _buildFeatures() { + const layerData = this.get('layerData'); + this._offset = 0; + + layerData.forEach(feature => { + this._calculateFill(feature); + }); + } + _calculateFeatures() { + const shape = this.get('shapeType'); + const hexgonFill = this.getShape(shape); + const layerData = this.get('layerData'); + this.verticesCount = layerData.length; + this.indexCount = 0; + this.instanceGeometry = hexgonFill; + } + _calculateFill(feature) { + + feature.bufferInfo = { verticesOffset: this._offset }; + const { coordinates } = feature; + this._encodeArray(feature, 1); + this.attributes.positions.set(coordinates, this._offset * 3); + this._offset++; + } + getShape(shape) { + const { pointShape } = Global; + if (pointShape['3d'].indexOf(shape) !== -1) return extrude_Polygon([ shapePath[shape]() ]); + if (pointShape['2d'].indexOf(shape) !== -1) return fillPolygon([ shapePath[shape]() ]); + return fillPolygon([ shapePath[shape]() ]); + } +} diff --git a/src/geom/buffer/image.js b/src/geom/buffer/image.js index 5c69a4abf5..e9121c68cb 100644 --- a/src/geom/buffer/image.js +++ b/src/geom/buffer/image.js @@ -1,9 +1,13 @@ -import BufferBase from './bufferBase'; +// import BufferBase from './bufferBase'; import Util from '../../util'; import * as THREE from '../../core/three'; - -export default class ImageBuffer extends BufferBase { - geometryBuffer() { +import Base from '../../core/base'; +export default class ImageBuffer extends Base { + constructor(cfg) { + super(cfg); + this.init(); + } + init() { const layerData = this.get('layerData'); const coordinates = layerData[0].coordinates; const images = layerData[0].images; diff --git a/src/geom/buffer/index.js b/src/geom/buffer/index.js index 83358989c5..fab4308559 100644 --- a/src/geom/buffer/index.js +++ b/src/geom/buffer/index.js @@ -1,5 +1,46 @@ -export { default as PolygonBuffer } from './polygon'; -export { default as PointBuffer } from './point'; -export { default as LineBuffer } from './line'; -export { default as polygonLineBuffer } from './polygon-line'; -// export { default as textBuffer } from './textBuffer'; + +// Polygon + +import FillBuffer from './polygon/fill_buffer'; +import LineBuffer from './polygon/line_buffer'; +import ExtrudeBuffer from './polygon/extrude_buffer'; +// Point +import PointFillBuffer from './point/fill_buffer2'; + +// Line +import MeshLineBuffer from './line/meshline'; +import ArcLineBuffer from './line/arcline'; + +// heatmap + +import Grid3D from './heatmap/grid_3d'; +import Hexagon3D from './heatmap/hexagon_3d'; + +// 3D Shape +import Shape_3D from './point/extrude_buffer'; + +import { registerBuffer, getBuffer } from './factory'; + +// Point +registerBuffer('point', 'fill', PointFillBuffer); + +// polygon +registerBuffer('polygon', 'fill', FillBuffer); +registerBuffer('polygon', 'extrude', ExtrudeBuffer); +registerBuffer('polygon', 'line', LineBuffer); + +// line +registerBuffer('line', 'line', MeshLineBuffer); +registerBuffer('line', 'arc', ArcLineBuffer); +registerBuffer('line', 'greatCircle', ArcLineBuffer); + +// heatmap + +// registerBuffer('heatmap', 'square', Grid3D); +// registerBuffer('heatmap', 'squareColumn', Grid3D); +registerBuffer('heatmap', 'shape', Hexagon3D); +registerBuffer('point', 'shape', Hexagon3D); +// 3D Shape + +registerBuffer('shape', 'extrude', Shape_3D); +export { getBuffer }; diff --git a/src/geom/buffer/line/arcline.js b/src/geom/buffer/line/arcline.js new file mode 100644 index 0000000000..cdd5bcdd2b --- /dev/null +++ b/src/geom/buffer/line/arcline.js @@ -0,0 +1,35 @@ +import BufferBase from '../buffer'; +export default class ArcLineBuffer extends BufferBase { + _buildFeatures() { + const layerData = this.get('layerData'); + layerData.forEach((feature, index) => { + this._calculateArc(feature, index); + }); + } + _initAttributes() { + super._initAttributes(); + this.attributes.instanceArray = new Float32Array(this.verticesCount * 4); + } + _calculateArc(feature, offset) { + const { segNum = 30 } = this.get('style'); + const { coordinates } = feature; + for (let i = 0; i < segNum; i++) { + this.attributes.positions.set([ i, 1, i, i, -1, i ], offset * segNum * 6 + i * 6); + this.attributes.instanceArray.set([ coordinates[0][0], coordinates[0][1], coordinates[1][0], coordinates[1][1], + coordinates[0][0], coordinates[0][1], coordinates[1][0], coordinates[1][1] ], offset * segNum * 8 + i * 8); + if (i !== segNum - 1) { + const indexArray = [ 0, 1, 2, 1, 3, 2 ].map(v => { return offset * segNum * 2 + i * 2 + v; }); + this.indexArray.set(indexArray, offset * segNum * 6 + i * 6 - offset * 6); + } + } + feature.bufferInfo = { verticesOffset: offset * segNum * 2 }; + this._encodeArray(feature, segNum * 2); + + } + _calculateFeatures() { + const layerData = this.get('layerData'); + const segNum = this.get('segNum') || 30; + this.verticesCount = layerData.length * segNum * 2; + this.indexCount = this.verticesCount * 3 - layerData.length * 6; + } +} diff --git a/src/geom/buffer/line/meshline.js b/src/geom/buffer/line/meshline.js new file mode 100644 index 0000000000..196e381e2c --- /dev/null +++ b/src/geom/buffer/line/meshline.js @@ -0,0 +1,62 @@ +import BufferBase from '../buffer'; +import getNormals from '../../../util/polyline-normals'; +export default class MeshLineBuffer extends BufferBase { + _buildFeatures() { + const layerData = this.get('layerData'); + layerData.forEach(feature => { + this._calculateLine(feature); + delete feature.bufferInfo; + }); + } + _initAttributes() { + super._initAttributes(); + this.attributes.dashArray = new Float32Array(this.verticesCount); + this.attributes.attrDistance = new Float32Array(this.verticesCount); + this.attributes.totalDistances = new Float32Array(this.verticesCount); + this.attributes.patterns = new Float32Array(this.verticesCount * 2); + this.attributes.miters = new Float32Array(this.verticesCount); + this.attributes.normals = new Float32Array(this.verticesCount * 3); + } + _calculateFeatures() { + const layerData = this.get('layerData'); + // 计算长 + layerData.forEach(feature => { + const bufferInfo = {}; + let { coordinates } = feature; + if (Array.isArray(coordinates[0][0])) { + coordinates = coordinates[0]; + } + const { normals, attrIndex, attrPos, attrDistance, miters } = getNormals(coordinates, false, this.verticesCount); + bufferInfo.normals = normals; + bufferInfo.arrayIndex = attrIndex; + bufferInfo.positions = attrPos; + bufferInfo.attrDistance = attrDistance; + bufferInfo.miters = miters; + bufferInfo.verticesOffset = this.verticesCount; + bufferInfo.indexOffset = this.indexCount; + this.verticesCount += attrPos.length / 3; + this.indexCount += attrIndex.length; + feature.bufferInfo = bufferInfo; + }); + } + _calculateLine(feature) { + const { normals, arrayIndex, positions, attrDistance, miters, verticesOffset, indexOffset } = feature.bufferInfo; + const { dashArray = 200 } = this.get('style'); + + this._encodeArray(feature, positions.length / 3); + const totalLength = attrDistance[attrDistance.length - 1]; + // 增加长度 + const totalDistances = Array(positions.length / 3).fill(totalLength); + // 虚线比例 + const ratio = dashArray / totalLength; + const dashArrays = Array(positions.length / 3).fill(ratio); + this.attributes.positions.set(positions, verticesOffset * 3); + this.indexArray.set(arrayIndex, indexOffset); + this.attributes.miters.set(miters, verticesOffset); + this.attributes.normals.set(normals, verticesOffset * 3); + this.attributes.attrDistance.set(attrDistance, verticesOffset); + this.attributes.totalDistances.set(totalDistances, verticesOffset); + this.attributes.dashArray.set(dashArrays, verticesOffset); + } + +} diff --git a/src/geom/buffer/point.js b/src/geom/buffer/point.js deleted file mode 100644 index 36b0aac3f1..0000000000 --- a/src/geom/buffer/point.js +++ /dev/null @@ -1,127 +0,0 @@ -import BufferBase from './bufferBase'; -import { regularShape } from '../shape/index'; -import * as polygonPath from '../shape/path'; -import * as polygonShape from '../shape/polygon'; -import * as lineShape from '../shape/line'; -import Global from '../../global'; -import Util from '../../util'; -const { pointShape } = Global; -export default class PointBuffer extends BufferBase { - geometryBuffer() { - const type = this.get('type'); - switch (type) { - case 'image' : this._imageBuffer(); - break; - case '2d': this._3dRegularBuffer(); - break; - case '3d': this._3dRegularBuffer(); - break; - case 'Model':this._ModelBuffer(); - break; - default: - this._sdfRegularBuffer(); - - } - } - _imageBuffer() { - const coordinates = this.get('coordinates'); - const properties = this.get('properties'); - const imagePos = this.get('imagePos'); - const uv = new Float32Array(properties.length * 2); - for (let i = 0; i < properties.length; i++) { - const { x, y } = imagePos[properties[i].shape]; - uv[i * 2] = x; - uv[i * 2 + 1] = y; - - } - this.bufferStruct.position = coordinates; - this.bufferStruct.uv = uv; - this.bufferStruct.style = properties; - this.attributes = this._toPointsAttributes(this.bufferStruct); - this.attributes.uvs = uv; - } - _sdfRegularBuffer() { - const coordinates = this.get('coordinates'); - const properties = this.get('properties'); - this.bufferStruct.position = coordinates; - this.bufferStruct.style = properties; - this.attributes = this._toPointsAttributes(this.bufferStruct); - } - _3dRegularBuffer() { - const lineAttribute = { - shapes: [], - normal: [], - miter: [], - indexArray: [], - sizes: [], - positions: [] - }; - const coordinates = this.get('coordinates'); - const properties = this.get('properties'); - const style = this.get('style'); - const type = this.get('type'); - const positions = []; - const shapes = []; - const sizes = []; - const uvs = []; - const positionsIndex = []; - let indexCount = 0; - this.bufferStruct.style = properties; - coordinates.forEach((geo, index) => { - let { size, shape } = properties[index]; - // let shapeType = ''; - - if (type === '2d' || (type === '3d' && size[2] === 0)) { - // let shapeType = 'fill'; - Util.isArray(size) || (size = [ size, size, 0 ]); - } else { - Util.isArray(size) || (size = [ size, size, size ]); - } - if (regularShape[shape] == null) { - uvs.push(0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0); - shape = 'square'; - } - properties[index].size = size; - - const [ vert, polygonLine ] = this._getShape(properties[index], style, lineAttribute.miter.length); - polygonLine.miter.forEach(() => { - lineAttribute.positions.push(...geo); - lineAttribute.sizes.push(...size); - }); - - lineAttribute.shapes.push(...polygonLine.positions); - lineAttribute.normal.push(...polygonLine.normal); - lineAttribute.miter.push(...polygonLine.miter); - lineAttribute.indexArray.push(...polygonLine.indexArray); - - shapes.push(vert.positions); - positions.push(geo); - sizes.push(size); - positionsIndex.push(vert.positionsIndex); - indexCount += vert.positionsIndex.length; - }); - this.bufferStruct.indices = positionsIndex; - this.bufferStruct.position = positions; - this.bufferStruct.indexCount = indexCount; - this.bufferStruct.shapes = shapes; - this.bufferStruct.sizes = sizes; - this.bufferStruct.faceUv = uvs; - this.attributes = this._toPointShapeAttributes(this.bufferStruct); - this.lineAttribute = lineAttribute; - } - _getShape(props, style, positionsIndex) { - const { shape } = props; - const { stroke, strokeWidth } = style; - const path = polygonPath[shape](); - let polygon = null; - let polygonLine = null; - if (pointShape['3d'].indexOf(shape) === -1) { - polygon = polygonShape.fill([ path ]); - polygonLine = lineShape.Line(path, { size: [ strokeWidth, 0 ], color: stroke }, positionsIndex); - } else { - polygon = polygonShape.extrude([ path ]); - } - return [ polygon, polygonLine ]; - } - -} diff --git a/src/geom/buffer/point/extrude_buffer.js b/src/geom/buffer/point/extrude_buffer.js new file mode 100644 index 0000000000..86e5a923bf --- /dev/null +++ b/src/geom/buffer/point/extrude_buffer.js @@ -0,0 +1,82 @@ +/** + * bufferGeometry的顶点组装方式 + */ +import BufferBase from '../buffer'; +import Global from '../../../global'; +import { fillPolygon, extrude_Polygon } from '../../extrude'; +import { polygonPath } from '../../shape/path'; +import * as shapePath from '../../shape/path'; +export default class ExtrudeBuffer extends BufferBase { + + _buildFeatures() { + const layerData = this.get('layerData'); + this._offset = 0; + this._indexOffset = 0; + + layerData.forEach(feature => { + this._calculateFill(feature); + }); + } + _initAttributes() { + super._initAttributes(); + this.attributes.miters = new Float32Array(this.verticesCount * 3); + this.attributes.normals = new Float32Array(this.verticesCount * 3); + this.attributes.sizes = new Float32Array(this.verticesCount * 3); + } + _calculateFeatures() { + const layerData = this.get('layerData'); + this.geometryMap = {}; + layerData.forEach(feature => { + const { shape } = feature; + const { positions, indexArray } = this.getShape(shape); + this.verticesCount += positions.length / 3; + this.indexCount += indexArray.length; + }); + } + _calcultateGeometry() { + const shape = this.get('shapeType'); + const hexgonFill = this.getShapeFunction(shape)([ this._getPoints(6) ]); + this.instanceGeometry = hexgonFill; + } + _calculateFill(feature) { + + feature.bufferInfo = { verticesOffset: this._offset }; + const { coordinates, shape } = feature; + const instanceGeometry = this.getShape(shape); + const numPoint = instanceGeometry.positions.length / 3; + this._encodeArray(feature, numPoint); + this.attributes.miters.set(instanceGeometry.positions, this._offset * 3); + const indexArray = instanceGeometry.indexArray.map(v => { return v + this._offset; }); + this.indexArray.set(indexArray, this._indexOffset); + if (instanceGeometry.normals) { + this.attributes.normals.set(instanceGeometry.normals, this._offset * 3); + } + const position = []; + for (let i = 0; i < numPoint; i++) { + position.push(...coordinates); + } + this.attributes.positions.set(position, this._offset * 3); + this._offset += numPoint; + this._indexOffset += indexArray.length; + } + _getPoints(num) { + return polygonPath(num, 1); + } + getShape(shape) { + const { pointShape } = Global; + + if (this.geometryMap[shape]) { + return this.geometryMap[shape]; + } + let geometry = null; + if (pointShape['3d'].indexOf(shape) !== -1) { + geometry = extrude_Polygon([ shapePath[shape]() ]); + } else if (pointShape['2d'].indexOf(shape) !== -1) { + geometry = fillPolygon([ shapePath[shape]() ]); + } else { + geometry = fillPolygon([ shapePath[shape]() ]); + } + this.geometryMap[shape] = geometry; + return geometry; + } +} diff --git a/src/geom/buffer/point/circleBuffer.js b/src/geom/buffer/point/fill_buffer.js similarity index 77% rename from src/geom/buffer/point/circleBuffer.js rename to src/geom/buffer/point/fill_buffer.js index 1a477b2dee..5b3591e2af 100644 --- a/src/geom/buffer/point/circleBuffer.js +++ b/src/geom/buffer/point/fill_buffer.js @@ -11,15 +11,17 @@ const LEFT_SHIFT21 = 2097152.0; const LEFT_SHIFT23 = 8388608.0; // const LEFT_SHIFT24 = 16777216.0; -export default function circleBuffer(layerData) { +export default function FillBuffer(data) { const index = []; const aPosition = []; const aPackedData = []; - + const { layerData } = data; layerData.forEach(({ size = 0, color, id, coordinates, shape }, i) => { - const shapeIndex = pointShape['2d'].indexOf(shape) || 0; - + let newCoord = coordinates; + if (coordinates.length === 1) { + newCoord = coordinates[0][0]; + } if (isNaN(size)) { size = 0; } @@ -46,14 +48,15 @@ export default function circleBuffer(layerData) { id ); }); - // TODO:如果使用相对瓦片坐标,还可以进一步压缩 - aPosition.push(...coordinates, ...coordinates, ...coordinates, ...coordinates); + aPosition.push(...newCoord, ...newCoord, ...newCoord, ...newCoord); index.push(...[ 0, 1, 2, 0, 2, 3 ].map(n => n + i * 4)); }); return { - aPosition, - index, - aPackedData + attributes: { + aPosition: new Float32Array(aPosition), + aPackedData: new Float32Array(aPackedData) + }, + indexArray: new Int32Array(index) }; } diff --git a/src/geom/buffer/point/fill_buffer2.js b/src/geom/buffer/point/fill_buffer2.js new file mode 100644 index 0000000000..119eed6682 --- /dev/null +++ b/src/geom/buffer/point/fill_buffer2.js @@ -0,0 +1,79 @@ +import BufferBase from '../buffer'; +import Global from '../../../global'; +import { fillPolygon, extrude_Polygon } from '../../extrude'; +import { polygonPath } from '../../shape/path'; +import * as shapePath from '../../shape/path'; +const { pointShape } = Global; +export default class PointFillBuffer extends BufferBase { + + _buildFeatures() { + const layerData = this.get('layerData'); + this._offset = 0; + this._indexOffset = 0; + + layerData.forEach(feature => { + this._calculateFill(feature); + }); + } + _initAttributes() { + super._initAttributes(); + this.attributes.miters = new Float32Array(this.verticesCount * 2); + this.attributes.sizes = new Float32Array(this.verticesCount); + this.attributes.shapes = new Float32Array(this.verticesCount); + } + _calculateFeatures() { + const layerData = this.get('layerData'); + this.verticesCount = layerData.length * 4; + this.indexCount = layerData.length * 6; + } + _calcultateGeometry() { + const shape = this.get('shapeType'); + const hexgonFill = this.getShapeFunction(shape)([ this._getPoints(6) ]); + this.instanceGeometry = hexgonFill; + } + _calculateFill(feature) { + + feature.bufferInfo = { verticesOffset: this._offset }; + const { coordinates, shape } = feature; + const shapeIndex = pointShape['2d'].indexOf(shape) || 0; + let newCoord = coordinates; + if (coordinates.length === 1) { + newCoord = coordinates[0][0]; + } + feature.bufferInfo = { + verticesOffset: this._offset + }; + this._encodeArray(feature, 4); + this.attributes.shapes.set([ shapeIndex, shapeIndex, shapeIndex, shapeIndex ], this._offset); + this.attributes.miters.set([ -1, -1, 1, -1, 1, 1, -1, 1 ], this._offset * 2); + const indexArray = [ 0, 1, 2, 0, 2, 3 ].map(n => n + this._offset); + this.indexArray.set(indexArray, this._offset * 1.5); + + const position = []; + for (let i = 0; i < 4; i++) { + position.push(...newCoord); + } + this.attributes.positions.set(position, this._offset * 3); + this._offset += 4; + } + _getPoints(num) { + return polygonPath(num, 1); + } + getShape(shape) { + const { pointShape } = Global; + + if (this.geometryMap[shape]) { + return this.geometryMap[shape]; + } + let geometry = null; + if (pointShape['3d'].indexOf(shape) !== -1) { + geometry = extrude_Polygon([ shapePath[shape]() ]); + } else if (pointShape['2d'].indexOf(shape) !== -1) { + geometry = fillPolygon([ shapePath[shape]() ]); + } else { + geometry = fillPolygon([ shapePath[shape]() ]); + } + this.geometryMap[shape] = geometry; + return geometry; + } +} diff --git a/src/geom/buffer/point/imageBuffer.js b/src/geom/buffer/point/image_buffer.js similarity index 100% rename from src/geom/buffer/point/imageBuffer.js rename to src/geom/buffer/point/image_buffer.js diff --git a/src/geom/buffer/point/index.js b/src/geom/buffer/point/index.js index cfc406f5bc..988a46cf22 100644 --- a/src/geom/buffer/point/index.js +++ b/src/geom/buffer/point/index.js @@ -1,5 +1,5 @@ export { default as FillBuffer } from './fillBuffer'; export { default as StrokeBuffer } from './strokeBuffer'; -export { default as ImageBuffer } from './imageBuffer'; +export { default as ImageBuffer } from './image_buffer'; export { default as NormalBuffer } from './normalBuffer'; -export { default as CircleBuffer } from './circleBuffer'; +export { default as CircleBuffer } from './fill_buffer'; diff --git a/src/geom/buffer/polygon-line.js b/src/geom/buffer/polygon-line.js deleted file mode 100644 index d426d85855..0000000000 --- a/src/geom/buffer/polygon-line.js +++ /dev/null @@ -1,35 +0,0 @@ -import { polygonShape } from '../shape/index'; -import BufferBase from './bufferBase'; -export default class polygonLineBuffer extends BufferBase { - - geometryBuffer() { - const coordinates = this.get('coordinates'); - const properties = this.get('properties'); - const shape = this.get('shape'); - const positions = []; - const positionsIndex = []; - let vertsCount = 0; - this.bufferStruct.style = properties; - const isExtrude = properties[0].hasOwnProperty('size'); - coordinates.forEach((geo, index) => { - const heightValue = properties[index].size; - let extrudeData = []; - if (isExtrude && shape === 'extrudeline') { - extrudeData = polygonShape.extrudeline(geo); - extrudeData.positions = extrudeData.positions.map(pos => { - pos[2] *= heightValue; - return pos; - }); - } else { - extrudeData = polygonShape.line(geo); - } - positions.push(extrudeData.positions); - positionsIndex.push(...extrudeData.positionsIndex.map(index => { return index + vertsCount; })); - - vertsCount += extrudeData.positions.length; - }); - this.bufferStruct.indexs = positionsIndex; - this.bufferStruct.verts = positions; - this.bufferStruct.vertsCount = vertsCount; - } -} diff --git a/src/geom/buffer/polygon.js b/src/geom/buffer/polygon.js deleted file mode 100644 index ab2d6c2aea..0000000000 --- a/src/geom/buffer/polygon.js +++ /dev/null @@ -1,64 +0,0 @@ -import { polygonShape } from '../shape'; -import BufferBase from './bufferBase'; -export default class PolygonBuffer extends BufferBase { - - geometryBuffer() { - const layerData = this.get('layerData'); - const shape = this.get('shape'); - const positions = []; - const faceUv = []; - const sizes = []; - const positionsIndex = []; - let indexCount = 0; - this.bufferStruct.style = layerData; - const isExtrude = layerData[0].hasOwnProperty('size'); - // indices, normals, colors, UVs - layerData.forEach(item => { - const heightValue = item.size; - let extrudeData = polygonShape[shape](item.coordinates); - if (isExtrude && shape === 'extrude') { - extrudeData = polygonShape.extrude(item.coordinates); - extrudeData.positions = extrudeData.positions.map(pos => { - pos[2] *= heightValue; - return pos; - }); - } - positions.push(extrudeData.positions); - - if (shape !== 'line') { - // faceUv.push(...extrudeData.faceUv); - const count = extrudeData.faceUv.length / 2; - for (let i = 0; i < count; i++) { - // uv 系数生成等大小的窗户 - let x = extrudeData.faceUv[i * 2]; - let y = extrudeData.faceUv[i * 2 + 1]; - if (x !== -1) { - x = x * 0.1; - y = y * heightValue / 2000; - } - faceUv.push(x, y); - sizes.push((1.0 - extrudeData.faceUv[i * 2 + 1]) * heightValue); - } - - } - indexCount += extrudeData.positionsIndex.length; - positionsIndex.push(extrudeData.positionsIndex); - }); - this.bufferStruct.indices = positionsIndex; - this.bufferStruct.position = positions; - this.bufferStruct.indexCount = indexCount; - this.bufferStruct.style = layerData; - this.bufferStruct.faceUv = faceUv; - this.bufferStruct.sizes = sizes; - if (shape !== 'line') { - this.attributes = this._toPolygonAttributes(this.bufferStruct); - this.faceTexture = this._generateTexture(); - } else { - this.attributes = this._toPolygonLineAttributes(this.bufferStruct); - - - } - } - - -} diff --git a/src/geom/buffer/polygon/extrude_buffer.js b/src/geom/buffer/polygon/extrude_buffer.js new file mode 100644 index 0000000000..bf173ee9a1 --- /dev/null +++ b/src/geom/buffer/polygon/extrude_buffer.js @@ -0,0 +1,55 @@ +import BufferBase from '../buffer'; +import earcut from 'earcut'; +export default class ExtrudeButffer extends BufferBase { + + _buildFeatures() { + const layerData = this.get('layerData'); + layerData.forEach(feature => { + this._calculateTop(feature); + this._calculateWall(feature); + delete feature.bufferInfo; + }); + } + + _calculateFeatures() { + const layerData = this.get('layerData'); + // 计算长 + layerData.forEach(feature => { + const { coordinates } = feature; + const bufferInfo = {}; + const flattengeo = earcut.flatten(coordinates); + const n = this.checkIsClosed(coordinates[0]) ? coordinates[0].length - 1 : coordinates[0].length; + const { vertices, dimensions, holes } = flattengeo; + const indexArray = earcut(vertices, holes, dimensions).map(v => { return this.verticesCount + v; }); + bufferInfo.vertices = vertices; + bufferInfo.indexArray = indexArray; + bufferInfo.verticesOffset = this.verticesCount + 0; + bufferInfo.indexOffset = this.indexCount + 0; + bufferInfo.faceNum = n; + this.indexCount += indexArray.length + n * 6; + this.verticesCount += vertices.length / 3 + n * 4; + feature.bufferInfo = bufferInfo; + + }); + } + _calculateTop(feature) { + const size = feature.size; + const { indexArray, vertices, indexOffset, verticesOffset } = feature.bufferInfo; + const pointCount = vertices.length / 3; + this._encodeArray(feature, vertices.length / 3); + // 添加顶点 + for (let i = 0; i < pointCount; i++) { + this.attributes.positions.set([ vertices[ i * 3 ], vertices[i * 3 + 1 ], size ], (verticesOffset + i) * 3); + // 顶部文理坐标计算 + if (this.get('uv')) { + // TODO 用过BBox计算纹理坐标 + this.attributes.uv.set([ -1, -1 ], (verticesOffset + i) * 2); + } + } + feature.bufferInfo.verticesOffset += pointCount; + // 添加顶点索引 + this.indexArray.set(indexArray, indexOffset); // 顶部坐标 + feature.bufferInfo.indexOffset += indexArray.length; + + } +} diff --git a/src/geom/buffer/polygon/fill_buffer.js b/src/geom/buffer/polygon/fill_buffer.js new file mode 100644 index 0000000000..b8e1b3a37d --- /dev/null +++ b/src/geom/buffer/polygon/fill_buffer.js @@ -0,0 +1,51 @@ +import BufferBase from '../buffer'; +import earcut from 'earcut'; +export default class FillBuffer extends BufferBase { + + _buildFeatures() { + const layerData = this.get('layerData'); + layerData.forEach(feature => { + this._calculateFill(feature); + delete feature.bufferInfo; + }); + } + + _calculateFill(feature) { + const { indexArray, vertices, indexOffset, verticesOffset } = feature.bufferInfo; + const pointCount = vertices.length / 3; + this._encodeArray(feature, vertices.length / 3); + // 添加顶点 + for (let i = 0; i < pointCount; i++) { + this.attributes.positions.set([ vertices[ i * 3 ], vertices[i * 3 + 1 ], 0 ], (verticesOffset + i) * 3); + if (this.get('uv')) { + // TODO 用过BBox计算纹理坐标 + this.attributes.uv.set([ 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0 ], (verticesOffset + i) * 3); + } + } + feature.bufferInfo.verticesOffset += pointCount; + // 添加顶点索引 + this.indexArray.set(indexArray, indexOffset); // 顶部坐标 + feature.bufferInfo.indexOffset += indexArray.length; + } + + _calculateFeatures() { + const layerData = this.get('layerData'); + // 计算长 + layerData.forEach(feature => { + const { coordinates } = feature; + const bufferInfo = {}; + const flattengeo = earcut.flatten(coordinates); + const { vertices, dimensions, holes } = flattengeo; + const indexArray = earcut(vertices, holes, dimensions).map(v => { return this.verticesCount + v; }); + bufferInfo.vertices = vertices; + bufferInfo.indexArray = indexArray; + bufferInfo.verticesOffset = this.verticesCount + 0; + bufferInfo.indexOffset = this.indexCount + 0; + this.indexCount += indexArray.length; + this.verticesCount += vertices.length / 3; + feature.bufferInfo = bufferInfo; + + }); + } +} + diff --git a/src/geom/buffer/polygon/line_buffer.js b/src/geom/buffer/polygon/line_buffer.js new file mode 100644 index 0000000000..932c52fb0a --- /dev/null +++ b/src/geom/buffer/polygon/line_buffer.js @@ -0,0 +1,77 @@ +import BufferBase from '../buffer'; + +export default class LineBuffer extends BufferBase { + + + _buildFeatures() { + const layerData = this.get('layerData'); + let offsetVertices = 0; + let offsetIndex = 0; + let offset = 0; + layerData.forEach(feature => { + const { coordinates } = feature; + coordinates.forEach(coord => { + const n = coord.length; + feature.bufferInfo = { + verticesOffset: offsetVertices + }; + this._encodeArray(feature, n); + for (let i = 0; i < n; i++) { + this.attributes.positions[offsetVertices * 3] = coord[i][0]; + this.attributes.positions[offsetVertices * 3 + 1] = coord[i][1]; + this.attributes.positions[offsetVertices * 3 + 2] = coord[i][2]; + this.indexArray[offsetIndex * 2] = i + offset; + this.indexArray[offsetIndex * 2 + 1] = i + offset + 1; + if (i === n - 1) { + this.indexArray[offsetIndex * 2 + 1] = offsetVertices - n + 1; + } + offsetVertices++; + offsetIndex++; + } + offset += n; + }); + }); + } + + _calculateBufferLength() { + const layerData = this.get('layerData'); + layerData.forEach(feature => { + const { coordinates } = feature; + coordinates.forEach(coord => { + this.verticesCount += coord.length; + this.indexCount += (coord.length * 2 - 2); + }); + }); + } + + _calculateFeatures() { + const layerData = this.get('layerData'); + layerData.forEach(feature => { + const { coordinates } = feature; + coordinates.forEach(coord => { + this.verticesCount += coord.length; + this.indexCount += (coord.length * 2); + }); + }); + } + _calculateLine(feature) { + let { indexOffset, verticesOffset } = feature.bufferInfo; + feature.coordinates.forEach(coord => { + const n = coord.length; + this._encodeArray(feature, n); + for (let i = 0; i < n; i++) { + this.attributes.positions[(verticesOffset + i) * 3] = coord[i][0]; + this.attributes.positions[(verticesOffset + i) * 3 + 1] = coord[i][1]; + this.attributes.positions[(verticesOffset + i) * 3 + 2] = coord[i][2]; + this.indexArray[(indexOffset + i) * 2] = i + verticesOffset * 2; + this.indexArray[(indexOffset + i) * 2 + 1] = i + verticesOffset * 2 + 1; + if (i === n - 1) { + this.indexArray[(indexOffset + i) * 2 + 1] = verticesOffset + 1; + } + + } + verticesOffset += n; + indexOffset += n; + }); + } +} diff --git a/src/geom/buffer/raster.js b/src/geom/buffer/raster.js index 1cb9c17c3a..eea93d0227 100644 --- a/src/geom/buffer/raster.js +++ b/src/geom/buffer/raster.js @@ -1,8 +1,13 @@ -import BufferBase from './bufferBase'; +// import BufferBase from './bufferBase'; import { colorScales } from '../../attr/colorscales'; import * as THREE from '../../core/three'; -export class RasterBuffer extends BufferBase { - geometryBuffer() { +import Base from '../../core/base'; +export class RasterBuffer extends Base { + constructor(cfg) { + super(cfg); + this.init(); + } + init() { const layerData = this.get('layerData'); const { coordinates, width, data, height } = layerData.dataArray[0]; const positions = [ @@ -21,12 +26,12 @@ export class RasterBuffer extends BufferBase { const colors = this.get('rampColors'); const colorImageData = this.getColorRamp(colors); const colorTexture = this._getTexture(colorImageData); // 颜色纹理 - this.bufferStruct.position = positions; - this.bufferStruct.uv = imgPosUv; - this.bufferStruct.u_raster = texture;// - this.bufferStruct.u_extent = [ coordinates[0][0], coordinates[0][1], coordinates[1][0], coordinates[1][1] ]; - this.bufferStruct.u_colorTexture = colorTexture; // 颜色表‘= - const triangles = this._buildTriangles(width, height, size, this.bufferStruct.u_extent); + this.position = positions; + this.uv = imgPosUv; + this.u_raster = texture;// + this.u_extent = [ coordinates[0][0], coordinates[0][1], coordinates[1][0], coordinates[1][1] ]; + this.u_colorTexture = colorTexture; // 颜色表‘= + const triangles = this._buildTriangles(width, height, size, this.u_extent); const attributes = { vertices: new Float32Array(triangles.vertices), uvs: new Float32Array(triangles.uvs), diff --git a/src/geom/extrude.js b/src/geom/extrude.js index 8ae4aef5c1..09698185dc 100644 --- a/src/geom/extrude.js +++ b/src/geom/extrude.js @@ -1,5 +1,5 @@ import earcut from 'earcut'; - +import * as THREE from '../core/three'; /** * 计算是否拉伸 * @param {Array} points 点坐标数组 @@ -14,7 +14,6 @@ export default function extrudePolygon(points, extrude) { if (p1[0] === p2[0] && p1[1] === p2[1]) { points[0] = points[0].slice(0, points[0].length - 1); } - const n = points[0].length; const flattengeo = earcut.flatten(points); const positions = []; @@ -60,7 +59,7 @@ export default function extrudePolygon(points, extrude) { } } } - + points = []; return { positions, faceUv, @@ -100,8 +99,71 @@ export function extrudePolygonLine(points, extrude) { } } } + points = []; return { positions, positionsIndex: cells }; } + +export function fillPolygon(points) { + const flattengeo = earcut.flatten(points); + const triangles = earcut(flattengeo.vertices, flattengeo.holes, flattengeo.dimensions); + return { + positions: flattengeo.vertices, + indexArray: triangles + }; +} + +export function extrude_Polygon(points) { + const p1 = points[0][0]; + const p2 = points[0][points[0].length - 1]; + if (p1[0] === p2[0] && p1[1] === p2[1]) { + points[0] = points[0].slice(0, points[0].length - 1); + } + const n = points[0].length; + const flattengeo = earcut.flatten(points); + const positions = []; + const indexArray = []; + const normals = []; + // 设置顶部z值 + for (let j = 0; j < flattengeo.vertices.length / 3; j++) { + flattengeo.vertices[j * 3 + 2] = 1; + normals.push(0, 0, 1); + } + positions.push(...flattengeo.vertices); + const triangles = earcut(flattengeo.vertices, flattengeo.holes, flattengeo.dimensions); + indexArray.push(...triangles); + for (let i = 0; i < n; i++) { + const prePoint = flattengeo.vertices.slice(i * 3, i * 3 + 3); + let nextPoint = flattengeo.vertices.slice(i * 3 + 3, i * 3 + 6); + nextPoint.length === 0 && (nextPoint = flattengeo.vertices.slice(0, 3)); + const indexOffset = positions.length / 3; + positions.push(prePoint[0], prePoint[1], 1, nextPoint[0], nextPoint[1], 1, prePoint[0], prePoint[1], 0, nextPoint[0], nextPoint[1], 0); + const normal = computeNormal([ nextPoint[0], nextPoint[1], 1 ], [ prePoint[0], prePoint[1], 0 ], [ prePoint[0], prePoint[1], 1 ]); + normals.push(...normal, ...normal, ...normal, ...normal); + indexArray.push(...[ 1, 2, 0, 3, 2, 1 ].map(v => { return v + indexOffset; })); + } + return { + positions, + indexArray, + normals + }; +} + +function computeNormal(v1, v2, v3) { + const pA = new THREE.Vector3(); + const pB = new THREE.Vector3(); + const pC = new THREE.Vector3(); + const cb = new THREE.Vector3(); + const ab = new THREE.Vector3(); + pA.set(...v1); + pB.set(...v2); + pC.set(...v3); + cb.subVectors(pC, pB); + ab.subVectors(pA, pB); + cb.cross(ab); + cb.normalize(); + const { x, y, z } = cb; + return [ x, y, z ]; +}; diff --git a/src/geom/material/circleMaterial.js b/src/geom/material/circleMaterial.js index d042c91e75..71770262b4 100644 --- a/src/geom/material/circleMaterial.js +++ b/src/geom/material/circleMaterial.js @@ -1,9 +1,8 @@ import Material from './material'; import { getModule, wrapUniforms } from '../../util/shaderModule'; import merge from '@antv/util/lib/deep-mix'; - export default class CircleMaterial extends Material { - constructor(_uniforms, _defines, parameters) { + constructor(_uniforms, _defines = {}, parameters) { super(parameters); const { vs, fs, uniforms } = getModule('circle'); this.uniforms = wrapUniforms(merge(uniforms, _uniforms)); diff --git a/src/geom/material/grid.js b/src/geom/material/grid.js index 44f3985be6..938b4edb32 100644 --- a/src/geom/material/grid.js +++ b/src/geom/material/grid.js @@ -1,5 +1,6 @@ import Material from './material'; -import { getModule } from '../../util/shaderModule'; +import { getModule, wrapUniforms } from '../../util/shaderModule'; +import merge from '@antv/util/lib/deep-mix'; export default class GridMaterial extends Material { getDefaultParameters() { return { @@ -19,9 +20,9 @@ export default class GridMaterial extends Material { } constructor(_uniforms, _defines, parameters) { super(parameters); - const { uniforms, defines } = this.getDefaultParameters(); - const { vs, fs } = getModule('grid'); - this.uniforms = Object.assign(uniforms, this.setUniform(_uniforms)); + const { defines } = this.getDefaultParameters(); + const { vs, fs, uniforms } = getModule('grid'); + this.uniforms = wrapUniforms(merge(uniforms, _uniforms)); this.type = 'GridMaterial'; this.defines = Object.assign(defines, _defines); this.vertexShader = vs; diff --git a/src/geom/material/hexagon.js b/src/geom/material/hexagon.js index ffb1739d1f..fc2bc30071 100644 --- a/src/geom/material/hexagon.js +++ b/src/geom/material/hexagon.js @@ -1,5 +1,6 @@ import Material from './material'; -import { getModule } from '../../util/shaderModule'; +import { getModule, wrapUniforms } from '../../util/shaderModule'; +import merge from '@antv/util/lib/deep-mix'; export default class hexagonMaterial extends Material { getDefaultParameters() { return { @@ -19,9 +20,9 @@ export default class hexagonMaterial extends Material { } constructor(_uniforms, _defines, parameters) { super(parameters); - const { uniforms, defines } = this.getDefaultParameters(); - const { vs, fs } = getModule('hexagon'); - this.uniforms = Object.assign(uniforms, this.setUniform(_uniforms)); + const { defines } = this.getDefaultParameters(); + const { vs, fs, uniforms } = getModule('hexagon'); + this.uniforms = wrapUniforms(merge(uniforms, _uniforms)); this.type = 'hexagonMaterial'; this.defines = Object.assign(defines, _defines); this.vertexShader = vs; diff --git a/src/geom/material/material.js b/src/geom/material/material.js index d6b52304ce..11b1b0dccd 100644 --- a/src/geom/material/material.js +++ b/src/geom/material/material.js @@ -1,5 +1,10 @@ import * as THREE from '../../core/three'; +const blendingEnum = { + normal: 'NormalBlending', + additive: 'AdditiveBlending', + subtractive: 'SubtractiveBlending' +}; export default class Material extends THREE.ShaderMaterial { setUniformsValue(name, value) { if (!this.uniforms[name]) { return; } @@ -26,4 +31,7 @@ export default class Material extends THREE.ShaderMaterial { } } } + setBending(type) { + this.blending = THREE[blendingEnum[type]] || THREE.NormalBlending; + } } diff --git a/src/geom/material/normal_point.js b/src/geom/material/normal_point.js new file mode 100644 index 0000000000..a2ded73e5c --- /dev/null +++ b/src/geom/material/normal_point.js @@ -0,0 +1,33 @@ + +import Material from './material'; +import * as THREE from '../../core/three'; +import { getModule } from '../../util/shaderModule'; +export default class PointMaterial extends Material { + getDefaultParameters() { + return { + uniforms: { + u_opacity: { value: 1 }, + u_stroke: { value: [ 1.0, 1.0, 1.0, 1.0 ] }, + u_strokeWidth: { value: 1 }, + u_activeId: { value: 0 } + }, + defines: { + SHAPE: false, + TEXCOORD_0: false + } + }; + } + constructor(_uniforms, _defines, parameters) { + super(parameters); + const { uniforms, defines } = this.getDefaultParameters(); + const { vs, fs } = getModule('pointnormal'); + this.uniforms = Object.assign(uniforms, this.setUniform(_uniforms)); + this.defines = Object.assign(defines, _defines); + this.type = 'PointMaterial'; + this.vertexShader = vs; + this.fragmentShader = fs; + this.transparent = true; + + this.blending = THREE.AdditiveBlending; + } +} diff --git a/src/geom/material/pointMaterial.js b/src/geom/material/pointMaterial.js index c4bd19bc0b..e2424627ed 100644 --- a/src/geom/material/pointMaterial.js +++ b/src/geom/material/pointMaterial.js @@ -1,6 +1,8 @@ import Material from './material'; +import * as THREE from '../../core/three'; import { getModule } from '../../util/shaderModule'; +import picking_frag from '../../core/engine/picking//picking_frag.glsl'; export default class PointMaterial extends Material { getDefaultParameters() { return { @@ -26,7 +28,8 @@ export default class PointMaterial extends Material { this.vertexShader = vs; this.fragmentShader = fs; this.transparent = true; - // if (!this.uniforms.shape) { this.blending = THREE.AdditiveBlending; } + + if (!this.uniforms.shape) { this.blending = THREE.AdditiveBlending; } if (this.uniforms.u_texture) { this.defines.TEXCOORD_0 = true; } diff --git a/src/geom/shader/arcline_frag.glsl b/src/geom/shader/arcline_frag.glsl index 8ecf99a911..8797501ca2 100644 --- a/src/geom/shader/arcline_frag.glsl +++ b/src/geom/shader/arcline_frag.glsl @@ -6,6 +6,7 @@ if(v_color.a == 0.){ discard; } + #pragma include "pick" gl_FragColor = v_color; gl_FragColor.a = v_color.a*u_opacity; diff --git a/src/geom/shader/arcline_vert.glsl b/src/geom/shader/arcline_vert.glsl index 1b0289ca13..fadecc72bc 100644 --- a/src/geom/shader/arcline_vert.glsl +++ b/src/geom/shader/arcline_vert.glsl @@ -61,6 +61,8 @@ void main() { if(pickingId == u_activeId) { v_color = u_activeColor; } + #ifdef PICK worldId = id_toPickColor(pickingId); + #endif } \ No newline at end of file diff --git a/src/geom/shader/circle_frag.glsl b/src/geom/shader/circle_frag.glsl index 82b8a77362..0e96cc50e0 100644 --- a/src/geom/shader/circle_frag.glsl +++ b/src/geom/shader/circle_frag.glsl @@ -11,7 +11,8 @@ varying float v_radius; #pragma include "sdf_2d" void main() { - int shape = int(floor(v_data.w + 0.5)); + // int shape = int(floor(v_data.w + 0.5)); + int shape = 0; lowp float antialiasblur = v_data.z; float antialiased_blur = -max(u_blur, antialiasblur); @@ -57,5 +58,6 @@ void main() { inner_df ); - gl_FragColor = opacity_t * mix(v_color * u_opacity, u_stroke_color * u_stroke_opacity, color_t); + gl_FragColor = opacity_t * mix(v_color * u_opacity, u_stroke_color * u_stroke_opacity * v_color.a, color_t); + #pragma include "pick" } \ No newline at end of file diff --git a/src/geom/shader/circle_vert.glsl b/src/geom/shader/circle_vert.glsl index f9382ad0aa..5255dc6e3e 100644 --- a/src/geom/shader/circle_vert.glsl +++ b/src/geom/shader/circle_vert.glsl @@ -1,4 +1,8 @@ -attribute vec4 a_packed_data; +// attribute vec4 a_packed_data; +attribute vec4 a_color; +attribute float a_size; +attribute float a_shape; +attribute vec2 miter; uniform float u_zoom : 1; uniform float u_stroke_width : 2; @@ -13,43 +17,47 @@ varying float v_radius; void main() { // unpack color(vec2) - v_color = decode_color(a_packed_data.xy); - // unpack picking_id - float picking_id = a_packed_data.w; - + // v_color = decode_color(a_packed_data.xy); + v_color = a_color; + // unpack pickingId + // float pickingId = a_packed_data.w; + // float pickingId = .w; + // unpack data(extrude(4-bit), radius(16-bit)) - float compressed = a_packed_data.z; + // float compressed = a_packed_data.z; - // extrude(4-bit) - vec2 extrude; - extrude.x = floor(compressed * SHIFT_RIGHT23); - compressed -= extrude.x * SHIFT_LEFT23; - extrude.x = extrude.x - 1.; + // // extrude(4-bit) + vec2 extrude = miter; + // extrude.x = floor(compressed * SHIFT_RIGHT23); + // compressed -= extrude.x * SHIFT_LEFT23; + // extrude.x = extrude.x - 1.; - extrude.y = floor(compressed * SHIFT_RIGHT21); - compressed -= extrude.y * SHIFT_LEFT21; - extrude.y = extrude.y - 1.; + // extrude.y = floor(compressed * SHIFT_RIGHT21); + // compressed -= extrude.y * SHIFT_LEFT21; + // extrude.y = extrude.y - 1.; - float shape_type = floor(compressed * SHIFT_RIGHT17); - compressed -= shape_type * SHIFT_LEFT17; + // float shape_type = floor(compressed * SHIFT_RIGHT17); + // compressed -= shape_type * SHIFT_LEFT17; // radius(16-bit) - float radius = compressed; + float radius = a_size; v_radius = radius; float zoom_scale = pow(2., 20. - u_zoom); - vec2 offset = extrude * (radius + u_stroke_width) * zoom_scale; + vec2 offset = miter * (radius + u_stroke_width) * zoom_scale; gl_Position = projectionMatrix * modelViewMatrix * vec4(position.xy + offset, 0.0, 1.0); // anti-alias float antialiasblur = 1.0 / (radius + u_stroke_width); // construct point coords - v_data = vec4(extrude, antialiasblur, shape_type); + v_data = vec4(extrude, antialiasblur, a_shape); // picking - if(picking_id == u_activeId) { + if(pickingId == u_activeId) { v_color = u_activeColor; } - worldId = id_toPickColor(picking_id); + #ifdef PICK + worldId = id_toPickColor(pickingId); + #endif } \ No newline at end of file diff --git a/src/geom/shader/great_circle_line_vert.glsl b/src/geom/shader/great_circle_line_vert.glsl index db4f7c7534..1fe36c7f2b 100644 --- a/src/geom/shader/great_circle_line_vert.glsl +++ b/src/geom/shader/great_circle_line_vert.glsl @@ -90,6 +90,8 @@ void main() { if(pickingId == u_activeId) { v_color = u_activeColor; } + #ifdef PICK worldId = id_toPickColor(pickingId); + #endif } \ No newline at end of file diff --git a/src/geom/shader/grid_frag.glsl b/src/geom/shader/grid_frag.glsl index 6fd41421b4..5a6677fb2f 100644 --- a/src/geom/shader/grid_frag.glsl +++ b/src/geom/shader/grid_frag.glsl @@ -2,4 +2,5 @@ varying vec4 v_color; void main() { gl_FragColor = v_color; + #pragma include "pick" } \ No newline at end of file diff --git a/src/geom/shader/grid_vert.glsl b/src/geom/shader/grid_vert.glsl index 81ae913d6a..6160379b85 100644 --- a/src/geom/shader/grid_vert.glsl +++ b/src/geom/shader/grid_vert.glsl @@ -1,5 +1,5 @@ precision highp float; -attribute vec2 miter; +attribute vec3 miter; attribute vec4 a_color; uniform float u_xOffset; uniform float u_yOffset; @@ -9,15 +9,29 @@ uniform float u_activeId; uniform vec4 u_activeColor; varying vec4 v_color; +#pragma include "lighting" + void main() { mat4 matModelViewProjection = projectionMatrix * modelViewMatrix; v_color = a_color; v_color.a *= u_opacity; - if(pickingId == u_activeId) { + + if(pickingId == u_activeId) { v_color = u_activeColor; - } + } float x = position.x + miter.x * u_xOffset * u_coverage; float y = position.y + miter.y * u_yOffset * u_coverage; - gl_Position = matModelViewProjection * vec4(x, y, position.z, 1.0); - worldId = id_toPickColor(pickingId); + float z = position.z + miter.z; + + #ifdef LIGHTING + vec3 viewDir = normalize(cameraPosition - vec3(x, y, z)); + v_color.rgb *= calc_lighting(vec3(x, y, z), normal, viewDir); + #endif + + + + gl_Position = matModelViewProjection * vec4(x, y, z, 1.0); + #ifdef PICK + worldId = id_toPickColor(pickingId); + #endif } \ No newline at end of file diff --git a/src/geom/shader/hexagon_frag.glsl b/src/geom/shader/hexagon_frag.glsl index 77c7d120d0..5a6677fb2f 100644 --- a/src/geom/shader/hexagon_frag.glsl +++ b/src/geom/shader/hexagon_frag.glsl @@ -1,7 +1,6 @@ precision highp float; - uniform float u_opacity; varying vec4 v_color; void main() { - vec4 color = v_color; - gl_FragColor = color; + gl_FragColor = v_color; + #pragma include "pick" } \ No newline at end of file diff --git a/src/geom/shader/hexagon_vert.glsl b/src/geom/shader/hexagon_vert.glsl index 1bd95bbbdf..204dd5de4b 100644 --- a/src/geom/shader/hexagon_vert.glsl +++ b/src/geom/shader/hexagon_vert.glsl @@ -1,26 +1,43 @@ precision highp float; -attribute vec2 miter; +// attribute vec2 miter; +attribute vec3 miter; +attribute vec3 a_shape; +attribute float a_size; attribute vec4 a_color; uniform float u_radius; uniform float u_coverage; uniform float u_opacity; uniform float u_angle; + uniform float u_activeId; uniform vec4 u_activeColor; varying vec4 v_color; +#pragma include "lighting" + void main() { mat4 matModelViewProjection = projectionMatrix * modelViewMatrix; mat2 rotationMatrix = mat2(cos(u_angle), sin(u_angle), -sin(u_angle), cos(u_angle)); v_color = a_color; - v_color.a *= u_opacity; + v_color.a *= u_opacity; if(pickingId == u_activeId) { v_color = u_activeColor; } - vec2 offset =vec2(rotationMatrix * miter * u_radius * u_coverage ); + vec2 offset =vec2(rotationMatrix * miter.xy * u_radius * u_coverage ); + // vec2 offset =vec2(rotationMatrix * a_shape.xy * u_radius * u_coverage ); float x = position.x + offset.x; float y = position.y + offset.y; - gl_Position = matModelViewProjection * vec4(x, y, position.z, 1.0); + // float z = a_shape.z * a_size; + float z = miter.z * a_size; - worldId = id_toPickColor(pickingId); + #ifdef LIGHTING + vec3 viewDir = normalize(cameraPosition - vec3(x, y, z)); + v_color.rgb *= calc_lighting(vec3(x, y, z), normal, viewDir); + #endif + + gl_Position = matModelViewProjection * vec4(x, y, z, 1.0); + + #ifdef PICK + worldId = id_toPickColor(pickingId); + #endif } \ No newline at end of file diff --git a/src/geom/shader/index.js b/src/geom/shader/index.js index 31af8e923d..d9e81c8e4e 100644 --- a/src/geom/shader/index.js +++ b/src/geom/shader/index.js @@ -13,6 +13,10 @@ import circle_vert from './circle_vert.glsl'; import point_line_frag from '../shader/point_meshLine_frag.glsl'; import point_line_vert from '../shader/point_meshLine_vert.glsl'; +// 原生点 +import normal_point_frag from './normal_point_frag.glsl'; +import normal_point_vert from './normal_point_vert.glsl'; + // 有宽度的线 import mesh_line_frag from '../shader/meshline_frag.glsl'; import mesh_line_vert from '../shader/meshline_vert.glsl'; @@ -59,6 +63,7 @@ import { registerModule } from '../../util/shaderModule'; import pick_color from './shaderChunks/pick_color.glsl'; import decode from './shaderChunks/decode.glsl'; import lighting from './shaderChunks/lighting.glsl'; +import pick from './shaderChunks/pick.glsl'; import sdf_2d from './shaderChunks/sdf_2d.glsl'; import project from './shaderChunks/project.glsl'; @@ -67,6 +72,7 @@ export function compileBuiltinModules() { registerModule('common', { vs: common, fs: common }); registerModule('decode', { vs: decode, fs: '' }); registerModule('lighting', { vs: lighting, fs: '' }); + registerModule('pick', { vs: '', fs: pick }); registerModule('sdf_2d', { vs: '', fs: sdf_2d }); registerModule('project', { vs: project, fs: '' }); registerModule('pick_color', { vs: pick_color, fs: pick_color }); @@ -75,6 +81,7 @@ export function compileBuiltinModules() { registerModule('grid', { vs: grid_vert, fs: grid_frag }); registerModule('hexagon', { vs: hexagon_vert, fs: hexagon_frag }); registerModule('pointline', { vs: point_line_vert, fs: point_line_frag }); + registerModule('pointnormal', { vs: normal_point_vert, fs: normal_point_frag }); registerModule('meshline', { vs: mesh_line_vert, fs: mesh_line_frag }); registerModule('arcline', { vs: arc_line_vert, fs: arc_line_frag }); registerModule('greatcircle', { vs: great_circle_line_vert, fs: arc_line_frag }); diff --git a/src/geom/shader/line_frag.glsl b/src/geom/shader/line_frag.glsl index c1478d4b29..9d7b1a04d1 100644 --- a/src/geom/shader/line_frag.glsl +++ b/src/geom/shader/line_frag.glsl @@ -11,4 +11,5 @@ color.a= color.a * vTime * 1.5; #endif gl_FragColor = color; + #pragma include "pick" } \ No newline at end of file diff --git a/src/geom/shader/line_vert.glsl b/src/geom/shader/line_vert.glsl index 74a5d3c134..7679787498 100644 --- a/src/geom/shader/line_vert.glsl +++ b/src/geom/shader/line_vert.glsl @@ -19,5 +19,7 @@ void main() { // vTime = 1.0- (28800. + mod(u_time* 10.,28800.)- position.z / 1000.) / 100.; #endif gl_Position = matModelViewProjection * vec4(position.xy, 10., 1.0); - worldId = id_toPickColor(pickingId); + #ifdef PICK + worldId = id_toPickColor(pickingId); + #endif } \ No newline at end of file diff --git a/src/geom/shader/meshline_frag.glsl b/src/geom/shader/meshline_frag.glsl index f07301978e..debc84c992 100644 --- a/src/geom/shader/meshline_frag.glsl +++ b/src/geom/shader/meshline_frag.glsl @@ -45,4 +45,5 @@ void main() { // anti-alias float blur = 1. - smoothstep(u_blur, 1., length(v_normal)); gl_FragColor.a *= blur; + #pragma include "pick" } diff --git a/src/geom/shader/meshline_vert.glsl b/src/geom/shader/meshline_vert.glsl index 3087744f61..f8031ad4e3 100644 --- a/src/geom/shader/meshline_vert.glsl +++ b/src/geom/shader/meshline_vert.glsl @@ -67,5 +67,7 @@ void main() { if(pickingId == u_activeId) { v_color = u_activeColor; } - worldId = id_toPickColor(pickingId); + #ifdef PICK + worldId = id_toPickColor(pickingId); + #endif } \ No newline at end of file diff --git a/src/geom/shader/normal_point_frag.glsl b/src/geom/shader/normal_point_frag.glsl new file mode 100644 index 0000000000..b1ee3c08cd --- /dev/null +++ b/src/geom/shader/normal_point_frag.glsl @@ -0,0 +1,5 @@ +precision highp float; +varying vec4 v_color; +void main(){ + gl_FragColor=v_color; +} \ No newline at end of file diff --git a/src/geom/shader/normal_point_vert.glsl b/src/geom/shader/normal_point_vert.glsl new file mode 100644 index 0000000000..e21fef3ab8 --- /dev/null +++ b/src/geom/shader/normal_point_vert.glsl @@ -0,0 +1,23 @@ +precision highp float; +attribute vec4 a_color; +attribute float a_size; +varying vec4 v_color; +uniform float u_activeId; +uniform vec4 u_activeColor; +uniform float u_opacity; + +void main(){ + mat4 matModelViewProjection=projectionMatrix*modelViewMatrix; + v_color=a_color; + v_color.a*=u_opacity; + if(pickingId==u_activeId){ + v_color=u_activeColor; + } + gl_Position=matModelViewProjection*vec4(position,1.); + gl_PointSize=a_size; + + #ifdef PICK + worldId = id_toPickColor(pickingId); + #endif +} + diff --git a/src/geom/shader/point_frag.glsl b/src/geom/shader/point_frag.glsl index 30ff5a6623..fdf2201ff7 100644 --- a/src/geom/shader/point_frag.glsl +++ b/src/geom/shader/point_frag.glsl @@ -12,64 +12,64 @@ varying vec2 v_rs; varying vec2 v_uv; varying vec4 v_color; varying float v_shape; -const float u_buffer = 0.75; +const float u_buffer=.75; // const float u_gamma = 2.0 * 1.4142 / 10.0; -const float u_gamma = 0.08; +const float u_gamma=.08; // const float u_scale = 128.0; -const vec3 halo = vec3( 1.0 ); -void main() { +const vec3 halo=vec3(1.); +void main(){ // 纹理坐标 #ifdef TEXCOORD_0 - vec2 pos = v_uv + gl_PointCoord / 512.0 * 64.0; - pos.y = 1.0 - pos.y; - vec4 textureColor = texture2D(u_texture, pos); - gl_FragColor =textureColor; - return; + vec2 pos=v_uv+gl_PointCoord/512.*64.; + pos.y=1.-pos.y; + vec4 textureColor=texture2D(u_texture,pos); + gl_FragColor=textureColor; + return; #endif - if(v_color.a == 0.) - discard; - vec4 pcolor = v_color; - float ro = v_rs.x; - float ri = v_rs.y; - float d = 0.0; - if(ro < 3.0) { - gl_FragColor = pcolor; - return; + if(v_color.a==0.) + discard; + vec4 pcolor=v_color; + float ro=v_rs.x; + float ri=v_rs.y; + float d=0.; + if(ro<3.){ + gl_FragColor=pcolor; + return; } - - // vec4 textureColor = texture2D(u_texture, gl_PointCoord); - vec2 st = gl_PointCoord * 2. - 1.; - float a = atan(st.x,st.y)+PI ; - float r = TWO_PI/ v_shape; - float ratio =1.0 + (1.1 - smoothstep(2.8, 6.0,v_shape)); - float dis2center = cos(floor(.5+a/r)*r-a)*length(st) * ro * ratio; - float alpha = smoothstep(ro,ro+0.1, dis2center); - if(alpha == 1.) { - discard; + // vec4 textureColor = texture2D(u_texture, gl_PointCoord); + vec2 st=gl_PointCoord*2.-1.; + float a=atan(st.x,st.y)+PI; + float r=TWO_PI/v_shape; + float ratio=1.+(1.1-smoothstep(2.8,6.,v_shape)); + float dis2center=cos(floor(.5+a/r)*r-a)*length(st)*ro*ratio; + float alpha=smoothstep(ro,ro+.1,dis2center); + + if(alpha==1.){ + discard; } - if(u_strokeWidth > 0.0){//有border - if(dis2center> ro- u_strokeWidth ){ - gl_FragColor = vec4(u_stroke.xyz,u_stroke.a*(ro- dis2center)); + if(u_strokeWidth>0.){//有border + if(dis2center>ro-u_strokeWidth){ + gl_FragColor=vec4(u_stroke.xyz,u_stroke.a*(ro-dis2center)); return; }else if(dis2center>ri){ - gl_FragColor= u_stroke; + gl_FragColor=u_stroke; return; } } - - if(dis2center > ri- u_strokeWidth){ - float factor = ri-dis2center;//填充色的百分比 - if (u_strokeWidth == 0.0) { - float a = pcolor.a*factor; - gl_FragColor = vec4(pcolor.rgb, a); - } else { - float a = u_stroke.a*(1.0-factor) +pcolor.a*factor; - gl_FragColor = vec4(u_stroke.rgb * (1.0-factor) + pcolor.rgb * factor, a); - } - } else{ - gl_FragColor= pcolor; + + if(dis2center>ri-u_strokeWidth){ + float factor=ri-dis2center;//填充色的百分比 + if(u_strokeWidth==0.){ + float a=pcolor.a*factor; + gl_FragColor=vec4(pcolor.rgb,a); + }else{ + float a=u_stroke.a*(1.-factor)+pcolor.a*factor; + gl_FragColor=vec4(u_stroke.rgb*(1.-factor)+pcolor.rgb*factor,a); } + }else{ + gl_FragColor=pcolor; + } } diff --git a/src/geom/shader/point_meshLine_frag.glsl b/src/geom/shader/point_meshLine_frag.glsl index dce0d13b09..0cdfe8fdf8 100644 --- a/src/geom/shader/point_meshLine_frag.glsl +++ b/src/geom/shader/point_meshLine_frag.glsl @@ -11,4 +11,5 @@ void main() { } #endif gl_FragColor = v_color; + #pragma include "pick" } diff --git a/src/geom/shader/point_meshLine_vert.glsl b/src/geom/shader/point_meshLine_vert.glsl index 023a75f17d..5839416904 100644 --- a/src/geom/shader/point_meshLine_vert.glsl +++ b/src/geom/shader/point_meshLine_vert.glsl @@ -30,6 +30,8 @@ if(v_pickingId == u_activeId) { //vec3 pointPos = newposition.xyz + vec3(normal * u_strokeWidth * pow(2.0,20.0-u_zoom) / 2.0 * a_miter); vec3 pointPos = newposition.xyz + vec3(normal * u_strokeWidth * scale / 2.0 * a_miter); gl_Position = matModelViewProjection * vec4(pointPos, 1.0); - worldId = id_toPickColor(pickingId); +#ifdef PICK +worldId = id_toPickColor(pickingId); +#endif } \ No newline at end of file diff --git a/src/geom/shader/point_vert.glsl b/src/geom/shader/point_vert.glsl index 874376fe9a..47bac07829 100644 --- a/src/geom/shader/point_vert.glsl +++ b/src/geom/shader/point_vert.glsl @@ -29,6 +29,8 @@ void main() { #ifdef SHAPE v_shape = a_shape; #endif + #ifdef PICK worldId = id_toPickColor(pickingId); + #endif } diff --git a/src/geom/shader/polygon_frag.glsl b/src/geom/shader/polygon_frag.glsl index 8f1780ce9a..fef65686d9 100644 --- a/src/geom/shader/polygon_frag.glsl +++ b/src/geom/shader/polygon_frag.glsl @@ -13,7 +13,7 @@ varying vec2 v_texCoord; #endif varying vec4 v_color; -varying vec4 worldId; + vec3 getWindowColor(float n, float hot, vec3 brightColor, vec3 darkColor) { float s = step(hot, n); @@ -109,5 +109,6 @@ void main() { #else gl_FragColor = vec4(v_color.xyz , v_color.w); #endif + #pragma include "pick" } \ No newline at end of file diff --git a/src/geom/shader/polygon_vert.glsl b/src/geom/shader/polygon_vert.glsl index ad811a1c7b..7628d60021 100644 --- a/src/geom/shader/polygon_vert.glsl +++ b/src/geom/shader/polygon_vert.glsl @@ -16,7 +16,7 @@ varying vec4 v_color; uniform float u_zoom : 0; uniform float u_opacity : 1.0; -uniform float u_activeId : 0; +uniform float u_activeId : -1; uniform vec4 u_activeColor : [1.0, 0.0, 0.0, 1.0]; #pragma include "lighting" @@ -37,7 +37,7 @@ void main() { gl_Position = projectionMatrix * modelViewMatrix * vec4(position + offset, 1.); #ifdef LIGHTING - if (normal != vec3(0., 0., 1.)) { + if (normal != vec3(0., 0., 1.0)) { vec3 viewDir = normalize(cameraPosition - position); v_color.rgb *= calc_lighting(position, normal, viewDir); } @@ -46,5 +46,7 @@ void main() { if(pickingId == u_activeId) { v_color = u_activeColor; } - worldId = id_toPickColor(pickingId); + #ifdef PICK + worldId = id_toPickColor(pickingId); + #endif } \ No newline at end of file diff --git a/src/geom/shader/shaderChunks/pick.glsl b/src/geom/shader/shaderChunks/pick.glsl new file mode 100644 index 0000000000..d1b088fc70 --- /dev/null +++ b/src/geom/shader/shaderChunks/pick.glsl @@ -0,0 +1,8 @@ +#ifdef PICK + if(worldId.x == 0. &&worldId.y == 0. && worldId.z==0.){ + discard; + return; + } + gl_FragColor = worldId; + return; +#endif \ No newline at end of file diff --git a/src/geom/shader/text_frag.glsl b/src/geom/shader/text_frag.glsl index 7fe59c4257..bbbb18548e 100644 --- a/src/geom/shader/text_frag.glsl +++ b/src/geom/shader/text_frag.glsl @@ -28,4 +28,5 @@ void main(){ } } + #pragma include "pick" } \ No newline at end of file diff --git a/src/geom/shader/text_vert.glsl b/src/geom/shader/text_vert.glsl index f4290df289..c6d7d26a15 100644 --- a/src/geom/shader/text_vert.glsl +++ b/src/geom/shader/text_vert.glsl @@ -21,6 +21,8 @@ void main(){ v_color=u_activeColor; } v_texcoord=uv/u_textTextureSize; - worldId=id_toPickColor(pickingId); + #ifdef PICK + worldId = id_toPickColor(pickingId); + #endif } diff --git a/src/geom/shader/tile/mask_quard_frag.glsl b/src/geom/shader/tile/mask_quard_frag.glsl index 6b4ceede8f..c116cf90da 100644 --- a/src/geom/shader/tile/mask_quard_frag.glsl +++ b/src/geom/shader/tile/mask_quard_frag.glsl @@ -1,4 +1,4 @@ precision highp float; void main() { - gl_FragColor = vec4(1.0); + gl_FragColor = vec4(0.0,0.,0.,1.0); } \ No newline at end of file diff --git a/src/geom/shape/path.js b/src/geom/shape/path.js index 82bd51d68e..4eaf321e18 100644 --- a/src/geom/shape/path.js +++ b/src/geom/shape/path.js @@ -33,7 +33,7 @@ export function polygonPath(pointCount, start = 0) { const step = Math.PI * 2 / pointCount; const line = []; for (let i = 0; i < pointCount; i++) { - line.push(step * i - start * Math.PI / 12); + line.push(step * i + start * Math.PI / 12); } const path = line.map(t => { const x = Math.sin(t + Math.PI / 4), diff --git a/src/global.js b/src/global.js index 6d08bcfcb0..1f9e5309e9 100644 --- a/src/global.js +++ b/src/global.js @@ -3,9 +3,10 @@ * @author dxq613 */ // const Global = {}; +import version from './util/version'; const FONT_FAMILY = '"-apple-system", BlinkMacSystemFont, "Segoe UI", Roboto,"Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei",SimSun, "sans-serif"'; const Global = { - version: '1.2.0-beta.3', + version, scene: { mapType: 'AMAP', zoom: 5, diff --git a/src/index.js b/src/index.js index 368540c528..19c15da00c 100755 --- a/src/index.js +++ b/src/index.js @@ -1,14 +1,12 @@ - -// import Util from './util'; import Scene from './core/scene'; import Global from './global'; import Source from './core/source'; -import TileSource from './source/tileSource'; +import TileSource from './source/tile_source'; import { registerParser, registerTransform } from './source'; import { registerInteraction, getInteraction } from './interaction'; import { registerLayer } from './layer'; const version = Global.version; -export { +const exported = { version, Scene, Source, @@ -19,4 +17,4 @@ export { registerInteraction, getInteraction }; - +export default exported; diff --git a/src/interaction/hash.js b/src/interaction/hash.js index abe5cc48a9..d6223f90dc 100644 --- a/src/interaction/hash.js +++ b/src/interaction/hash.js @@ -1,5 +1,5 @@ import Interaction from './base'; -import { throttle } from '@antv/util'; +import throttle from '../util/throttle'; export default class Hash extends Interaction { constructor(cfg) { super({ @@ -7,7 +7,7 @@ export default class Hash extends Interaction { ...cfg }); window.addEventListener('hashchange', this._onHashChange.bind(this), false); - this._updateHash = throttle(this._updateHashUnthrottled.bind(this), 20 * 1000 / 100); + this._updateHash = throttle(this._updateHashUnthrottled.bind(this), 30 * 1000 / 100); } end() { this._updateHash(); diff --git a/src/layer/heatmapLayer.js b/src/layer/heatmap_layer.js similarity index 51% rename from src/layer/heatmapLayer.js rename to src/layer/heatmap_layer.js index b75c270c1f..5468e542b8 100644 --- a/src/layer/heatmapLayer.js +++ b/src/layer/heatmap_layer.js @@ -8,6 +8,8 @@ export default class HeatMapLayer extends Layer { } draw() { this.type = 'heatmap'; - this.add(getRender('heatmap', this.shapeType || 'heatmap')(this.layerData, this, this.layerSource)); + if (!this.shapeType) this.shapeType = 'heatmap'; + const renderType = this.shapeType === 'heatmap' ? 'heatmap' : 'shape'; + this.add(getRender('heatmap', renderType)(this.layerData, this, this.layerSource)); } } diff --git a/src/layer/imageLayer.js b/src/layer/image_layer.js similarity index 100% rename from src/layer/imageLayer.js rename to src/layer/image_layer.js diff --git a/src/layer/index.js b/src/layer/index.js index 04c572c984..20d60eb9d7 100644 --- a/src/layer/index.js +++ b/src/layer/index.js @@ -1,13 +1,13 @@ import { registerLayer } from './factory'; -import PolygonLayer from './polygonLayer'; -import PointLayer from './pointLayer'; -import LineLayer from './lineLayer'; -import ImageLayer from './imageLayer'; -import RasterLayer from './rasterLayer'; -import HeatmapLayer from './heatmapLayer'; -import TileLayer from './tile/tileLayer'; -import ImageTileLayer from './tile/imageTileLayer'; -import VectorTileLayer from './tile/VectorTileLayer'; +import PolygonLayer from './polygon_layer'; +import PointLayer from './point_layer'; +import LineLayer from './line_layer'; +import ImageLayer from './image_layer'; +import RasterLayer from './raster_layer'; +import HeatmapLayer from './heatmap_layer'; +import TileLayer from './tile/tile_layer'; +import ImageTileLayer from './tile/image_tile_layer'; +import VectorTileLayer from './tile/vector_tile_layer'; registerLayer('PolygonLayer', PolygonLayer); registerLayer('PointLayer', PointLayer); diff --git a/src/layer/lineLayer.js b/src/layer/line_layer.js similarity index 87% rename from src/layer/lineLayer.js rename to src/layer/line_layer.js index 489c1ac999..7e70f0daa9 100644 --- a/src/layer/lineLayer.js +++ b/src/layer/line_layer.js @@ -1,5 +1,5 @@ import Layer from '../core/layer'; -import { getRender } from './render/'; +import { getRender } from './render'; export default class LineLayer extends Layer { shape(type) { this.shapeType = type; @@ -18,6 +18,7 @@ export default class LineLayer extends Layer { } draw() { this.type = 'line'; - this.add(getRender('line', this.shapeType || 'line')(this.layerData, this, this.layerSource)); + this.add(getRender('line', this.shapeType || 'line')(this.layerData, this)); } } +LineLayer.type = 'line'; diff --git a/src/layer/pointLayer.js b/src/layer/point_layer.js similarity index 92% rename from src/layer/pointLayer.js rename to src/layer/point_layer.js index 997b8d9275..f1edb7aa46 100644 --- a/src/layer/pointLayer.js +++ b/src/layer/point_layer.js @@ -1,6 +1,6 @@ import Layer from '../core/layer'; import Global from '../global'; -import { getRender } from './render/'; +import { getRender } from './render'; const { pointShape } = Global; /** * point shape 2d circle, traingle text,image @@ -10,10 +10,14 @@ const { pointShape } = Global; */ export default class PointLayer extends Layer { + constructor(scene, cfg) { + super(scene, cfg); + this.set('type', 'point'); + } draw() { this.type = 'point'; this.shapeType = this._getShape(); - const mesh = getRender(this.type, this.shapeType)(this.layerData, this, this.layerSource); + const mesh = getRender(this.type, this.shapeType)(this.layerData, this); this.add(mesh); } @@ -31,9 +35,9 @@ export default class PointLayer extends Layer { // 2D circle 特殊处理 if (pointShape['2d'].indexOf(shape) !== -1) { - return 'circle'; - } else if (pointShape['3d'].indexOf(shape) !== -1) { return 'fill'; + } else if (pointShape['3d'].indexOf(shape) !== -1) { + return 'extrude'; } else if (this.scene.image.imagesIds.indexOf(shape) !== -1) { return 'image'; } @@ -73,3 +77,4 @@ export default class PointLayer extends Layer { } } } +PointLayer.type = 'point'; diff --git a/src/layer/polygonLayer.js b/src/layer/polygon_layer.js similarity index 64% rename from src/layer/polygonLayer.js rename to src/layer/polygon_layer.js index 32779aa2c2..c5b407d164 100644 --- a/src/layer/polygonLayer.js +++ b/src/layer/polygon_layer.js @@ -1,12 +1,18 @@ import Layer from '../core/layer'; -import { getRender } from './render/'; +import { getRender } from './render'; export default class PolygonLayer extends Layer { + constructor(scene, cfg) { + super(scene, cfg); + this.set('type', 'polygon'); + } shape(type) { this.shape = type; + this.set('shape', type); + this.set('shapeType', 'polygon'); return this; } draw() { - this.init(); + // this.init(); this.type = 'polygon'; const animateOptions = this.get('animateOptions'); if (animateOptions.enable) { @@ -18,3 +24,4 @@ export default class PolygonLayer extends Layer { this.updateFilter(this.layerMesh); } } +PolygonLayer.type = 'polygon'; diff --git a/src/layer/rasterLayer.js b/src/layer/raster_layer.js similarity index 92% rename from src/layer/rasterLayer.js rename to src/layer/raster_layer.js index 40075e54c0..5be05663eb 100644 --- a/src/layer/rasterLayer.js +++ b/src/layer/raster_layer.js @@ -17,10 +17,10 @@ export default class RasterLayer extends Layer { this.initGeometry(buffer.attributes); const rasterConfig = source.data.dataArray[0]; const material = new RasterMaterial({ - u_texture: buffer.bufferStruct.u_raster, - u_colorTexture: buffer.bufferStruct.u_colorTexture, + u_texture: buffer.u_raster, + u_colorTexture: buffer.u_colorTexture, u_opacity: 1.0, - u_extent: buffer.bufferStruct.u_extent, + u_extent: buffer.u_extent, u_min: rasterConfig.min, u_max: rasterConfig.max, u_dimension: buffer.attributes.dimension diff --git a/src/layer/render/heatmap/gird.js b/src/layer/render/heatmap/gird.js index 04b31b40bf..865b995ffe 100644 --- a/src/layer/render/heatmap/gird.js +++ b/src/layer/render/heatmap/gird.js @@ -1,24 +1,37 @@ import * as THREE from '../../../core/three'; -import gridBuffer from '../../../geom/buffer/heatmap/grid'; import GridMaterial from '../../../geom/material/grid'; -export default function DrawGrid(layerdata, layer, source) { - const { opacity, coverage } = layer.get('styleOptions'); +import { getBuffer } from '../../../geom/buffer/'; +import { generateLightingUniforms } from '../../../util/shaderModule'; +export default function DrawGrid(layerData, layer, source) { + const { opacity, coverage, lights } = layer.get('styleOptions'); const activeOption = layer.get('activedOptions'); const { xOffset, yOffset } = source.data; - const attributes = new gridBuffer(layerdata); + + // const attributes = new gridBuffer(layerdata); + const geometryBuffer = getBuffer(layer.type, layer.shapeType); + const buffer = new geometryBuffer({ + layerData, + shapeType: layer.shapeType + }); + const { attributes, indexArray } = buffer; const geometry = new THREE.BufferGeometry(); - geometry.addAttribute('position', new THREE.Float32BufferAttribute(attributes.vertices, 3)); - geometry.addAttribute('miter', new THREE.Float32BufferAttribute(attributes.miter, 2)); + geometry.setIndex(new THREE.Uint32BufferAttribute(indexArray, 1)); + geometry.addAttribute('position', new THREE.Float32BufferAttribute(attributes.positions, 3)); + geometry.addAttribute('miter', new THREE.Float32BufferAttribute(attributes.miters, 3)); geometry.addAttribute('a_color', new THREE.Float32BufferAttribute(attributes.colors, 4)); geometry.addAttribute('pickingId', new THREE.Float32BufferAttribute(attributes.pickingIds, 1)); + geometry.addAttribute('normal', new THREE.Float32BufferAttribute(attributes.normals, 3)); + const material = new GridMaterial({ u_opacity: opacity, u_xOffset: xOffset, u_yOffset: yOffset, u_coverage: coverage, - u_activeColor: activeOption.fill + u_activeColor: activeOption.fill, + ...generateLightingUniforms(lights) }, { - SHAPE: false + SHAPE: false, + LIGHTING: layer.shapeType !== 'square' }); const gridMesh = new THREE.Mesh(geometry, material); return gridMesh; diff --git a/src/layer/render/heatmap/hexagon.js b/src/layer/render/heatmap/hexagon.js index 8c2c42ee14..3fa4c03285 100644 --- a/src/layer/render/heatmap/hexagon.js +++ b/src/layer/render/heatmap/hexagon.js @@ -1,27 +1,41 @@ import * as THREE from '../../../core/three'; -import hexagonBuffer from '../../../geom/buffer/heatmap/hexagon'; import GridMaterial from '../../../geom/material/hexagon'; -export default function DrawHexagon(layerdata, layer, source) { +import { getBuffer } from '../../../geom/buffer/'; +import { generateLightingUniforms } from '../../../util/shaderModule'; +export default function DrawHexagon(layerData, layer, source) { const style = layer.get('styleOptions'); const { fill } = layer.get('activedOptions'); const { radius } = source.data; - const attributes = new hexagonBuffer(layerdata); - const { opacity, angle, coverage } = style; - const geometry = new THREE.BufferGeometry(); - geometry.addAttribute('position', new THREE.Float32BufferAttribute(attributes.vertices, 3)); - geometry.addAttribute('miter', new THREE.Float32BufferAttribute(attributes.miter, 2)); - geometry.addAttribute('a_color', new THREE.Float32BufferAttribute(attributes.colors, 4)); - geometry.addAttribute('pickingId', new THREE.Float32BufferAttribute(attributes.pickingIds, 1)); + const { opacity, angle = 0, coverage, lights } = style; + const geometryBuffer = getBuffer(layer.type, 'shape'); + const buffer = new geometryBuffer({ + layerData, + shapeType: layer.shapeType + }); + const { attributes, instanceGeometry } = buffer; + const instancedGeometry = new THREE.InstancedBufferGeometry(); + instancedGeometry.setIndex(instanceGeometry.indexArray); + instancedGeometry.addAttribute('miter', new THREE.Float32BufferAttribute(instanceGeometry.positions, 3)); + if (instanceGeometry.normals) { + instancedGeometry.addAttribute('normal', new THREE.Float32BufferAttribute(instanceGeometry.normals, 3)); + } + instancedGeometry.addAttribute('position', new THREE.InstancedBufferAttribute(new Float32Array(attributes.positions), 3)); + instancedGeometry.addAttribute('a_color', new THREE.InstancedBufferAttribute(new Float32Array(attributes.colors), 4)); + instancedGeometry.addAttribute('pickingId', new THREE.InstancedBufferAttribute(new Float32Array(attributes.pickingIds), 1)); + instancedGeometry.addAttribute('a_size', new THREE.InstancedBufferAttribute(new Float32Array(attributes.sizes), 1)); + const material = new GridMaterial({ u_opacity: opacity, u_radius: radius, u_angle: angle / 180 * Math.PI, u_coverage: coverage, - u_activeColor: fill + u_activeColor: fill, + ...generateLightingUniforms(lights) }, { - SHAPE: false + SHAPE: false, + LIGHTING: !!instanceGeometry.normals }); - const hexgonMesh = new THREE.Mesh(geometry, material); + const hexgonMesh = new THREE.Mesh(instancedGeometry, material); return hexgonMesh; } diff --git a/src/layer/render/index.js b/src/layer/render/index.js index 79158b56d9..410ec8c0df 100644 --- a/src/layer/render/index.js +++ b/src/layer/render/index.js @@ -3,6 +3,7 @@ import { registerRender, getRender } from './factory'; import DrawFill from './polygon/drawFill'; import DrawLine from './polygon/drawLine'; import DrawAnimate from './polygon/drawAnimate'; +import Draw3DShape from './point/draw_3d_shape'; registerRender('polygon', 'fill', DrawFill); registerRender('polygon', 'extrude', DrawFill); @@ -18,29 +19,33 @@ registerRender('line', 'arc', DrawArcLine); registerRender('line', 'greatCircle', DrawArcLine); // point -import DrawPointFill from './point/drawFill'; +// import DrawPointFill from './point/drawFill'; import DrawPointImage from './point/drawImage'; import DrawPointNormal from './point/drawNormal'; import DrawPointStroke from './point/drawStroke'; import DrawPointText from './point/drawText'; import DrawPointCircle from './point/drawCircle'; +import DrawHexagon from './heatmap/hexagon'; -registerRender('point', 'fill', DrawPointFill); +// registerRender('point', 'fill', DrawPointFill); registerRender('point', 'image', DrawPointImage); registerRender('point', 'normal', DrawPointNormal); registerRender('point', 'stroke', DrawPointStroke); registerRender('point', 'text', DrawPointText); -registerRender('point', 'circle', DrawPointCircle); +registerRender('point', 'fill', DrawPointCircle); +registerRender('point', 'shape', Draw3DShape); +registerRender('point', 'extrude', Draw3DShape); // heatmap import DrawGrid from './heatmap/gird'; import DrawHeatmap from './heatmap/heatmap'; -import DrawHexagon from './heatmap/hexagon'; -registerRender('heatmap', 'grid', DrawGrid); + +registerRender('heatmap', 'square', DrawGrid); +registerRender('heatmap', 'squareColumn', DrawGrid); registerRender('heatmap', 'heatmap', DrawHeatmap); -registerRender('heatmap', 'hexagon', DrawHexagon); +registerRender('heatmap', 'shape', DrawHexagon); // image diff --git a/src/layer/render/line/drawArc.js b/src/layer/render/line/drawArc.js index e3ad5990b1..811c18023d 100644 --- a/src/layer/render/line/drawArc.js +++ b/src/layer/render/line/drawArc.js @@ -1,20 +1,24 @@ import * as THREE from '../../../core/three'; -import { LineBuffer } from '../../../geom/buffer/index'; import { ArcLineMaterial } from '../../../geom/material/lineMaterial'; -export default function DrawArcLine(layerdata, layer) { +import { getBuffer } from '../../../geom/buffer/'; +export default function DrawArcLine(layerData, layer, buffer) { const style = layer.get('styleOptions'); const activeOption = layer.get('activedOptions'); - const { attributes } = new LineBuffer({ - layerData: layerdata, - shapeType: 'arc', - style - }); + if (!buffer) { + const geometryBuffer = getBuffer(layer.type, layer.shapeType); + buffer = new geometryBuffer({ + layerData, + shapeType: layer.shapeType, + style + }); + + } + const { attributes, indexArray } = buffer; const geometry = new THREE.BufferGeometry(); - geometry.setIndex(attributes.indexArray); - geometry.addAttribute('pickingId', new THREE.Float32BufferAttribute(attributes.pickingIds, 1)); + geometry.setIndex(new THREE.Uint32BufferAttribute(indexArray, 1)); geometry.addAttribute('position', new THREE.Float32BufferAttribute(attributes.positions, 3)); geometry.addAttribute('a_color', new THREE.Float32BufferAttribute(attributes.colors, 4)); - geometry.addAttribute('a_instance', new THREE.Float32BufferAttribute(attributes.instances, 4)); + geometry.addAttribute('a_instance', new THREE.Float32BufferAttribute(attributes.instanceArray, 4)); geometry.addAttribute('a_size', new THREE.Float32BufferAttribute(attributes.sizes, 1)); const lineMaterial = new ArcLineMaterial({ diff --git a/src/layer/render/line/drawMeshLine.js b/src/layer/render/line/drawMeshLine.js index 6b9db4c8cb..6b81e0da3c 100644 --- a/src/layer/render/line/drawMeshLine.js +++ b/src/layer/render/line/drawMeshLine.js @@ -1,8 +1,8 @@ import * as THREE from '../../../core/three'; -import { LineBuffer } from '../../../geom/buffer/index'; import { MeshLineMaterial } from '../../../geom/material/lineMaterial'; +import { getBuffer } from '../../../geom/buffer/'; -export default function DrawLine(layerData, layer) { +export default function DrawLine(layerData, layer, buffer) { const style = layer.get('styleOptions'); const animateOptions = layer.get('animateOptions'); @@ -12,25 +12,31 @@ export default function DrawLine(layerData, layer) { const hasPattern = layerData.some(layer => { return layer.pattern; }); - const { attributes } = new LineBuffer({ - layerData, - shapeType: 'line', - style, - imagePos: layer.scene.image.imagePos - }); + if (!buffer) { + const geometryBuffer = getBuffer(layer.type, layer.shapeType); + buffer = new geometryBuffer({ + layerData, + shapeType: 'line', + style, + imagePos: layer.scene.image.imagePos + }); + + } + const { attributes, indexArray } = buffer; + + const geometry = new THREE.BufferGeometry(); - geometry.setIndex(attributes.indexArray); + geometry.setIndex(new THREE.Uint32BufferAttribute(indexArray, 1)); geometry.addAttribute('pickingId', new THREE.Float32BufferAttribute(attributes.pickingIds, 1)); geometry.addAttribute('position', new THREE.Float32BufferAttribute(attributes.positions, 3)); geometry.addAttribute('a_color', new THREE.Float32BufferAttribute(attributes.colors, 4)); geometry.addAttribute('a_size', new THREE.Float32BufferAttribute(attributes.sizes, 1)); - geometry.addAttribute('normal', new THREE.Float32BufferAttribute(attributes.normal, 3)); - geometry.addAttribute('a_miter', new THREE.Float32BufferAttribute(attributes.miter, 1)); + geometry.addAttribute('normal', new THREE.Float32BufferAttribute(attributes.normals, 3)); + geometry.addAttribute('a_miter', new THREE.Float32BufferAttribute(attributes.miters, 1)); geometry.addAttribute('a_distance', new THREE.Float32BufferAttribute(attributes.attrDistance, 1)); - geometry.addAttribute('a_dash_array', new THREE.Float32BufferAttribute(attributes.attrDashArray, 1)); - geometry.addAttribute('a_texture_coord', new THREE.Float32BufferAttribute(attributes.textureCoord, 2)); - geometry.addAttribute('a_total_distance', new THREE.Float32BufferAttribute(attributes.totalDistance, 1)); - + geometry.addAttribute('a_dash_array', new THREE.Float32BufferAttribute(attributes.dashArray, 1)); + geometry.addAttribute('a_texture_coord', new THREE.Float32BufferAttribute(attributes.patterns, 2)); + geometry.addAttribute('a_total_distance', new THREE.Float32BufferAttribute(attributes.totalDistances, 1)); const lineMaterial = new MeshLineMaterial({ u_opacity: style.opacity, u_zoom: layer.scene.getZoom(), @@ -46,7 +52,7 @@ export default function DrawLine(layerData, layer) { DASHLINE: style.lineType === 'dash', TEXTURE: hasPattern }); - + lineMaterial.setBending(style.blending); const lineMesh = new THREE.Mesh(geometry, lineMaterial); if (animateOptions.enable) { layer.scene.startAnimate(); diff --git a/src/layer/render/point/drawCircle.js b/src/layer/render/point/drawCircle.js index e602ef938d..6fcd27979d 100644 --- a/src/layer/render/point/drawCircle.js +++ b/src/layer/render/point/drawCircle.js @@ -3,18 +3,33 @@ * 手动构建点阵坐标系,便于实现描边、反走样效果 */ import * as THREE from '../../../core/three'; -import * as PointBuffer from '../../../geom/buffer/point/index'; import CircleMaterial from '../../../geom/material/circleMaterial'; -export default function drawCircle(layerData, layer) { +import { getBuffer } from '../../../geom/buffer/'; +export default function drawCircle(layerData, layer, buffer) { const style = layer.get('styleOptions'); const activeOption = layer.get('activedOptions'); + if (!buffer) { + const geometryBuffer = getBuffer(layer.type, layer.shapeType); + buffer = new geometryBuffer({ + layerData + }); - const { aPosition, aPackedData, index } = PointBuffer.CircleBuffer(layerData, style); + } + // const { aPosition, aPackedData } = buffer.attributes; + const { attributes, indexArray } = buffer; const geometry = new THREE.BufferGeometry(); - geometry.setIndex(index); - geometry.addAttribute('position', new THREE.Float32BufferAttribute(aPosition, 3)); - geometry.addAttribute('a_packed_data', new THREE.Float32BufferAttribute(aPackedData, 4)); + if (buffer.indexArray) { + geometry.setIndex(new THREE.Uint32BufferAttribute(indexArray, 1)); + } + // geometry.addAttribute('position', new THREE.Float32BufferAttribute(aPosition, 3)); + geometry.addAttribute('position', new THREE.Float32BufferAttribute(attributes.positions, 3)); + geometry.addAttribute('a_color', new THREE.Float32BufferAttribute(attributes.colors, 4)); + geometry.addAttribute('pickingId', new THREE.Float32BufferAttribute(attributes.pickingIds, 1)); + geometry.addAttribute('miter', new THREE.Float32BufferAttribute(attributes.miters, 2)); + geometry.addAttribute('a_size', new THREE.Float32BufferAttribute(attributes.sizes, 1)); + geometry.addAttribute('a_shape', new THREE.Float32BufferAttribute(attributes.shapes, 1)); + // geometry.addAttribute('a_packed_data', new THREE.Float32BufferAttribute(aPackedData, 4)); const material = new CircleMaterial({ u_opacity: style.opacity, u_activeColor: activeOption.fill, @@ -24,9 +39,7 @@ export default function drawCircle(layerData, layer) { u_stroke_opacity: style.strokeOpacity }); material.depthTest = false; + material.setBending(style.blending); const fillMesh = new THREE.Mesh(geometry, material); - aPosition.length = 0; - aPackedData.length = 0; - index.length = 0; return fillMesh; } diff --git a/src/layer/render/point/drawFill.js b/src/layer/render/point/drawFill.js index cc2fcf741e..4bd5583095 100644 --- a/src/layer/render/point/drawFill.js +++ b/src/layer/render/point/drawFill.js @@ -22,16 +22,6 @@ export default function DrawFill(layerData, layer) { geometry.addAttribute('a_shape', new THREE.Float32BufferAttribute(attributes.shapePositions, 3)); geometry.addAttribute('a_size', new THREE.Float32BufferAttribute(attributes.a_size, 3)); - // const instancedGeometry = new THREE.InstancedBufferGeometry(); - - // instancedGeometry.addAttribute('normal', new THREE.Float32BufferAttribute(attributes.normals, 3)); - // instancedGeometry.addAttribute('a_shape', new THREE.Float32BufferAttribute(attributes.shapePositions, 3)); - // // instanced attributes - // instancedGeometry.addAttribute('position', new THREE.InstancedBufferAttribute(new Float32Array(attributes.vertices), 3)); - // instancedGeometry.addAttribute('a_color', new THREE.InstancedBufferAttribute(new Float32Array(attributes.colors), 4)); - // instancedGeometry.addAttribute('pickingId', new THREE.InstancedBufferAttribute(new Float32Array(attributes.pickingIds), 1)); - // instancedGeometry.addAttribute('a_size', new THREE.InstancedBufferAttribute(new Float32Array(attributes.a_size), 3)); - const material = new PolygonMaterial({ u_opacity: style.opacity, u_activeColor: activeOption.fill, @@ -43,6 +33,7 @@ export default function DrawFill(layerData, layer) { }); material.setDefinesvalue('SHAPE', true); material.depthTest = false; + material.setBending(style.blending); const fillMesh = new THREE.Mesh(geometry, material); if (style.stroke !== 'none') { // 是否绘制边界 diff --git a/src/layer/render/point/drawNormal.js b/src/layer/render/point/drawNormal.js index c851e85341..1f5ade88be 100644 --- a/src/layer/render/point/drawNormal.js +++ b/src/layer/render/point/drawNormal.js @@ -3,7 +3,8 @@ */ import * as THREE from '../../../core/three'; import * as PointBuffer from '../../../geom/buffer/point/index'; -import PointMaterial from '../../../geom/material/pointMaterial'; +import PointMaterial from '../../../geom/material/normal_point'; + export default function DrawNormal(layerData, layer) { const geometry = new THREE.BufferGeometry(); const style = layer.get('styleOptions'); @@ -18,9 +19,7 @@ export default function DrawNormal(layerData, layer) { u_opacity: opacity, u_activeColor: activeOption.fill }, { - SHAPE: false, - TEXCOORD_0: false - }); + }, style); const strokeMesh = new THREE.Points(geometry, material); return strokeMesh; } diff --git a/src/layer/render/point/draw_3d_shape.js b/src/layer/render/point/draw_3d_shape.js new file mode 100644 index 0000000000..6ea382c88d --- /dev/null +++ b/src/layer/render/point/draw_3d_shape.js @@ -0,0 +1,37 @@ +import * as THREE from '../../../core/three'; +import { getBuffer } from '../../../geom/buffer/'; +import PolygonMaterial from '../../../geom/material/polygonMaterial'; +import { generateLightingUniforms } from '../../../util/shaderModule'; +export default function Draw3DShape(layerData, layer) { + const style = layer.get('styleOptions'); + const activeOption = layer.get('activedOptions'); + const geometryBuffer = getBuffer('shape', 'extrude'); + const buffer = new geometryBuffer({ + layerData, + shapeType: layer.shapeType + }); + const { attributes, indexArray } = buffer; + const geometry = new THREE.BufferGeometry(); + geometry.setIndex(new THREE.Uint32BufferAttribute(indexArray, 1)); + geometry.addAttribute('position', new THREE.Float32BufferAttribute(attributes.positions, 3)); + geometry.addAttribute('a_color', new THREE.Float32BufferAttribute(attributes.colors, 4)); + geometry.addAttribute('pickingId', new THREE.Float32BufferAttribute(attributes.pickingIds, 1)); + geometry.addAttribute('normal', new THREE.Float32BufferAttribute(attributes.normals, 3)); + geometry.addAttribute('a_shape', new THREE.Float32BufferAttribute(attributes.miters, 3)); + geometry.addAttribute('a_size', new THREE.Float32BufferAttribute(attributes.sizes, 3)); + + const material = new PolygonMaterial({ + u_opacity: style.opacity, + u_activeColor: activeOption.fill, + u_zoom: layer.scene.getZoom(), + ...generateLightingUniforms(style.lights) + }, { + SHAPE: true, + LIGHTING: true + }); + material.setDefinesvalue('SHAPE', true); + material.setBending(style.blending); + const fillMesh = new THREE.Mesh(geometry, material); + return fillMesh; +} + diff --git a/src/layer/render/polygon/drawAnimate.js b/src/layer/render/polygon/drawAnimate.js index beae138076..ea3efa99df 100644 --- a/src/layer/render/polygon/drawAnimate.js +++ b/src/layer/render/polygon/drawAnimate.js @@ -1,24 +1,32 @@ import * as THREE from '../../../core/three'; -import PolygonBuffer from '../../../geom/buffer/polygon'; import PolygonMaterial from '../../../geom/material/polygonMaterial'; +import { getBuffer } from '../../../geom/buffer/'; import { generateLightingUniforms } from '../../../util/shaderModule'; -export default function DrawAnimate(layerData, layer) { +export default function DrawAnimate(layerData, layer, buffer) { const style = layer.get('styleOptions'); const { near, far } = layer.map.getCameraState(); layer.scene.startAnimate(); - const { attributes } = new PolygonBuffer({ - shape: 'extrude', - layerData - }); + if (!buffer) { + const geometryBuffer = getBuffer(layer.type, 'extrude'); + buffer = new geometryBuffer({ + layerData, + uv: true + }); + + } + const { attributes, indexArray } = buffer; const { opacity, baseColor, brightColor, windowColor, lights } = style; const geometry = new THREE.BufferGeometry(); - geometry.addAttribute('position', new THREE.Float32BufferAttribute(attributes.vertices, 3)); + if (indexArray) { + geometry.setIndex(new THREE.Uint32BufferAttribute(indexArray, 1)); + } + geometry.addAttribute('position', new THREE.Float32BufferAttribute(attributes.positions, 3)); geometry.addAttribute('a_color', new THREE.Float32BufferAttribute(attributes.colors, 4)); geometry.addAttribute('pickingId', new THREE.Float32BufferAttribute(attributes.pickingIds, 1)); - geometry.addAttribute('normal', new THREE.Float32BufferAttribute(attributes.normals, 3)); - geometry.addAttribute('faceUv', new THREE.Float32BufferAttribute(attributes.faceUv, 2)); - geometry.addAttribute('a_size', new THREE.Float32BufferAttribute(attributes.sizes, 1)); + geometry.addAttribute('faceUv', new THREE.Float32BufferAttribute(attributes.uv, 2)); + // geometry.addAttribute('a_size', new THREE.Float32BufferAttribute(attributes.sizes, 1)); + geometry.computeVertexNormals(); const material = new PolygonMaterial({ u_opacity: opacity, u_baseColor: baseColor, diff --git a/src/layer/render/polygon/drawFill.js b/src/layer/render/polygon/drawFill.js index e569281f1a..b4705c39ac 100644 --- a/src/layer/render/polygon/drawFill.js +++ b/src/layer/render/polygon/drawFill.js @@ -1,9 +1,9 @@ import * as THREE from '../../../core/three'; -import PolygonBuffer from '../../../geom/buffer/polygon'; import PolygonMaterial from '../../../geom/material/polygonMaterial'; import { generateLightingUniforms } from '../../../util/shaderModule'; +import { getBuffer } from '../../../geom/buffer/'; -export default function DrawPolygonFill(layerData, layer) { +export default function DrawPolygonFill(layerData, layer, buffer) { const style = layer.get('styleOptions'); const activeOption = layer.get('activedOptions'); const config = { @@ -11,15 +11,22 @@ export default function DrawPolygonFill(layerData, layer) { activeColor: activeOption.fill }; const { opacity, activeColor, lights } = config; - const { attributes } = new PolygonBuffer({ - shape: layer.shape, - layerData - }); + if (!buffer) { + const geometryBuffer = getBuffer(layer.type, layer.shape); + buffer = new geometryBuffer({ + layerData + }); + + } + const { attributes, indexArray } = buffer; const geometry = new THREE.BufferGeometry(); - geometry.addAttribute('position', new THREE.Float32BufferAttribute(attributes.vertices, 3)); + if (indexArray) { + geometry.setIndex(new THREE.Uint32BufferAttribute(indexArray, 1)); + } + geometry.addAttribute('position', new THREE.Float32BufferAttribute(attributes.positions, 3)); geometry.addAttribute('a_color', new THREE.Float32BufferAttribute(attributes.colors, 4)); geometry.addAttribute('pickingId', new THREE.Float32BufferAttribute(attributes.pickingIds, 1)); - geometry.addAttribute('normal', new THREE.Float32BufferAttribute(attributes.normals, 3)); + geometry.computeVertexNormals(); const material = new PolygonMaterial({ u_opacity: opacity, u_activeColor: activeColor, diff --git a/src/layer/render/polygon/drawLine.js b/src/layer/render/polygon/drawLine.js index d14d8dc3e6..908ec65e0d 100644 --- a/src/layer/render/polygon/drawLine.js +++ b/src/layer/render/polygon/drawLine.js @@ -1,7 +1,7 @@ import * as THREE from '../../../core/three'; -import PolygonBuffer from '../../../geom/buffer/polygon'; +import { getBuffer } from '../../../geom/buffer/'; import { LineMaterial } from '../../../geom/material/lineMaterial'; -export default function DrawPolygonLine(layerData, layer) { +export default function DrawPolygonLine(layerData, layer, buffer) { const style = layer.get('styleOptions'); const activeOption = layer.get('activedOptions'); const config = { @@ -9,12 +9,19 @@ export default function DrawPolygonLine(layerData, layer) { activeColor: activeOption.fill }; const { opacity } = config; - const { attributes } = new PolygonBuffer({ - shape: layer.shape, - layerData - }); + if (!buffer) { + const geometryBuffer = getBuffer(layer.type, layer.shape); + buffer = new geometryBuffer({ + layerData + }); + + } + const { attributes, indexArray } = buffer; const geometry = new THREE.BufferGeometry(); - geometry.addAttribute('position', new THREE.Float32BufferAttribute(attributes.vertices, 3)); + if (indexArray) { + geometry.setIndex(new THREE.Uint32BufferAttribute(indexArray, 1)); + } + geometry.addAttribute('position', new THREE.Float32BufferAttribute(attributes.positions, 3)); geometry.addAttribute('a_color', new THREE.Float32BufferAttribute(attributes.colors, 4)); geometry.addAttribute('pickingId', new THREE.Float32BufferAttribute(attributes.pickingIds, 1)); const lineMaterial = new LineMaterial({ diff --git a/src/layer/tile/imageTile.js b/src/layer/tile/image_tile.js similarity index 100% rename from src/layer/tile/imageTile.js rename to src/layer/tile/image_tile.js diff --git a/src/layer/tile/imageTileLayer.js b/src/layer/tile/image_tile_layer.js similarity index 74% rename from src/layer/tile/imageTileLayer.js rename to src/layer/tile/image_tile_layer.js index 04adabee6d..0b40c4947e 100644 --- a/src/layer/tile/imageTileLayer.js +++ b/src/layer/tile/image_tile_layer.js @@ -1,5 +1,5 @@ -import TileLayer from './tileLayer'; -import ImageTile from './imageTile'; +import TileLayer from './tile_layer'; +import ImageTile from './image_tile'; export default class ImageTileLayer extends TileLayer { constructor(scene, cfg) { diff --git a/src/layer/tile/tileCache.js b/src/layer/tile/tile_cache.js similarity index 100% rename from src/layer/tile/tileCache.js rename to src/layer/tile/tile_cache.js diff --git a/src/layer/tile/tileLayer.js b/src/layer/tile/tile_layer.js similarity index 98% rename from src/layer/tile/tileLayer.js rename to src/layer/tile/tile_layer.js index 03a074852e..23c37f52c9 100644 --- a/src/layer/tile/tileLayer.js +++ b/src/layer/tile/tile_layer.js @@ -1,12 +1,12 @@ import Layer from '../../core/layer'; import Util from '../../util'; import diff from '../../util/diff'; -import TileSource from '../../source/tileSource'; +import TileSource from '../../source/tile_source'; import * as THREE from '../../core/three'; import Controller from '../../core/controller/index'; import Global from '../../global'; const { pointShape } = Global; -import TileCache from './tileCache'; +import TileCache from './tile_cache'; import { toLngLat, Bounds, Point } from '@antv/geo-coord'; import { wrapNum } from '@antv/geo-coord/lib/util/index'; import { epsg3857 } from '@antv/geo-coord/lib/geo/crs/crs-epsg3857'; @@ -25,6 +25,7 @@ export default class TileLayer extends Layer { this._tileKeys = []; this.tileList = {}; this.type = this.get('layerType'); + this.workerPool = this.scene.workerPool; } shape(field, values) { const layerType = this.get('layerType'); @@ -41,6 +42,11 @@ export default class TileLayer extends Layer { } else { cfg.mapType = this.scene.mapType; this.tileSource = new TileSource(data, cfg); + this.sourceCfg = { + ...cfg, + url: data + }; + } return this; } @@ -406,7 +412,7 @@ export default class TileLayer extends Layer { const preStyle = this.get('preStyleOption'); const nextStyle = this.get('styleOptions'); if (preAttrs === undefined && preStyle === undefined) { // 首次渲染 - this._setPreOption(); + // this._setPreOption(); this._scaleByZoom(); this._initControllers(); this._initInteraction(); diff --git a/src/layer/tile/vectorTile.js b/src/layer/tile/vector_tile.js similarity index 81% rename from src/layer/tile/vectorTile.js rename to src/layer/tile/vector_tile.js index ad966e8e14..a8defd052c 100644 --- a/src/layer/tile/vectorTile.js +++ b/src/layer/tile/vector_tile.js @@ -1,44 +1,10 @@ import Tile from './tile'; -import { getArrayBuffer } from '../../util/ajax'; + import { destoryObject, updateObjecteUniform } from '../../util/object3d-util'; import * as THREE from '../../core/three'; import MaskMaterial from '../../geom/material/tile/maskMaterial'; import { getRender } from '../render/index'; export default class VectorTile extends Tile { - // requestTileAsync(done) { - // // Making this asynchronous really speeds up the LOD framerate - // setTimeout(() => { - // if (!this._mesh) { - // // this._mesh = this._createMesh(); - // this._requestTile(done); - // } - // }, 0); - // } - _requestTile(done) { - const urlParams = { - x: this._tile[0], - y: this._tile[1], - z: this._tile[2] - }; - - const url = this._getTileURL(urlParams); - this.xhrRequest = getArrayBuffer({ url }, (err, data) => { - if (err) { - this._noData = true; - return; - } - this._isLoaded = true; - done(data.data); - }); - } - _creatSource(data) { - if (!data) return null; - this.layerSource = this.layer.tileSource(data, { - parser: { - tile: this._tile - } - }); - } _createMesh() { const layerData = this.layerData; if (this.layer.get('layerType') === 'point') { diff --git a/src/layer/tile/VectorTileLayer.js b/src/layer/tile/vector_tile_layer.js similarity index 64% rename from src/layer/tile/VectorTileLayer.js rename to src/layer/tile/vector_tile_layer.js index 73258a6e40..d71bc6237c 100644 --- a/src/layer/tile/VectorTileLayer.js +++ b/src/layer/tile/vector_tile_layer.js @@ -1,5 +1,5 @@ -import TileLayer from './tileLayer'; -import VectorTile from './vectorTile'; +import TileLayer from './tile_layer'; +import VectorTile from './vector_tile'; export default class VectorTileLayer extends TileLayer { _createTile(key, layer) { return new VectorTile(key, this.url, layer); diff --git a/src/layer/tile/vector_tile_mesh.js b/src/layer/tile/vector_tile_mesh.js new file mode 100644 index 0000000000..ae1687d89b --- /dev/null +++ b/src/layer/tile/vector_tile_mesh.js @@ -0,0 +1,132 @@ +import { destoryObject, updateObjecteUniform } from '../../util/object3d-util'; +import * as THREE from '../../core/three'; +import MaskMaterial from '../../geom/material/tile/maskMaterial'; +import { aProjectFlat } from '../../geo/project'; +import { toLngLatBounds, toBounds } from '@antv/geo-coord'; +import { getRender } from '../render/index'; +const r2d = 180 / Math.PI; +export default class VectorTileMesh { + constructor(layer, data) { + this.layer = layer; + this._object3D = new THREE.Object3D(); + this._object3D.name = data.tileId; + this._tile = data.tileId.split('_').map(v => v * 1); + this._tileLnglatBounds = this._tileLnglatBounds(this._tile); + + this._tileBounds = this._tileBounds(this._tileLnglatBounds); + + this._center = this._tileBounds.getCenter(); + + this._centerLnglat = this._tileLnglatBounds.getCenter(); + this._init(data); + + this.maskScene = new THREE.Scene(); + const tileMesh = this._tileMaskMesh(); + // this._object3D.add(tileMesh); + this.maskScene.add(tileMesh); + } + _init(data) { + this._createMesh(data); + } + _createMesh(data) { + this.mesh = getRender(this.layer.get('type'), data.shape)(null, this.layer, data.buffer); + if (this.mesh.type !== 'composer') { // 热力图的情况 + this.mesh.onBeforeRender = renderer => { + this._renderMask(renderer); + const zoom = this.layer.scene.getZoom(); + updateObjecteUniform(this._object3D, { + u_time: this.layer.scene._engine.clock.getElapsedTime(), + u_zoom: zoom + }); + }; + this.mesh.onAfterRender = renderer => { + const context = renderer.context; + context.clear(context.STENCIL_BUFFER_BIT); + context.disable(context.STENCIL_TEST); + }; + this._object3D.add(this.mesh); + } else { // 如果是热力图 + this._object3D = this.mesh; + } + return this._object3D; + } + getMesh() { + return this._object3D; + } + + _renderMask(renderer) { + if (this.layer.get('layerType') === 'point') { // 点图层目前不需要mask + return; + } + const context = renderer.context; + renderer.autoClear = false; + renderer.clearDepth(); + context.enable(context.STENCIL_TEST); + context.stencilOp(context.REPLACE, context.REPLACE, context.REPLACE); + context.stencilFunc(context.ALWAYS, 1, 0xffffffff); + context.clearStencil(0); + context.clear(context.STENCIL_BUFFER_BIT); + context.colorMask(false, false, false, false); + + // config the stencil buffer to collect data for testing + this.layer.scene._engine.renderScene(this.maskScene); + context.colorMask(true, true, true, true); + context.depthMask(false); + renderer.clearDepth(); + + // only render where stencil is set to 1 + + context.stencilFunc(context.EQUAL, 1, 0xffffffff); // draw if == 1 + context.stencilOp(context.KEEP, context.KEEP, context.KEEP); + } + _tileMaskMesh() { + const tilebound = this._tileBounds; + const bl = [ tilebound.getBottomLeft().x, tilebound.getBottomLeft().y, 0 ]; + const br = [ tilebound.getBottomRight().x, tilebound.getBottomRight().y, 0 ]; + const tl = [ tilebound.getTopLeft().x, tilebound.getTopLeft().y, 0 ]; + const tr = [ tilebound.getTopRight().x, tilebound.getTopRight().y, 0 ]; + const positions = new Float32Array([ ...bl, ...tr, ...br, ...bl, ...tl, ...tr ]); + const geometry = new THREE.BufferGeometry(); + geometry.addAttribute('position', new THREE.Float32BufferAttribute(positions, 3)); + const maskMaterial = new MaskMaterial(); + const maskMesh = new THREE.Mesh(geometry, maskMaterial); + return maskMesh; + } + getSelectFeature(id) { + const featurekey = this.layerSource.originData.featureKeys[id]; + if (featurekey && featurekey.index !== undefined) { + const featureIndex = featurekey.index; + return this.layerSource.originData.dataArray[featureIndex]; + } + return null; + } + _tileBounds(lnglatBound) { + const ne = this.layer.scene.project([ lnglatBound.getNorthEast().lng, lnglatBound.getNorthEast().lat ]); + const sw = this.layer.scene.project([ lnglatBound.getSouthWest().lng, lnglatBound.getSouthWest().lat ]); + return toBounds(sw, ne); + } + // Get tile bounds in WGS84 coordinates + _tileLnglatBounds(tile) { + const e = this._tile2lng(tile[0] + 1, tile[2]); + const w = this._tile2lng(tile[0], tile[2]); + const s = this._tile2lat(tile[1] + 1, tile[2]); + const n = this._tile2lat(tile[1], tile[2]); + return toLngLatBounds([ w, n ], [ e, s ]); + } + + _tile2lng(x, z) { + return x / Math.pow(2, z) * 360 - 180; + } + + _tile2lat(y, z) { + const n = Math.PI - 2 * Math.PI * y / Math.pow(2, z); + return r2d * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n))); + } + destroy() { + destoryObject(this._object3D); + destoryObject(this.maskScene); + this._object3D = null; + this.maskScene = null; + this.layerData = null; + } +} diff --git a/src/source/index.js b/src/source/index.js index b1d1819c64..802b7b3049 100644 --- a/src/source/index.js +++ b/src/source/index.js @@ -6,6 +6,7 @@ import csv from './parser/csv'; import json from './parser/json'; import raster from './parser/raster'; import mvt from './parser/mvt'; +import vector from './parser/vector'; import { registerTransform, registerParser } from './factory'; import { aggregatorToGrid } from './transform/grid'; @@ -18,6 +19,7 @@ registerParser('csv', csv); registerParser('json', json); registerParser('raster', raster); registerParser('mvt', mvt); +registerParser('vector', vector); // 注册transform registerTransform('grid', aggregatorToGrid); diff --git a/src/source/parser/geojson.js b/src/source/parser/geojson.js index c0500d23ca..ac70b2fbdf 100644 --- a/src/source/parser/geojson.js +++ b/src/source/parser/geojson.js @@ -3,6 +3,8 @@ import { getCoords } from '@turf/invariant'; import { djb2hash } from '../../util/bkdr-hash'; import rewind from '@mapbox/geojson-rewind'; export default function geoJSON(data, cfg) { + // 矢量瓦片图层不做 rewind + rewind(data, true); const resultData = []; const featureKeys = {}; diff --git a/src/source/parser/json.js b/src/source/parser/json.js index 2f0f8fb029..d24d324aa1 100644 --- a/src/source/parser/json.js +++ b/src/source/parser/json.js @@ -1,5 +1,6 @@ import rewind from '@mapbox/geojson-rewind'; export default function json(data, cfg) { + const { x, y, x1, y1, coordinates } = cfg; const resultdata = []; data.forEach((col, featureIndex) => { @@ -11,11 +12,10 @@ export default function json(data, cfg) { if (coordinates) { const geometry = { type: 'Polygon', - coordinates: col[coordinates] + coordinates: [ ...col[coordinates] ] }; rewind(geometry, true); coords = geometry.coordinates; - delete col[coordinates]; } col._id = featureIndex + 1; diff --git a/src/source/parser/mvt.js b/src/source/parser/mvt.js index a2777e5b07..a8976fa960 100644 --- a/src/source/parser/mvt.js +++ b/src/source/parser/mvt.js @@ -12,12 +12,8 @@ export default function mvt(data, cfg) { for (let i = 0; i < vectorLayer.length; i++) { const feature = vectorLayer.feature(i); const geofeature = feature.toGeoJSON(cfg.tile[0], cfg.tile[1], cfg.tile[2]); - if (geofeature.geometry.type === 'Polygon' && geofeature.geometry.coordinates[0].length < 20) { - continue; - } features.push(geofeature); } - // console.log(features); const geodata = { type: 'FeatureCollection', features diff --git a/src/source/parser/vector.js b/src/source/parser/vector.js new file mode 100644 index 0000000000..e74cd363a6 --- /dev/null +++ b/src/source/parser/vector.js @@ -0,0 +1,83 @@ +import { djb2hash } from '../../util/bkdr-hash'; +const Extent = 4096; +export default function vector(data, cfg) { + const tile = cfg.tile; + const resultdata = []; + const featureKeys = {}; + const x0 = Extent * tile[0]; + const y0 = Extent * tile[1]; + function covertP20(points) { + return points.map(point => { + const x1 = (x0 + point.x << 20 - tile[2] - 4) - 215440491; + const y2 = (y0 + point.y << 20 - tile[2] - 4) - 106744817; + return [ x1, -y2, 0 ]; + }); + } + let index = 0; + for (let i = 0; i < data.length; i++) { + const feature = data.feature(i); + const coords = feature.loadGeometry(); + const properties = feature.properties; + let id = i + 1; + if (cfg.idField && properties[cfg.idField]) { + const value = properties[cfg.idField]; + id = djb2hash(value) % 1000019; + featureKeys[id] = { + index, + idField: value + }; + } + const geocoords = classifyRings(coords); + for (let j = 0; j < geocoords.length; j++) { + const geo = geocoords[j].map(coord => { + return covertP20(coord); + }); + index++; + resultdata.push({ + ...properties, + _id: feature.id || id, + coordinates: geo + }); + } + + } + return { + dataArray: resultdata, + featureKeys + }; + +} +function signedArea(ring) { + let sum = 0; + for (let i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) { + p1 = ring[i]; + p2 = ring[j]; + sum += (p2.x - p1.x) * (p1.y + p2.y); + } + return sum; +} +function classifyRings(rings) { + const len = rings.length; + if (len <= 1) return [ rings ]; + const polygons = []; + let polygon; + let ccw; + + for (let i = 0; i < len; i++) { + const area = signedArea(rings[i]); + if (area === 0) continue; + + if (ccw === undefined) ccw = area < 0; + + if (ccw === area < 0) { + if (polygon) polygons.push(polygon); + polygon = [ rings[i] ]; + + } else { + polygon.push(rings[i]); + } + } + if (polygon) polygons.push(polygon); + + return polygons; +} diff --git a/src/source/source_cache.js b/src/source/source_cache.js new file mode 100644 index 0000000000..a55aaa1f21 --- /dev/null +++ b/src/source/source_cache.js @@ -0,0 +1,299 @@ +import Base from '../core/base'; +import TileCache from '../layer/tile/tile_cache'; +import VectorTileSource from './vector_tile_source'; +import { toLngLat, Bounds, Point } from '@antv/geo-coord'; +import VectorTileMesh from '../layer/tile/vector_tile_mesh'; +// 统一管理 source 添加,管理,更新 +export default class SouceCache extends Base { + constructor(scene, cfg) { + super({ + cacheLimit: 50, + minZoom: 0, + maxZoom: 18, + keepBuffer: 0, + ...cfg + }); + this._tileMap = {};// 视野内瓦片坐标序列 + this.tileList = {}; // 正在使用的瓦片坐标,记录瓦片的使用状态 + this.scene = scene; + // TODO 销毁函数 + this._tileCache = new TileCache(this.get('cacheLimit'), this._destroyTile.bind(this)); + this.layers = this.scene.getLayers(); + this._source = new VectorTileSource(cfg, this.scene.style.WorkerController); + this.layersTiles = {}; // 存储当前source所有layer的瓦片 + // this._tiles = new THREE.Object3D(); + } + getLayerById(id) { + const layers = this.scene.getLayers(); + for (let i = 0; i < layers.length; i += 1) { + if (layers[i].layerId === id * 1) { + return layers[i]; + } + } + } + /** + * 移除视野外的瓦片,计算新增的瓦片数据 + * @param {*}tileMap 瓦片列表 + */ + + update() { + // if (!layercfg && this.layercfg) return; + // this._layercfg = layercfg; + this._calculateTileIDs(); + // this.updateList = this._getNewTiles(this._tileMap);// 计算新增瓦片 + // this._pruneTiles(); + for (let i = 0; i < this.updateTileList.length; i++) { + // 瓦片相关参数 + const tileId = this.updateTileList[i].join('_'); + const tileinfo = this.tileList[tileId]; + tileinfo.loading = true; + const tiles = this._tileCache.getTile(tileId); + if (tiles !== undefined) { + tileinfo.active = true; + tileinfo.loaded = true; + for (const layerId in tiles) { + const layer = this.getLayerById(layerId); + const tileMesh = tiles[layerId]; + layer.tiles.add(tileMesh.getMesh()); + this.scene._engine.update(); + } + this._pruneTiles(); + continue; + } + this._source.loadTile(tileinfo, (err, data) => { + if (!err && data !== undefined) { + this._renderTile(tileinfo, data); + tileinfo.active = true; + } + tileinfo.loaded = true; + this._pruneTiles(); + }); + } + } + + _renderTile(tileinfo, data) { + const tileId = tileinfo.id; + const tiles = {}; + for (const layerId in data) { + const layer = this.getLayerById(layerId); + const tileMesh = new VectorTileMesh(layer, data[layerId]); + tiles[layerId] = tileMesh; + layer.tiles.add(tileMesh.getMesh()); + this.scene._engine.update(); + } + + this._tileCache.setTile(tiles, tileId); + } + // 计算视野内的瓦片坐标 + _calculateTileIDs() { + this._tileMap = {}; + this.updateTileList = []; + const zoom = Math.floor(this.scene.getZoom()); // - window.window.devicePixelRatio + 1; // zoom - 1 + const minSourceZoom = this.get('minZoom'); + const maxSourceZoom = this.get('maxZoom'); + this.tileZoom = zoom > maxSourceZoom ? maxSourceZoom : zoom; + const currentZoom = this.scene.getZoom(); + if (currentZoom < minSourceZoom) { + this._removeTiles(); + // 小于source最小范围不在处理 + return; + } + const pixelBounds = this._getPixelBounds(); + const tileRange = this._pxBoundsToTileRange(pixelBounds); + const margin = this.get('keepBuffer'); + const center = this.scene.getCenter(); + const centerPoint = this.scene.crs.lngLatToPoint(toLngLat(center.lng, center.lat), this.tileZoom); + const centerXY = centerPoint.divideBy(256).floor(); + this._noPruneRange = new Bounds(tileRange.getBottomLeft().subtract([ margin, -margin ]), + tileRange.getTopRight().add([ margin, -margin ])); + if (!(isFinite(tileRange.min.x) && + isFinite(tileRange.min.y) && + isFinite(tileRange.max.x) && + isFinite(tileRange.max.y))) { throw new Error('Attempted to load an infinite number of tiles'); } + for (let j = tileRange.min.y; j <= tileRange.max.y; j++) { + for (let i = tileRange.min.x; i <= tileRange.max.x; i++) { + const coords = [ i, j, this.tileZoom ]; + const tile = this.tileList[coords.join('_')]; + if (tile && tile.loading) { + tile.current = true; + tile.retain = true; + } else { + this.tileList[coords.join('_')] = { + current: true, + active: false, + retain: true, + loading: false, + coords, + id: coords.join('_') + }; + this.updateTileList.push(coords); + } + } + } + // 根据中心点排序 + this.updateTileList.sort((a, b) => { + const tile1 = a; + const tile2 = b; + const d1 = Math.pow((tile1[0] * 1 - centerXY.x), 2) + Math.pow((tile1[1] * 1 - centerXY.y), 2); + const d2 = Math.pow((tile2[0] * 1 - centerXY.x), 2) + Math.pow((tile2[1] * 1 - centerXY.y), 2); + return d1 - d2; + }); + this._pruneTiles(); + } + _getPixelBounds() { + const viewPort = this.scene.getBounds().toBounds(); + const NE = viewPort.getNorthEast(); + const SW = viewPort.getSouthWest(); + const zoom = this.tileZoom; + const center = this.scene.getCenter(); + const NEPoint = this.scene.crs.lngLatToPoint(toLngLat(NE.lng, NE.lat), zoom); + const SWPoint = this.scene.crs.lngLatToPoint(toLngLat(SW.lng, SW.lat), zoom); + const centerPoint = this.scene.crs.lngLatToPoint(toLngLat(center.lng, center.lat), zoom); + const topHeight = centerPoint.y - NEPoint.y; + const bottomHeight = SWPoint.y - centerPoint.y; + // 跨日界线的情况 + let leftWidth; + let rightWidth; + if (center.lng - NE.lng > 0 || center.lng - SW.lng < 0) { + const width = Math.pow(2, zoom) * 256 / 360 * (180 - NE.lng) + Math.pow(2, zoom) * 256 / 360 * (SW.lng + 180); + if (center.lng - NE.lng > 0) { // 日界线在右侧 + leftWidth = Math.pow(2, zoom) * 256 / 360 * (center.lng - NE.lng); + rightWidth = width - leftWidth; + } else { + rightWidth = Math.pow(2, zoom) * 256 / 360 * (SW.lng - center.lng); + leftWidth = width - rightWidth; + } + } else { // 不跨日界线 + leftWidth = Math.pow(2, zoom) * 256 / 360 * (center.lng - SW.lng); + rightWidth = Math.pow(2, zoom) * 256 / 360 * (NE.lng - center.lng); + } + const pixelBounds = new Bounds(centerPoint.subtract(leftWidth, topHeight), centerPoint.add(rightWidth, bottomHeight)); + return pixelBounds; + } + _pxBoundsToTileRange(pixelBounds) { + return new Bounds( + pixelBounds.min.divideBy(256).floor(), + pixelBounds.max.divideBy(256).ceil().subtract([ 1, 1 ]) + ); + } + + _loadTile(tile, callback) { + return this._source.loadTile(tile, callback); + + } + _unloadTile(tile) { + if (this._source.unloadTile) { + return this._source.unloadTile(tile, () => { }); + } + } + + _abortTile(tile) { + if (this._source.abortTile) { + return this._source.abortTile(tile, () => { }); + } + } + reload() { + + } + + _reloadTile() { + + } + _removeTile() { + + } + clearTiles() { + + } + _pruneTiles() { + let tile; + const zoom = this.tileZoom; + for (const key in this.tileList) { + const c = this.tileList[key].coords; + if (c[2] !== zoom || !this._noPruneRange.contains(new Point(c[0], c[1]))) { + this.tileList[key].current = false; + this.tileList[key].retain = false; + } + } + for (const key in this.tileList) { + tile = this.tileList[key]; + if (tile.current && !tile.active) { + const [ x, y, z ] = key.split('_').map(v => v * 1); + if (!this._retainParent(x, y, z, z - 5)) { + this._retainChildren(x, y, z, z + 2); + } + } + + } + this._removeOutTiles(); + } + _retainParent(x, y, z, minZoom) { + const x2 = Math.floor(x / 2); + const y2 = Math.floor(y / 2); + const z2 = z - 1; + const tile = this.tileList[[ x2, y2, z2 ].join('_')]; + if (tile && tile.active) { + tile.retain = true; + tile.current = true; + return true; + } else if (tile && tile.loaded) { + tile.retain = true; + } + if (z2 > minZoom) { + return this._retainParent(x2, y2, z2, minZoom); + } + + return false; + + } + _retainChildren(x, y, z, maxZoom) { + for (let i = 2 * x; i < 2 * x + 2; i++) { + for (let j = 2 * y; j < 2 * y + 2; j++) { + const key = [ i, j, z + 1 ].join('_'); + const tile = this.tileList[key]; + if (tile && tile.active) { + tile.retain = true; + tile.current = true; + continue; + } else if (tile && tile.loaded) { + tile.retain = true; + tile.current = true; + } + + if (z + 1 < maxZoom) { + this._retainChildren(i, j, z + 1, maxZoom); + } + } + } + } + _removeOutTiles() { + // 移除视野外的tile + for (const key in this.tileList) { + if (!this.tileList[key].retain) { + this._abortTile(this.tileList[key]); + this._unloadTile(this.tileList[key]); + delete this.tileList[key]; + } + } + const layers = this.scene.getLayers(); + for (let i = 0; i < layers.length; i++) { + const id = this.get('sourceID'); + const layerSource = layers[i].get('sourceOption').id; + if (layerSource !== id) { + return; + } + layers[i].tiles.children.forEach(tile => { + const key = tile.name; + if (!this.tileList[key]) { + layers[i].tiles.remove(tile); + } + }); + } + // 移除对应的数据 + } + _destroyTile(tile, key) { + this._unloadTile(key); + } + // 移除视野外的tile + +} diff --git a/src/source/tileDataCache.js b/src/source/tile_data_cache.js similarity index 100% rename from src/source/tileDataCache.js rename to src/source/tile_data_cache.js diff --git a/src/source/tileSource.js b/src/source/tile_source.js similarity index 88% rename from src/source/tileSource.js rename to src/source/tile_source.js index 24488e982f..951f974b6c 100644 --- a/src/source/tileSource.js +++ b/src/source/tile_source.js @@ -1,6 +1,6 @@ import Source from '../core/source'; import { getArrayBuffer } from '../util/ajax'; -import TileDataCache from './tileDataCache'; +import TileDataCache from './tile_data_cache'; const tileURLRegex = /\{([zxy])\}/g; export default class TileSource extends Source { constructor(url, cfg) { @@ -9,8 +9,6 @@ export default class TileSource extends Source { this.urlTemplate = url; this._tileDataCache = new TileDataCache(50, this.tileDestroy); this.type = 'tile'; - - } getTileData(x, y, z) { const key = [ x, y, z ].join('_'); @@ -65,6 +63,11 @@ export default class TileSource extends Source { done(tileData); }); + } + getRequestUrl(x, y, z) { + const urlParams = { x, y, z }; + return this._getTileURL(urlParams); + } _getTileURL(urlParams) { if (!urlParams.s) { @@ -78,15 +81,11 @@ export default class TileSource extends Source { }); } tileDestroy(tile) { - if (!tile || !tile.data || tile.loading || !tile.data.data.dataArray) { + if (!tile || !tile.data || tile.loading || !tile.data.data || !tile.data.data.dataArray) { return; } const tileData = tile.data; tileData.destroy(); - tileData.data.dataArray.length = 0; - tileData.data.featureKeys = null; - tileData.originData.dataArray.length = 0; - tileData.originData.featureKeys = null; } } diff --git a/src/source/transform/grid.js b/src/source/transform/grid.js index 4098f15e15..9b1067566a 100644 --- a/src/source/transform/grid.js +++ b/src/source/transform/grid.js @@ -13,6 +13,7 @@ export function aggregatorToGrid(data, option) { return { yOffset: gridOffset.xOffset / 360 * (256 << 20) / 2, xOffset: gridOffset.xOffset / 360 * (256 << 20) / 2, + radius: gridOffset.xOffset / 360 * (256 << 20) / 2, dataArray: layerData }; } diff --git a/src/source/vector_tile_source.js b/src/source/vector_tile_source.js new file mode 100644 index 0000000000..c3bdee2b63 --- /dev/null +++ b/src/source/vector_tile_source.js @@ -0,0 +1,49 @@ +import Base from '../core/base'; +const tileURLRegex = /\{([zxy])\}/g; +export default class VectorTileSource extends Base { + constructor(cfg, workerController) { + super({ + type: 'vector', + ...cfg + }); + this.cfg = cfg; + this.workerController = workerController; + this.urlTemplate = this.get('url'); + } + loadTile(tileinfo, callback) { + const tileId = tileinfo.id.split('_'); + const url = this._getTileURL({ + x: tileId[0], + y: tileId[1], + z: tileId[2] + }); + const params = { + id: tileinfo.id, + type: 'vector', + ...this.cfg, + url + + }; + tileinfo.workerID = this.workerController.send('loadTile', params, done.bind(this)); + function done(err, data) { // 收到数据,处理数据 + callback(err, data); + } + } + abortTile(tileinfo) { + this.workerController.send('abortTile', { id: tileinfo.id, type: this.get('type'), sourceID: this.get('sourceID') }, undefined, tileinfo.workerID); + } + unloadTile(tileinfo) { + this.workerController.send('removeTile', { id: tileinfo.id, type: this.get('type'), sourceID: this.get('sourceID') }, undefined, tileinfo.workerID); + } + _getTileURL(urlParams) { + if (!urlParams.s) { + // Default to a random choice of a, b or c + urlParams.s = String.fromCharCode(97 + Math.floor(Math.random() * 3)); + } + + tileURLRegex.lastIndex = 0; + return this.urlTemplate.replace(tileURLRegex, function(value, key) { + return urlParams[key]; + }); + } +} diff --git a/src/source/vector_tile_worker_source.js b/src/source/vector_tile_worker_source.js new file mode 100644 index 0000000000..6a16850a02 --- /dev/null +++ b/src/source/vector_tile_worker_source.js @@ -0,0 +1,111 @@ + +import { getArrayBuffer } from '../util/ajax'; +import PBF from 'pbf'; +import * as VectorParser from '@mapbox/vector-tile'; +import WorkerTile from '../worker/workerTile'; +// import WorkerTile from '../worker/workerTile'; + +function loadVectorTile(params, callback) { + const request = getArrayBuffer({ url: params.url }, (err, data) => { + if (err) { + callback(err); + } else if (data) { + callback(null, { + vectorTile: new VectorParser.VectorTile(new PBF(data.data)), + rawData: data.data + }); + } + }); + return () => { + request.abort(); + callback(); + }; +} +export default class VectorTileWorkerSource { + constructor(actor, layerStyle, loadVectorData) { + this.actor = actor; + this.layerStyle = layerStyle; + this.loadVectorData = loadVectorData || loadVectorTile; + this.loaded = {}; + this.loading = {}; + } + loadTile(params, callback) { + const uid = params.id; + if (!this.loading) { + this.loading = {}; + } + const workerTile = this.loading[uid] = new WorkerTile(params); + workerTile.abort = this.loadVectorData(params, (err, response) => { + if (err || !response) { + workerTile.status = 'done'; + this.loaded[uid] = workerTile; + return callback(err); + } + // const rawTileData = response.rawData; + workerTile.vectorTile = response.vectorTile; + workerTile.parse(response.vectorTile, this.layerStyle, this.actor, (err, result) => { + if (err || !result) return callback(err); + // Transferring a copy of rawTileData because the worker needs to retain its copy. + callback(null, { + // rawTileData: rawTileData.slice(0), + ...result + }); + }); + + this.loaded = this.loaded || {}; + this.loaded[uid] = workerTile; + }); + + + } + abortTile(params, callback) { + const loading = this.loading; + const uid = params.id; + if (loading && loading[uid] && loading[uid].abort) { + loading[uid].abort(); + delete loading[uid]; + } + callback(); + } + reloadTile(params, callback) { // 重新加载 tile + const loaded = this.loaded, + uid = params.id, + vtSource = this; + if (loaded && loaded[uid]) { + const workerTile = loaded[uid]; + const done = (err, data) => { + const reloadCallback = workerTile.reloadCallback; + if (reloadCallback) { + delete workerTile.reloadCallback; + workerTile.parse(workerTile.vectorTile, vtSource.layerStyle, vtSource.actor, reloadCallback); + } + callback(err, data); + }; + + if (workerTile.status === 'parsing') { + workerTile.reloadCallback = done; + } else if (workerTile.status === 'done') { + // if there was no vector tile data on the initial load, don't try and re-parse tile + if (workerTile.vectorTile) { + workerTile.parse(workerTile.vectorTile, this.layerIndex, this.actor, done); + } else { + done(); + } + } + } + } + removeTile(params, callback) { + const loaded = this.loaded, + uid = params.id; + if (loaded && loaded[uid]) { + delete loaded[uid]; + } + callback(); + } + unloadTile() { + + } + hasTransition() { + + } +} diff --git a/src/util.js b/src/util.js index d2bc01336d..b47d88aca9 100644 --- a/src/util.js +++ b/src/util.js @@ -14,7 +14,7 @@ const Util = Utils.mix({}, Utils, { Util.Array = { groupToMap: Utils.groupToMap, group: Utils.group, - merge: Utils.merge, + merge: Util.merge, values: Utils.valuesOfKey, getRange: Utils.getRange, firstValue: Utils.firstValue, diff --git a/src/util/ajax.js b/src/util/ajax.js index 1fc5541fbe..1734589182 100644 --- a/src/util/ajax.js +++ b/src/util/ajax.js @@ -17,7 +17,7 @@ class AJAXError extends Error { } function makeRequest(requestParameters) { - const xhr = new window.XMLHttpRequest(); + const xhr = new XMLHttpRequest(); xhr.open('GET', requestParameters.url, true); for (const k in requestParameters.headers) { diff --git a/src/util/lru-cache.js b/src/util/lru-cache.js index 686cf2fb9d..4a5b99bdf0 100644 --- a/src/util/lru-cache.js +++ b/src/util/lru-cache.js @@ -55,7 +55,7 @@ export default class LRUCache { if (value) { this._deleteCache(key); this._deleteOrder(key); - this.destroy(value); + this.destroy(value, key); } } diff --git a/src/util/polyline-normals copy.js b/src/util/polyline-normals copy.js new file mode 100644 index 0000000000..1be6aa15fe --- /dev/null +++ b/src/util/polyline-normals copy.js @@ -0,0 +1,159 @@ +/** + * 对于 polyline-normal 的改进 + * 超过阈值,miter 转成 bevel 接头, + * 要注意 Three.js 中默认 THREE.FrontFaceDirectionCCW + * @see https://zhuanlan.zhihu.com/p/59541559 + */ +import { direction, normal, computeMiter } from 'polyline-miter-util'; +import { create, copy, dot } from 'gl-vec2'; + +function extrusions(positions, out, point, normal, scale) { + addNext(out, normal, -scale); + addNext(out, normal, scale); + positions.push(point); + positions.push(point); +} + +function addNext(out, normal, length) { + out.push([[ normal[0], normal[1] ], length ]); +} + +function lineSegmentDistance(end, start) { + const dx = start[0] - end[0]; + const dy = start[1] - end[1]; + const dz = start[2] - end[2]; + return Math.sqrt(dx * dx + dy * dy + dz * dz); +} + +export default function(points, closed, indexOffset) { + const lineA = [ 0, 0 ]; + const lineB = [ 0, 0 ]; + const tangent = [ 0, 0 ]; + const miter = [ 0, 0 ]; + let _lastFlip = -1; + let _started = false; + let _normal = null; + const tmp = create(); + let count = indexOffset || 0; + const miterLimit = 3; + + const out = []; + const attrPos = []; + const attrIndex = []; + const attrDistance = [ 0, 0 ]; + if (closed) { + points = points.slice(); + points.push(points[0]); + } + + const total = points.length; + + for (let i = 1; i < total; i++) { + const index = count; + const last = points[i - 1]; + const cur = points[i]; + const next = i < points.length - 1 ? points[i + 1] : null; + const d = lineSegmentDistance(cur, last) + attrDistance[attrDistance.length - 1]; + + direction(lineA, cur, last); + + if (!_normal) { + _normal = [ 0, 0 ]; + normal(_normal, lineA); + } + + if (!_started) { + _started = true; + extrusions(attrPos, out, last, _normal, 1); + } + + attrIndex.push([ index + 0, index + 2, index + 1 ]); + + // no miter, simple segment + if (!next) { + // reset normal + normal(_normal, lineA); + extrusions(attrPos, out, cur, _normal, 1); + attrDistance.push(d, d); + attrIndex.push([ index + 1, index + 2, index + 3 ]); + count += 2; + } else { + // get unit dir of next line + direction(lineB, next, cur); + + // stores tangent & miter + let miterLen = computeMiter(tangent, miter, lineA, lineB, 1); + + // get orientation + const flip = (dot(tangent, _normal) < 0) ? -1 : 1; + const bevel = Math.abs(miterLen) > miterLimit; + + // 处理前后两条线段重合的情况,这种情况不需要使用任何接头(miter/bevel)。 + // 理论上这种情况下 miterLen = Infinity,本应通过 isFinite(miterLen) 判断, + // 但是 AMap 投影变换后丢失精度,只能通过一个阈值(1000)判断。 + if (Math.abs(miterLen) > 1000) { + normal(_normal, lineA); + extrusions(attrPos, out, cur, _normal, 1); + attrDistance.push(d, d); + attrIndex.push( + _lastFlip === 1 ? [ index + 1, index + 3, index + 2 ] + : [ index, index + 2, index + 3 ] + ); + + // 避免在 Material 中使用 THREE.DoubleSide + attrIndex.push([ index + 2, index + 3, index + 4 ]); + + count += 2; + _lastFlip = -1; + continue; + } + + if (bevel) { + miterLen = miterLimit; + + // next two points in our first segment + extrusions(attrPos, out, cur, _normal, 1); + + attrIndex.push([ index + 1, index + 2, index + 3 ]); + + // now add the bevel triangle + attrIndex.push(flip === 1 ? [ index + 2, index + 4, index + 5 ] : [ index + 4, index + 5, index + 3 ]); + + normal(tmp, lineB); + copy(_normal, tmp); // store normal for next round + + extrusions(attrPos, out, cur, _normal, 1); + attrDistance.push(d, d, d, d); + + // the miter is now the normal for our next join + count += 4; + } else { + // next two points in our first segment + extrusions(attrPos, out, cur, _normal, 1); + attrIndex.push([ index + 1, index + 2, index + 3 ]); + + // now add the miter triangles + addNext(out, miter, miterLen * -flip); + attrPos.push(cur); + attrIndex.push([ index + 2, index + 4, index + 3 ]); + attrIndex.push([ index + 4, index + 5, index + 6 ]); + normal(tmp, lineB); + copy(_normal, tmp); // store normal for next round + + extrusions(attrPos, out, cur, _normal, 1); + attrDistance.push(d, d, d, d, d); + + // the miter is now the normal for our next join + count += 5; + } + _lastFlip = flip; + } + } + + return { + normals: out, + attrIndex, + attrPos, + attrDistance + }; +} diff --git a/src/util/polyline-normals.js b/src/util/polyline-normals.js index 1be6aa15fe..25288ea32c 100644 --- a/src/util/polyline-normals.js +++ b/src/util/polyline-normals.js @@ -7,15 +7,16 @@ import { direction, normal, computeMiter } from 'polyline-miter-util'; import { create, copy, dot } from 'gl-vec2'; -function extrusions(positions, out, point, normal, scale) { - addNext(out, normal, -scale); - addNext(out, normal, scale); - positions.push(point); - positions.push(point); +function extrusions(positions, out, miters, point, normal, scale) { + addNext(out, miters, normal, -scale); + addNext(out, miters, normal, scale); + positions.push(...point); + positions.push(...point); } -function addNext(out, normal, length) { - out.push([[ normal[0], normal[1] ], length ]); +function addNext(out, miters, normal, length) { + out.push(normal[0], normal[1], 0); + miters.push(length); } function lineSegmentDistance(end, start) { @@ -40,6 +41,7 @@ export default function(points, closed, indexOffset) { const out = []; const attrPos = []; const attrIndex = []; + const miters = []; const attrDistance = [ 0, 0 ]; if (closed) { points = points.slice(); @@ -64,18 +66,18 @@ export default function(points, closed, indexOffset) { if (!_started) { _started = true; - extrusions(attrPos, out, last, _normal, 1); + extrusions(attrPos, out, miters, last, _normal, 1); } - attrIndex.push([ index + 0, index + 2, index + 1 ]); + attrIndex.push(index + 0, index + 2, index + 1); // no miter, simple segment if (!next) { // reset normal normal(_normal, lineA); - extrusions(attrPos, out, cur, _normal, 1); + extrusions(attrPos, out, miters, cur, _normal, 1); attrDistance.push(d, d); - attrIndex.push([ index + 1, index + 2, index + 3 ]); + attrIndex.push(index + 1, index + 2, index + 3); count += 2; } else { // get unit dir of next line @@ -93,15 +95,14 @@ export default function(points, closed, indexOffset) { // 但是 AMap 投影变换后丢失精度,只能通过一个阈值(1000)判断。 if (Math.abs(miterLen) > 1000) { normal(_normal, lineA); - extrusions(attrPos, out, cur, _normal, 1); + extrusions(attrPos, out, miters, cur, _normal, 1); attrDistance.push(d, d); - attrIndex.push( - _lastFlip === 1 ? [ index + 1, index + 3, index + 2 ] - : [ index, index + 2, index + 3 ] - ); + const indexData = _lastFlip === 1 ? [ index + 1, index + 3, index + 2 ] + : [ index, index + 2, index + 3 ]; + attrIndex.push(...indexData); // 避免在 Material 中使用 THREE.DoubleSide - attrIndex.push([ index + 2, index + 3, index + 4 ]); + attrIndex.push(index + 2, index + 3, index + 4); count += 2; _lastFlip = -1; @@ -112,35 +113,35 @@ export default function(points, closed, indexOffset) { miterLen = miterLimit; // next two points in our first segment - extrusions(attrPos, out, cur, _normal, 1); + extrusions(attrPos, out, miters, cur, _normal, 1); - attrIndex.push([ index + 1, index + 2, index + 3 ]); + attrIndex.push(index + 1, index + 2, index + 3); // now add the bevel triangle - attrIndex.push(flip === 1 ? [ index + 2, index + 4, index + 5 ] : [ index + 4, index + 5, index + 3 ]); + attrIndex.push(...(flip === 1 ? [ index + 2, index + 4, index + 5 ] : [ index + 4, index + 5, index + 3 ])); normal(tmp, lineB); copy(_normal, tmp); // store normal for next round - extrusions(attrPos, out, cur, _normal, 1); + extrusions(attrPos, out, miters, cur, _normal, 1); attrDistance.push(d, d, d, d); // the miter is now the normal for our next join count += 4; } else { // next two points in our first segment - extrusions(attrPos, out, cur, _normal, 1); - attrIndex.push([ index + 1, index + 2, index + 3 ]); + extrusions(attrPos, out, miters, cur, _normal, 1); + attrIndex.push(index + 1, index + 2, index + 3); // now add the miter triangles - addNext(out, miter, miterLen * -flip); - attrPos.push(cur); - attrIndex.push([ index + 2, index + 4, index + 3 ]); - attrIndex.push([ index + 4, index + 5, index + 6 ]); + addNext(out, miters, miter, miterLen * -flip); + attrPos.push(...cur); + attrIndex.push(index + 2, index + 4, index + 3); + attrIndex.push(index + 4, index + 5, index + 6); normal(tmp, lineB); copy(_normal, tmp); // store normal for next round - extrusions(attrPos, out, cur, _normal, 1); + extrusions(attrPos, out, miters, cur, _normal, 1); attrDistance.push(d, d, d, d, d); // the miter is now the normal for our next join @@ -154,6 +155,7 @@ export default function(points, closed, indexOffset) { normals: out, attrIndex, attrPos, - attrDistance + attrDistance, + miters }; } diff --git a/src/util/shaderModule.js b/src/util/shaderModule.js index a4078be0bd..0f4c363b61 100644 --- a/src/util/shaderModule.js +++ b/src/util/shaderModule.js @@ -10,7 +10,8 @@ const moduleCache = {}; const rawContentCache = {}; const precisionRegExp = /precision\s+(high|low|medium)p\s+float/; const globalDefaultprecision = '#ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n #else\n precision mediump float;\n#endif\n'; -const globalDefaultAttribute = 'attribute float pickingId;\n varying vec4 worldId;\n'; +const globalDefaultAttribute = 'attribute float pickingId;\n #ifdef PICK \n varying vec4 worldId; \n #endif \n'; +const globalFSDefaultAttribute = '#ifdef PICK \n varying vec4 worldId; \n #endif \n'; const globalDefaultInclude = '#pragma include "pick_color"\n'; const includeRegExp = /#pragma include (["^+"]?["\ "[a-zA-Z_0-9](.*)"]*?)/g; const uniformRegExp = /uniform\s+(bool|float|int|vec2|vec3|vec4|ivec2|ivec3|ivec4|mat2|mat3|mat4|sampler2D|samplerCube)\s+([\s\S]*?);/g; @@ -137,9 +138,10 @@ export function getModule(moduleName) { } let rawVS = rawContentCache[moduleName][SHADER_TYPE.VS]; - const rawFS = rawContentCache[moduleName][SHADER_TYPE.FS]; + let rawFS = rawContentCache[moduleName][SHADER_TYPE.FS]; rawVS = globalDefaultAttribute + globalDefaultInclude + rawVS; + rawFS = globalFSDefaultAttribute + rawFS; const { content: vs, includeList: vsIncludeList } = processModule(rawVS, [], SHADER_TYPE.VS); let { content: fs, includeList: fsIncludeList } = processModule(rawFS, [], SHADER_TYPE.FS); diff --git a/src/util/throttle.js b/src/util/throttle.js new file mode 100644 index 0000000000..ee886b3b2c --- /dev/null +++ b/src/util/throttle.js @@ -0,0 +1,21 @@ +export default function throttle(fn, time) { + let pending = false; + let timerId; + + const later = () => { + timerId = null; + if (pending) { + fn(); + timerId = setTimeout(later, time); + pending = false; + } + }; + + return () => { + pending = true; + if (!timerId) { + later(); + } + return timerId; + }; +} diff --git a/src/util/version.js b/src/util/version.js new file mode 100644 index 0000000000..a776d95943 --- /dev/null +++ b/src/util/version.js @@ -0,0 +1,3 @@ +import pkg from '../../package.json'; +const version = 'v' + pkg.version; +export default version; diff --git a/src/worker/actor.js b/src/worker/actor.js new file mode 100644 index 0000000000..e5b58b0dc6 --- /dev/null +++ b/src/worker/actor.js @@ -0,0 +1,80 @@ +import { serialize } from './worker_transform'; +function bindAll(fns, context) { + fns.forEach(fn => { + if (!context[fn]) { return; } + context[fn] = context[fn].bind(context); + }); +} + +export default class Actor { + constructor(target, parent, mapId) { + this.target = target; + this.parent = parent; + this.mapId = mapId; + this.callbacks = {}; + this.callbackID = 0; + bindAll([ 'receive' ], this); + this.target.addEventListener('message', this.receive, false); + + } + send(type, data, callback, targetMapId) { + const id = callback ? `${this.mapId}_${this.callbackID++}` : null; + if (callback) this.callbacks[id] = callback; + const buffer = []; + this.target.postMessage({ + targetMapId, + sourceMapId: this.mapId, + type, + id: String(id), + data + }, buffer); + if (callback) { + return { + cancel: () => this.target.postMessage({ + targetMapId, + sourceMapId: this.mapId, + type: '', + id: String(id) + }) + }; + } + } + receive(message) { + // TODO 处理中断Worker + const data = message.data; + const id = data.id; + let callback; + const done = (err, data) => { + delete this.callbacks[id]; + const buffers = []; + this.target.postMessage({ // 发送结果数据 + sourceMapId: this.mapId, + type: '', + id: String(id), + error: err ? JSON.stringify(err) : null, + data: serialize(data, buffers) + }, buffers); + }; + if (data.type === '' || data.type === '') { + callback = this.callbacks[data.id]; + delete this.callbacks[data.id]; + if (callback && data.error) { + callback(data.error); + } else if (callback) { + callback(null, data.data); + } + + } else if (typeof data.id !== 'undefined' && this.parent[data.type]) { // loadTile + this.parent[data.type](data.sourceMapId, data.data, done); + + } else if (typeof data.id !== 'undefined' && this.parent.getWorkerSource) { + const keys = data.type.split('.'); + const params = data.data; + const workerSource = (this.parent).getWorkerSource(data.sourceMapId, keys[0], params.source); + workerSource[keys[1]](params, done); + } else { + this.parent[data.type](data.data); + } + + } +} diff --git a/src/worker/main.worker.js b/src/worker/main.worker.js deleted file mode 100644 index 1818813de2..0000000000 --- a/src/worker/main.worker.js +++ /dev/null @@ -1,22 +0,0 @@ -this.addEventListener('message', e => { - const res = e.data; - // res = { - // command : 'POLYGON-EXTRUDE', - // data : {data:geojson,options:{}} - // } - let result; - switch (res.command) { - case 'geojson': - result = res; - self.postMessage(result); - break; - default: - self.postMessage(result); - break; - } -}); -this.addEventListener('error', function(e) { - console.error( - 'filename:' + e.filename + '\nmessage:' + e.message + '\nline:' + e.lineno - ); -}); diff --git a/src/worker/web_worker.js b/src/worker/web_worker.js new file mode 100644 index 0000000000..45c122eef9 --- /dev/null +++ b/src/worker/web_worker.js @@ -0,0 +1,4 @@ +import L7 from '../index'; +export default function() { + return (new Worker(L7.workerUrl)); +} diff --git a/src/worker/worker.js b/src/worker/worker.js new file mode 100644 index 0000000000..2e8aefc3b1 --- /dev/null +++ b/src/worker/worker.js @@ -0,0 +1,69 @@ +import VectorTileWorkerSource from '../source/vector_tile_worker_source'; +import Actor from './actor'; +// 统一管理workerSource 实例化 +export default class Worker { + constructor(self) { + this.self = self; + this.actor = new Actor(self, this); + this.workerSourceTypes = { + vector: VectorTileWorkerSource + }; + this.workerSources = {}; + this.self.registerWorkerSource = (name, WorkerSource) => { + if (this.workerSourceTypes[name]) { + throw new Error(`Worker source with name "${name}" already registered.`); + } + this.workerSourceTypes[name] = WorkerSource; + }; + this.layerStyles = {}; + } + + loadTile(mapId, params, callback) { + this.getWorkerSource(mapId, params.type, params.sourceID).loadTile(params, callback); + } + abortTile(mapId, params, callback) { + this.getWorkerSource(mapId, params.type, params.sourceID).abortTile(params, callback); + } + removeTile(mapId, params, callback) { + this.getWorkerSource(mapId, params.type, params.sourceID).removeTile(params, callback); + } + setLayers(mapId, layercfgs, callback) { + this.layerStyles[mapId] = layercfgs; // mapid layerID + if (this.workerSources[mapId]) { + for (const sourceId in this.workerSources[mapId].vector) { + this.workerSources[mapId].vector[sourceId].layerStyle = layercfgs; + } + } + callback(); + } + updateLayers(id, params, callback) { + + } + /** + * 获取workerSource + * @param {string} mapId WorkerPool Id + * @param {string} type 瓦片类型 目前支持Vector + * @param {string} source souce ID + * @return {*} WorkerSource + */ + getWorkerSource(mapId, type, source) { + if (!this.workerSources[mapId]) { + this.workerSources[mapId] = {}; + } + if (!this.workerSources[mapId][type]) { + this.workerSources[mapId][type] = {}; + } + if (!this.workerSources[mapId][type][source]) { + // use a wrapped actor so that we can attach a target mapId param + // to any messages invoked by the WorkerSource + const actor = { + send: (type, data, callback) => { + this.actor.send(type, data, callback, mapId); + } + }; + this.workerSources[mapId][type][source] = new this.workerSourceTypes[type](actor, this.layerStyles[mapId]); + } + return this.workerSources[mapId][type][source]; + } +} +self.worker = new Worker(self); diff --git a/src/worker/workerTile.js b/src/worker/workerTile.js new file mode 100644 index 0000000000..6b922e8d41 --- /dev/null +++ b/src/worker/workerTile.js @@ -0,0 +1,99 @@ +import TileMapping from '../core/controller/tile_mapping'; +import { getBuffer } from '../geom/buffer/index'; +import Source from '../core/source'; +import Global from '../global'; +const { pointShape } = Global; + +export default class WorkerTile { + constructor(params) { + this.tileID = params.id; + this.source = params.sourceID; + this.params = params; + } + parse(data, layerstyle, actor, callback) { + this.status = 'parsing'; + this.data = data; + const sourceStyle = this._layerStyleGroupBySourceID(layerstyle)[this.source]; + const tile = this.tileID.split('_'); + const sourceLayerData = {}; + // 数据源解析 + for (const sourcelayer in sourceStyle) { // sourceLayer + const vectorLayer = data.layers[sourcelayer]; + if (vectorLayer === undefined) { + return null; + } + const style = sourceStyle[sourcelayer][0]; + style.sourceOption.parser.type = 'vector'; + style.sourceOption.parser.tile = tile; + const tileSource2 = new Source({ + ...style.sourceOption, + mapType: style.mapType, + projected: true, + data: data.layers[sourcelayer] + }); + + for (let i = 0; i < sourceStyle[sourcelayer].length; i++) { + const style = sourceStyle[sourcelayer][i]; + const tileMapping = new TileMapping(tileSource2, style); + if (style.type === 'point') { + style.shape = this._getPointShape(tileMapping); + } + const geometryBuffer = getBuffer(style.type, style.shape); + const buffer = new geometryBuffer({ + layerData: tileMapping.layerData, + shape: style.shape + }); + sourceLayerData[style.layerId] = { + buffer: { + attributes: buffer.attributes, + indexArray: buffer.indexArray + }, + // layerData: tileMapping.layerData, + // sourceData: tileSource.data, + shape: style.shape, + layerId: style.layerId, + sourcelayer, + tileId: this.tileID + }; + } + } + this.status = 'done'; + callback(null, { ...sourceLayerData }); + } + _layerStyleGroupBySourceID(layerStyles) { + const sourceStyles = {}; + // 支持VectorLayer + for (const layerId in layerStyles) { + const sourceID = layerStyles[layerId].sourceOption.id; + const sourcelayer = layerStyles[layerId].sourceOption.parser.sourceLayer; + if (!sourceStyles[sourceID]) sourceStyles[sourceID] = {}; + if (!sourceStyles[sourceID][sourcelayer]) sourceStyles[sourceID][sourcelayer] = []; + sourceStyles[sourceID][sourcelayer].push(layerStyles[layerId]); + } + return sourceStyles; + } + _getPointShape(tileMapping) { + let shape = null; + if (!tileMapping.layerData[0].hasOwnProperty('shape')) { + return 'normal'; + } + for (let i = 0; i < tileMapping.layerData.length; i++) { + shape = tileMapping.layerData[i].shape; + if (shape !== undefined) { + break; + } + } + + // 2D circle 特殊处理 + if (pointShape['2d'].indexOf(shape) !== -1) { + return 'fill'; + } else if (pointShape['3d'].indexOf(shape) !== -1) { + return 'extrude'; + } + // TODO 图片支持 + // else if (this.scene.image.imagesIds.indexOf(shape) !== -1) { + // return 'image'; + // } + return 'text'; + } +} diff --git a/src/worker/worker_controller.js b/src/worker/worker_controller.js new file mode 100644 index 0000000000..b9e8d2c4c1 --- /dev/null +++ b/src/worker/worker_controller.js @@ -0,0 +1,68 @@ + +import Actor from './actor'; +let id = 1; +function asyncAll( + array, + fn, + callback +) { + if (!array.length) { return callback(null, []); } + let remaining = array.length; + const results = new Array(array.length); + let error = null; + array.forEach((item, i) => { + fn(item, (err, result) => { + if (err) error = err; + results[i] = ((result)); + if (--remaining === 0) callback(error, results); + }); + }); +} + +export default class WorkerController { + constructor(workerPool, parent) { + this.workerPool = workerPool; + this.actors = []; + this.currentActor = 0; + this.id = id++; + const workers = this.workerPool.acquire(this.id); + + for (let i = 0; i < workers.length; i++) { + const worker = workers[i]; + const actor = new WorkerController.Actor(worker, parent, this.id); + actor.name = `Worker ${i}`; + this.actors.push(actor); + } + } + + /** + * Broadcast a message to all Workers. + */ + + broadcast(type, data, cb) { + cb = cb || function() { }; + asyncAll(this.actors, (actor, done) => { + actor.send(type, data, done); + }, cb); + } + + + send(type, data, callback, targetID) { + if (typeof targetID !== 'number' || isNaN(targetID)) { + // Use round robin to send requests to web workers. + targetID = this.currentActor = (this.currentActor + 1) % this.actors.length; + } + this.actors[targetID].send(type, data, callback, targetID); + return targetID; + } + + remove() { + this.actors.forEach(actor => { actor.remove(); }); + this.actors = []; + this.workerPool.release(this.id); + } + + +} +WorkerController.Actor = Actor; + diff --git a/src/worker/worker_pool.js b/src/worker/worker_pool.js new file mode 100644 index 0000000000..078947cef7 --- /dev/null +++ b/src/worker/worker_pool.js @@ -0,0 +1,38 @@ +import WebWorker from './web_worker'; + +/** + * Constructs a worker pool. + * @private + */ +export default class WorkerPool { + + constructor() { + this.active = {}; + } + + acquire(mapId) { + if (!this.workers) { + // Lazily look up the value of mapboxgl.workerCount so that + // client code has had a chance to set it. + this.workers = []; + while (this.workers.length < WorkerPool.workerCount) { + this.workers.push(new WebWorker()); + } + } + + this.active[mapId] = true; + return this.workers.slice(); + } + + release(mapId) { + delete this.active[mapId]; + if (Object.keys(this.active).length === 0) { + this.workers.forEach(w => { + w.terminate(); + }); + this.workers = null; + } + } +} + +WorkerPool.workerCount = Math.max(Math.floor(window.navigator.hardwareConcurrency / 2), 1); diff --git a/src/worker/worker_transform.js b/src/worker/worker_transform.js new file mode 100644 index 0000000000..8b6782fb51 --- /dev/null +++ b/src/worker/worker_transform.js @@ -0,0 +1,57 @@ +export function serialize(input, transferables) { + if (input === null || + input === undefined || + typeof input === 'boolean' || + typeof input === 'number' || + typeof input === 'string' || + input instanceof Boolean || + input instanceof Number || + input instanceof String || + input instanceof Date || + input instanceof RegExp) { + return input; + } + if (input instanceof ArrayBuffer) { + if (transferables) { + transferables.push(input); + } + return input; + } + if (ArrayBuffer.isView(input)) { + const view = input; + if (transferables) { + transferables.push(view.buffer); + } + return view; + } + + if (input instanceof ImageData) { + if (transferables) { + transferables.push(input.data.buffer); + } + return input; + } + if (Array.isArray(input)) { + const serialized = []; + for (const item of input) { + serialized.push(serialize(item, transferables)); + } + return serialized; + } + if (typeof input === 'object') { + const properties = {}; + for (const key in input) { + if (!input.hasOwnProperty(key)) { + continue; + } + const property = input[key]; + properties[key] = serialize(property, transferables); + } + return properties; + } + +} + +export function deserialize() { + +} diff --git a/test/asset/data/layer_data.js b/test/asset/data/layer_data.js new file mode 100644 index 0000000000..d90ba0e89f --- /dev/null +++ b/test/asset/data/layer_data.js @@ -0,0 +1,2 @@ +export const layerData = +[{"id":1,"color":[0.7168627450980392,0.8854901960784314,0.6337254901960785,1],"coordinates":[[[-3669099,-520719,0],[-3669099,-353807,0],[-3653739,-371727,0],[-3651179,-387087,0],[-3655275,-410127,0],[-3655275,-416271,0],[-3653739,-418831,0],[-3652715,-425999,0],[-3651691,-428559,0],[-3648107,-435215,0],[-3639403,-441359,0],[-3628139,-445967,0],[-3626091,-448015,0],[-3625067,-449551,0],[-3625579,-454159,0],[-3620971,-460815,0],[-3618411,-463887,0],[-3616363,-469007,0],[-3616363,-471055,0],[-3618411,-473103,0],[-3618923,-474639,0],[-3626603,-473615,0],[-3628139,-476687,0],[-3630187,-479247,0],[-3634283,-481807,0],[-3637355,-484879,0],[-3639403,-491023,0],[-3640939,-493071,0],[-3640427,-500239,0],[-3636843,-509455,0],[-3637867,-512015,0],[-3639915,-514575,0],[-3643499,-515599,0],[-3658859,-519183,0],[-3669099,-520719,0]]]},{"id":1,"color":[0.7168627450980392,0.8854901960784314,0.6337254901960785,1],"coordinates":[[[-3669099,-692751,0],[-3663467,-697359,0],[-3648107,-705039,0],[-3642475,-710671,0],[-3639403,-712719,0],[-3631723,-722959,0],[-3630699,-725519,0],[-3630187,-731151,0],[-3631723,-736271,0],[-3638379,-742927,0],[-3642475,-748559,0],[-3642987,-751631,0],[-3640427,-760847,0],[-3640427,-768015,0],[-3658347,-769551,0],[-3665003,-770575,0],[-3669099,-773135,0],[-3669099,-692751,0]]]},{"id":2,"color":[0.9674039215686275,0.5035816993464052,0.2978823529411765,1],"coordinates":[[[-3640427,-768015,0],[-3635819,-769039,0],[-3631723,-771599,0],[-3628139,-772111,0],[-3615851,-776719,0],[-3597931,-788495,0],[-3576939,-811023,0],[-3552363,-832527,0],[-3551339,-833039,0],[-3548779,-835599,0],[-3543147,-846863,0],[-3544171,-859151,0],[-3540587,-861199,0],[-3539563,-864271,0],[-3541099,-867343,0],[-3548267,-869903,0],[-3549803,-871439,0],[-3550315,-882703,0],[-3556971,-889871,0],[-3558507,-892431,0],[-3559019,-896527,0],[-3554923,-904719,0],[-3555435,-909327,0],[-3552875,-917007,0],[-3548779,-922639,0],[-3545707,-933391,0],[-3540075,-958991,0],[-3533931,-970255,0],[-3528811,-975375,0],[-3523691,-976911,0],[-3518571,-979983,0],[-3513963,-985615,0],[-3511403,-994831,0],[-3509355,-998415,0],[-3512427,-1005583,0],[-3510379,-1013775,0],[-3510379,-1019919,0],[-3508331,-1021967,0],[-3505771,-1021967,0],[-3503211,-1023503,0],[-3493995,-1017871,0],[-3491435,-1017359,0],[-3488875,-1017871,0],[-3484267,-1020943,0],[-3479147,-1028623,0],[-3474539,-1029647,0],[-3472491,-1031183,0],[-3471467,-1037327,0],[-3471979,-1038351,0],[-3456107,-1082895,0],[-3454571,-1083919,0],[-3451499,-1085455,0],[-3441259,-1083407,0],[-3430507,-1083919,0],[-3410027,-1075727,0],[-3400811,-1073167,0],[-3396203,-1073679,0],[-3388011,-1075727,0],[-3380331,-1078799,0],[-3371627,-1084431,0],[-3361899,-1089039,0],[-3356779,-1089039,0],[-3349611,-1092111,0],[-3348587,-1093135,0],[-3349099,-1094159,0],[-3356267,-1092111,0],[-3359339,-1093135,0],[-3374187,-1099791,0],[-3378795,-1100815,0],[-3381355,-1103887,0],[-3379819,-1105423,0],[-3379307,-1107983,0],[-3378283,-1109007,0],[-3378283,-1115663,0],[-3370603,-1121807,0],[-3369067,-1122319,0],[-3367019,-1123855,0],[-3365995,-1127439,0],[-3367531,-1129487,0],[-3370091,-1128975,0],[-3373675,-1126415,0],[-3381355,-1117199,0],[-3387499,-1114639,0],[-3395691,-1113615,0],[-3414635,-1112591,0],[-3417707,-1109519,0],[-3424363,-1100815,0],[-3425899,-1099791,0],[-3431531,-1100303,0],[-3440235,-1107471,0],[-3444331,-1109007,0],[-3448427,-1109519,0],[-3449451,-1111055,0],[-3446379,-1113615,0],[-3444843,-1117199,0],[-3444331,-1119759,0],[-3444843,-1122831,0],[-3438187,-1129487,0],[-3435627,-1134607,0],[-3433579,-1140751,0],[-3434603,-1147919,0],[-3431019,-1152015,0],[-3429483,-1155599,0],[-3429995,-1161743,0],[-3428971,-1169935,0],[-3430507,-1171471,0],[-3429995,-1181199,0],[-3426923,-1195535,0],[-3417707,-1217551,0],[-3414123,-1229839,0],[-3413611,-1239055,0],[-3409515,-1246735,0],[-3406443,-1256463,0],[-3395179,-1274383,0],[-3393131,-1283599,0],[-3393643,-1285135,0],[-3405931,-1292303,0],[-3407467,-1300495,0],[-3406955,-1302543,0],[-3405419,-1303567,0],[-3403883,-1303055,0],[-3401323,-1303567,0],[-3398251,-1305615,0],[-3398763,-1307663,0],[-3402859,-1308175,0],[-3405419,-1310735,0],[-3407467,-1314319,0],[-3408491,-1319439,0],[-3413099,-1326607,0],[-3416171,-1329679,0],[-3416171,-1331727,0],[-3423339,-1336847,0],[-3425387,-1339919,0],[-3424875,-1343503,0],[-3423339,-1346575,0],[-3417707,-1351695,0],[-3414123,-1353231,0],[-3406443,-1355279,0],[-3382891,-1349135,0],[-3375211,-1351183,0],[-3367531,-1354767,0],[-3360875,-1358863,0],[-3357291,-1365007,0],[-3356779,-1367567,0],[-3357291,-1371151,0],[-3360875,-1373199,0],[-3368555,-1375247,0],[-3377259,-1380879,0],[-3389035,-1385487,0],[-3392107,-1392655,0],[-3391595,-1409039,0],[-3391595,-1418255,0],[-3392619,-1422351,0],[-3398763,-1428495,0],[-3401835,-1430543,0],[-3417707,-1433615,0],[-3423851,-1428495,0],[-3427435,-1426959,0],[-3431531,-1426447,0],[-3437675,-1429007,0],[-3442283,-1427471,0],[-3446891,-1423887,0],[-3448427,-1423375,0],[-3450475,-1424399,0],[-3454059,-1427471,0],[-3455083,-1431055,0],[-3460203,-1431567,0],[-3461227,-1433103,0],[-3463275,-1453071,0],[-3465835,-1463823,0],[-3468395,-1467407,0],[-3468907,-1470991,0],[-3468395,-1477135,0],[-3475563,-1479695,0],[-3476075,-1484303,0],[-3479147,-1484815,0],[-3481195,-1486351,0],[-3485291,-1485327,0],[-3490411,-1489423,0],[-3492971,-1486351,0],[-3495531,-1485327,0],[-3499115,-1478159,0],[-3511403,-1472015,0],[-3512939,-1468431,0],[-3511915,-1464335,0],[-3512939,-1461775,0],[-3521131,-1453071,0],[-3523179,-1452559,0],[-3529323,-1454607,0],[-3531371,-1454095,0],[-3532907,-1452559,0],[-3535467,-1445391,0],[-3538539,-1440783,0],[-3547755,-1431055,0],[-3548779,-1422863,0],[-3555947,-1419791,0],[-3559019,-1414159,0],[-3563115,-1412623,0],[-3564139,-1409039,0],[-3565675,-1407503,0],[-3575403,-1401359,0],[-3578475,-1395215,0],[-3586155,-1392655,0],[-3589227,-1387535,0],[-3590251,-1380879,0],[-3598443,-1376783,0],[-3599979,-1377807,0],[-3601515,-1381391,0],[-3609195,-1381391,0],[-3617387,-1377295,0],[-3624555,-1377295,0],[-3628139,-1372175,0],[-3633771,-1370127,0],[-3638891,-1366031,0],[-3640427,-1364495,0],[-3644523,-1357839,0],[-3645547,-1356815,0],[-3649643,-1356303,0],[-3652203,-1352207,0],[-3655787,-1351183,0],[-3665003,-1344015,0],[-3669099,-1344527,0],[-3669099,-773135,0],[-3665003,-770575,0],[-3658347,-769551,0],[-3640427,-768015,0]]]},{"id":3,"color":[0.9676862745098039,0.5056209150326797,0.2988235294117647,1],"coordinates":[[[-3669099,-1698319,0],[-3669099,-1544207,0],[-3655275,-1539087,0],[-3650667,-1540111,0],[-3649643,-1530895,0],[-3645547,-1526287,0],[-3638891,-1523215,0],[-3634795,-1523727,0],[-3628139,-1521167,0],[-3623531,-1518095,0],[-3619435,-1509391,0],[-3617387,-1507855,0],[-3614827,-1508367,0],[-3610219,-1510927,0],[-3605099,-1511951,0],[-3598955,-1516047,0],[-3596907,-1523215,0],[-3596395,-1533455,0],[-3596907,-1537551,0],[-3598443,-1541135,0],[-3596395,-1548303,0],[-3595883,-1556495,0],[-3594347,-1557519,0],[-3591787,-1558543,0],[-3584619,-1558543,0],[-3576939,-1577487,0],[-3574379,-1579023,0],[-3570283,-1577999,0],[-3569259,-1578511,0],[-3569259,-1585167,0],[-3565675,-1590799,0],[-3565163,-1595919,0],[-3570283,-1603599,0],[-3575403,-1608207,0],[-3574891,-1614863,0],[-3575915,-1617935,0],[-3577963,-1619983,0],[-3573867,-1622031,0],[-3566699,-1629199,0],[-3563115,-1633807,0],[-3558507,-1636879,0],[-3557995,-1644559,0],[-3553899,-1653775,0],[-3551851,-1656335,0],[-3547243,-1657871,0],[-3544171,-1660943,0],[-3542635,-1667087,0],[-3539051,-1675279,0],[-3538539,-1679375,0],[-3540075,-1685007,0],[-3541099,-1692175,0],[-3540587,-1695759,0],[-3541611,-1701391,0],[-3541099,-1707023,0],[-3542635,-1711631,0],[-3542123,-1727503,0],[-3546219,-1737743,0],[-3546731,-1744399,0],[-3549291,-1752591,0],[-3547243,-1784847,0],[-3544683,-1796111,0],[-3545195,-1797135,0],[-3549291,-1798159,0],[-3550827,-1801231,0],[-3553387,-1803279,0],[-3553387,-1808399,0],[-3551851,-1813519,0],[-3555435,-1815055,0],[-3560043,-1824783,0],[-3564139,-1830415,0],[-3565675,-1836047,0],[-3565163,-1843727,0],[-3568747,-1848335,0],[-3592811,-1852431,0],[-3604075,-1852431,0],[-3591275,-1845263,0],[-3587691,-1843727,0],[-3586667,-1842191,0],[-3586155,-1837071,0],[-3583083,-1835535,0],[-3583083,-1834511,0],[-3581035,-1834511,0],[-3576939,-1831951,0],[-3576939,-1825807,0],[-3572331,-1821199,0],[-3572843,-1820687,0],[-3573355,-1821199,0],[-3574379,-1821199,0],[-3575403,-1819151,0],[-3575403,-1816591,0],[-3573867,-1814031,0],[-3574379,-1806863,0],[-3576427,-1799695,0],[-3578475,-1797135,0],[-3605611,-1772047,0],[-3612267,-1762831,0],[-3619435,-1745935,0],[-3620971,-1736719,0],[-3623531,-1733647,0],[-3624043,-1726479,0],[-3621995,-1719823,0],[-3621995,-1716239,0],[-3625067,-1709071,0],[-3628139,-1705487,0],[-3630699,-1702927,0],[-3640427,-1697295,0],[-3644523,-1691151,0],[-3647595,-1689615,0],[-3650667,-1691151,0],[-3661931,-1698319,0],[-3666539,-1699343,0],[-3669099,-1698319,0]]]},{"id":3,"color":[0.9676862745098039,0.5056209150326797,0.2988235294117647,1],"coordinates":[[[-3669099,-2022927,0],[-3658859,-2029583,0],[-3655275,-2041359,0],[-3654763,-2042895,0],[-3651691,-2045455,0],[-3645547,-2046479,0],[-3636843,-2045455,0],[-3628139,-2045455,0],[-3622507,-2045967,0],[-3618411,-2055695,0],[-3615339,-2055695,0],[-3609707,-2060303,0],[-3604075,-2059279,0],[-3601515,-2060303,0],[-3597931,-2060303,0],[-3586667,-2064911,0],[-3580011,-2064911,0],[-3576939,-2068495,0],[-3575915,-2066447,0],[-3575915,-2064399,0],[-3573867,-2058255,0],[-3571819,-2055695,0],[-3567723,-2052623,0],[-3558507,-2049039,0],[-3554411,-2044943,0],[-3555947,-2035727,0],[-3552363,-2032143,0],[-3550315,-2021391,0],[-3545707,-2012175,0],[-3547755,-2004495,0],[-3547243,-2000911,0],[-3541099,-1993743,0],[-3538027,-1992719,0],[-3532907,-1997839,0],[-3519083,-2001423,0],[-3515499,-2003471,0],[-3515499,-2006031,0],[-3519083,-2013711,0],[-3514475,-2021903,0],[-3511403,-2024463,0],[-3507819,-2030095,0],[-3492459,-2042895,0],[-3490411,-2044943,0],[-3487339,-2060815,0],[-3483243,-2075663,0],[-3501163,-2074127,0],[-3509867,-2075151,0],[-3536491,-2089999,0],[-3542123,-2094607,0],[-3543147,-2098703,0],[-3545195,-2100751,0],[-3548779,-2102287,0],[-3553899,-2105359,0],[-3556459,-2109455,0],[-3558507,-2124815,0],[-3561579,-2130447,0],[-3569259,-2133007,0],[-3569259,-2134543,0],[-3566187,-2141711,0],[-3563115,-2145807,0],[-3563627,-2147855,0],[-3562603,-2151439,0],[-3561067,-2151439,0],[-3561067,-2153999,0],[-3565163,-2152975,0],[-3568235,-2146831,0],[-3578987,-2141199,0],[-3589227,-2142223,0],[-3598443,-2147855,0],[-3599467,-2148367,0],[-3599979,-2155023,0],[-3606635,-2151951,0],[-3613291,-2153999,0],[-3621483,-2152463,0],[-3628139,-2151951,0],[-3632747,-2151439,0],[-3638379,-2149391,0],[-3642987,-2149391,0],[-3654763,-2151951,0],[-3662443,-2156047,0],[-3665515,-2156047,0],[-3669099,-2157583,0],[-3669099,-2022927,0]]]},{"id":4,"color":[0.7366065359477123,0.893521568627451,0.6297098039215687,1],"coordinates":[[[-3559531,-168975,0],[-3563627,-170511,0],[-3564651,-176143,0],[-3564139,-180751,0],[-3565675,-181775,0],[-3567211,-181263,0],[-3570283,-182799,0],[-3571819,-181775,0],[-3572843,-182287,0],[-3577451,-186383,0],[-3576427,-189455,0],[-3578475,-192527,0],[-3582571,-193039,0],[-3588203,-195087,0],[-3589227,-205839,0],[-3587179,-209935,0],[-3579499,-220687,0],[-3576427,-226319,0],[-3572843,-243727,0],[-3567211,-251407,0],[-3557483,-258063,0],[-3553899,-263695,0],[-3553899,-273423,0],[-3549803,-283663,0],[-3551339,-296975,0],[-3555947,-307215,0],[-3560555,-312847,0],[-3563115,-311311,0],[-3574891,-312335,0],[-3596395,-311823,0],[-3618923,-319503,0],[-3623531,-323599,0],[-3625067,-326159,0],[-3624555,-331791,0],[-3628139,-344079,0],[-3630187,-349711,0],[-3639403,-358415,0],[-3648619,-369679,0],[-3653739,-371727,0],[-3669099,-353807,0],[-3669099,-168975,0],[-3559531,-168975,0]]]},{"id":4,"color":[0.7366065359477123,0.893521568627451,0.6297098039215687,1],"coordinates":[[[-3040363,-168975,0],[-3037291,-177167,0],[-3037291,-186383,0],[-3038827,-197647,0],[-3037803,-201231,0],[-3033195,-209935,0],[-3031147,-214543,0],[-3031147,-218639,0],[-3035755,-224783,0],[-3040875,-229903,0],[-3045483,-232975,0],[-3062379,-237583,0],[-3066475,-240655,0],[-3068011,-244751,0],[-3066475,-253967,0],[-3068011,-256527,0],[-3074667,-258063,0],[-3076715,-257039,0],[-3083883,-257551,0],[-3086443,-259087,0],[-3091051,-267279,0],[-3094123,-270351,0],[-3103851,-274959,0],[-3112043,-275471,0],[-3115115,-276495,0],[-3122283,-275983,0],[-3124843,-274447,0],[-3135595,-260623,0],[-3138155,-258575,0],[-3142763,-259599,0],[-3144299,-258575,0],[-3148907,-260111,0],[-3153515,-260623,0],[-3156587,-258575,0],[-3159659,-260111,0],[-3160683,-263183,0],[-3158635,-266767,0],[-3157611,-270863,0],[-3164779,-274447,0],[-3169387,-272911,0],[-3172971,-273935,0],[-3177067,-278031,0],[-3179115,-283151,0],[-3186795,-276495,0],[-3188331,-276495,0],[-3189867,-281103,0],[-3195499,-282127,0],[-3200619,-280079,0],[-3205739,-280079,0],[-3209835,-274959,0],[-3213419,-278031,0],[-3217003,-279567,0],[-3222635,-285711,0],[-3224171,-285199,0],[-3226219,-282127,0],[-3228779,-282639,0],[-3232363,-281615,0],[-3233387,-283151,0],[-3231851,-289295,0],[-3232363,-290319,0],[-3237995,-292879,0],[-3243627,-300047,0],[-3249259,-304655,0],[-3251307,-305679,0],[-3252843,-304655,0],[-3253867,-300047,0],[-3255403,-300047,0],[-3258987,-302095,0],[-3263083,-302607,0],[-3265131,-301583,0],[-3270763,-291855,0],[-3274859,-288783,0],[-3277419,-288783,0],[-3277931,-289295,0],[-3275371,-291343,0],[-3276395,-295951,0],[-3275883,-303119,0],[-3277931,-310799,0],[-3282539,-314383,0],[-3283563,-313359,0],[-3285099,-309263,0],[-3292779,-299535,0],[-3298923,-298511,0],[-3302507,-295439,0],[-3307627,-295439,0],[-3309675,-292879,0],[-3310187,-289807,0],[-3312747,-287759,0],[-3319915,-287759,0],[-3320427,-289295,0],[-3322987,-289807,0],[-3327595,-285199,0],[-3330667,-284175,0],[-3332715,-284175,0],[-3337323,-280591,0],[-3337323,-274959,0],[-3339371,-269839,0],[-3343467,-267791,0],[-3345003,-264207,0],[-3348075,-262671,0],[-3346539,-260111,0],[-3350635,-253455,0],[-3350123,-250895,0],[-3346027,-248335,0],[-3342955,-242191,0],[-3344491,-235023,0],[-3347051,-232463,0],[-3347051,-230927,0],[-3348075,-228367,0],[-3346027,-225295,0],[-3345515,-222223,0],[-3348587,-217615,0],[-3352171,-209935,0],[-3361899,-189967,0],[-3370091,-182287,0],[-3372139,-181263,0],[-3375211,-180751,0],[-3382379,-182287,0],[-3387499,-185871,0],[-3392619,-186895,0],[-3398251,-185871,0],[-3401835,-182799,0],[-3406955,-168975,0],[-3040363,-168975,0]]]},{"id":4,"color":[0.7366065359477123,0.893521568627451,0.6297098039215687,1],"coordinates":[[[-3468395,-168975,0],[-3469419,-169999,0],[-3474027,-172047,0],[-3478123,-170511,0],[-3479659,-168975,0],[-3468395,-168975,0]]]},{"id":5,"color":[0.7396915032679738,0.8947764705882353,0.6290823529411765,1],"coordinates":[[[-2247275,-168975,0],[-2246251,-171023,0],[-2246763,-177167,0],[-2240619,-179215,0],[-2235499,-183823,0],[-2229355,-184847,0],[-2226795,-187919,0],[-2221675,-189967,0],[-2219627,-192015,0],[-2219627,-193039,0],[-2224747,-199695,0],[-2222187,-204815,0],[-2224747,-207887,0],[-2224747,-209935,0],[-2224235,-211471,0],[-2221675,-213519,0],[-2220139,-217615,0],[-2217579,-219663,0],[-2215019,-219663,0],[-2211947,-218639,0],[-2211435,-215055,0],[-2210411,-214031,0],[-2204267,-213007,0],[-2200683,-213519,0],[-2199147,-217103,0],[-2202731,-227855,0],[-2202731,-233487,0],[-2201707,-235535,0],[-2194539,-237071,0],[-2181739,-235023,0],[-2176107,-232975,0],[-2175083,-233999,0],[-2176619,-242703,0],[-2179179,-248335,0],[-2178155,-257551,0],[-2182251,-265231,0],[-2183275,-268815,0],[-2181227,-276495,0],[-2178155,-282127,0],[-2177643,-286223,0],[-2176619,-287247,0],[-2172011,-286735,0],[-2171499,-288783,0],[-2173547,-292367,0],[-2178155,-294415,0],[-2192491,-304143,0],[-2198635,-312847,0],[-2201195,-320527,0],[-2203755,-324111,0],[-2207851,-327695,0],[-2211947,-337935,0],[-2216043,-341519,0],[-2217579,-349199,0],[-2216043,-352271,0],[-2213995,-353295,0],[-2216043,-353295,0],[-2221675,-356367,0],[-2226283,-357391,0],[-2230379,-359951,0],[-2233963,-365583,0],[-2240107,-368655,0],[-2245227,-366095,0],[-2247275,-366607,0],[-2249323,-371727,0],[-2255979,-379407,0],[-2263147,-376847,0],[-2265707,-377871,0],[-2272363,-375823,0],[-2275947,-376335,0],[-2281067,-374287,0],[-2284139,-374287,0],[-2284139,-365583,0],[-2282091,-361487,0],[-2284651,-352783,0],[-2287211,-348687,0],[-2292331,-348175,0],[-2304107,-350223,0],[-2307179,-349199,0],[-2309227,-352271,0],[-2311275,-353295,0],[-2313323,-352783,0],[-2315883,-355855,0],[-2319467,-353807,0],[-2321515,-353807,0],[-2324075,-356879,0],[-2324075,-363535,0],[-2324587,-365583,0],[-2331243,-364047,0],[-2335851,-372239,0],[-2341995,-373775,0],[-2342507,-376335,0],[-2346091,-378895,0],[-2351723,-372239,0],[-2353259,-367631,0],[-2352747,-361487,0],[-2348651,-353295,0],[-2351723,-347663,0],[-2353771,-338959,0],[-2359915,-337423,0],[-2362987,-333839,0],[-2366571,-331791,0],[-2370667,-333327,0],[-2373227,-329743,0],[-2377323,-327183,0],[-2387563,-329231,0],[-2391147,-330767,0],[-2392683,-332815,0],[-2393195,-335375,0],[-2390635,-339983,0],[-2393707,-343567,0],[-2398827,-339983,0],[-2401387,-339983,0],[-2403947,-340495,0],[-2411627,-346127,0],[-2415723,-346639,0],[-2423915,-349711,0],[-2431595,-356367,0],[-2432619,-357903,0],[-2433643,-363535,0],[-2433643,-371727,0],[-2436203,-373775,0],[-2440299,-374799,0],[-2443371,-378895,0],[-2443371,-389135,0],[-2444907,-391695,0],[-2446955,-392207,0],[-2448491,-394767,0],[-2450027,-403471,0],[-2449003,-408591,0],[-2452075,-413711,0],[-2459243,-412175,0],[-2462827,-414223,0],[-2470507,-413199,0],[-2471531,-411151,0],[-2471019,-408591,0],[-2465899,-403983,0],[-2463851,-399887,0],[-2467435,-397839,0],[-2469995,-399887,0],[-2477675,-392207,0],[-2483307,-391183,0],[-2485355,-391695,0],[-2485867,-393743,0],[-2486379,-397327,0],[-2484331,-398863,0],[-2481259,-403983,0],[-2484331,-407567,0],[-2485355,-418319,0],[-2486891,-419855,0],[-2487915,-418831,0],[-2488427,-409615,0],[-2490987,-409103,0],[-2493035,-411151,0],[-2495083,-412175,0],[-2504811,-408591,0],[-2508907,-408591,0],[-2508395,-403983,0],[-2515563,-396815,0],[-2517099,-386063,0],[-2516587,-378383,0],[-2514539,-371727,0],[-2509419,-363023,0],[-2514027,-360463,0],[-2517611,-356879,0],[-2520683,-348687,0],[-2519147,-344591,0],[-2514539,-340495,0],[-2516075,-335887,0],[-2516075,-315919,0],[-2515563,-308751,0],[-2516587,-295951,0],[-2521195,-291855,0],[-2522219,-289807,0],[-2521707,-287247,0],[-2520171,-285711,0],[-2515563,-289295,0],[-2513003,-289295,0],[-2511467,-286735,0],[-2511979,-283663,0],[-2514539,-280079,0],[-2524779,-276495,0],[-2526315,-262671,0],[-2520171,-260111,0],[-2516587,-257039,0],[-2515563,-253967,0],[-2516587,-251407,0],[-2525291,-243215,0],[-2533995,-240143,0],[-2536555,-236559,0],[-2537579,-233487,0],[-2536043,-229903,0],[-2532459,-226831,0],[-2527339,-224783,0],[-2524267,-224783,0],[-2521707,-223759,0],[-2513515,-212495,0],[-2513515,-209935,0],[-2518123,-200719,0],[-2521707,-198671,0],[-2524779,-201743,0],[-2528875,-204303,0],[-2532971,-208911,0],[-2534507,-209935,0],[-2539627,-211471,0],[-2541675,-210959,0],[-2542699,-209935,0],[-2544747,-205327,0],[-2549355,-199695,0],[-2557035,-186895,0],[-2560107,-179215,0],[-2562667,-168975,0],[-2247275,-168975,0]]]},{"id":6,"color":[0.740308496732026,0.8950274509803922,0.6289568627450981,1],"coordinates":[[[-1649259,-168975,0],[-1651307,-174095,0],[-1653355,-176143,0],[-1667179,-180751,0],[-1668715,-182287,0],[-1668715,-185359,0],[-1667691,-188943,0],[-1661035,-201231,0],[-1657963,-209935,0],[-1657963,-216591,0],[-1661035,-225295,0],[-1667691,-235535,0],[-1674859,-255503,0],[-1682027,-263695,0],[-1688683,-267279,0],[-1696875,-266767,0],[-1698923,-265743,0],[-1701995,-263695,0],[-1711211,-252431,0],[-1713259,-251919,0],[-1720427,-251919,0],[-1730155,-258575,0],[-1734251,-260623,0],[-1736299,-259599,0],[-1741419,-259087,0],[-1744491,-258063,0],[-1746027,-254479,0],[-1749611,-240143,0],[-1753195,-233487,0],[-1766507,-229903,0],[-1774187,-228879,0],[-1782379,-224783,0],[-1791083,-223247,0],[-1794155,-225807,0],[-1815147,-260111,0],[-1815659,-263695,0],[-1815147,-268815,0],[-1816683,-269839,0],[-1817195,-272399,0],[-1817707,-282639,0],[-1817195,-289807,0],[-1815659,-295439,0],[-1815659,-308239,0],[-1818219,-314895,0],[-1821291,-318991,0],[-1826411,-318991,0],[-1827435,-321551,0],[-1829483,-324111,0],[-1828971,-336911,0],[-1831531,-347151,0],[-1835627,-353807,0],[-1843307,-361487,0],[-1845355,-364559,0],[-1873515,-382479,0],[-1886315,-388623,0],[-1902187,-393743,0],[-1912939,-395791,0],[-1926251,-394767,0],[-1928811,-392719,0],[-1932907,-387599,0],[-1939563,-366095,0],[-1939563,-359439,0],[-1927787,-329743,0],[-1926763,-325135,0],[-1928811,-321039,0],[-1931883,-308751,0],[-1937515,-304143,0],[-1936491,-291855,0],[-1938027,-290319,0],[-1940587,-289807,0],[-1941099,-289295,0],[-1942635,-285711,0],[-1942123,-279055,0],[-1948267,-280591,0],[-1952363,-278543,0],[-1956971,-279567,0],[-1959531,-279055,0],[-1968747,-281103,0],[-1973355,-283151,0],[-1973867,-287247,0],[-1974891,-289807,0],[-1978475,-292879,0],[-1979499,-296463,0],[-1982059,-299023,0],[-1980523,-302095,0],[-1977451,-304655,0],[-1979499,-308751,0],[-1977451,-312335,0],[-1976939,-314383,0],[-1982571,-324623,0],[-1982571,-329231,0],[-1984619,-333839,0],[-1985131,-341007,0],[-1988203,-343055,0],[-1988715,-344591,0],[-1992811,-349199,0],[-1994859,-349199,0],[-1997931,-347663,0],[-2001515,-349199,0],[-2001515,-352271,0],[-2000491,-360463,0],[-1998955,-361487,0],[-1999467,-366607,0],[-2007659,-374287,0],[-2009707,-377871,0],[-2013803,-380943,0],[-2017899,-381455,0],[-2021995,-380431,0],[-2023531,-380431,0],[-2027627,-384015,0],[-2032235,-385551,0],[-2037867,-387087,0],[-2040939,-387087,0],[-2044011,-386063,0],[-2047595,-382991,0],[-2052715,-382991,0],[-2054763,-381967,0],[-2056811,-379919,0],[-2062443,-378383,0],[-2067563,-375823,0],[-2070123,-373775,0],[-2072683,-374287,0],[-2075755,-380431,0],[-2079851,-384527,0],[-2082411,-384015,0],[-2087019,-386575,0],[-2093163,-385039,0],[-2096235,-386063,0],[-2100843,-380943,0],[-2105963,-378383,0],[-2108523,-373775,0],[-2110571,-372751,0],[-2118251,-371727,0],[-2120299,-372239,0],[-2122347,-374287,0],[-2123371,-373775,0],[-2123371,-370703,0],[-2125419,-367631,0],[-2126443,-359439,0],[-2130027,-354319,0],[-2139755,-353295,0],[-2142315,-350223,0],[-2146923,-349711,0],[-2148971,-346639,0],[-2154603,-343055,0],[-2163819,-344591,0],[-2170475,-343055,0],[-2179691,-346639,0],[-2182763,-346639,0],[-2185323,-348175,0],[-2194027,-348687,0],[-2198123,-351759,0],[-2204779,-354831,0],[-2210411,-352271,0],[-2211947,-353295,0],[-2213995,-353295,0],[-2216043,-352271,0],[-2217579,-349199,0],[-2216043,-341519,0],[-2211947,-337935,0],[-2207851,-327695,0],[-2203755,-324111,0],[-2201195,-320527,0],[-2198635,-312847,0],[-2192491,-304143,0],[-2178155,-294415,0],[-2173547,-292367,0],[-2171499,-288783,0],[-2172011,-286735,0],[-2176619,-287247,0],[-2177643,-286223,0],[-2178155,-282127,0],[-2181227,-276495,0],[-2183275,-268815,0],[-2182251,-265231,0],[-2178155,-257551,0],[-2179179,-248335,0],[-2176619,-242703,0],[-2175083,-233999,0],[-2176107,-232975,0],[-2181739,-235023,0],[-2194539,-237071,0],[-2201707,-235535,0],[-2202731,-233487,0],[-2202731,-227855,0],[-2199147,-217103,0],[-2200683,-213519,0],[-2204267,-213007,0],[-2210411,-214031,0],[-2211435,-215055,0],[-2211947,-218639,0],[-2215019,-219663,0],[-2217579,-219663,0],[-2220139,-217615,0],[-2221675,-213519,0],[-2224235,-211471,0],[-2224747,-209935,0],[-2224747,-207887,0],[-2222187,-204815,0],[-2224747,-199695,0],[-2219627,-193039,0],[-2219627,-192015,0],[-2221675,-189967,0],[-2226795,-187919,0],[-2229355,-184847,0],[-2235499,-183823,0],[-2240619,-179215,0],[-2246763,-177167,0],[-2246251,-171023,0],[-2247275,-168975,0],[-1649259,-168975,0]]]},{"id":7,"color":[0.7051398692810458,0.880721568627451,0.6361098039215687,1],"coordinates":[[[-3406955,-168975,0],[-3401835,-182799,0],[-3398251,-185871,0],[-3392619,-186895,0],[-3387499,-185871,0],[-3382379,-182287,0],[-3375211,-180751,0],[-3372139,-181263,0],[-3370091,-182287,0],[-3361899,-189967,0],[-3352171,-209935,0],[-3348587,-217615,0],[-3345515,-222223,0],[-3346027,-225295,0],[-3348075,-228367,0],[-3347051,-230927,0],[-3347051,-232463,0],[-3344491,-235023,0],[-3342955,-242191,0],[-3346027,-248335,0],[-3350123,-250895,0],[-3350635,-253455,0],[-3346539,-260111,0],[-3348075,-262671,0],[-3345003,-264207,0],[-3343467,-267791,0],[-3339371,-269839,0],[-3337323,-274959,0],[-3337323,-280591,0],[-3332715,-284175,0],[-3330667,-284175,0],[-3327595,-285199,0],[-3322987,-289807,0],[-3320427,-289295,0],[-3319915,-287759,0],[-3312747,-287759,0],[-3310187,-289807,0],[-3309675,-292879,0],[-3307627,-295439,0],[-3302507,-295439,0],[-3298923,-298511,0],[-3292779,-299535,0],[-3285099,-309263,0],[-3283563,-313359,0],[-3282539,-314383,0],[-3277931,-310799,0],[-3275883,-303119,0],[-3276395,-295951,0],[-3275371,-291343,0],[-3277931,-289295,0],[-3277419,-288783,0],[-3274859,-288783,0],[-3270763,-291855,0],[-3265131,-301583,0],[-3263083,-302607,0],[-3258987,-302095,0],[-3255403,-300047,0],[-3253867,-300047,0],[-3252843,-304655,0],[-3251307,-305679,0],[-3249259,-304655,0],[-3243627,-300047,0],[-3237995,-292879,0],[-3232363,-290319,0],[-3231851,-289295,0],[-3233387,-283151,0],[-3232363,-281615,0],[-3228779,-282639,0],[-3226219,-282127,0],[-3224171,-285199,0],[-3222635,-285711,0],[-3217003,-279567,0],[-3213419,-278031,0],[-3209835,-274959,0],[-3205739,-280079,0],[-3200619,-280079,0],[-3195499,-282127,0],[-3195499,-284687,0],[-3198571,-287247,0],[-3198059,-289807,0],[-3199083,-290831,0],[-3202667,-289807,0],[-3203691,-290831,0],[-3204203,-296975,0],[-3202667,-302095,0],[-3204715,-304143,0],[-3205227,-306191,0],[-3208299,-308751,0],[-3209323,-311311,0],[-3208811,-318991,0],[-3206251,-330255,0],[-3204203,-335887,0],[-3193963,-348175,0],[-3187307,-352271,0],[-3185771,-354319,0],[-3185259,-360463,0],[-3182187,-366607,0],[-3159147,-386063,0],[-3156587,-390671,0],[-3155051,-395791,0],[-3147883,-405007,0],[-3145835,-409103,0],[-3145323,-411663,0],[-3133547,-431631,0],[-3125867,-439311,0],[-3119723,-452111,0],[-3117163,-460815,0],[-3108459,-476175,0],[-3107435,-479247,0],[-3108459,-483343,0],[-3106411,-487439,0],[-3107947,-489487,0],[-3104875,-496143,0],[-3102827,-496143,0],[-3100267,-498191,0],[-3095659,-500239,0],[-3091563,-495631,0],[-3092075,-492559,0],[-3089003,-490511,0],[-3087979,-493583,0],[-3089003,-497679,0],[-3085419,-500239,0],[-3081323,-496143,0],[-3079275,-496655,0],[-3078763,-500751,0],[-3075691,-502287,0],[-3073643,-504847,0],[-3073131,-512015,0],[-3074155,-513039,0],[-3075691,-513551,0],[-3081323,-517647,0],[-3083883,-525839,0],[-3082859,-528399,0],[-3083371,-531983,0],[-3081323,-535567,0],[-3081835,-542223,0],[-3077739,-539151,0],[-3077227,-537615,0],[-3075691,-543759,0],[-3071083,-548367,0],[-3072107,-553487,0],[-3071083,-555535,0],[-3071083,-558607,0],[-3079787,-564751,0],[-3077739,-573455,0],[-3074667,-570895,0],[-3075691,-573455,0],[-3074155,-573455,0],[-3075179,-578063,0],[-3076715,-579087,0],[-3082347,-579599,0],[-3084395,-581647,0],[-3086443,-580111,0],[-3089003,-580111,0],[-3090539,-586255,0],[-3091563,-587279,0],[-3094635,-587791,0],[-3095659,-589327,0],[-3093099,-589327,0],[-3090539,-591375,0],[-3090539,-592399,0],[-3089003,-592399,0],[-3087979,-593423,0],[-3091051,-599055,0],[-3093099,-600591,0],[-3097195,-601615,0],[-3099243,-595983,0],[-3101803,-595983,0],[-3105387,-594959,0],[-3107947,-597007,0],[-3111531,-597519,0],[-3118699,-600591,0],[-3121259,-605199,0],[-3121771,-608783,0],[-3120235,-615439,0],[-3120747,-637967,0],[-3123819,-649743,0],[-3127915,-656399,0],[-3129963,-660495,0],[-3129451,-664591,0],[-3127915,-666127,0],[-3116651,-673807,0],[-3109483,-681487,0],[-3107947,-686607,0],[-3112555,-690703,0],[-3118699,-692239,0],[-3123307,-692751,0],[-3131499,-695823,0],[-3138155,-701967,0],[-3139179,-704527,0],[-3139179,-707087,0],[-3133547,-717327,0],[-3124331,-722959,0],[-3113067,-726543,0],[-3107947,-729103,0],[-3101803,-733711,0],[-3100267,-737295,0],[-3096171,-739855,0],[-3094635,-739855,0],[-3092075,-744975,0],[-3090027,-743951,0],[-3090539,-745999,0],[-3092075,-747535,0],[-3093099,-751631,0],[-3095147,-754191,0],[-3095659,-758287,0],[-3102827,-758287,0],[-3105899,-758799,0],[-3104875,-763919,0],[-3105899,-770575,0],[-3104363,-778255,0],[-3106411,-786447,0],[-3104875,-789007,0],[-3107435,-791055,0],[-3113067,-790031,0],[-3114603,-790543,0],[-3115627,-792591,0],[-3124331,-793615,0],[-3126379,-796687,0],[-3125355,-800783,0],[-3125867,-801807,0],[-3136107,-802831,0],[-3139179,-806415,0],[-3141739,-806415,0],[-3145323,-805391,0],[-3147371,-805903,0],[-3147883,-810511,0],[-3146347,-815631,0],[-3143275,-817679,0],[-3141739,-821775,0],[-3139179,-821775,0],[-3136107,-827919,0],[-3134059,-829967,0],[-3134571,-832527,0],[-3133547,-835087,0],[-3129451,-840719,0],[-3126891,-842255,0],[-3126379,-846863,0],[-3123819,-850959,0],[-3121259,-852495,0],[-3126379,-854031,0],[-3129451,-856079,0],[-3132523,-862223,0],[-3137131,-863759,0],[-3143275,-867855,0],[-3153003,-877071,0],[-3156587,-875023,0],[-3159147,-871951,0],[-3160171,-867343,0],[-3161195,-866831,0],[-3161707,-868879,0],[-3163755,-869391,0],[-3166827,-867855,0],[-3170923,-867855,0],[-3173483,-865807,0],[-3174507,-868879,0],[-3178091,-871439,0],[-3182187,-870927,0],[-3184747,-868879,0],[-3189355,-860687,0],[-3202155,-855055,0],[-3200619,-848399,0],[-3200619,-843791,0],[-3206251,-843279,0],[-3209323,-841743,0],[-3208299,-840719,0],[-3206251,-841231,0],[-3207275,-838159,0],[-3200107,-833551,0],[-3202155,-829455,0],[-3198059,-832015,0],[-3196523,-831503,0],[-3196011,-830479,0],[-3197035,-828943,0],[-3201643,-827919,0],[-3206251,-822287,0],[-3206251,-820751,0],[-3203179,-820751,0],[-3201643,-819727,0],[-3202155,-818191,0],[-3204715,-817167,0],[-3204715,-815119,0],[-3201643,-815631,0],[-3200619,-814607,0],[-3199083,-815119,0],[-3199083,-811023,0],[-3203691,-807951,0],[-3206251,-807951,0],[-3207787,-805903,0],[-3211371,-808463,0],[-3211371,-810511,0],[-3212907,-813583,0],[-3212395,-816143,0],[-3214443,-819215,0],[-3211883,-825359,0],[-3214955,-823823,0],[-3217003,-824335,0],[-3219051,-823311,0],[-3219563,-825871,0],[-3222123,-827919,0],[-3234411,-827407,0],[-3235947,-829967,0],[-3237995,-829967,0],[-3242091,-833551,0],[-3244651,-839183,0],[-3243115,-841743,0],[-3243627,-845327,0],[-3242603,-853007,0],[-3236971,-855055,0],[-3234411,-860175,0],[-3232363,-859663,0],[-3230827,-860687,0],[-3231851,-864271,0],[-3233387,-865807,0],[-3241067,-871951,0],[-3241579,-866831,0],[-3244139,-866319,0],[-3249771,-866319,0],[-3255915,-858127,0],[-3258475,-858127,0],[-3260011,-860687,0],[-3260523,-864271,0],[-3262059,-863759,0],[-3262571,-862735,0],[-3260523,-856591,0],[-3255915,-852495,0],[-3255403,-849935,0],[-3260011,-846863,0],[-3262059,-846863,0],[-3265643,-849935,0],[-3267179,-853007,0],[-3268715,-854031,0],[-3270251,-853519,0],[-3269739,-849423,0],[-3273835,-840719,0],[-3275371,-841743,0],[-3283563,-842255,0],[-3284075,-840207,0],[-3278443,-838159,0],[-3278955,-835087,0],[-3286123,-834575,0],[-3287147,-832527,0],[-3287147,-830991,0],[-3282539,-830991,0],[-3283051,-826383,0],[-3277931,-817679,0],[-3271275,-817167,0],[-3271787,-812047,0],[-3269739,-811535,0],[-3268203,-809999,0],[-3265643,-810511,0],[-3266155,-806927,0],[-3268203,-805391,0],[-3270251,-802319,0],[-3273835,-800271,0],[-3275371,-802831,0],[-3278955,-802319,0],[-3279979,-806415,0],[-3283051,-809487,0],[-3285099,-808463,0],[-3295851,-808975,0],[-3297899,-807951,0],[-3299435,-803855,0],[-3298411,-802319,0],[-3300971,-798223,0],[-3301995,-792079,0],[-3300971,-791567,0],[-3293291,-795151,0],[-3291243,-792591,0],[-3292779,-786447,0],[-3294315,-782863,0],[-3295339,-777743,0],[-3297387,-775183,0],[-3300459,-775183,0],[-3301995,-774671,0],[-3305579,-770575,0],[-3307627,-770063,0],[-3312235,-763919,0],[-3312235,-761871,0],[-3308651,-756239,0],[-3310699,-754191,0],[-3309675,-751119,0],[-3297387,-740367,0],[-3296363,-734735,0],[-3280491,-718863,0],[-3278955,-714255,0],[-3275371,-708623,0],[-3273835,-704015,0],[-3274859,-701967,0],[-3281003,-698383,0],[-3292779,-696847,0],[-3305579,-692239,0],[-3317355,-693263,0],[-3325035,-692239,0],[-3334763,-686095,0],[-3339371,-678927,0],[-3338859,-675855,0],[-3340907,-665103,0],[-3340907,-662543,0],[-3342443,-659471,0],[-3350635,-650255,0],[-3355243,-648207,0],[-3370603,-629775,0],[-3382379,-624143,0],[-3388011,-623119,0],[-3395691,-624143,0],[-3400299,-623631,0],[-3403883,-622095,0],[-3407467,-622095,0],[-3411051,-620559,0],[-3414635,-620559,0],[-3419755,-617999,0],[-3431019,-602639,0],[-3445355,-590351,0],[-3450475,-587279,0],[-3455083,-582671,0],[-3467371,-574479,0],[-3482219,-563215,0],[-3489899,-556047,0],[-3511403,-542223,0],[-3517547,-539663,0],[-3529835,-532495,0],[-3556459,-510479,0],[-3582059,-493071,0],[-3596395,-479247,0],[-3599467,-477199,0],[-3603563,-476687,0],[-3610219,-473103,0],[-3613803,-473615,0],[-3617899,-475663,0],[-3618923,-474639,0],[-3618411,-473103,0],[-3616363,-471055,0],[-3616363,-469007,0],[-3616875,-465935,0],[-3625067,-455695,0],[-3625579,-454159,0],[-3625067,-449551,0],[-3626091,-448015,0],[-3628139,-445967,0],[-3639403,-441359,0],[-3648107,-435215,0],[-3652715,-425999,0],[-3653739,-418831,0],[-3655275,-416271,0],[-3655275,-410127,0],[-3651179,-387087,0],[-3653739,-371727,0],[-3648619,-369679,0],[-3639403,-358415,0],[-3630187,-349711,0],[-3628139,-344079,0],[-3624555,-331791,0],[-3625067,-326159,0],[-3623531,-323599,0],[-3618923,-319503,0],[-3596395,-311823,0],[-3574891,-312335,0],[-3563115,-311311,0],[-3560555,-312847,0],[-3555947,-307215,0],[-3551339,-296975,0],[-3549803,-283663,0],[-3553899,-273423,0],[-3553899,-263695,0],[-3557483,-258063,0],[-3567211,-251407,0],[-3572843,-243727,0],[-3576427,-226319,0],[-3579499,-220687,0],[-3587179,-209935,0],[-3589227,-205839,0],[-3588203,-195087,0],[-3582571,-193039,0],[-3578475,-192527,0],[-3576427,-189455,0],[-3577451,-186383,0],[-3572843,-182287,0],[-3571819,-181775,0],[-3570283,-182799,0],[-3567211,-181263,0],[-3565675,-181775,0],[-3564139,-180751,0],[-3564651,-176143,0],[-3563627,-170511,0],[-3559531,-168975,0],[-3479659,-168975,0],[-3478123,-170511,0],[-3474027,-172047,0],[-3469419,-169999,0],[-3468395,-168975,0],[-3406955,-168975,0]]]},{"id":8,"color":[0.7162457516339868,0.8852392156862745,0.6338509803921569,1],"coordinates":[[[-3610219,-473103,0],[-3603563,-476687,0],[-3599467,-477199,0],[-3596395,-479247,0],[-3582059,-493071,0],[-3556459,-510479,0],[-3529835,-532495,0],[-3517547,-539663,0],[-3511403,-542223,0],[-3489899,-556047,0],[-3482219,-563215,0],[-3467371,-574479,0],[-3455083,-582671,0],[-3450475,-587279,0],[-3445355,-590351,0],[-3433067,-600591,0],[-3428459,-605199,0],[-3419755,-617999,0],[-3414635,-620559,0],[-3411051,-620559,0],[-3407467,-622095,0],[-3403883,-622095,0],[-3400299,-623631,0],[-3395691,-624143,0],[-3388011,-623119,0],[-3382379,-624143,0],[-3370603,-629775,0],[-3355243,-648207,0],[-3350635,-650255,0],[-3342443,-659471,0],[-3340907,-662543,0],[-3340907,-665103,0],[-3338859,-675855,0],[-3339371,-678927,0],[-3334763,-686095,0],[-3325035,-692239,0],[-3317355,-693263,0],[-3305579,-692239,0],[-3292779,-696847,0],[-3281003,-698383,0],[-3274859,-701967,0],[-3273835,-704015,0],[-3275371,-708623,0],[-3278955,-714255,0],[-3280491,-718863,0],[-3296363,-734735,0],[-3297387,-740367,0],[-3309675,-751119,0],[-3310699,-753167,0],[-3310187,-754703,0],[-3308651,-756239,0],[-3312235,-761871,0],[-3312235,-763919,0],[-3307627,-770063,0],[-3305579,-770575,0],[-3301995,-774671,0],[-3300459,-775183,0],[-3297387,-775183,0],[-3295851,-776207,0],[-3294315,-782863,0],[-3292267,-787983,0],[-3291243,-792591,0],[-3293291,-795151,0],[-3300971,-791567,0],[-3301995,-792079,0],[-3300971,-798223,0],[-3298411,-802319,0],[-3299435,-803855,0],[-3298923,-806415,0],[-3295851,-808975,0],[-3285099,-808463,0],[-3283051,-809487,0],[-3279979,-806415,0],[-3278955,-802319,0],[-3275371,-802831,0],[-3274347,-800271,0],[-3273323,-800271,0],[-3268203,-805391,0],[-3266155,-806927,0],[-3265643,-810511,0],[-3268203,-809999,0],[-3269739,-811535,0],[-3271787,-812047,0],[-3271275,-817167,0],[-3277931,-817679,0],[-3283051,-826383,0],[-3282539,-830991,0],[-3287147,-830991,0],[-3287147,-832527,0],[-3286123,-834575,0],[-3278955,-835087,0],[-3278443,-838159,0],[-3284075,-840207,0],[-3283563,-842255,0],[-3275371,-841743,0],[-3273835,-840719,0],[-3269739,-849423,0],[-3270251,-853519,0],[-3268715,-854031,0],[-3267179,-853007,0],[-3265643,-849935,0],[-3262059,-846863,0],[-3260011,-846863,0],[-3255403,-849935,0],[-3255915,-852495,0],[-3260523,-856591,0],[-3262571,-862735,0],[-3262059,-863759,0],[-3260523,-864271,0],[-3260011,-860687,0],[-3258475,-858127,0],[-3255915,-858127,0],[-3249771,-866319,0],[-3244139,-866319,0],[-3241579,-866831,0],[-3241067,-871951,0],[-3240043,-871951,0],[-3239019,-873487,0],[-3240043,-879119,0],[-3237995,-882703,0],[-3236971,-887823,0],[-3236971,-889871,0],[-3239531,-891407,0],[-3239019,-903695,0],[-3241579,-903183,0],[-3242091,-904207,0],[-3243627,-902671,0],[-3247211,-901647,0],[-3248235,-902671,0],[-3245675,-908303,0],[-3245163,-912911,0],[-3241067,-919567,0],[-3239531,-920079,0],[-3236459,-917007,0],[-3234411,-917007,0],[-3232363,-918543,0],[-3223659,-932367,0],[-3219563,-935951,0],[-3210347,-940559,0],[-3205227,-941071,0],[-3195499,-944655,0],[-3184747,-950287,0],[-3177067,-956431,0],[-3171435,-958479,0],[-3165291,-963087,0],[-3162731,-967183,0],[-3159659,-968207,0],[-3158123,-970255,0],[-3153515,-972815,0],[-3152491,-974863,0],[-3152491,-979471,0],[-3154539,-988687,0],[-3153003,-993295,0],[-3148907,-997391,0],[-3144811,-1003535,0],[-3142251,-1004559,0],[-3141739,-1007119,0],[-3142251,-1010191,0],[-3131499,-1015311,0],[-3129963,-1016847,0],[-3141739,-1022479,0],[-3142763,-1022991,0],[-3143787,-1026575,0],[-3143275,-1033231,0],[-3141739,-1037839,0],[-3144811,-1042959,0],[-3144811,-1044495,0],[-3143275,-1049615,0],[-3140203,-1055759,0],[-3137643,-1058831,0],[-3142763,-1065487,0],[-3141227,-1072143,0],[-3138667,-1077775,0],[-3133035,-1085967,0],[-3113067,-1097231,0],[-3111531,-1098767,0],[-3108459,-1106447,0],[-3111019,-1108495,0],[-3116651,-1111567,0],[-3122283,-1111567,0],[-3124843,-1113103,0],[-3128427,-1112591,0],[-3132523,-1113615,0],[-3143787,-1111567,0],[-3151979,-1111567,0],[-3157611,-1112591,0],[-3171435,-1111055,0],[-3175019,-1112591,0],[-3181675,-1117199,0],[-3183723,-1126415,0],[-3187819,-1131023,0],[-3192939,-1140751,0],[-3195499,-1149455,0],[-3198059,-1167887,0],[-3201643,-1175055,0],[-3206763,-1178639,0],[-3223147,-1180687,0],[-3230315,-1183247,0],[-3241579,-1182223,0],[-3251819,-1183759,0],[-3257963,-1181199,0],[-3265643,-1181199,0],[-3270763,-1180175,0],[-3272811,-1178639,0],[-3275371,-1175055,0],[-3277419,-1166351,0],[-3276907,-1160719,0],[-3277931,-1157135,0],[-3275371,-1145871,0],[-3275371,-1143311,0],[-3272299,-1136655,0],[-3272299,-1133583,0],[-3273323,-1131023,0],[-3278955,-1128463,0],[-3279979,-1126415,0],[-3279979,-1118735,0],[-3280491,-1114639,0],[-3283563,-1111567,0],[-3289707,-1096719,0],[-3299947,-1081871,0],[-3300971,-1077263,0],[-3302507,-1077263,0],[-3305579,-1080847,0],[-3308139,-1082383,0],[-3311211,-1086991,0],[-3317867,-1088015,0],[-3327595,-1083407,0],[-3329643,-1083407,0],[-3331179,-1085455,0],[-3337323,-1088015,0],[-3349099,-1092623,0],[-3356779,-1089039,0],[-3361899,-1089039,0],[-3371627,-1084431,0],[-3380331,-1078799,0],[-3388011,-1075727,0],[-3396203,-1073679,0],[-3400811,-1073167,0],[-3410027,-1075727,0],[-3430507,-1083919,0],[-3441259,-1083407,0],[-3448939,-1085455,0],[-3454571,-1083919,0],[-3457131,-1080847,0],[-3463787,-1060367,0],[-3469931,-1045007,0],[-3471979,-1038351,0],[-3471467,-1037327,0],[-3472491,-1031183,0],[-3474539,-1029647,0],[-3479147,-1028623,0],[-3484267,-1020943,0],[-3488875,-1017871,0],[-3491435,-1017359,0],[-3493995,-1017871,0],[-3503211,-1023503,0],[-3505771,-1021967,0],[-3508331,-1021967,0],[-3510379,-1019919,0],[-3510379,-1013775,0],[-3512427,-1005583,0],[-3509355,-998415,0],[-3511403,-994831,0],[-3513963,-985615,0],[-3518571,-979983,0],[-3523691,-976911,0],[-3528811,-975375,0],[-3533931,-970255,0],[-3540075,-958991,0],[-3545707,-933391,0],[-3548779,-922639,0],[-3552875,-917007,0],[-3555435,-909327,0],[-3554923,-904719,0],[-3559019,-896527,0],[-3558507,-892431,0],[-3556971,-889871,0],[-3550315,-882703,0],[-3549803,-871439,0],[-3548267,-869903,0],[-3541099,-867343,0],[-3539563,-864271,0],[-3540587,-861199,0],[-3544171,-859151,0],[-3543147,-846863,0],[-3548779,-835599,0],[-3551339,-833039,0],[-3552363,-832527,0],[-3576939,-811023,0],[-3597931,-788495,0],[-3615851,-776719,0],[-3628139,-772111,0],[-3631723,-771599,0],[-3635819,-769039,0],[-3640427,-768015,0],[-3640427,-760847,0],[-3642987,-751631,0],[-3642475,-748559,0],[-3639915,-744463,0],[-3631723,-736271,0],[-3630187,-731151,0],[-3630699,-725519,0],[-3631723,-722959,0],[-3639403,-712719,0],[-3642475,-710671,0],[-3648107,-705039,0],[-3663467,-697359,0],[-3669099,-692751,0],[-3669099,-520719,0],[-3658859,-519183,0],[-3643499,-515599,0],[-3639915,-514575,0],[-3637867,-512015,0],[-3636843,-509455,0],[-3640427,-500239,0],[-3640939,-493071,0],[-3639403,-491023,0],[-3637355,-484879,0],[-3634283,-481807,0],[-3630187,-479247,0],[-3628139,-476687,0],[-3626603,-473615,0],[-3619435,-475151,0],[-3618923,-474639,0],[-3617387,-476175,0],[-3613803,-473615,0],[-3610219,-473103,0]]]},{"id":9,"color":[0.7057568627450981,0.8809725490196079,0.6359843137254902,1],"coordinates":[[[-2562667,-168975,0],[-2560107,-179215,0],[-2557035,-186895,0],[-2549355,-199695,0],[-2544747,-205327,0],[-2542699,-209935,0],[-2540651,-211471,0],[-2534507,-209935,0],[-2532971,-208911,0],[-2528875,-204303,0],[-2524779,-201743,0],[-2521707,-198671,0],[-2518123,-200719,0],[-2513515,-209935,0],[-2513515,-212495,0],[-2521707,-223759,0],[-2524267,-224783,0],[-2527339,-224783,0],[-2532459,-226831,0],[-2536043,-229903,0],[-2537579,-233487,0],[-2536555,-236559,0],[-2533995,-240143,0],[-2525291,-243215,0],[-2516587,-251407,0],[-2515563,-253967,0],[-2516587,-257039,0],[-2520171,-260111,0],[-2526315,-262671,0],[-2524779,-276495,0],[-2514539,-280079,0],[-2511979,-283663,0],[-2511467,-286735,0],[-2513003,-289295,0],[-2515563,-289295,0],[-2520171,-285711,0],[-2521707,-287247,0],[-2522219,-289807,0],[-2521195,-291855,0],[-2516587,-295951,0],[-2515563,-308751,0],[-2516075,-315919,0],[-2516075,-335887,0],[-2514539,-340495,0],[-2519147,-344591,0],[-2520683,-348687,0],[-2517611,-356879,0],[-2514027,-360463,0],[-2509419,-363023,0],[-2514539,-371727,0],[-2516587,-378383,0],[-2517099,-386063,0],[-2515563,-396815,0],[-2525291,-396815,0],[-2526827,-399887,0],[-2535019,-388623,0],[-2536555,-386575,0],[-2538603,-386063,0],[-2540139,-388111,0],[-2540139,-391695,0],[-2542187,-392207,0],[-2545259,-391183,0],[-2545771,-393743,0],[-2547307,-395279,0],[-2551403,-395279,0],[-2552939,-393743,0],[-2554987,-394767,0],[-2554987,-399887,0],[-2552939,-405519,0],[-2555499,-409615,0],[-2561643,-415247,0],[-2562155,-417295,0],[-2568299,-414223,0],[-2573419,-414735,0],[-2576491,-412687,0],[-2582635,-414223,0],[-2590827,-409103,0],[-2593387,-406543,0],[-2600043,-397327,0],[-2602603,-391183,0],[-2607211,-377359,0],[-2606699,-374799,0],[-2608747,-370191,0],[-2612331,-350735,0],[-2616427,-341519,0],[-2619499,-329743,0],[-2630763,-307215,0],[-2633835,-299023,0],[-2637419,-294415,0],[-2642539,-292367,0],[-2645099,-289807,0],[-2649195,-287247,0],[-2656875,-292367,0],[-2663531,-294927,0],[-2670699,-300047,0],[-2674283,-299535,0],[-2678379,-301583,0],[-2681963,-306703,0],[-2676843,-331791,0],[-2677867,-334863,0],[-2679915,-335887,0],[-2681963,-335887,0],[-2682987,-334863,0],[-2685035,-335375,0],[-2686571,-339471,0],[-2688107,-341007,0],[-2691179,-341007,0],[-2693739,-344079,0],[-2698859,-347663,0],[-2705515,-349199,0],[-2711147,-348687,0],[-2717803,-356879,0],[-2720363,-361487,0],[-2723947,-364047,0],[-2725995,-363535,0],[-2729067,-360975,0],[-2730091,-363023,0],[-2733675,-364047,0],[-2735211,-362511,0],[-2738283,-362511,0],[-2743403,-359439,0],[-2746475,-361999,0],[-2749547,-361999,0],[-2755691,-370191,0],[-2760299,-381967,0],[-2762859,-381455,0],[-2767467,-382991,0],[-2777707,-389647,0],[-2783851,-394767,0],[-2793067,-407055,0],[-2794091,-413199,0],[-2793579,-418831,0],[-2792043,-424975,0],[-2787947,-433679,0],[-2787435,-444431,0],[-2787947,-457743,0],[-2792043,-465423,0],[-2798699,-470031,0],[-2800747,-473103,0],[-2802795,-474127,0],[-2812011,-475663,0],[-2814571,-479247,0],[-2813547,-483343,0],[-2814059,-495119,0],[-2817643,-499215,0],[-2824299,-504335,0],[-2824811,-505871,0],[-2824299,-507407,0],[-2818667,-514575,0],[-2818667,-519695,0],[-2816107,-521231,0],[-2813547,-526351,0],[-2815083,-530447,0],[-2818155,-531983,0],[-2822763,-538639,0],[-2822251,-542223,0],[-2820203,-547343,0],[-2822763,-552975,0],[-2821739,-555535,0],[-2819179,-557583,0],[-2818667,-559119,0],[-2820715,-561167,0],[-2821739,-564239,0],[-2824811,-566287,0],[-2839659,-567311,0],[-2841195,-567823,0],[-2841707,-572431,0],[-2841195,-587791,0],[-2843243,-594447,0],[-2840683,-609807,0],[-2833515,-613903,0],[-2831979,-616463,0],[-2831979,-617999,0],[-2833515,-620047,0],[-2835563,-622095,0],[-2837099,-622095,0],[-2839659,-626703,0],[-2837099,-626703,0],[-2836075,-628239,0],[-2838635,-638991,0],[-2834539,-641551,0],[-2832491,-644111,0],[-2833515,-647695,0],[-2837099,-649743,0],[-2836075,-654351,0],[-2834539,-655375,0],[-2825835,-656399,0],[-2819179,-657935,0],[-2817643,-656911,0],[-2815595,-662543,0],[-2813035,-664079,0],[-2813035,-665615,0],[-2816107,-668687,0],[-2816107,-678415,0],[-2814571,-683023,0],[-2815083,-684047,0],[-2818667,-685071,0],[-2821739,-687631,0],[-2824811,-692751,0],[-2826859,-711695,0],[-2826347,-714767,0],[-2822251,-716303,0],[-2819179,-719375,0],[-2814059,-720911,0],[-2813035,-721935,0],[-2808939,-732175,0],[-2808939,-737295,0],[-2810475,-743439,0],[-2807403,-751119,0],[-2807403,-753679,0],[-2809963,-757263,0],[-2813035,-756751,0],[-2820715,-748559,0],[-2826347,-750607,0],[-2830955,-747535,0],[-2836075,-745487,0],[-2839147,-744975,0],[-2848363,-741391,0],[-2852459,-740879,0],[-2856555,-741391,0],[-2862187,-742927,0],[-2865259,-744975,0],[-2871403,-754191,0],[-2876523,-764431,0],[-2884203,-785423,0],[-2885739,-794127,0],[-2888299,-801807,0],[-2887275,-809999,0],[-2885227,-812047,0],[-2882155,-819215,0],[-2882667,-829455,0],[-2882155,-837647,0],[-2882667,-843279,0],[-2883691,-845327,0],[-2888811,-847887,0],[-2892395,-847887,0],[-2901611,-850959,0],[-2911339,-851471,0],[-2925163,-848911,0],[-2931819,-846351,0],[-2938475,-841743,0],[-2941547,-836111,0],[-2944107,-829967,0],[-2944107,-824335,0],[-2945643,-815631,0],[-2945131,-809487,0],[-2947179,-803343,0],[-2951787,-798223,0],[-2958955,-793615,0],[-2970219,-781327,0],[-2975851,-777231,0],[-2989163,-765455,0],[-3000939,-764943,0],[-3011179,-770063,0],[-3012715,-777231,0],[-3011179,-785423,0],[-3012203,-790543,0],[-3019883,-796175,0],[-3023467,-799759,0],[-3025003,-809999,0],[-3027051,-813071,0],[-3030123,-814607,0],[-3041387,-813583,0],[-3045995,-811535,0],[-3053163,-815631,0],[-3056747,-814607,0],[-3060331,-812047,0],[-3063403,-811535,0],[-3066475,-808975,0],[-3070059,-808975,0],[-3073131,-806927,0],[-3077739,-802319,0],[-3078763,-799247,0],[-3081835,-798223,0],[-3083883,-796175,0],[-3086443,-792591,0],[-3098731,-795151,0],[-3105387,-800783,0],[-3109995,-802319,0],[-3112555,-801295,0],[-3116651,-803855,0],[-3122283,-800783,0],[-3126891,-802831,0],[-3128427,-802319,0],[-3125355,-801295,0],[-3126379,-797711,0],[-3126379,-795663,0],[-3124331,-793615,0],[-3115627,-792591,0],[-3114603,-790543,0],[-3113067,-790031,0],[-3107435,-791055,0],[-3104875,-789007,0],[-3106411,-786447,0],[-3104363,-778255,0],[-3105899,-770575,0],[-3104875,-763919,0],[-3105899,-758799,0],[-3102827,-758287,0],[-3095659,-758287,0],[-3095147,-754191,0],[-3093099,-752143,0],[-3092075,-747535,0],[-3090539,-746511,0],[-3090539,-743951,0],[-3092075,-744975,0],[-3092587,-744463,0],[-3094635,-739855,0],[-3096171,-739855,0],[-3100267,-737295,0],[-3101803,-733711,0],[-3107947,-729103,0],[-3113067,-726543,0],[-3124331,-722959,0],[-3133547,-717327,0],[-3139179,-707087,0],[-3139179,-704527,0],[-3138155,-701967,0],[-3131499,-695823,0],[-3123307,-692751,0],[-3118699,-692239,0],[-3112555,-690703,0],[-3107947,-686607,0],[-3109483,-681487,0],[-3116651,-673807,0],[-3127915,-666127,0],[-3129451,-664591,0],[-3129963,-660495,0],[-3127915,-656399,0],[-3123819,-649743,0],[-3120747,-637967,0],[-3120235,-615439,0],[-3121771,-608783,0],[-3121259,-605199,0],[-3118699,-600591,0],[-3111531,-597519,0],[-3107947,-597007,0],[-3105387,-594959,0],[-3101803,-595983,0],[-3099243,-595983,0],[-3097195,-601615,0],[-3093099,-600591,0],[-3091051,-599055,0],[-3087979,-593423,0],[-3089003,-592399,0],[-3090539,-592399,0],[-3090539,-591375,0],[-3093099,-589327,0],[-3095659,-589327,0],[-3094635,-587791,0],[-3091563,-587279,0],[-3090539,-586255,0],[-3089003,-580111,0],[-3086443,-580111,0],[-3084395,-581647,0],[-3082347,-579599,0],[-3076715,-579087,0],[-3075179,-578063,0],[-3074155,-573455,0],[-3075691,-573455,0],[-3074667,-570895,0],[-3077739,-573455,0],[-3079787,-564751,0],[-3071083,-558607,0],[-3071083,-555535,0],[-3072107,-553487,0],[-3071083,-548367,0],[-3075691,-543759,0],[-3077227,-537615,0],[-3077739,-539151,0],[-3081835,-542223,0],[-3081323,-535567,0],[-3083371,-531983,0],[-3082859,-528399,0],[-3083883,-526863,0],[-3081323,-517647,0],[-3073131,-512015,0],[-3073643,-504847,0],[-3075691,-502287,0],[-3078763,-500751,0],[-3079275,-496655,0],[-3081323,-496143,0],[-3085419,-500239,0],[-3088491,-498703,0],[-3089515,-497679,0],[-3087979,-493583,0],[-3089003,-490511,0],[-3092075,-492559,0],[-3091563,-495631,0],[-3095659,-500239,0],[-3100267,-498191,0],[-3102827,-496143,0],[-3104875,-496143,0],[-3107947,-489487,0],[-3106411,-487439,0],[-3108459,-483343,0],[-3107435,-479247,0],[-3108459,-476175,0],[-3117163,-460815,0],[-3119723,-452111,0],[-3125867,-439311,0],[-3133547,-431631,0],[-3145323,-411663,0],[-3145835,-409103,0],[-3147883,-405007,0],[-3155051,-395791,0],[-3156587,-390671,0],[-3159147,-386063,0],[-3182187,-366607,0],[-3185259,-360463,0],[-3185771,-354319,0],[-3187307,-352271,0],[-3193963,-348175,0],[-3204203,-335887,0],[-3206251,-330255,0],[-3208811,-318991,0],[-3209323,-311311,0],[-3208299,-308751,0],[-3205227,-306191,0],[-3204715,-304143,0],[-3202667,-302095,0],[-3204203,-296975,0],[-3203691,-290831,0],[-3202667,-289807,0],[-3199083,-290831,0],[-3198059,-289807,0],[-3198571,-287247,0],[-3195499,-284687,0],[-3195499,-282127,0],[-3189867,-281103,0],[-3187819,-275983,0],[-3182187,-280079,0],[-3179115,-283151,0],[-3177067,-278031,0],[-3172971,-273935,0],[-3168363,-272911,0],[-3165291,-274447,0],[-3159147,-272399,0],[-3157611,-270863,0],[-3158635,-266767,0],[-3160683,-263183,0],[-3160171,-261135,0],[-3156587,-258575,0],[-3153515,-260623,0],[-3148907,-260111,0],[-3144299,-258575,0],[-3142763,-259599,0],[-3138155,-258575,0],[-3135595,-260623,0],[-3131499,-264719,0],[-3124843,-274447,0],[-3122283,-275983,0],[-3119211,-277007,0],[-3115115,-276495,0],[-3112043,-275471,0],[-3103851,-274959,0],[-3094123,-270351,0],[-3091051,-267279,0],[-3086443,-259087,0],[-3083883,-257551,0],[-3076715,-257039,0],[-3074667,-258063,0],[-3068011,-256527,0],[-3066475,-253967,0],[-3068011,-244751,0],[-3066475,-240655,0],[-3062379,-237583,0],[-3045483,-232975,0],[-3040875,-229903,0],[-3035755,-224783,0],[-3031147,-218639,0],[-3031147,-214543,0],[-3033195,-209935,0],[-3037803,-201231,0],[-3038827,-197647,0],[-3037291,-186383,0],[-3037291,-177167,0],[-3040363,-168975,0],[-2562667,-168975,0]]]},{"id":10,"color":[0.7039058823529412,0.8802196078431372,0.6363607843137256,1],"coordinates":[[[-2649195,-287247,0],[-2645099,-289807,0],[-2642539,-292367,0],[-2637419,-294415,0],[-2633835,-299023,0],[-2630763,-307215,0],[-2619499,-329743,0],[-2616427,-341519,0],[-2612331,-350735,0],[-2608747,-370191,0],[-2606699,-374799,0],[-2607211,-377359,0],[-2602603,-391183,0],[-2600043,-397327,0],[-2593387,-406543,0],[-2590827,-409103,0],[-2582635,-414223,0],[-2576491,-412687,0],[-2573419,-414735,0],[-2568299,-414223,0],[-2562155,-417295,0],[-2561643,-415247,0],[-2555499,-409615,0],[-2552939,-405519,0],[-2554987,-399887,0],[-2554987,-395791,0],[-2553963,-394255,0],[-2552427,-394255,0],[-2551403,-395279,0],[-2547819,-395791,0],[-2545771,-393743,0],[-2545259,-391183,0],[-2542187,-392207,0],[-2540139,-391695,0],[-2539627,-387087,0],[-2537067,-386063,0],[-2535019,-388623,0],[-2526827,-399887,0],[-2525291,-396815,0],[-2515563,-396815,0],[-2508395,-403983,0],[-2508907,-408591,0],[-2504811,-408591,0],[-2495595,-412175,0],[-2498155,-413711,0],[-2497643,-414735,0],[-2492011,-416783,0],[-2489451,-420367,0],[-2490987,-424975,0],[-2493547,-428559,0],[-2493547,-436239,0],[-2489451,-442383,0],[-2487915,-442895,0],[-2486379,-442383,0],[-2479723,-451087,0],[-2478187,-454671,0],[-2470507,-461327,0],[-2462827,-471055,0],[-2459755,-473103,0],[-2453099,-488463,0],[-2454123,-488975,0],[-2466411,-505359,0],[-2474603,-517647,0],[-2475627,-521743,0],[-2478187,-527887,0],[-2484331,-530959,0],[-2486891,-531471,0],[-2495083,-531983,0],[-2500203,-530959,0],[-2523755,-532495,0],[-2528875,-533519,0],[-2539115,-533007,0],[-2547819,-536079,0],[-2554987,-541199,0],[-2564715,-552463,0],[-2566251,-556559,0],[-2566763,-560655,0],[-2567787,-584719,0],[-2565227,-604687,0],[-2565227,-610831,0],[-2563179,-620047,0],[-2562667,-632335,0],[-2560107,-647695,0],[-2562667,-663567,0],[-2566251,-670223,0],[-2578027,-678927,0],[-2580075,-680975,0],[-2582123,-684047,0],[-2584171,-705039,0],[-2587243,-716303,0],[-2592363,-725007,0],[-2596971,-738319,0],[-2605163,-755215,0],[-2607211,-760335,0],[-2611307,-763919,0],[-2613355,-768527,0],[-2617451,-774159,0],[-2622059,-784399,0],[-2619499,-785423,0],[-2611307,-785423,0],[-2611819,-786447,0],[-2620523,-791055,0],[-2624107,-791567,0],[-2630251,-795151,0],[-2634347,-794639,0],[-2635883,-796687,0],[-2641003,-799247,0],[-2642027,-801295,0],[-2646123,-802319,0],[-2650731,-804367,0],[-2653291,-802831,0],[-2655339,-803855,0],[-2661483,-802319,0],[-2670187,-803343,0],[-2677355,-801295,0],[-2677867,-800783,0],[-2695787,-799759,0],[-2700395,-797199,0],[-2699371,-795151,0],[-2696299,-793615,0],[-2688107,-790543,0],[-2687083,-789519,0],[-2688619,-785423,0],[-2693739,-779791,0],[-2708075,-769039,0],[-2715755,-757263,0],[-2721387,-751631,0],[-2729067,-751119,0],[-2733163,-752655,0],[-2738283,-756239,0],[-2743403,-762383,0],[-2747499,-764431,0],[-2757227,-765455,0],[-2764907,-771087,0],[-2779243,-783375,0],[-2788459,-793103,0],[-2799723,-802319,0],[-2801771,-805903,0],[-2808939,-809999,0],[-2821739,-814607,0],[-2831979,-815631,0],[-2836075,-816655,0],[-2857067,-818191,0],[-2861675,-816655,0],[-2874475,-818703,0],[-2882155,-822799,0],[-2882155,-819215,0],[-2885227,-812047,0],[-2887275,-809999,0],[-2888299,-801807,0],[-2885739,-794127,0],[-2884203,-785423,0],[-2876523,-764431,0],[-2871403,-754191,0],[-2865259,-744975,0],[-2862187,-742927,0],[-2856555,-741391,0],[-2852459,-740879,0],[-2848363,-741391,0],[-2839147,-744975,0],[-2836075,-745487,0],[-2830955,-747535,0],[-2826347,-750607,0],[-2820715,-748559,0],[-2813035,-756751,0],[-2809963,-757263,0],[-2807403,-753679,0],[-2807403,-751119,0],[-2810475,-743439,0],[-2808939,-737295,0],[-2808939,-732175,0],[-2813035,-721935,0],[-2814059,-720911,0],[-2819179,-719375,0],[-2822251,-716303,0],[-2826347,-714767,0],[-2826859,-713231,0],[-2826347,-705039,0],[-2824811,-692751,0],[-2821739,-687631,0],[-2818667,-685071,0],[-2815083,-684047,0],[-2814571,-683023,0],[-2816107,-678415,0],[-2816107,-668687,0],[-2813035,-665615,0],[-2813035,-664079,0],[-2815595,-662543,0],[-2817643,-656911,0],[-2819179,-657935,0],[-2825835,-656399,0],[-2834539,-655375,0],[-2836075,-654351,0],[-2837099,-650255,0],[-2836587,-648719,0],[-2833515,-647695,0],[-2832491,-644111,0],[-2834539,-641551,0],[-2838635,-638991,0],[-2836075,-628239,0],[-2837099,-626703,0],[-2839659,-626703,0],[-2837099,-622095,0],[-2835563,-622095,0],[-2833515,-620047,0],[-2831979,-617999,0],[-2831979,-616463,0],[-2833515,-613903,0],[-2840683,-609807,0],[-2841195,-606223,0],[-2843243,-594447,0],[-2841195,-587791,0],[-2841707,-569871,0],[-2839659,-567311,0],[-2824811,-566287,0],[-2821739,-564239,0],[-2820715,-561167,0],[-2818667,-559119,0],[-2819179,-557583,0],[-2821739,-555535,0],[-2822763,-552975,0],[-2820203,-547343,0],[-2822251,-542223,0],[-2822763,-538639,0],[-2818155,-531983,0],[-2815083,-530447,0],[-2813547,-526351,0],[-2816107,-521231,0],[-2818667,-519695,0],[-2818667,-514575,0],[-2824299,-507407,0],[-2824811,-504847,0],[-2817643,-499215,0],[-2814571,-496143,0],[-2813547,-491535,0],[-2813547,-483343,0],[-2814571,-479247,0],[-2812523,-476175,0],[-2802795,-474127,0],[-2800747,-473103,0],[-2798699,-470031,0],[-2792043,-465423,0],[-2787947,-457743,0],[-2787435,-444431,0],[-2787947,-433679,0],[-2792043,-424975,0],[-2794091,-413199,0],[-2793067,-407055,0],[-2783851,-394767,0],[-2777707,-389647,0],[-2770539,-385039,0],[-2762859,-381455,0],[-2760299,-381967,0],[-2755691,-370191,0],[-2749547,-361999,0],[-2746475,-361999,0],[-2743403,-359439,0],[-2738283,-362511,0],[-2735211,-362511,0],[-2733675,-364047,0],[-2730091,-363023,0],[-2729067,-360975,0],[-2725995,-363535,0],[-2723947,-364047,0],[-2720363,-361487,0],[-2717803,-356879,0],[-2711147,-348687,0],[-2705515,-349199,0],[-2698859,-347663,0],[-2693739,-344079,0],[-2691179,-341007,0],[-2688107,-341007,0],[-2686571,-339471,0],[-2685035,-335375,0],[-2682987,-334863,0],[-2681963,-335887,0],[-2679915,-335887,0],[-2677867,-334863,0],[-2676843,-331791,0],[-2681963,-306703,0],[-2678379,-301583,0],[-2674283,-299535,0],[-2670699,-300047,0],[-2663531,-294927,0],[-2656875,-292367,0],[-2649195,-287247,0]]]},{"id":11,"color":[0.7020549019607842,0.8794666666666667,0.6367372549019609,1],"coordinates":[[[-2729067,-751119,0],[-2721387,-751631,0],[-2715755,-757263,0],[-2708075,-769039,0],[-2693739,-779791,0],[-2687595,-786959,0],[-2687083,-789519,0],[-2688107,-790543,0],[-2693739,-792591,0],[-2699371,-795151,0],[-2700395,-797199,0],[-2697835,-799247,0],[-2695787,-799759,0],[-2677867,-800783,0],[-2677355,-801295,0],[-2670187,-803343,0],[-2661483,-802319,0],[-2655339,-803855,0],[-2653291,-802831,0],[-2650731,-804367,0],[-2646123,-802319,0],[-2642027,-801295,0],[-2641003,-799247,0],[-2635883,-796687,0],[-2631275,-800783,0],[-2633835,-805391,0],[-2636395,-813583,0],[-2638955,-817167,0],[-2639467,-823823,0],[-2640491,-826383,0],[-2642027,-832015,0],[-2646635,-839183,0],[-2656875,-850959,0],[-2663531,-855055,0],[-2664555,-856591,0],[-2666603,-863247,0],[-2670187,-865295,0],[-2678379,-868367,0],[-2679915,-866831,0],[-2689131,-863247,0],[-2692715,-864271,0],[-2695275,-862223,0],[-2696299,-862223,0],[-2697323,-863247,0],[-2697323,-868879,0],[-2696811,-878607,0],[-2697323,-881679,0],[-2699883,-884239,0],[-2700907,-886287,0],[-2700395,-893455,0],[-2700907,-894991,0],[-2704491,-890895,0],[-2712683,-899599,0],[-2712171,-905743,0],[-2712683,-907791,0],[-2710635,-914447,0],[-2711147,-918543,0],[-2709611,-921103,0],[-2709611,-926735,0],[-2710123,-931343,0],[-2709611,-933903,0],[-2710123,-936975,0],[-2709099,-940047,0],[-2712171,-944655,0],[-2716267,-955919,0],[-2716267,-958479,0],[-2715243,-961039,0],[-2689131,-959503,0],[-2685547,-962575,0],[-2683499,-965135,0],[-2677355,-968719,0],[-2674795,-973839,0],[-2673259,-973839,0],[-2670699,-970767,0],[-2660459,-978959,0],[-2659947,-990223,0],[-2657387,-996879,0],[-2655339,-999439,0],[-2654315,-1004047,0],[-2653291,-1005583,0],[-2647147,-1004047,0],[-2644075,-1005583,0],[-2639979,-1010191,0],[-2635883,-1017871,0],[-2631275,-1029647,0],[-2629227,-1031695,0],[-2628715,-1034255,0],[-2626667,-1038863,0],[-2630251,-1045519,0],[-2633835,-1048591,0],[-2636395,-1048591,0],[-2637931,-1050127,0],[-2639467,-1056783,0],[-2641003,-1056783,0],[-2641003,-1057807,0],[-2639979,-1059343,0],[-2635883,-1060879,0],[-2633835,-1062415,0],[-2636395,-1067535,0],[-2633323,-1070095,0],[-2632811,-1076751,0],[-2630251,-1077263,0],[-2630251,-1079311,0],[-2628203,-1080335,0],[-2627179,-1083919,0],[-2625131,-1084943,0],[-2625131,-1089039,0],[-2631275,-1091599,0],[-2635883,-1095695,0],[-2642539,-1097231,0],[-2650219,-1101327,0],[-2658411,-1107983,0],[-2660971,-1111055,0],[-2661995,-1114127,0],[-2657387,-1118223,0],[-2656363,-1120783,0],[-2657899,-1125391,0],[-2656875,-1130511,0],[-2658411,-1136655,0],[-2660459,-1139727,0],[-2665579,-1142799,0],[-2672747,-1150991,0],[-2671723,-1153039,0],[-2668651,-1154063,0],[-2666091,-1160719,0],[-2663531,-1160207,0],[-2663019,-1161743,0],[-2663019,-1167887,0],[-2659947,-1175055,0],[-2664043,-1199631,0],[-2655339,-1208847,0],[-2652267,-1210895,0],[-2647659,-1212431,0],[-2645611,-1213967,0],[-2644075,-1216015,0],[-2641515,-1224207,0],[-2637419,-1232399,0],[-2634347,-1234959,0],[-2630251,-1235983,0],[-2622571,-1234447,0],[-2617963,-1233935,0],[-2611819,-1235983,0],[-2609771,-1239055,0],[-2603627,-1243151,0],[-2592363,-1249295,0],[-2589291,-1250319,0],[-2580587,-1255951,0],[-2574955,-1261583,0],[-2570347,-1264143,0],[-2564715,-1268751,0],[-2559595,-1270287,0],[-2551915,-1275919,0],[-2544235,-1282575,0],[-2533483,-1302543,0],[-2527339,-1312271,0],[-2523243,-1321999,0],[-2515051,-1334799,0],[-2505835,-1355279,0],[-2501739,-1361935,0],[-2495083,-1366031,0],[-2490987,-1367055,0],[-2483307,-1367567,0],[-2480747,-1368591,0],[-2473067,-1378319,0],[-2463851,-1391119,0],[-2458731,-1397263,0],[-2456171,-1402383,0],[-2457707,-1406991,0],[-2460267,-1412623,0],[-2472043,-1420815,0],[-2475627,-1426447,0],[-2475627,-1429519,0],[-2467435,-1456143,0],[-2468971,-1473551,0],[-2467947,-1479183,0],[-2469483,-1488911,0],[-2477675,-1490959,0],[-2488939,-1489935,0],[-2497131,-1481231,0],[-2499179,-1475087,0],[-2507883,-1463311,0],[-2509419,-1462287,0],[-2515051,-1462287,0],[-2519147,-1460751,0],[-2525803,-1463311,0],[-2529387,-1462799,0],[-2535531,-1452559,0],[-2538091,-1451535,0],[-2546283,-1452559,0],[-2557035,-1458703,0],[-2558571,-1458703,0],[-2561131,-1455119,0],[-2562667,-1454607,0],[-2566251,-1450511,0],[-2571883,-1446927,0],[-2574955,-1447439,0],[-2580587,-1442831,0],[-2589291,-1440271,0],[-2596971,-1440783,0],[-2605163,-1440271,0],[-2611819,-1441807,0],[-2618475,-1447951,0],[-2621547,-1452559,0],[-2625643,-1477647,0],[-2625131,-1482255,0],[-2630251,-1484303,0],[-2633835,-1484815,0],[-2636395,-1483279,0],[-2640491,-1487887,0],[-2644587,-1488911,0],[-2645099,-1487887,0],[-2645611,-1489935,0],[-2644587,-1491471,0],[-2643563,-1491471,0],[-2642539,-1493519,0],[-2640491,-1493519,0],[-2638443,-1498127,0],[-2634859,-1500687,0],[-2635883,-1504783,0],[-2638955,-1505295,0],[-2638955,-1506319,0],[-2636395,-1508879,0],[-2633835,-1508879,0],[-2634347,-1510927,0],[-2632811,-1512463,0],[-2633835,-1513487,0],[-2637419,-1512975,0],[-2635883,-1514511,0],[-2637419,-1514511,0],[-2638443,-1516047,0],[-2637419,-1516559,0],[-2635371,-1516559,0],[-2635371,-1518607,0],[-2633323,-1519631,0],[-2634859,-1523215,0],[-2633323,-1525263,0],[-2631275,-1525263,0],[-2631787,-1526799,0],[-2633323,-1527311,0],[-2636395,-1525775,0],[-2637419,-1527311,0],[-2638443,-1526287,0],[-2648683,-1528335,0],[-2655851,-1526287,0],[-2659947,-1528847,0],[-2664043,-1526799,0],[-2664043,-1536527,0],[-2665579,-1539087,0],[-2667115,-1544719,0],[-2669675,-1549327,0],[-2671211,-1550863,0],[-2674795,-1551887,0],[-2677867,-1551887,0],[-2683499,-1549839,0],[-2687083,-1557519,0],[-2688619,-1559567,0],[-2690155,-1560079,0],[-2693739,-1558543,0],[-2696811,-1555983,0],[-2697323,-1551887,0],[-2700907,-1546767,0],[-2701931,-1542159,0],[-2705003,-1536527,0],[-2705515,-1532431,0],[-2708075,-1527311,0],[-2707563,-1522703,0],[-2710123,-1516047,0],[-2715243,-1512975,0],[-2719851,-1506319,0],[-2719851,-1498639,0],[-2721387,-1495055,0],[-2722923,-1493007,0],[-2729579,-1490447,0],[-2732651,-1487887,0],[-2734699,-1484815,0],[-2736747,-1475599,0],[-2739307,-1473039,0],[-2740843,-1467919,0],[-2747499,-1462287,0],[-2752107,-1455119,0],[-2754667,-1455119,0],[-2759787,-1458703,0],[-2765419,-1460751,0],[-2764907,-1464335,0],[-2765419,-1467919,0],[-2767467,-1473039,0],[-2769003,-1480719,0],[-2775147,-1485327,0],[-2776683,-1489935,0],[-2781291,-1497103,0],[-2783339,-1502223,0],[-2785899,-1502735,0],[-2788459,-1502223,0],[-2789483,-1491983,0],[-2792043,-1486351,0],[-2793579,-1485327,0],[-2803819,-1486351,0],[-2807403,-1485327,0],[-2810987,-1485839,0],[-2813547,-1489935,0],[-2816107,-1490959,0],[-2820715,-1489423,0],[-2821739,-1490447,0],[-2823787,-1497103,0],[-2827883,-1504783,0],[-2827883,-1508879,0],[-2828907,-1510927,0],[-2837099,-1516047,0],[-2844779,-1510927,0],[-2848875,-1504271,0],[-2853483,-1504271,0],[-2855531,-1503247,0],[-2853483,-1497615,0],[-2853483,-1486863,0],[-2857067,-1486351,0],[-2860139,-1482255,0],[-2864747,-1482767,0],[-2870891,-1474575,0],[-2870891,-1469967,0],[-2872427,-1467919,0],[-2873451,-1465359,0],[-2881643,-1464335,0],[-2887787,-1461263,0],[-2895467,-1448463,0],[-2906731,-1440783,0],[-2911339,-1433103,0],[-2922603,-1430031,0],[-2928747,-1423375,0],[-2931819,-1416207,0],[-2932843,-1401871,0],[-2939499,-1392655,0],[-2940523,-1389583,0],[-2940011,-1384463,0],[-2944107,-1371151,0],[-2952299,-1361935,0],[-2953323,-1359375,0],[-2953323,-1350671,0],[-2952811,-1348111,0],[-2948715,-1343503,0],[-2942059,-1338895,0],[-2939499,-1338383,0],[-2936427,-1336335,0],[-2933355,-1331215,0],[-2931819,-1318415,0],[-2932331,-1311247,0],[-2929771,-1308175,0],[-2929771,-1302543,0],[-2928235,-1293839,0],[-2927723,-1285135,0],[-2928747,-1281039,0],[-2937963,-1265679,0],[-2939499,-1261583,0],[-2937451,-1256975,0],[-2941547,-1251855,0],[-2940011,-1248783,0],[-2923627,-1240591,0],[-2918507,-1230351,0],[-2918507,-1227791,0],[-2920043,-1224719,0],[-2917995,-1215503,0],[-2918507,-1214479,0],[-2929771,-1213455,0],[-2934379,-1211919,0],[-2936939,-1207823,0],[-2953835,-1189903,0],[-2957931,-1182735,0],[-2966123,-1171983,0],[-2983531,-1158159,0],[-2985579,-1154575,0],[-2999403,-1139215,0],[-3010155,-1132559,0],[-3016811,-1132559,0],[-3022955,-1129999,0],[-3025515,-1128463,0],[-3031659,-1120271,0],[-3039339,-1104911,0],[-3045483,-1100815,0],[-3056747,-1096719,0],[-3063915,-1095183,0],[-3068011,-1095695,0],[-3078763,-1098767,0],[-3082347,-1098767,0],[-3090027,-1100303,0],[-3105387,-1100303,0],[-3109995,-1101839,0],[-3111531,-1098767,0],[-3115115,-1095695,0],[-3123307,-1092111,0],[-3133035,-1085967,0],[-3138667,-1077775,0],[-3142251,-1069583,0],[-3142763,-1065487,0],[-3137643,-1058831,0],[-3140203,-1055759,0],[-3143275,-1049615,0],[-3144811,-1042959,0],[-3141739,-1037839,0],[-3143275,-1033231,0],[-3143787,-1026575,0],[-3142763,-1022991,0],[-3129963,-1016847,0],[-3131499,-1015311,0],[-3142251,-1010191,0],[-3141739,-1007119,0],[-3142251,-1004559,0],[-3144811,-1003535,0],[-3148907,-997391,0],[-3153003,-993295,0],[-3154539,-988687,0],[-3152491,-979471,0],[-3152491,-974863,0],[-3153515,-972815,0],[-3158123,-970255,0],[-3159659,-968207,0],[-3162731,-967183,0],[-3165291,-963087,0],[-3171435,-958479,0],[-3177067,-956431,0],[-3184747,-950287,0],[-3195499,-944655,0],[-3205227,-941071,0],[-3210347,-940559,0],[-3219563,-935951,0],[-3223659,-932367,0],[-3232363,-918543,0],[-3235435,-917007,0],[-3240043,-920079,0],[-3243627,-915983,0],[-3245163,-912911,0],[-3245675,-908303,0],[-3248235,-902159,0],[-3243627,-902671,0],[-3242603,-904207,0],[-3241579,-903183,0],[-3239019,-903695,0],[-3239531,-891407,0],[-3236971,-889871,0],[-3236971,-887823,0],[-3237995,-882703,0],[-3240043,-879119,0],[-3239019,-873487,0],[-3240043,-871951,0],[-3241067,-871951,0],[-3233387,-865807,0],[-3231851,-864271,0],[-3230827,-860687,0],[-3232363,-859663,0],[-3234411,-860175,0],[-3236971,-855055,0],[-3242603,-853007,0],[-3243627,-845327,0],[-3243115,-841743,0],[-3244651,-839183,0],[-3242091,-833551,0],[-3237995,-829967,0],[-3235947,-829967,0],[-3234411,-827407,0],[-3222123,-827919,0],[-3219563,-825871,0],[-3219051,-823311,0],[-3217003,-824335,0],[-3214955,-823823,0],[-3211883,-825359,0],[-3214443,-819215,0],[-3212395,-816143,0],[-3212907,-813583,0],[-3211371,-810511,0],[-3211371,-808463,0],[-3207787,-805903,0],[-3206251,-807951,0],[-3203691,-807951,0],[-3199083,-811023,0],[-3199083,-815119,0],[-3200619,-814607,0],[-3201643,-815631,0],[-3204715,-815119,0],[-3204715,-817167,0],[-3202155,-818191,0],[-3201643,-819727,0],[-3203179,-820751,0],[-3206251,-820751,0],[-3206251,-822287,0],[-3201643,-827919,0],[-3197035,-828943,0],[-3196011,-830479,0],[-3196523,-831503,0],[-3198059,-832015,0],[-3202155,-829455,0],[-3200107,-833551,0],[-3207275,-838159,0],[-3206251,-841231,0],[-3208299,-840719,0],[-3209323,-841743,0],[-3206251,-843279,0],[-3200619,-843791,0],[-3200619,-848399,0],[-3202155,-855055,0],[-3189355,-860687,0],[-3184747,-868879,0],[-3182187,-870927,0],[-3178091,-871439,0],[-3174507,-868879,0],[-3173483,-865807,0],[-3170923,-867855,0],[-3166827,-867855,0],[-3163755,-869391,0],[-3161707,-868879,0],[-3161195,-866831,0],[-3160171,-867343,0],[-3159147,-871951,0],[-3156587,-875023,0],[-3153003,-877071,0],[-3143275,-867855,0],[-3137131,-863759,0],[-3132523,-862223,0],[-3129451,-856079,0],[-3126379,-854031,0],[-3121259,-852495,0],[-3123819,-850959,0],[-3126379,-846863,0],[-3126891,-842255,0],[-3129451,-840719,0],[-3133547,-835087,0],[-3134571,-832527,0],[-3134059,-829967,0],[-3136107,-827919,0],[-3139179,-821775,0],[-3141739,-821775,0],[-3143275,-817679,0],[-3146347,-815631,0],[-3147883,-810511,0],[-3147371,-805903,0],[-3145323,-805391,0],[-3141739,-806415,0],[-3139179,-806415,0],[-3136107,-802831,0],[-3128427,-802319,0],[-3126891,-802831,0],[-3123307,-800783,0],[-3116651,-803855,0],[-3112555,-801295,0],[-3109995,-802319,0],[-3105387,-800783,0],[-3098731,-795151,0],[-3087467,-792079,0],[-3086443,-792591,0],[-3083883,-796175,0],[-3081835,-798223,0],[-3078763,-799247,0],[-3077739,-802319,0],[-3073131,-806927,0],[-3070059,-808975,0],[-3066475,-808975,0],[-3063403,-811535,0],[-3060331,-812047,0],[-3056747,-814607,0],[-3053163,-815631,0],[-3045995,-811535,0],[-3041387,-813583,0],[-3030123,-814607,0],[-3027051,-813071,0],[-3025003,-809999,0],[-3023467,-799759,0],[-3019883,-796175,0],[-3012203,-790543,0],[-3011179,-785423,0],[-3012715,-777231,0],[-3011179,-770063,0],[-3000939,-764943,0],[-2989163,-765455,0],[-2975851,-777231,0],[-2970219,-781327,0],[-2958955,-793615,0],[-2951787,-798223,0],[-2947179,-803343,0],[-2945131,-809487,0],[-2945643,-815631,0],[-2944107,-824335,0],[-2944107,-829967,0],[-2941547,-836111,0],[-2938475,-841743,0],[-2931819,-846351,0],[-2925163,-848911,0],[-2911339,-851471,0],[-2898539,-850447,0],[-2895467,-848911,0],[-2885739,-846863,0],[-2883691,-845327,0],[-2882667,-843279,0],[-2882155,-837647,0],[-2882667,-829455,0],[-2882155,-822799,0],[-2874475,-818703,0],[-2861675,-816655,0],[-2857067,-818191,0],[-2836075,-816655,0],[-2831979,-815631,0],[-2821739,-814607,0],[-2808939,-809999,0],[-2801771,-805903,0],[-2799723,-802319,0],[-2788459,-793103,0],[-2779243,-783375,0],[-2764907,-771087,0],[-2757227,-765455,0],[-2747499,-764431,0],[-2743403,-762383,0],[-2738283,-756239,0],[-2733163,-752655,0],[-2729067,-751119,0]]]},{"id":12,"color":[0.9643921568627452,0.48183006535947714,0.28784313725490196,1],"coordinates":[[[-3665003,-1344015,0],[-3655787,-1351183,0],[-3652203,-1352207,0],[-3649643,-1356303,0],[-3645547,-1356815,0],[-3644523,-1357839,0],[-3640427,-1364495,0],[-3638891,-1366031,0],[-3633771,-1370127,0],[-3628139,-1372175,0],[-3624555,-1377295,0],[-3617387,-1377295,0],[-3609195,-1381391,0],[-3601515,-1381391,0],[-3599979,-1377807,0],[-3598443,-1376783,0],[-3590251,-1380879,0],[-3589227,-1387535,0],[-3586155,-1392655,0],[-3578475,-1395215,0],[-3575403,-1401359,0],[-3565675,-1407503,0],[-3564139,-1409039,0],[-3563115,-1412623,0],[-3559019,-1414159,0],[-3555947,-1419791,0],[-3548779,-1422863,0],[-3547755,-1431055,0],[-3538539,-1440783,0],[-3535467,-1445391,0],[-3532907,-1452559,0],[-3531371,-1454095,0],[-3529323,-1454607,0],[-3523179,-1452559,0],[-3521131,-1453071,0],[-3512939,-1461775,0],[-3511915,-1464335,0],[-3512939,-1468431,0],[-3511403,-1472015,0],[-3499115,-1478159,0],[-3495531,-1485327,0],[-3492971,-1486351,0],[-3490411,-1489423,0],[-3485291,-1485327,0],[-3481195,-1486351,0],[-3479147,-1484815,0],[-3476075,-1484303,0],[-3475563,-1479695,0],[-3468395,-1477135,0],[-3467883,-1481743,0],[-3464299,-1485327,0],[-3462763,-1491471,0],[-3459179,-1497103,0],[-3456619,-1512975,0],[-3457131,-1519119,0],[-3455083,-1521679,0],[-3455595,-1526287,0],[-3452523,-1526799,0],[-3450987,-1530895,0],[-3445355,-1529871,0],[-3439723,-1532943,0],[-3433579,-1533967,0],[-3427947,-1536527,0],[-3421291,-1535503,0],[-3414123,-1537039,0],[-3406443,-1537039,0],[-3403371,-1538575,0],[-3402859,-1539087,0],[-3401323,-1543183,0],[-3398251,-1546255,0],[-3398251,-1552399,0],[-3393131,-1552911,0],[-3389035,-1556495,0],[-3385963,-1560079,0],[-3377259,-1564175,0],[-3376747,-1567247,0],[-3373675,-1570831,0],[-3359851,-1575951,0],[-3357803,-1577999,0],[-3357291,-1580559,0],[-3360363,-1586703,0],[-3355755,-1586703,0],[-3351147,-1589263,0],[-3343467,-1590799,0],[-3341419,-1592335,0],[-3335787,-1598991,0],[-3333739,-1603599,0],[-3322475,-1603599,0],[-3306603,-1596943,0],[-3295851,-1598479,0],[-3293291,-1599503,0],[-3293291,-1603087,0],[-3291243,-1608207,0],[-3290731,-1608719,0],[-3285611,-1608719,0],[-3285611,-1612303,0],[-3282027,-1621519,0],[-3278955,-1624591,0],[-3274347,-1624079,0],[-3261035,-1616911,0],[-3248747,-1621519,0],[-3246699,-1622543,0],[-3245675,-1624591,0],[-3240555,-1627151,0],[-3239019,-1633295,0],[-3239019,-1638927,0],[-3234923,-1648655,0],[-3232363,-1651215,0],[-3230315,-1652751,0],[-3220587,-1656335,0],[-3212907,-1661455,0],[-3208811,-1667599,0],[-3205739,-1669135,0],[-3201131,-1674767,0],[-3206251,-1686543,0],[-3205739,-1693711,0],[-3206251,-1697807,0],[-3210347,-1701903,0],[-3214443,-1711119,0],[-3214443,-1716239,0],[-3211371,-1723407,0],[-3211883,-1725967,0],[-3215467,-1730575,0],[-3214443,-1733135,0],[-3210347,-1736719,0],[-3203179,-1737743,0],[-3200107,-1739279,0],[-3196523,-1745935,0],[-3189355,-1753615,0],[-3186795,-1761807,0],[-3185771,-1770511,0],[-3184235,-1772559,0],[-3176555,-1774607,0],[-3168875,-1771023,0],[-3158635,-1772559,0],[-3153003,-1775119,0],[-3147371,-1775631,0],[-3126379,-1788943,0],[-3118699,-1792015,0],[-3116139,-1794063,0],[-3113579,-1798159,0],[-3112043,-1798671,0],[-3112043,-1800719,0],[-3114091,-1803279,0],[-3113067,-1805327,0],[-3113067,-1807887,0],[-3115627,-1815567,0],[-3115627,-1819151,0],[-3114091,-1822223,0],[-3111531,-1823759,0],[-3108459,-1829391,0],[-3114603,-1838095,0],[-3112555,-1840655,0],[-3114091,-1843215,0],[-3113067,-1847311,0],[-3114603,-1852431,0],[-3116651,-1854991,0],[-3111019,-1860623,0],[-3111531,-1863695,0],[-3107947,-1867791,0],[-3107947,-1870351,0],[-3106923,-1871375,0],[-3110507,-1875983,0],[-3107947,-1878543,0],[-3111531,-1880079,0],[-3112043,-1881103,0],[-3109995,-1880591,0],[-3108971,-1884175,0],[-3106411,-1884175,0],[-3104363,-1889807,0],[-3098731,-1893903,0],[-3097707,-1895951,0],[-3096683,-1900047,0],[-3098219,-1910287,0],[-3096171,-1916431,0],[-3093611,-1918991,0],[-3090539,-1919503,0],[-3089003,-1924623,0],[-3075179,-1934863,0],[-3071595,-1936911,0],[-3064427,-1936399,0],[-3062379,-1937423,0],[-3059307,-1945615,0],[-3055211,-1949199,0],[-3050603,-1951247,0],[-3048043,-1955343,0],[-3036779,-1950223,0],[-3032683,-1949199,0],[-3014251,-1952271,0],[-3011691,-1955343,0],[-3009131,-1960463,0],[-3002475,-1969167,0],[-2995307,-1977359,0],[-2980971,-1975311,0],[-2975851,-1971215,0],[-2968171,-1971215,0],[-2962027,-1972751,0],[-2956395,-1972751,0],[-2955883,-1971727,0],[-2951275,-1971215,0],[-2948203,-1970191,0],[-2946155,-1972751,0],[-2944107,-1973775,0],[-2942571,-1978383,0],[-2944619,-1980431,0],[-2948715,-1978895,0],[-2953835,-1980431,0],[-2954859,-1985039,0],[-2957419,-1992207,0],[-2957419,-1996815,0],[-2956395,-2001935,0],[-2954859,-2003983,0],[-2952299,-2005519,0],[-2946667,-2006543,0],[-2945131,-2007567,0],[-2943595,-2010639,0],[-2942571,-2013711,0],[-2939499,-2015247,0],[-2938475,-2019343,0],[-2931819,-2025487,0],[-2930795,-2024975,0],[-2929259,-2025999,0],[-2929259,-2030095,0],[-2933355,-2040335,0],[-2932843,-2046991,0],[-2939499,-2048015,0],[-2941035,-2049039,0],[-2945131,-2048527,0],[-2951275,-2049551,0],[-2953835,-2048527,0],[-2958955,-2050575,0],[-2962539,-2054159,0],[-2962027,-2059791,0],[-2963051,-2061327,0],[-2967147,-2062863,0],[-2968683,-2062351,0],[-2970219,-2064399,0],[-2974315,-2066447,0],[-2976875,-2070031,0],[-2979947,-2070543,0],[-2978411,-2074639,0],[-2977899,-2079759,0],[-2981483,-2088463,0],[-2981483,-2094607,0],[-2983531,-2099215,0],[-2984043,-2101775,0],[-2979435,-2107407,0],[-2978411,-2110479,0],[-2974827,-2110991,0],[-2974315,-2111503,0],[-2975851,-2115599,0],[-2975851,-2121231,0],[-2978411,-2125839,0],[-2984043,-2126351,0],[-2987627,-2128911,0],[-2993771,-2138639,0],[-3002475,-2145807,0],[-3003499,-2150927,0],[-3006571,-2157071,0],[-3006571,-2163727,0],[-3008107,-2166287,0],[-3012715,-2168847,0],[-3015275,-2172431,0],[-3015275,-2174479,0],[-3017323,-2174991,0],[-3017835,-2178063,0],[-3016811,-2179087,0],[-3014763,-2180111,0],[-3013227,-2182159,0],[-3011691,-2186767,0],[-3011691,-2190351,0],[-3009131,-2197519,0],[-3007595,-2204687,0],[-3010155,-2211343,0],[-3009643,-2213903,0],[-3010667,-2214927,0],[-3014763,-2215951,0],[-3014251,-2218511,0],[-3016811,-2219023,0],[-3015787,-2221071,0],[-3016299,-2222095,0],[-3025003,-2226191,0],[-3030635,-2225167,0],[-3033707,-2225679,0],[-3034219,-2223631,0],[-3036779,-2223631,0],[-3040875,-2226191,0],[-3042411,-2227727,0],[-3041387,-2232847,0],[-3043435,-2233871,0],[-3046507,-2237967,0],[-3047019,-2244623,0],[-3049579,-2245647,0],[-3051627,-2250767,0],[-3053675,-2251279,0],[-3053675,-2252815,0],[-3055211,-2256911,0],[-3056747,-2256399,0],[-3059307,-2256911,0],[-3060331,-2263055,0],[-3062379,-2264591,0],[-3064427,-2264591,0],[-3068011,-2258959,0],[-3070059,-2257935,0],[-3075691,-2264591,0],[-3081835,-2269711,0],[-3085931,-2269199,0],[-3086443,-2267663,0],[-3085931,-2266127,0],[-3087467,-2257423,0],[-3085419,-2251279,0],[-3083883,-2250255,0],[-3084907,-2249231,0],[-3085419,-2247695,0],[-3087467,-2246671,0],[-3092075,-2249231,0],[-3099243,-2249231,0],[-3103851,-2254863,0],[-3115627,-2261007,0],[-3119211,-2266639,0],[-3126379,-2270735,0],[-3130475,-2270735,0],[-3132011,-2272271,0],[-3135083,-2272271,0],[-3141739,-2264591,0],[-3143275,-2261519,0],[-3142251,-2258959,0],[-3142763,-2256399,0],[-3147883,-2251279,0],[-3149419,-2251791,0],[-3154539,-2254863,0],[-3161195,-2256911,0],[-3171947,-2262031,0],[-3176555,-2258959,0],[-3180139,-2254351,0],[-3183211,-2251279,0],[-3194475,-2247183,0],[-3196523,-2243599,0],[-3197035,-2236943,0],[-3194475,-2224655,0],[-3204715,-2225167,0],[-3212395,-2222095,0],[-3218539,-2223119,0],[-3227243,-2221071,0],[-3233899,-2217487,0],[-3236971,-2217487,0],[-3241579,-2219023,0],[-3248747,-2214927,0],[-3261035,-2213391,0],[-3263083,-2209807,0],[-3266667,-2207759,0],[-3275371,-2199055,0],[-3278443,-2198031,0],[-3282539,-2198543,0],[-3285611,-2198031,0],[-3294827,-2189327,0],[-3299435,-2191375,0],[-3299947,-2190863,0],[-3307627,-2184719,0],[-3312747,-2177039,0],[-3319915,-2173455,0],[-3325035,-2167823,0],[-3329131,-2168335,0],[-3331179,-2170895,0],[-3328619,-2188815,0],[-3331691,-2190351,0],[-3338347,-2190351,0],[-3340395,-2191887,0],[-3349611,-2205711,0],[-3353707,-2214927,0],[-3360875,-2217487,0],[-3363947,-2217999,0],[-3366507,-2217487,0],[-3371115,-2211855,0],[-3373675,-2205199,0],[-3386987,-2199567,0],[-3391083,-2196495,0],[-3392619,-2192399,0],[-3392107,-2186767,0],[-3393643,-2184719,0],[-3399787,-2181135,0],[-3420779,-2172431,0],[-3427435,-2170895,0],[-3433579,-2167311,0],[-3440747,-2159631,0],[-3443819,-2151439,0],[-3452523,-2138127,0],[-3454059,-2137615,0],[-3459179,-2138639,0],[-3466347,-2138127,0],[-3471467,-2139663,0],[-3476587,-2138127,0],[-3478635,-2136591,0],[-3479659,-2133007,0],[-3481195,-2131471,0],[-3491947,-2124815,0],[-3493483,-2123279,0],[-3494507,-2120719,0],[-3492459,-2113551,0],[-3492459,-2105871,0],[-3490411,-2095119,0],[-3484267,-2086415,0],[-3482731,-2080783,0],[-3483243,-2075663,0],[-3487339,-2060815,0],[-3490411,-2044943,0],[-3492459,-2042895,0],[-3507819,-2030095,0],[-3511403,-2024463,0],[-3514475,-2021903,0],[-3519083,-2013711,0],[-3515499,-2006031,0],[-3515499,-2003471,0],[-3517547,-2001935,0],[-3532907,-1997839,0],[-3538027,-1992719,0],[-3541099,-1993743,0],[-3547243,-2000911,0],[-3547755,-2003471,0],[-3545707,-2012175,0],[-3550315,-2021391,0],[-3552363,-2032143,0],[-3555947,-2035727,0],[-3554411,-2044943,0],[-3558507,-2049039,0],[-3567723,-2052623,0],[-3571819,-2055695,0],[-3573867,-2058255,0],[-3575915,-2064399,0],[-3575915,-2066447,0],[-3576939,-2068495,0],[-3580011,-2064911,0],[-3586667,-2064911,0],[-3597931,-2060303,0],[-3601515,-2060303,0],[-3604075,-2059279,0],[-3609707,-2060303,0],[-3615339,-2055695,0],[-3618411,-2055695,0],[-3622507,-2045967,0],[-3628139,-2045455,0],[-3636843,-2045455,0],[-3645547,-2046479,0],[-3651691,-2045455,0],[-3654763,-2042895,0],[-3655275,-2041359,0],[-3658859,-2029583,0],[-3669099,-2022927,0],[-3669099,-1698319,0],[-3666539,-1699343,0],[-3661931,-1698319,0],[-3650667,-1691151,0],[-3647595,-1689615,0],[-3644523,-1691151,0],[-3640427,-1697295,0],[-3630699,-1702927,0],[-3628139,-1705487,0],[-3625067,-1709071,0],[-3621995,-1716239,0],[-3621995,-1719823,0],[-3624043,-1726479,0],[-3623531,-1733647,0],[-3620971,-1736719,0],[-3619435,-1745935,0],[-3612267,-1762831,0],[-3605611,-1772047,0],[-3578475,-1797135,0],[-3576427,-1799695,0],[-3574379,-1806863,0],[-3573867,-1814031,0],[-3575403,-1816591,0],[-3575403,-1819151,0],[-3574379,-1821199,0],[-3573355,-1821199,0],[-3572843,-1820687,0],[-3572331,-1821199,0],[-3576939,-1825807,0],[-3576939,-1831951,0],[-3581035,-1834511,0],[-3583083,-1834511,0],[-3583083,-1835535,0],[-3586155,-1837071,0],[-3586667,-1842191,0],[-3587691,-1843727,0],[-3591275,-1845263,0],[-3604075,-1852431,0],[-3592811,-1852431,0],[-3568747,-1848335,0],[-3565163,-1843727,0],[-3565675,-1836047,0],[-3564139,-1830415,0],[-3560043,-1824783,0],[-3555435,-1815055,0],[-3551851,-1813519,0],[-3553387,-1808399,0],[-3553387,-1803279,0],[-3550827,-1801231,0],[-3549291,-1798159,0],[-3545195,-1797135,0],[-3544683,-1796111,0],[-3547243,-1784847,0],[-3549291,-1752591,0],[-3546731,-1744399,0],[-3546219,-1737743,0],[-3542123,-1727503,0],[-3542635,-1711631,0],[-3541099,-1707023,0],[-3541611,-1701391,0],[-3540587,-1695759,0],[-3541099,-1692175,0],[-3540075,-1685007,0],[-3538539,-1679375,0],[-3539051,-1675279,0],[-3542635,-1667087,0],[-3544171,-1660943,0],[-3547243,-1657871,0],[-3551851,-1656335,0],[-3553899,-1653775,0],[-3557995,-1644559,0],[-3558507,-1636879,0],[-3563115,-1633807,0],[-3566699,-1629199,0],[-3573867,-1622031,0],[-3577963,-1619983,0],[-3575915,-1617935,0],[-3574891,-1614863,0],[-3575403,-1608207,0],[-3570283,-1603599,0],[-3565163,-1595919,0],[-3565675,-1590799,0],[-3569259,-1585167,0],[-3569259,-1578511,0],[-3570283,-1577999,0],[-3574379,-1579023,0],[-3576939,-1577487,0],[-3584619,-1558543,0],[-3591787,-1558543,0],[-3594347,-1557519,0],[-3595883,-1556495,0],[-3596395,-1548303,0],[-3598443,-1541135,0],[-3596907,-1537551,0],[-3596395,-1533455,0],[-3596907,-1523215,0],[-3598955,-1516047,0],[-3605099,-1511951,0],[-3610219,-1510927,0],[-3614827,-1508367,0],[-3617387,-1507855,0],[-3619435,-1509391,0],[-3623531,-1518095,0],[-3628139,-1521167,0],[-3634795,-1523727,0],[-3638891,-1523215,0],[-3645547,-1526287,0],[-3649643,-1530895,0],[-3650667,-1540111,0],[-3655275,-1539087,0],[-3669099,-1544207,0],[-3669099,-1344527,0],[-3665003,-1344015,0]]]},{"id":13,"color":[0.7008209150326796,0.878964705882353,0.6369882352941177,1],"coordinates":[[[-3300971,-1077263,0],[-3299947,-1081871,0],[-3289707,-1096719,0],[-3283563,-1111567,0],[-3280491,-1114639,0],[-3279979,-1118735,0],[-3279979,-1126415,0],[-3278955,-1128463,0],[-3273323,-1131023,0],[-3272299,-1133583,0],[-3272299,-1136655,0],[-3275371,-1143311,0],[-3275371,-1145871,0],[-3277931,-1157135,0],[-3276907,-1160719,0],[-3277419,-1166351,0],[-3275371,-1175055,0],[-3272811,-1178639,0],[-3270763,-1180175,0],[-3265643,-1181199,0],[-3257963,-1181199,0],[-3251819,-1183759,0],[-3241579,-1182223,0],[-3230315,-1183247,0],[-3223147,-1180687,0],[-3206763,-1178639,0],[-3201643,-1175055,0],[-3198059,-1167887,0],[-3195499,-1149455,0],[-3192939,-1140751,0],[-3187819,-1131023,0],[-3183723,-1126415,0],[-3181675,-1117199,0],[-3175019,-1112591,0],[-3171435,-1111055,0],[-3157611,-1112591,0],[-3151979,-1111567,0],[-3143787,-1111567,0],[-3132523,-1113615,0],[-3128427,-1112591,0],[-3124843,-1113103,0],[-3122283,-1111567,0],[-3116651,-1111567,0],[-3111019,-1108495,0],[-3108459,-1106447,0],[-3109995,-1101839,0],[-3105387,-1100303,0],[-3090027,-1100303,0],[-3082347,-1098767,0],[-3078763,-1098767,0],[-3068011,-1095695,0],[-3063915,-1095183,0],[-3056747,-1096719,0],[-3045483,-1100815,0],[-3039339,-1104911,0],[-3031659,-1120271,0],[-3025515,-1128463,0],[-3022955,-1129999,0],[-3016811,-1132559,0],[-3010155,-1132559,0],[-2999403,-1139215,0],[-2985579,-1154575,0],[-2983531,-1158159,0],[-2966123,-1171983,0],[-2957931,-1182735,0],[-2953835,-1189903,0],[-2936939,-1207823,0],[-2934379,-1211919,0],[-2929771,-1213455,0],[-2918507,-1214479,0],[-2917995,-1215503,0],[-2920043,-1224719,0],[-2918507,-1227791,0],[-2918507,-1230351,0],[-2923627,-1240591,0],[-2940011,-1248783,0],[-2941035,-1250319,0],[-2941035,-1253391,0],[-2937451,-1256975,0],[-2939499,-1261583,0],[-2937963,-1265679,0],[-2928747,-1281039,0],[-2927723,-1285135,0],[-2928235,-1293839,0],[-2929771,-1302543,0],[-2929259,-1306639,0],[-2929771,-1308175,0],[-2932331,-1311247,0],[-2931819,-1318415,0],[-2933355,-1331215,0],[-2936427,-1336335,0],[-2939499,-1338383,0],[-2942059,-1338895,0],[-2948715,-1343503,0],[-2952811,-1348111,0],[-2953323,-1350671,0],[-2953323,-1359375,0],[-2952299,-1361935,0],[-2944107,-1371151,0],[-2940011,-1384463,0],[-2940523,-1389583,0],[-2939499,-1392655,0],[-2932843,-1401871,0],[-2931819,-1416207,0],[-2928747,-1423375,0],[-2922603,-1430031,0],[-2911339,-1433103,0],[-2906731,-1440783,0],[-2895467,-1448463,0],[-2887787,-1461263,0],[-2881643,-1464335,0],[-2873451,-1465359,0],[-2872427,-1467919,0],[-2870891,-1469967,0],[-2870891,-1474575,0],[-2864747,-1482767,0],[-2860139,-1482255,0],[-2857067,-1486351,0],[-2853483,-1486863,0],[-2853483,-1497615,0],[-2855531,-1503247,0],[-2853483,-1504271,0],[-2848875,-1504271,0],[-2844779,-1510927,0],[-2837099,-1516047,0],[-2836075,-1516047,0],[-2834539,-1513487,0],[-2828907,-1510927,0],[-2827883,-1508879,0],[-2827883,-1504783,0],[-2823787,-1497103,0],[-2821739,-1490447,0],[-2820715,-1489423,0],[-2816107,-1490959,0],[-2813547,-1489935,0],[-2812011,-1486351,0],[-2808939,-1485327,0],[-2803819,-1486351,0],[-2793579,-1485327,0],[-2792043,-1486351,0],[-2789483,-1491983,0],[-2788459,-1502223,0],[-2785899,-1502735,0],[-2783339,-1502223,0],[-2781291,-1497103,0],[-2776683,-1489935,0],[-2775147,-1485327,0],[-2769003,-1480719,0],[-2767467,-1473039,0],[-2765419,-1467919,0],[-2764907,-1464335,0],[-2765419,-1460751,0],[-2759787,-1458703,0],[-2754667,-1455119,0],[-2752107,-1455119,0],[-2747499,-1462287,0],[-2740843,-1467919,0],[-2739307,-1473039,0],[-2736747,-1475599,0],[-2734699,-1484815,0],[-2732651,-1487887,0],[-2729579,-1490447,0],[-2722923,-1493007,0],[-2721387,-1495055,0],[-2719851,-1498639,0],[-2719851,-1506319,0],[-2715243,-1512975,0],[-2710123,-1516047,0],[-2707563,-1522703,0],[-2708075,-1527311,0],[-2705515,-1532431,0],[-2705003,-1536527,0],[-2701931,-1542159,0],[-2700907,-1546767,0],[-2697323,-1551887,0],[-2696811,-1555983,0],[-2695275,-1557519,0],[-2691691,-1559567,0],[-2688619,-1559567,0],[-2686059,-1555983,0],[-2683499,-1549839,0],[-2677867,-1551887,0],[-2671211,-1550863,0],[-2667115,-1544719,0],[-2665579,-1539087,0],[-2664043,-1536527,0],[-2664043,-1526799,0],[-2659947,-1528847,0],[-2655851,-1526287,0],[-2648683,-1528335,0],[-2638443,-1526287,0],[-2635883,-1529871,0],[-2627691,-1536527,0],[-2627179,-1538575,0],[-2621547,-1547279,0],[-2618475,-1554959,0],[-2616939,-1556495,0],[-2612843,-1570831,0],[-2610283,-1572367,0],[-2610795,-1575439,0],[-2612331,-1581071,0],[-2607723,-1582607,0],[-2601579,-1582095,0],[-2598507,-1583631,0],[-2597995,-1584655,0],[-2599019,-1589263,0],[-2597483,-1593871,0],[-2594411,-1591311,0],[-2594411,-1588751,0],[-2593899,-1586703,0],[-2591339,-1587215,0],[-2589803,-1588239,0],[-2588267,-1592335,0],[-2586731,-1600527,0],[-2590315,-1603599,0],[-2589803,-1613839,0],[-2593387,-1616399,0],[-2594411,-1617935,0],[-2596459,-1618447,0],[-2607211,-1616399,0],[-2612331,-1616911,0],[-2618475,-1624591,0],[-2627691,-1628687,0],[-2635371,-1634319,0],[-2638955,-1633807,0],[-2649195,-1638415,0],[-2651755,-1635343,0],[-2654315,-1635343,0],[-2656875,-1637903,0],[-2661483,-1645583,0],[-2664043,-1646607,0],[-2665579,-1648655,0],[-2665579,-1650703,0],[-2670187,-1657359,0],[-2669675,-1659919,0],[-2670699,-1662479,0],[-2675307,-1665039,0],[-2679403,-1665039,0],[-2686059,-1667087,0],[-2688107,-1671695,0],[-2698859,-1672719,0],[-2705003,-1680399,0],[-2705515,-1682447,0],[-2709099,-1686031,0],[-2712683,-1687055,0],[-2721387,-1685007,0],[-2729067,-1688591,0],[-2733163,-1689103,0],[-2737771,-1685007,0],[-2743915,-1677327,0],[-2748523,-1674767,0],[-2755179,-1676815,0],[-2760299,-1676815,0],[-2763371,-1676303,0],[-2765419,-1676815,0],[-2768491,-1685007,0],[-2768491,-1700367,0],[-2770027,-1704463,0],[-2773611,-1705999,0],[-2778731,-1706511,0],[-2779243,-1708047,0],[-2777707,-1710095,0],[-2778731,-1711631,0],[-2784875,-1711631,0],[-2789995,-1712655,0],[-2792043,-1720335,0],[-2797675,-1719311,0],[-2799723,-1723919,0],[-2810475,-1727503,0],[-2813035,-1729551,0],[-2818155,-1730063,0],[-2819691,-1731087,0],[-2822251,-1734159,0],[-2842731,-1738767,0],[-2846827,-1740815,0],[-2851435,-1734671,0],[-2857067,-1730063,0],[-2859627,-1721871,0],[-2861675,-1719311,0],[-2864747,-1712143,0],[-2866283,-1710607,0],[-2870379,-1702415,0],[-2871915,-1701391,0],[-2877035,-1701391,0],[-2879595,-1699855,0],[-2883691,-1695759,0],[-2888811,-1694735,0],[-2894443,-1694735,0],[-2906731,-1690639,0],[-2909803,-1691151,0],[-2913387,-1696783,0],[-2919531,-1700367,0],[-2924139,-1701391,0],[-2927211,-1700367,0],[-2929259,-1701903,0],[-2932331,-1700879,0],[-2934379,-1701391,0],[-2939499,-1705999,0],[-2941547,-1706511,0],[-2944619,-1705999,0],[-2950251,-1706511,0],[-2964075,-1715727,0],[-2968683,-1716751,0],[-2978923,-1721359,0],[-2983019,-1727503,0],[-2985067,-1728527,0],[-2989675,-1728527,0],[-2996331,-1732111,0],[-3000427,-1733135,0],[-3010155,-1732623,0],[-3014251,-1733135,0],[-3017323,-1734671,0],[-3023467,-1726479,0],[-3022955,-1717263,0],[-3027051,-1709071,0],[-3036779,-1701903,0],[-3041899,-1694223,0],[-3044459,-1687567,0],[-3056747,-1679887,0],[-3060331,-1678863,0],[-3062891,-1679887,0],[-3065963,-1687055,0],[-3069035,-1690639,0],[-3081323,-1696783,0],[-3087467,-1696271,0],[-3096171,-1697295,0],[-3103851,-1695247,0],[-3106923,-1695759,0],[-3119723,-1703439,0],[-3123307,-1703951,0],[-3128939,-1698319,0],[-3137643,-1693199,0],[-3143275,-1681935,0],[-3150955,-1672207,0],[-3155563,-1670159,0],[-3159659,-1672207,0],[-3163755,-1675791,0],[-3170923,-1678351,0],[-3177067,-1679887,0],[-3184747,-1679375,0],[-3190891,-1680911,0],[-3193963,-1681423,0],[-3199595,-1676303,0],[-3205739,-1669135,0],[-3208811,-1667599,0],[-3212907,-1661455,0],[-3220587,-1656335,0],[-3230315,-1652751,0],[-3232363,-1651215,0],[-3234923,-1648655,0],[-3239019,-1638927,0],[-3239019,-1633295,0],[-3240043,-1627663,0],[-3245675,-1624591,0],[-3246699,-1622543,0],[-3248747,-1621519,0],[-3261035,-1616911,0],[-3274347,-1624079,0],[-3278955,-1624591,0],[-3282027,-1621519,0],[-3285611,-1612303,0],[-3285611,-1608719,0],[-3290731,-1608719,0],[-3291243,-1608207,0],[-3293291,-1603087,0],[-3293291,-1599503,0],[-3295851,-1598479,0],[-3306603,-1596943,0],[-3322475,-1603599,0],[-3333739,-1603599,0],[-3335787,-1598991,0],[-3341419,-1592335,0],[-3343467,-1590799,0],[-3351147,-1589263,0],[-3355755,-1586703,0],[-3360363,-1586703,0],[-3357291,-1580559,0],[-3357803,-1577999,0],[-3359851,-1575951,0],[-3373675,-1570831,0],[-3376747,-1567247,0],[-3377259,-1564175,0],[-3385963,-1560079,0],[-3389035,-1556495,0],[-3393131,-1552911,0],[-3398251,-1552399,0],[-3398251,-1546255,0],[-3401323,-1543183,0],[-3402859,-1539087,0],[-3403371,-1538575,0],[-3406443,-1537039,0],[-3414123,-1537039,0],[-3421291,-1535503,0],[-3427947,-1536527,0],[-3433579,-1533967,0],[-3439723,-1532943,0],[-3445355,-1529871,0],[-3450987,-1530895,0],[-3452523,-1526799,0],[-3455595,-1526287,0],[-3455083,-1521679,0],[-3457131,-1519119,0],[-3456619,-1512975,0],[-3459179,-1497103,0],[-3462763,-1491471,0],[-3464299,-1485327,0],[-3467883,-1481231,0],[-3468907,-1473039,0],[-3468395,-1468431,0],[-3465835,-1463823,0],[-3463275,-1453071,0],[-3461739,-1434639,0],[-3460715,-1432079,0],[-3455083,-1431055,0],[-3453547,-1426447,0],[-3448427,-1423375,0],[-3446891,-1423887,0],[-3442283,-1427471,0],[-3437675,-1429007,0],[-3431531,-1426447,0],[-3427435,-1426959,0],[-3423851,-1428495,0],[-3417707,-1433615,0],[-3401835,-1430543,0],[-3392619,-1422351,0],[-3391083,-1412623,0],[-3392107,-1392655,0],[-3389035,-1385487,0],[-3377259,-1380879,0],[-3368555,-1375247,0],[-3360875,-1373199,0],[-3357291,-1371151,0],[-3356779,-1367567,0],[-3357291,-1365007,0],[-3360875,-1358863,0],[-3367531,-1354767,0],[-3375211,-1351183,0],[-3382891,-1349135,0],[-3406443,-1355279,0],[-3414123,-1353231,0],[-3417707,-1351695,0],[-3423339,-1346575,0],[-3424875,-1343503,0],[-3425387,-1339919,0],[-3423339,-1336847,0],[-3416171,-1331727,0],[-3416171,-1329679,0],[-3413099,-1326607,0],[-3408491,-1319439,0],[-3407467,-1314319,0],[-3405419,-1310735,0],[-3402859,-1308175,0],[-3398763,-1307663,0],[-3398251,-1305615,0],[-3401323,-1303567,0],[-3403883,-1303055,0],[-3405419,-1303567,0],[-3406955,-1302543,0],[-3407467,-1300495,0],[-3405931,-1292303,0],[-3393643,-1285135,0],[-3393131,-1283599,0],[-3395179,-1274383,0],[-3406443,-1256463,0],[-3409515,-1246735,0],[-3413611,-1239055,0],[-3415147,-1225743,0],[-3416171,-1222671,0],[-3417707,-1217551,0],[-3425387,-1199631,0],[-3429995,-1181199,0],[-3430507,-1171471,0],[-3428971,-1169935,0],[-3429995,-1161743,0],[-3429483,-1155599,0],[-3431019,-1152015,0],[-3434603,-1147919,0],[-3433579,-1140751,0],[-3437163,-1131023,0],[-3439211,-1127951,0],[-3444843,-1122831,0],[-3444331,-1118223,0],[-3445355,-1115151,0],[-3449451,-1111055,0],[-3448427,-1109519,0],[-3442283,-1108495,0],[-3430507,-1099791,0],[-3425899,-1099791,0],[-3424363,-1100815,0],[-3417707,-1109519,0],[-3414635,-1112591,0],[-3395691,-1113615,0],[-3387499,-1114639,0],[-3381355,-1117199,0],[-3373675,-1126415,0],[-3370091,-1128975,0],[-3367531,-1129487,0],[-3365995,-1127439,0],[-3367019,-1123855,0],[-3369067,-1122319,0],[-3370603,-1121807,0],[-3378283,-1115663,0],[-3378283,-1109007,0],[-3379307,-1107983,0],[-3379819,-1105423,0],[-3381355,-1103887,0],[-3379307,-1101327,0],[-3374187,-1099791,0],[-3363435,-1094159,0],[-3356267,-1092111,0],[-3349099,-1094159,0],[-3349099,-1092623,0],[-3331179,-1085455,0],[-3329643,-1083407,0],[-3326571,-1083407,0],[-3325035,-1084943,0],[-3317867,-1088015,0],[-3311211,-1086991,0],[-3308139,-1082383,0],[-3305579,-1080847,0],[-3302507,-1077263,0],[-3300971,-1077263,0]]]},{"id":14,"color":[0.957521568627451,0.43220915032679735,0.26494117647058824,1],"coordinates":[[[-2589291,-1440271,0],[-2585707,-1441295,0],[-2580587,-1442831,0],[-2574955,-1447439,0],[-2571883,-1446927,0],[-2569323,-1448463,0],[-2566251,-1450511,0],[-2562667,-1454607,0],[-2561131,-1455119,0],[-2559595,-1457679,0],[-2557035,-1458703,0],[-2557547,-1461775,0],[-2561131,-1464847,0],[-2561131,-1475087,0],[-2562667,-1482255,0],[-2560107,-1493519,0],[-2558059,-1496079,0],[-2550891,-1503759,0],[-2546283,-1504271,0],[-2545259,-1505295,0],[-2543211,-1512463,0],[-2538091,-1516047,0],[-2538091,-1527823,0],[-2536043,-1530895,0],[-2532459,-1541135,0],[-2534507,-1546767,0],[-2535531,-1553423,0],[-2531947,-1564687,0],[-2529899,-1567247,0],[-2528363,-1567247,0],[-2522219,-1563151,0],[-2519659,-1564175,0],[-2517611,-1562639,0],[-2515563,-1563151,0],[-2514539,-1565199,0],[-2516075,-1579535,0],[-2515051,-1583631,0],[-2514027,-1585167,0],[-2507371,-1587727,0],[-2506347,-1589263,0],[-2505835,-1594895,0],[-2513515,-1600015,0],[-2515051,-1605647,0],[-2514539,-1618447,0],[-2511979,-1622031,0],[-2508907,-1624591,0],[-2506859,-1625615,0],[-2497643,-1624079,0],[-2493035,-1621007,0],[-2492011,-1621007,0],[-2490987,-1623055,0],[-2491499,-1626639,0],[-2488939,-1632271,0],[-2484843,-1647631,0],[-2462827,-1645071,0],[-2461291,-1643535,0],[-2458219,-1653263,0],[-2457707,-1660431,0],[-2455659,-1666575,0],[-2456171,-1670159,0],[-2458219,-1673231,0],[-2464363,-1676815,0],[-2467947,-1682447,0],[-2470507,-1683471,0],[-2472043,-1687567,0],[-2475627,-1690639,0],[-2481771,-1698831,0],[-2484843,-1707023,0],[-2484843,-1711631,0],[-2486891,-1716239,0],[-2486379,-1718287,0],[-2489963,-1721871,0],[-2497131,-1720847,0],[-2502251,-1723407,0],[-2508395,-1721359,0],[-2511979,-1722383,0],[-2518635,-1713167,0],[-2524267,-1713679,0],[-2524267,-1726991,0],[-2524779,-1728015,0],[-2525803,-1726991,0],[-2527339,-1727503,0],[-2526827,-1729039,0],[-2527851,-1731087,0],[-2527339,-1731599,0],[-2527851,-1732623,0],[-2526827,-1734671,0],[-2527339,-1735183,0],[-2524267,-1740815,0],[-2521195,-1738767,0],[-2518123,-1740815,0],[-2519659,-1743887,0],[-2522731,-1745935,0],[-2524779,-1744399,0],[-2526315,-1745423,0],[-2528875,-1745423,0],[-2530923,-1742863,0],[-2532971,-1742351,0],[-2533483,-1746959,0],[-2536043,-1751055,0],[-2534507,-1751567,0],[-2530923,-1751055,0],[-2528875,-1752591,0],[-2525803,-1753103,0],[-2524779,-1755151,0],[-2525803,-1759247,0],[-2524267,-1761295,0],[-2523755,-1765391,0],[-2521707,-1765903,0],[-2517611,-1763855,0],[-2511979,-1770511,0],[-2510955,-1781775,0],[-2509419,-1784847,0],[-2506347,-1786383,0],[-2506859,-1787407,0],[-2509931,-1789455,0],[-2508907,-1791503,0],[-2508395,-1795087,0],[-2508907,-1798671,0],[-2507883,-1806863,0],[-2507371,-1807887,0],[-2512491,-1808911,0],[-2515051,-1809935,0],[-2518123,-1814031,0],[-2526827,-1815567,0],[-2527339,-1817103,0],[-2526315,-1823759,0],[-2531435,-1832975,0],[-2533483,-1835535,0],[-2537067,-1836047,0],[-2543723,-1836047,0],[-2545771,-1840143,0],[-2547307,-1848335,0],[-2546283,-1852943,0],[-2547307,-1853455,0],[-2552939,-1849871,0],[-2559595,-1849359,0],[-2560619,-1848335,0],[-2564203,-1851407,0],[-2566251,-1857039,0],[-2572907,-1855503,0],[-2575467,-1855503,0],[-2578027,-1851407,0],[-2579563,-1851407,0],[-2580587,-1853967,0],[-2588267,-1847311,0],[-2591339,-1847823,0],[-2599531,-1844751,0],[-2604139,-1850383,0],[-2601579,-1854991,0],[-2600555,-1858575,0],[-2603115,-1858063,0],[-2604139,-1859599,0],[-2607211,-1859087,0],[-2609259,-1859599,0],[-2608747,-1856015,0],[-2610283,-1854991,0],[-2609771,-1852943,0],[-2611307,-1850895,0],[-2611819,-1854991,0],[-2615915,-1854479,0],[-2613867,-1855503,0],[-2612331,-1858063,0],[-2613355,-1859599,0],[-2612843,-1861647,0],[-2613867,-1862159,0],[-2615915,-1859599,0],[-2616939,-1862671,0],[-2618987,-1861647,0],[-2621035,-1862159,0],[-2620011,-1863695,0],[-2621035,-1867279,0],[-2623083,-1866767,0],[-2623083,-1868303,0],[-2627179,-1870351,0],[-2629739,-1869839,0],[-2628203,-1880591,0],[-2630251,-1881103,0],[-2632811,-1879567,0],[-2634347,-1874447,0],[-2636395,-1873935,0],[-2636395,-1875471,0],[-2638443,-1877007,0],[-2639467,-1881103,0],[-2639979,-1889807,0],[-2638443,-1900559,0],[-2638443,-1907215,0],[-2648171,-1912847,0],[-2647659,-1917455,0],[-2643051,-1916943,0],[-2641515,-1917455,0],[-2638955,-1920527,0],[-2638443,-1924111,0],[-2633323,-1933327,0],[-2632299,-1944591,0],[-2627691,-1948175,0],[-2620011,-1949199,0],[-2617963,-1947663,0],[-2602091,-1927695,0],[-2599531,-1927695,0],[-2596459,-1929743,0],[-2595947,-1932815,0],[-2594923,-1933327,0],[-2590827,-1933327,0],[-2588267,-1930255,0],[-2586219,-1930255,0],[-2580075,-1925135,0],[-2577003,-1926671,0],[-2574955,-1924111,0],[-2573931,-1924111,0],[-2569323,-1926159,0],[-2567787,-1929743,0],[-2565227,-1933327,0],[-2563179,-1933327,0],[-2558571,-1937423,0],[-2557547,-1938447,0],[-2557547,-1945615,0],[-2560619,-1953295,0],[-2566251,-1958927,0],[-2568299,-1963023,0],[-2574955,-1972239,0],[-2582123,-1983503,0],[-2587243,-1989647,0],[-2593899,-1994767,0],[-2603627,-2008591,0],[-2610795,-2015759,0],[-2623083,-2025487,0],[-2636395,-2041359,0],[-2637419,-2044943,0],[-2636395,-2047503,0],[-2628203,-2056207,0],[-2624619,-2069519,0],[-2624107,-2074639,0],[-2624619,-2081295,0],[-2627691,-2088975,0],[-2635371,-2094607,0],[-2637419,-2094607,0],[-2644587,-2091023,0],[-2647147,-2085391,0],[-2649707,-2085903,0],[-2654827,-2088975,0],[-2657899,-2093583,0],[-2663531,-2100239,0],[-2687083,-2117647,0],[-2696299,-2123279,0],[-2716267,-2142735,0],[-2717803,-2139151,0],[-2720875,-2138127,0],[-2723435,-2135055,0],[-2723435,-2133007,0],[-2722411,-2129935,0],[-2724459,-2127375,0],[-2731627,-2128911,0],[-2741867,-2116623,0],[-2740843,-2115087,0],[-2734699,-2110479,0],[-2727019,-2100239,0],[-2725483,-2094607,0],[-2727019,-2092559,0],[-2727531,-2092047,0],[-2728555,-2095119,0],[-2729067,-2095119,0],[-2733163,-2093583,0],[-2732139,-2090511,0],[-2734187,-2088975,0],[-2740331,-2086415,0],[-2743403,-2086927,0],[-2745451,-2089487,0],[-2746475,-2086927,0],[-2750059,-2085391,0],[-2747499,-2083855,0],[-2746987,-2080271,0],[-2748523,-2079759,0],[-2744939,-2073103,0],[-2738795,-2069007,0],[-2735211,-2067983,0],[-2733675,-2066447,0],[-2734699,-2063375,0],[-2740843,-2056719,0],[-2731115,-2041871,0],[-2730603,-2037775,0],[-2727531,-2033167,0],[-2727531,-2030607,0],[-2729067,-2029071,0],[-2727531,-2021391,0],[-2728555,-2020367,0],[-2730091,-2020367,0],[-2739819,-2025487,0],[-2741867,-2023951,0],[-2742891,-2021903,0],[-2748011,-2018319,0],[-2751595,-2011663,0],[-2738283,-1998351,0],[-2738283,-1993231,0],[-2743915,-1982991,0],[-2748011,-1982479,0],[-2759787,-1984015,0],[-2767467,-1987087,0],[-2773611,-1994767,0],[-2779243,-1993743,0],[-2784363,-1994255,0],[-2790507,-1995791,0],[-2796651,-1998351,0],[-2803307,-1996303,0],[-2806379,-1996815,0],[-2816107,-1993231,0],[-2820203,-1994767,0],[-2833003,-1991695,0],[-2842219,-1990671,0],[-2845291,-1991183,0],[-2847339,-1992719,0],[-2850411,-1993231,0],[-2856043,-1995279,0],[-2862187,-1994767,0],[-2863723,-1996815,0],[-2865259,-2002959,0],[-2865259,-2007055,0],[-2864235,-2009615,0],[-2867819,-2015247,0],[-2873451,-2015759,0],[-2873963,-2012175,0],[-2876011,-2011663,0],[-2892395,-2011151,0],[-2899051,-2012687,0],[-2901099,-2014735,0],[-2903147,-2018319,0],[-2904171,-2022415,0],[-2903659,-2030095,0],[-2904683,-2031119,0],[-2920043,-2037263,0],[-2927723,-2044943,0],[-2932843,-2046991,0],[-2933355,-2040335,0],[-2929259,-2030095,0],[-2929259,-2025999,0],[-2930795,-2024975,0],[-2931819,-2025487,0],[-2938475,-2019343,0],[-2939499,-2015247,0],[-2942571,-2013711,0],[-2943595,-2010639,0],[-2945131,-2007567,0],[-2946667,-2006543,0],[-2952299,-2005519,0],[-2954859,-2003983,0],[-2956395,-2001935,0],[-2957419,-1995791,0],[-2957419,-1992207,0],[-2954859,-1985039,0],[-2953835,-1980431,0],[-2948715,-1978895,0],[-2944107,-1979919,0],[-2942571,-1978383,0],[-2942571,-1976847,0],[-2944107,-1975311,0],[-2944107,-1973775,0],[-2946155,-1972751,0],[-2948203,-1970191,0],[-2951275,-1971215,0],[-2955883,-1971727,0],[-2956395,-1972751,0],[-2962027,-1972751,0],[-2973803,-1970703,0],[-2977899,-1972239,0],[-2980971,-1975311,0],[-2995307,-1977359,0],[-3002475,-1969167,0],[-3009131,-1960463,0],[-3011691,-1955343,0],[-3014251,-1952271,0],[-3032683,-1949199,0],[-3036779,-1950223,0],[-3048043,-1955343,0],[-3050603,-1951247,0],[-3055211,-1949199,0],[-3059307,-1945615,0],[-3062379,-1937423,0],[-3064427,-1936399,0],[-3072619,-1936399,0],[-3083883,-1927695,0],[-3085931,-1927183,0],[-3089003,-1924111,0],[-3090539,-1919503,0],[-3093611,-1918991,0],[-3097195,-1914895,0],[-3098219,-1908751,0],[-3096683,-1899023,0],[-3098219,-1894927,0],[-3104363,-1889807,0],[-3106411,-1884175,0],[-3108971,-1884175,0],[-3109995,-1880591,0],[-3112043,-1881103,0],[-3111531,-1880079,0],[-3107947,-1878543,0],[-3110507,-1875983,0],[-3106923,-1871375,0],[-3107947,-1870351,0],[-3107947,-1867791,0],[-3111531,-1863695,0],[-3111019,-1860623,0],[-3116651,-1854991,0],[-3114603,-1852431,0],[-3113067,-1847311,0],[-3114091,-1843215,0],[-3112555,-1840655,0],[-3114603,-1838095,0],[-3108459,-1829391,0],[-3111531,-1823759,0],[-3114091,-1822223,0],[-3115627,-1819151,0],[-3115627,-1815567,0],[-3113067,-1807887,0],[-3113067,-1805327,0],[-3114091,-1803279,0],[-3112043,-1800719,0],[-3112043,-1798671,0],[-3113579,-1798159,0],[-3116139,-1794063,0],[-3118699,-1792015,0],[-3126379,-1788943,0],[-3147371,-1775631,0],[-3153003,-1775119,0],[-3158635,-1772559,0],[-3168875,-1771023,0],[-3176555,-1774607,0],[-3184235,-1772559,0],[-3185771,-1770511,0],[-3186795,-1761807,0],[-3189355,-1753615,0],[-3196523,-1745935,0],[-3200107,-1739279,0],[-3203179,-1737743,0],[-3210347,-1736719,0],[-3213419,-1734671,0],[-3214955,-1732623,0],[-3215467,-1730063,0],[-3211883,-1725967,0],[-3211371,-1723407,0],[-3214443,-1716239,0],[-3214443,-1711119,0],[-3210347,-1701903,0],[-3206251,-1697807,0],[-3205739,-1693711,0],[-3206251,-1686543,0],[-3201131,-1674767,0],[-3193963,-1681423,0],[-3190891,-1680911,0],[-3184747,-1679375,0],[-3177067,-1679887,0],[-3163755,-1675791,0],[-3159659,-1672207,0],[-3155563,-1670159,0],[-3150955,-1672207,0],[-3143275,-1681935,0],[-3137643,-1693199,0],[-3128939,-1698319,0],[-3123307,-1703951,0],[-3119723,-1703439,0],[-3106923,-1695759,0],[-3103851,-1695247,0],[-3096171,-1697295,0],[-3087467,-1696271,0],[-3081323,-1696783,0],[-3069035,-1690639,0],[-3065963,-1687055,0],[-3062891,-1679887,0],[-3060331,-1678863,0],[-3056747,-1679887,0],[-3044459,-1687567,0],[-3041899,-1694223,0],[-3036779,-1701903,0],[-3027051,-1709071,0],[-3022955,-1717263,0],[-3023467,-1726479,0],[-3017323,-1734671,0],[-3014251,-1733135,0],[-3010155,-1732623,0],[-3000427,-1733135,0],[-2996331,-1732111,0],[-2989675,-1728527,0],[-2985067,-1728527,0],[-2983019,-1727503,0],[-2978923,-1721359,0],[-2968683,-1716751,0],[-2964075,-1715727,0],[-2950251,-1706511,0],[-2944619,-1705999,0],[-2941547,-1706511,0],[-2939499,-1705999,0],[-2934379,-1701391,0],[-2932331,-1700879,0],[-2929259,-1701903,0],[-2927211,-1700367,0],[-2924139,-1701391,0],[-2919531,-1700367,0],[-2913387,-1696783,0],[-2909803,-1691151,0],[-2906731,-1690639,0],[-2894443,-1694735,0],[-2888811,-1694735,0],[-2883691,-1695759,0],[-2879595,-1699855,0],[-2877035,-1701391,0],[-2871915,-1701391,0],[-2870379,-1702415,0],[-2866283,-1710607,0],[-2864747,-1712143,0],[-2861675,-1719311,0],[-2859627,-1721871,0],[-2857067,-1730063,0],[-2851435,-1734671,0],[-2846827,-1740815,0],[-2842731,-1738767,0],[-2822251,-1734159,0],[-2819691,-1731087,0],[-2818155,-1730063,0],[-2813035,-1729551,0],[-2810475,-1727503,0],[-2799723,-1723919,0],[-2797675,-1719311,0],[-2792043,-1720335,0],[-2789995,-1712655,0],[-2784875,-1711631,0],[-2778731,-1711631,0],[-2777707,-1710095,0],[-2779243,-1708047,0],[-2778731,-1706511,0],[-2773611,-1705999,0],[-2770027,-1704463,0],[-2768491,-1700367,0],[-2768491,-1685007,0],[-2765419,-1676815,0],[-2763371,-1676303,0],[-2760299,-1676815,0],[-2755179,-1676815,0],[-2748523,-1674767,0],[-2743915,-1677327,0],[-2737771,-1685007,0],[-2733163,-1689103,0],[-2729067,-1688591,0],[-2721387,-1685007,0],[-2712683,-1687055,0],[-2709099,-1686031,0],[-2705515,-1682447,0],[-2705003,-1680399,0],[-2698859,-1672719,0],[-2688107,-1671695,0],[-2686059,-1667087,0],[-2679403,-1665039,0],[-2675307,-1665039,0],[-2670699,-1662479,0],[-2669675,-1659919,0],[-2670187,-1657359,0],[-2665579,-1650703,0],[-2665579,-1648655,0],[-2664043,-1646607,0],[-2661483,-1645583,0],[-2656875,-1637903,0],[-2654315,-1635343,0],[-2651755,-1635343,0],[-2649195,-1638415,0],[-2638955,-1633807,0],[-2635371,-1634319,0],[-2627691,-1628687,0],[-2618475,-1624591,0],[-2612331,-1616911,0],[-2607211,-1616399,0],[-2596459,-1618447,0],[-2594411,-1617935,0],[-2593387,-1616399,0],[-2589803,-1613839,0],[-2590315,-1603599,0],[-2586731,-1600527,0],[-2588267,-1592335,0],[-2590827,-1587215,0],[-2593387,-1586703,0],[-2594411,-1588239,0],[-2594411,-1591311,0],[-2597483,-1593871,0],[-2599019,-1589263,0],[-2597995,-1584655,0],[-2598507,-1583631,0],[-2601579,-1582095,0],[-2607723,-1582607,0],[-2612331,-1581071,0],[-2610795,-1575439,0],[-2610283,-1572367,0],[-2612843,-1570831,0],[-2616939,-1556495,0],[-2618475,-1554959,0],[-2621547,-1547279,0],[-2627179,-1538575,0],[-2627691,-1536527,0],[-2635883,-1529871,0],[-2637419,-1526799,0],[-2635883,-1525775,0],[-2632811,-1527311,0],[-2631275,-1525775,0],[-2634859,-1523215,0],[-2633323,-1519631,0],[-2635371,-1518607,0],[-2635371,-1516559,0],[-2637419,-1516559,0],[-2638443,-1516047,0],[-2637419,-1514511,0],[-2635883,-1514511,0],[-2637419,-1512975,0],[-2633835,-1513487,0],[-2632811,-1512463,0],[-2634347,-1510927,0],[-2633835,-1508879,0],[-2636395,-1508879,0],[-2638955,-1506319,0],[-2638955,-1505295,0],[-2635883,-1504783,0],[-2635883,-1502735,0],[-2634859,-1500687,0],[-2638443,-1498127,0],[-2640491,-1493519,0],[-2642539,-1493519,0],[-2643563,-1491471,0],[-2644587,-1491471,0],[-2645611,-1489935,0],[-2645099,-1487887,0],[-2644587,-1488911,0],[-2640491,-1487887,0],[-2636395,-1483279,0],[-2633835,-1484815,0],[-2630251,-1484303,0],[-2625131,-1482255,0],[-2625643,-1477647,0],[-2621547,-1452559,0],[-2618475,-1447951,0],[-2611819,-1441807,0],[-2605163,-1440271,0],[-2596971,-1440783,0],[-2589291,-1440271,0]]]},{"id":15,"color":[0.7026718954248365,0.8797176470588235,0.6366117647058824,1],"coordinates":[[[-2394219,-448015,0],[-2391147,-453135,0],[-2379371,-454159,0],[-2377835,-460815,0],[-2377835,-462863,0],[-2379371,-466447,0],[-2379883,-473103,0],[-2376299,-476175,0],[-2375275,-482831,0],[-2364011,-500239,0],[-2362475,-505871,0],[-2363499,-508943,0],[-2368107,-512527,0],[-2366571,-521743,0],[-2370155,-530447,0],[-2371179,-537103,0],[-2374251,-540687,0],[-2379371,-541199,0],[-2383467,-543759,0],[-2388587,-542223,0],[-2393707,-544783,0],[-2394731,-546319,0],[-2393707,-551439,0],[-2395243,-555023,0],[-2388587,-558607,0],[-2387563,-560143,0],[-2389611,-564751,0],[-2389611,-573455,0],[-2392171,-573967,0],[-2391659,-576015,0],[-2396267,-583183,0],[-2394219,-587279,0],[-2395755,-595471,0],[-2393195,-599055,0],[-2392683,-602127,0],[-2391659,-603151,0],[-2388587,-602639,0],[-2388075,-600591,0],[-2384491,-595983,0],[-2381419,-594447,0],[-2379371,-591375,0],[-2375275,-591887,0],[-2372715,-593423,0],[-2364011,-609295,0],[-2362475,-610319,0],[-2361963,-611855,0],[-2361963,-614927,0],[-2360939,-616975,0],[-2366059,-619023,0],[-2364011,-619535,0],[-2362987,-621071,0],[-2357867,-621071,0],[-2355307,-623119,0],[-2351723,-621583,0],[-2351723,-624655,0],[-2350187,-624655,0],[-2348651,-628239,0],[-2347115,-628751,0],[-2344555,-632335,0],[-2343019,-635919,0],[-2343531,-641039,0],[-2346091,-644111,0],[-2351211,-643087,0],[-2349163,-648207,0],[-2349163,-650255,0],[-2350699,-652303,0],[-2349675,-653839,0],[-2339947,-659471,0],[-2331755,-659983,0],[-2322027,-662031,0],[-2313835,-661519,0],[-2296939,-657423,0],[-2287211,-652303,0],[-2283627,-651791,0],[-2273899,-648207,0],[-2271339,-648207,0],[-2264171,-655887,0],[-2259051,-670735,0],[-2253419,-683023,0],[-2253419,-689167,0],[-2250347,-695823,0],[-2247275,-699407,0],[-2241643,-702479,0],[-2231915,-703503,0],[-2228843,-704527,0],[-2225259,-708623,0],[-2222699,-716303,0],[-2222699,-718863,0],[-2224235,-724495,0],[-2226283,-728591,0],[-2231915,-735247,0],[-2232939,-738319,0],[-2235499,-741391,0],[-2236523,-743951,0],[-2236523,-748047,0],[-2237547,-749071,0],[-2234987,-751119,0],[-2236523,-755215,0],[-2234475,-756751,0],[-2226795,-758287,0],[-2224747,-759311,0],[-2224235,-760847,0],[-2227307,-765967,0],[-2226283,-766991,0],[-2226795,-771599,0],[-2228843,-773647,0],[-2227307,-777743,0],[-2230379,-780303,0],[-2234987,-790543,0],[-2234987,-800271,0],[-2232939,-802319,0],[-2225259,-801807,0],[-2220139,-805391,0],[-2221163,-809487,0],[-2219115,-810511,0],[-2216043,-815119,0],[-2217579,-821775,0],[-2216555,-822799,0],[-2217067,-826383,0],[-2215019,-833039,0],[-2216555,-834063,0],[-2211947,-839695,0],[-2212971,-843279,0],[-2212971,-846351,0],[-2216555,-855055,0],[-2218091,-857103,0],[-2221675,-859663,0],[-2228331,-871951,0],[-2240107,-883727,0],[-2243691,-885775,0],[-2255979,-884751,0],[-2258539,-886799,0],[-2260587,-890895,0],[-2263147,-899087,0],[-2270315,-902671,0],[-2271851,-901647,0],[-2280555,-899599,0],[-2305131,-898063,0],[-2312299,-886287,0],[-2323051,-877071,0],[-2330219,-864271,0],[-2335851,-863759,0],[-2347115,-871439,0],[-2356331,-863247,0],[-2365035,-860175,0],[-2384491,-870415,0],[-2386027,-881167,0],[-2398827,-882191,0],[-2408043,-892431,0],[-2430059,-900623,0],[-2433131,-897551,0],[-2437227,-887823,0],[-2449003,-886799,0],[-2454123,-893455,0],[-2457707,-892431,0],[-2462827,-883727,0],[-2478699,-882191,0],[-2496619,-877071,0],[-2520171,-864783,0],[-2530411,-847375,0],[-2537579,-844815,0],[-2561131,-843791,0],[-2589291,-827919,0],[-2594923,-822287,0],[-2598507,-822287,0],[-2602091,-817679,0],[-2602091,-815119,0],[-2601579,-813071,0],[-2595435,-812559,0],[-2588779,-814095,0],[-2585195,-814095,0],[-2580587,-812559,0],[-2590827,-804879,0],[-2595947,-802831,0],[-2597483,-801295,0],[-2601579,-802831,0],[-2603115,-807439,0],[-2606187,-809487,0],[-2606699,-811023,0],[-2610283,-812047,0],[-2619499,-806415,0],[-2625643,-805903,0],[-2627179,-805391,0],[-2631275,-800783,0],[-2635883,-796687,0],[-2634347,-794639,0],[-2630251,-795151,0],[-2624107,-791567,0],[-2620523,-791055,0],[-2611307,-785423,0],[-2619499,-785423,0],[-2622059,-784399,0],[-2617451,-774159,0],[-2613355,-768527,0],[-2611307,-763919,0],[-2607211,-760335,0],[-2605163,-755215,0],[-2596971,-738319,0],[-2592363,-725007,0],[-2587243,-716303,0],[-2584171,-705039,0],[-2582123,-684047,0],[-2580075,-680975,0],[-2578027,-678927,0],[-2566251,-670223,0],[-2562667,-663567,0],[-2560107,-647695,0],[-2562667,-632335,0],[-2563179,-620047,0],[-2565227,-610831,0],[-2565227,-604687,0],[-2567787,-584719,0],[-2566763,-560655,0],[-2566251,-556559,0],[-2564715,-552463,0],[-2554987,-541199,0],[-2547819,-536079,0],[-2539115,-533007,0],[-2528875,-533519,0],[-2523755,-532495,0],[-2500203,-530959,0],[-2495083,-531983,0],[-2486891,-531471,0],[-2484331,-530959,0],[-2478187,-527887,0],[-2475627,-521743,0],[-2474603,-517647,0],[-2466411,-505359,0],[-2454123,-488975,0],[-2453099,-488463,0],[-2446443,-480783,0],[-2441835,-472079,0],[-2438763,-469519,0],[-2431595,-466447,0],[-2423915,-466959,0],[-2418283,-465423,0],[-2411115,-458255,0],[-2407531,-457231,0],[-2405483,-455695,0],[-2402923,-450063,0],[-2395755,-448015,0],[-2394219,-448015,0]]]},{"id":16,"color":[0.703288888888889,0.8799686274509805,0.6364862745098039,1],"coordinates":[[[-2377323,-327183,0],[-2373227,-329743,0],[-2370667,-333327,0],[-2366571,-331791,0],[-2362987,-333839,0],[-2359915,-337423,0],[-2353771,-338959,0],[-2351723,-347663,0],[-2348651,-353295,0],[-2352747,-361487,0],[-2353259,-367631,0],[-2351723,-372239,0],[-2346091,-378895,0],[-2342507,-376335,0],[-2341995,-373775,0],[-2335851,-372239,0],[-2331243,-364047,0],[-2324587,-365583,0],[-2324075,-363535,0],[-2324075,-356879,0],[-2321515,-353807,0],[-2319467,-353807,0],[-2315883,-355855,0],[-2313323,-352783,0],[-2311275,-353295,0],[-2309227,-352271,0],[-2307179,-349199,0],[-2304107,-350223,0],[-2292331,-348175,0],[-2287211,-348687,0],[-2284651,-352783,0],[-2282091,-361487,0],[-2284139,-365583,0],[-2284139,-374287,0],[-2281067,-374287,0],[-2275947,-376335,0],[-2272363,-375823,0],[-2265707,-377871,0],[-2263147,-376847,0],[-2255979,-379407,0],[-2249323,-371727,0],[-2247275,-366607,0],[-2245227,-366095,0],[-2240107,-368655,0],[-2239595,-368143,0],[-2233963,-365583,0],[-2230379,-359951,0],[-2227819,-357903,0],[-2221675,-356367,0],[-2216043,-353295,0],[-2211947,-353295,0],[-2210411,-352271,0],[-2204779,-354831,0],[-2198123,-351759,0],[-2194027,-348687,0],[-2185323,-348175,0],[-2182763,-346639,0],[-2179691,-346639,0],[-2170475,-343055,0],[-2163819,-344591,0],[-2154603,-343055,0],[-2148971,-346639,0],[-2146923,-349711,0],[-2142315,-350223,0],[-2139755,-353295,0],[-2130027,-354319,0],[-2126443,-359439,0],[-2125419,-367631,0],[-2123371,-370703,0],[-2123371,-373775,0],[-2122347,-374287,0],[-2120299,-372239,0],[-2118251,-371727,0],[-2110571,-372751,0],[-2108523,-373775,0],[-2105963,-378383,0],[-2100843,-380943,0],[-2096235,-386063,0],[-2093163,-385039,0],[-2087019,-386575,0],[-2082411,-384015,0],[-2079851,-384527,0],[-2075755,-380431,0],[-2072683,-374287,0],[-2070123,-373775,0],[-2067563,-375823,0],[-2062443,-378383,0],[-2056811,-379919,0],[-2054763,-381967,0],[-2052715,-382991,0],[-2047595,-382991,0],[-2044011,-386063,0],[-2040939,-387087,0],[-2037867,-387087,0],[-2032235,-385551,0],[-2027627,-384015,0],[-2023531,-380431,0],[-2021995,-380431,0],[-2017899,-381455,0],[-2014315,-380943,0],[-2014827,-386575,0],[-2020971,-392719,0],[-2023531,-397839,0],[-2023531,-399887,0],[-2021995,-401423,0],[-2021483,-406031,0],[-2023019,-410639,0],[-2028139,-417295,0],[-2028651,-419855,0],[-2027115,-422415,0],[-2032747,-432655,0],[-2032747,-442895,0],[-2030699,-444431,0],[-2027115,-443407,0],[-2023531,-439823,0],[-2016875,-435215,0],[-2005099,-436751,0],[-2001515,-435727,0],[-1999979,-435727,0],[-1993835,-441871,0],[-1991787,-442895,0],[-1987691,-443407,0],[-1985131,-444431,0],[-1982571,-448015,0],[-1981547,-454671,0],[-1975915,-475151,0],[-1977451,-481807,0],[-1978475,-481807,0],[-1981035,-478735,0],[-1983083,-478223,0],[-1990763,-478223,0],[-2002539,-481295,0],[-2002539,-483855,0],[-2001003,-487439,0],[-2002539,-492559,0],[-2003051,-502799,0],[-2006123,-513039,0],[-2008171,-516111,0],[-2009195,-523279,0],[-2011243,-527375,0],[-2007659,-531983,0],[-2010219,-534543,0],[-2013803,-536591,0],[-2014827,-538127,0],[-2021995,-541199,0],[-2021483,-543759,0],[-2018411,-547855,0],[-2015851,-548367,0],[-2012267,-547343,0],[-2011243,-547855,0],[-2008683,-553999,0],[-2009195,-556047,0],[-2008171,-558095,0],[-2010731,-561679,0],[-2010219,-563215,0],[-2002027,-565775,0],[-1998955,-569359,0],[-1995883,-571407,0],[-1995883,-573967,0],[-1996907,-573967,0],[-1997419,-576527,0],[-1994859,-582671,0],[-1994859,-584207,0],[-1994347,-586767,0],[-1995883,-591375,0],[-1995371,-597007,0],[-1993835,-601615,0],[-1993323,-608783,0],[-1997419,-612879,0],[-1998955,-613391,0],[-2004075,-621583,0],[-1999979,-629263,0],[-1996907,-630799,0],[-1995883,-633359,0],[-1995883,-642575,0],[-2001515,-648719,0],[-2005099,-654863,0],[-2006123,-658447,0],[-2005611,-662031,0],[-2008171,-663055,0],[-2010731,-666127,0],[-2014827,-669199,0],[-2022507,-672271,0],[-2033259,-674319,0],[-2034283,-675343,0],[-2032747,-677391,0],[-2033259,-681487,0],[-2030699,-684047,0],[-2028139,-684559,0],[-2027115,-686095,0],[-2029163,-689167,0],[-2028651,-690703,0],[-2028139,-691215,0],[-2025067,-690191,0],[-2024043,-691215,0],[-2029163,-703503,0],[-2027115,-706575,0],[-2028139,-709135,0],[-2028139,-710159,0],[-2025579,-714255,0],[-2021995,-713743,0],[-2018411,-717839,0],[-2017387,-717327,0],[-2013803,-712719,0],[-2011755,-712207,0],[-2010219,-713743,0],[-2009707,-715791,0],[-2010219,-718351,0],[-2011755,-720911,0],[-2011755,-721423,0],[-2008171,-723983,0],[-2003563,-725007,0],[-2001515,-729615,0],[-1999467,-729615,0],[-1998443,-728591,0],[-1998443,-724495,0],[-1996907,-724495,0],[-1995371,-726543,0],[-1997419,-730127,0],[-1996395,-730639,0],[-1993323,-729615,0],[-1992811,-726543,0],[-1990763,-725519,0],[-1983595,-723471,0],[-1981547,-713743,0],[-1977963,-713231,0],[-1975915,-711183,0],[-1963115,-715791,0],[-1962603,-717327,0],[-1963115,-718863,0],[-1961579,-719375,0],[-1959019,-719375,0],[-1959019,-715791,0],[-1953899,-714255,0],[-1953899,-718351,0],[-1951339,-723471,0],[-1949291,-721935,0],[-1947243,-721935,0],[-1944171,-723471,0],[-1945195,-726031,0],[-1947243,-728591,0],[-1948267,-730639,0],[-1947243,-732175,0],[-1944171,-734223,0],[-1939051,-735759,0],[-1938027,-737295,0],[-1938027,-740879,0],[-1943147,-747535,0],[-1943147,-750095,0],[-1941611,-751631,0],[-1941611,-753679,0],[-1938027,-756751,0],[-1934955,-756239,0],[-1930859,-758799,0],[-1927275,-759823,0],[-1925227,-758799,0],[-1923691,-757775,0],[-1920107,-760335,0],[-1919595,-762383,0],[-1917035,-765967,0],[-1913963,-775695,0],[-1912427,-775695,0],[-1909355,-777743,0],[-1900651,-776207,0],[-1898091,-776207,0],[-1895531,-777743,0],[-1890411,-775695,0],[-1886315,-776719,0],[-1885803,-780303,0],[-1887339,-781839,0],[-1886827,-783887,0],[-1877099,-790543,0],[-1879659,-792591,0],[-1880683,-799247,0],[-1879147,-802831,0],[-1881195,-807439,0],[-1880683,-811535,0],[-1878635,-815631,0],[-1857643,-820239,0],[-1853547,-823823,0],[-1852011,-833039,0],[-1855083,-829967,0],[-1862251,-828431,0],[-1873003,-829967,0],[-1876587,-828943,0],[-1880171,-829967,0],[-1884779,-832015,0],[-1890923,-832015,0],[-1896555,-834575,0],[-1906795,-846351,0],[-1912427,-851471,0],[-1916011,-852495,0],[-1921643,-856591,0],[-1924203,-857103,0],[-1933931,-857103,0],[-1936491,-854543,0],[-1940587,-853519,0],[-1950315,-843791,0],[-1953387,-842255,0],[-1957483,-841231,0],[-1961067,-843279,0],[-1968747,-844303,0],[-1976939,-847887,0],[-1986155,-855567,0],[-1994347,-865295,0],[-2006635,-877583,0],[-2017899,-881679,0],[-2024043,-882191,0],[-2028139,-884751,0],[-2032235,-889871,0],[-2034795,-891407,0],[-2044011,-893455,0],[-2055787,-888847,0],[-2057835,-888847,0],[-2060395,-885263,0],[-2063467,-884239,0],[-2066027,-883727,0],[-2069611,-884239,0],[-2070635,-883727,0],[-2072171,-879631,0],[-2076267,-878095,0],[-2075755,-870927,0],[-2078315,-867343,0],[-2073195,-863247,0],[-2070635,-863759,0],[-2069099,-862223,0],[-2069099,-860687,0],[-2070635,-860175,0],[-2071147,-859663,0],[-2075243,-862223,0],[-2079339,-861711,0],[-2085995,-863759,0],[-2084459,-870415,0],[-2102891,-872463,0],[-2105963,-868879,0],[-2100843,-856591,0],[-2101355,-853519,0],[-2100843,-852495,0],[-2093163,-854031,0],[-2089579,-851471,0],[-2085995,-847887,0],[-2087019,-841231,0],[-2096235,-842767,0],[-2098283,-841231,0],[-2101355,-837135,0],[-2108523,-836623,0],[-2109547,-833551,0],[-2111595,-834063,0],[-2119275,-829967,0],[-2124395,-834063,0],[-2127467,-834575,0],[-2131051,-839183,0],[-2136171,-841743,0],[-2138731,-840719,0],[-2140779,-838671,0],[-2144875,-837135,0],[-2148459,-836623,0],[-2151019,-837135,0],[-2156139,-843791,0],[-2160235,-846351,0],[-2162283,-849423,0],[-2167403,-848911,0],[-2169451,-846351,0],[-2169451,-839183,0],[-2169963,-836111,0],[-2173035,-836623,0],[-2174059,-838159,0],[-2179691,-839183,0],[-2184299,-841743,0],[-2189419,-839695,0],[-2193003,-835599,0],[-2194539,-835087,0],[-2204779,-834063,0],[-2210923,-834575,0],[-2212971,-832527,0],[-2215019,-833039,0],[-2217067,-826383,0],[-2216555,-822799,0],[-2217579,-821775,0],[-2216043,-815119,0],[-2219115,-810511,0],[-2221163,-809487,0],[-2220139,-805391,0],[-2225259,-801807,0],[-2232939,-802319,0],[-2234987,-800271,0],[-2234987,-790543,0],[-2230379,-780303,0],[-2227307,-777743,0],[-2228843,-773647,0],[-2226795,-771599,0],[-2226283,-766991,0],[-2227307,-765967,0],[-2224235,-760847,0],[-2224747,-759311,0],[-2226795,-758287,0],[-2234475,-756751,0],[-2236523,-755215,0],[-2234987,-751119,0],[-2237547,-749071,0],[-2236523,-748047,0],[-2236523,-743951,0],[-2235499,-741391,0],[-2232939,-738319,0],[-2231915,-735247,0],[-2226283,-728591,0],[-2224235,-724495,0],[-2222699,-718863,0],[-2223723,-713231,0],[-2225259,-708623,0],[-2228843,-704527,0],[-2231915,-703503,0],[-2241643,-702479,0],[-2247275,-699407,0],[-2250347,-695823,0],[-2253419,-689167,0],[-2253419,-683023,0],[-2259051,-670735,0],[-2264171,-655887,0],[-2271339,-648207,0],[-2273899,-648207,0],[-2283627,-651791,0],[-2287211,-652303,0],[-2296939,-657423,0],[-2313835,-661519,0],[-2322027,-662031,0],[-2331755,-659983,0],[-2339947,-659471,0],[-2349675,-653839,0],[-2350699,-652303,0],[-2349163,-650255,0],[-2349163,-648207,0],[-2351211,-643087,0],[-2346091,-644111,0],[-2343531,-641039,0],[-2343019,-635919,0],[-2344555,-632335,0],[-2347115,-628751,0],[-2348651,-628239,0],[-2350187,-624655,0],[-2351723,-624655,0],[-2351723,-621583,0],[-2355307,-623119,0],[-2357867,-621071,0],[-2362987,-621071,0],[-2364011,-619535,0],[-2366059,-619023,0],[-2360939,-616975,0],[-2361963,-614927,0],[-2361963,-611855,0],[-2362475,-610319,0],[-2364011,-609295,0],[-2372715,-593423,0],[-2375275,-591887,0],[-2379371,-591375,0],[-2381419,-594447,0],[-2384491,-595983,0],[-2388075,-600591,0],[-2388587,-602639,0],[-2390123,-603151,0],[-2392683,-602127,0],[-2393195,-599055,0],[-2395755,-595471,0],[-2394219,-587279,0],[-2396267,-583183,0],[-2391659,-576015,0],[-2392171,-573967,0],[-2389611,-573455,0],[-2389611,-564751,0],[-2387563,-560143,0],[-2388587,-558607,0],[-2395243,-555023,0],[-2393707,-551439,0],[-2394731,-546319,0],[-2393707,-544783,0],[-2388587,-542223,0],[-2383467,-543759,0],[-2379371,-541199,0],[-2374251,-540687,0],[-2371179,-537103,0],[-2370155,-530447,0],[-2366571,-521743,0],[-2368107,-512527,0],[-2363499,-508943,0],[-2362475,-505871,0],[-2364011,-500239,0],[-2375275,-482831,0],[-2376299,-476175,0],[-2379883,-473103,0],[-2379371,-466447,0],[-2377835,-462863,0],[-2377835,-460815,0],[-2379371,-454159,0],[-2391147,-453135,0],[-2394219,-448015,0],[-2395755,-448015,0],[-2402923,-450063,0],[-2405483,-455695,0],[-2407531,-457231,0],[-2411115,-458255,0],[-2418283,-465423,0],[-2423915,-466959,0],[-2431595,-466447,0],[-2438763,-469519,0],[-2441835,-472079,0],[-2446443,-480783,0],[-2453099,-488463,0],[-2459755,-473103,0],[-2462827,-471055,0],[-2470507,-461327,0],[-2478187,-454671,0],[-2479723,-451087,0],[-2486379,-442383,0],[-2487915,-442895,0],[-2489451,-442383,0],[-2492523,-437775,0],[-2493547,-435215,0],[-2493547,-428559,0],[-2490987,-424975,0],[-2489451,-420367,0],[-2492011,-416783,0],[-2497131,-415247,0],[-2498155,-414223,0],[-2495595,-412175,0],[-2493035,-411151,0],[-2490987,-409103,0],[-2488939,-409615,0],[-2487915,-410639,0],[-2487915,-418831,0],[-2486891,-419855,0],[-2485355,-418831,0],[-2484331,-407567,0],[-2481259,-403983,0],[-2484331,-398863,0],[-2486379,-397327,0],[-2485867,-392719,0],[-2483307,-391183,0],[-2476651,-392719,0],[-2473579,-396815,0],[-2469995,-399887,0],[-2467435,-397839,0],[-2463851,-399887,0],[-2465899,-403983,0],[-2471019,-408591,0],[-2471531,-411151,0],[-2470507,-413199,0],[-2462827,-414223,0],[-2459243,-412175,0],[-2452075,-413711,0],[-2449003,-408591,0],[-2450027,-403471,0],[-2448491,-394767,0],[-2446955,-392207,0],[-2444907,-391695,0],[-2443371,-389135,0],[-2443371,-378895,0],[-2440299,-374799,0],[-2436203,-373775,0],[-2433643,-371727,0],[-2433643,-363535,0],[-2432619,-357903,0],[-2431595,-356367,0],[-2423915,-349711,0],[-2415723,-346639,0],[-2411627,-346127,0],[-2403947,-340495,0],[-2401387,-339983,0],[-2398827,-339983,0],[-2393707,-343567,0],[-2390635,-339983,0],[-2393195,-335375,0],[-2392683,-332815,0],[-2391147,-330767,0],[-2387563,-329231,0],[-2377323,-327183,0]]]},{"id":17,"color":[0.701437908496732,0.8792156862745099,0.6368627450980392,1],"coordinates":[[[-2631275,-800783,0],[-2627179,-805391,0],[-2625643,-805903,0],[-2619499,-806415,0],[-2610283,-812047,0],[-2606699,-811023,0],[-2606187,-809487,0],[-2603115,-807439,0],[-2601579,-802831,0],[-2597483,-801295,0],[-2595947,-802831,0],[-2590827,-804879,0],[-2580587,-812559,0],[-2585195,-814095,0],[-2588779,-814095,0],[-2595435,-812559,0],[-2601579,-813071,0],[-2602091,-815119,0],[-2602091,-817679,0],[-2598507,-822287,0],[-2594923,-822287,0],[-2589291,-827919,0],[-2561131,-843791,0],[-2537579,-844815,0],[-2530411,-847375,0],[-2520171,-864783,0],[-2496619,-877071,0],[-2478699,-882191,0],[-2462827,-883727,0],[-2457707,-892431,0],[-2454123,-893455,0],[-2449003,-886799,0],[-2437227,-887823,0],[-2433131,-897551,0],[-2430059,-900623,0],[-2408043,-892431,0],[-2398827,-882191,0],[-2386027,-881167,0],[-2384491,-870415,0],[-2365035,-860175,0],[-2356331,-863247,0],[-2347115,-871439,0],[-2335851,-863759,0],[-2330219,-864271,0],[-2323051,-877071,0],[-2312299,-886287,0],[-2305131,-898063,0],[-2280555,-899599,0],[-2271851,-901647,0],[-2270315,-902671,0],[-2271339,-911887,0],[-2274923,-919055,0],[-2282091,-926735,0],[-2291307,-933903,0],[-2294891,-935439,0],[-2300011,-940559,0],[-2301547,-943631,0],[-2300523,-952847,0],[-2301035,-956431,0],[-2308203,-968719,0],[-2309739,-973839,0],[-2308203,-984591,0],[-2305131,-996367,0],[-2304619,-1014799,0],[-2305643,-1021967,0],[-2309739,-1037327,0],[-2312299,-1041935,0],[-2318443,-1043471,0],[-2321515,-1042959,0],[-2327659,-1043471,0],[-2341483,-1040399,0],[-2348139,-1037839,0],[-2368107,-1038351,0],[-2371691,-1037327,0],[-2375275,-1037327,0],[-2382955,-1032207,0],[-2389611,-1032719,0],[-2397291,-1036303,0],[-2399851,-1039375,0],[-2400875,-1041423,0],[-2381931,-1072143,0],[-2376811,-1077775,0],[-2366059,-1087503,0],[-2365547,-1091599,0],[-2366571,-1096719,0],[-2367595,-1099279,0],[-2373227,-1103887,0],[-2373227,-1108495,0],[-2371691,-1114639,0],[-2368107,-1120271,0],[-2363499,-1124879,0],[-2357355,-1128975,0],[-2344043,-1129487,0],[-2340459,-1131535,0],[-2339435,-1132559,0],[-2338923,-1135631,0],[-2339947,-1140751,0],[-2338923,-1144335,0],[-2338411,-1146895,0],[-2335851,-1148943,0],[-2330731,-1151503,0],[-2322539,-1154063,0],[-2311275,-1154575,0],[-2306155,-1157135,0],[-2303595,-1159695,0],[-2300011,-1165839,0],[-2291819,-1171471,0],[-2286187,-1171983,0],[-2271339,-1169423,0],[-2268779,-1168399,0],[-2253419,-1166863,0],[-2245227,-1168911,0],[-2242155,-1170447,0],[-2239083,-1173519,0],[-2237035,-1177103,0],[-2228331,-1186319,0],[-2216555,-1192463,0],[-2211435,-1196047,0],[-2209387,-1198607,0],[-2207339,-1209871,0],[-2208363,-1222159,0],[-2207339,-1243663,0],[-2208363,-1246223,0],[-2211435,-1250831,0],[-2213995,-1251855,0],[-2215531,-1251343,0],[-2217579,-1247247,0],[-2223211,-1244175,0],[-2224235,-1242639,0],[-2224235,-1235983,0],[-2227307,-1231887,0],[-2224235,-1226767,0],[-2223723,-1224719,0],[-2225771,-1224207,0],[-2230891,-1225743,0],[-2233963,-1225743,0],[-2234987,-1224719,0],[-2234475,-1222159,0],[-2229355,-1217039,0],[-2228843,-1216015,0],[-2225259,-1216527,0],[-2224235,-1216527,0],[-2223723,-1214991,0],[-2224235,-1212943,0],[-2228331,-1211919,0],[-2230891,-1208847,0],[-2230379,-1207311,0],[-2231915,-1204239,0],[-2235499,-1203215,0],[-2238571,-1204751,0],[-2239595,-1207823,0],[-2239595,-1212431,0],[-2237547,-1214991,0],[-2242155,-1218063,0],[-2245739,-1222159,0],[-2244203,-1225743,0],[-2240107,-1231375,0],[-2244715,-1235983,0],[-2253419,-1241103,0],[-2257003,-1244175,0],[-2259051,-1247759,0],[-2261099,-1253903,0],[-2258539,-1257999,0],[-2254955,-1257999,0],[-2249835,-1255951,0],[-2247275,-1252879,0],[-2242667,-1249807,0],[-2240619,-1249295,0],[-2239083,-1249807,0],[-2234475,-1253903,0],[-2240619,-1257999,0],[-2242667,-1261071,0],[-2243179,-1263119,0],[-2242667,-1266191,0],[-2240107,-1272847,0],[-2232939,-1271823,0],[-2229867,-1273871,0],[-2229867,-1275919,0],[-2230891,-1279503,0],[-2232427,-1281039,0],[-2235499,-1280015,0],[-2237547,-1280527,0],[-2243691,-1285647,0],[-2244203,-1286671,0],[-2243691,-1299983,0],[-2240619,-1304079,0],[-2237547,-1309199,0],[-2233451,-1312271,0],[-2233451,-1313295,0],[-2235499,-1314319,0],[-2236523,-1317903,0],[-2238571,-1318415,0],[-2244203,-1318927,0],[-2246251,-1319951,0],[-2246763,-1321487,0],[-2248299,-1330703,0],[-2248299,-1333263,0],[-2246251,-1336847,0],[-2242155,-1341455,0],[-2237547,-1343503,0],[-2237547,-1351183,0],[-2235499,-1356815,0],[-2240619,-1362959,0],[-2241131,-1375247,0],[-2242667,-1378319,0],[-2245227,-1385999,0],[-2254443,-1395727,0],[-2261611,-1405455,0],[-2273899,-1419279,0],[-2278507,-1427471,0],[-2284139,-1433103,0],[-2286699,-1435151,0],[-2289771,-1434639,0],[-2291819,-1432079,0],[-2294891,-1431567,0],[-2306155,-1425423,0],[-2312811,-1424399,0],[-2325099,-1433615,0],[-2340971,-1444367,0],[-2359403,-1452047,0],[-2370155,-1459727,0],[-2380907,-1464847,0],[-2388075,-1464847,0],[-2391659,-1465871,0],[-2397291,-1465359,0],[-2408043,-1466383,0],[-2420843,-1469455,0],[-2423915,-1469455,0],[-2432619,-1472527,0],[-2436715,-1472527,0],[-2439787,-1473551,0],[-2444907,-1480719,0],[-2448491,-1484815,0],[-2453611,-1487887,0],[-2460779,-1487887,0],[-2465387,-1489423,0],[-2469483,-1488911,0],[-2467947,-1479183,0],[-2468971,-1473551,0],[-2467435,-1456143,0],[-2475627,-1429519,0],[-2475627,-1426447,0],[-2472043,-1420815,0],[-2460267,-1412623,0],[-2457707,-1406991,0],[-2456171,-1402383,0],[-2458731,-1397263,0],[-2463851,-1391119,0],[-2473067,-1378319,0],[-2480747,-1368591,0],[-2483307,-1367567,0],[-2490987,-1367055,0],[-2495083,-1366031,0],[-2501739,-1361935,0],[-2505835,-1355279,0],[-2515051,-1334799,0],[-2523243,-1321999,0],[-2527339,-1312271,0],[-2533483,-1302543,0],[-2541675,-1286671,0],[-2544235,-1282575,0],[-2549355,-1277967,0],[-2559595,-1270287,0],[-2564715,-1268751,0],[-2570347,-1264143,0],[-2574955,-1261583,0],[-2580587,-1255951,0],[-2589291,-1250319,0],[-2601067,-1244687,0],[-2609771,-1239055,0],[-2611819,-1235983,0],[-2617963,-1233935,0],[-2622571,-1234447,0],[-2630251,-1235983,0],[-2634347,-1234959,0],[-2637419,-1232399,0],[-2641515,-1224207,0],[-2644075,-1216015,0],[-2645611,-1213967,0],[-2647659,-1212431,0],[-2652267,-1210895,0],[-2655339,-1208847,0],[-2664043,-1199631,0],[-2659947,-1175055,0],[-2663019,-1167887,0],[-2663019,-1161743,0],[-2663531,-1160207,0],[-2666091,-1160719,0],[-2668651,-1154063,0],[-2671723,-1153039,0],[-2672747,-1150991,0],[-2665579,-1142799,0],[-2660459,-1139727,0],[-2658411,-1136655,0],[-2656875,-1130511,0],[-2657899,-1125391,0],[-2656363,-1120783,0],[-2657387,-1118223,0],[-2661995,-1114127,0],[-2660971,-1111055,0],[-2658411,-1107983,0],[-2650219,-1101327,0],[-2642539,-1097231,0],[-2635883,-1095695,0],[-2631275,-1091599,0],[-2625131,-1089039,0],[-2625131,-1084943,0],[-2627179,-1083919,0],[-2628203,-1080335,0],[-2630251,-1079311,0],[-2630251,-1077263,0],[-2632811,-1076751,0],[-2633323,-1070095,0],[-2636395,-1067535,0],[-2633835,-1062415,0],[-2635883,-1060879,0],[-2639979,-1059343,0],[-2641003,-1057807,0],[-2641003,-1056783,0],[-2639467,-1056783,0],[-2637931,-1050127,0],[-2636395,-1048591,0],[-2633835,-1048591,0],[-2630251,-1045519,0],[-2626667,-1038863,0],[-2628715,-1034255,0],[-2629227,-1031695,0],[-2631275,-1029647,0],[-2635883,-1017871,0],[-2639979,-1010191,0],[-2644075,-1005583,0],[-2647147,-1004047,0],[-2653291,-1005583,0],[-2654315,-1004047,0],[-2655339,-999439,0],[-2657387,-996879,0],[-2659947,-990223,0],[-2660459,-978959,0],[-2670699,-970767,0],[-2673259,-973839,0],[-2674795,-973839,0],[-2677355,-968719,0],[-2683499,-965135,0],[-2685547,-962575,0],[-2689131,-959503,0],[-2715243,-961039,0],[-2716267,-958479,0],[-2716267,-955919,0],[-2712171,-944655,0],[-2709099,-940047,0],[-2710123,-936975,0],[-2709611,-933903,0],[-2710123,-931343,0],[-2709611,-926735,0],[-2709611,-921103,0],[-2711147,-918543,0],[-2710635,-914447,0],[-2712683,-907791,0],[-2712171,-905743,0],[-2712683,-899599,0],[-2704491,-890895,0],[-2700907,-894991,0],[-2700395,-893455,0],[-2700907,-886287,0],[-2699883,-884239,0],[-2697323,-881679,0],[-2696811,-878607,0],[-2697323,-868879,0],[-2697323,-863247,0],[-2696299,-862223,0],[-2695275,-862223,0],[-2692715,-864271,0],[-2689131,-863247,0],[-2679915,-866831,0],[-2678379,-868367,0],[-2670187,-865295,0],[-2666603,-863247,0],[-2664555,-856591,0],[-2663531,-855055,0],[-2656875,-850959,0],[-2646635,-839183,0],[-2642027,-832015,0],[-2640491,-826383,0],[-2639467,-823823,0],[-2638955,-817167,0],[-2636395,-813583,0],[-2633835,-805391,0],[-2631275,-800783,0]]]},{"id":18,"color":[0.3787921568627451,0.7371294117647058,0.6568470588235295,1],"coordinates":[[[-1862251,-828431,0],[-1855083,-829967,0],[-1852011,-833039,0],[-1850475,-833551,0],[-1849963,-835599,0],[-1845867,-852495,0],[-1845355,-861711,0],[-1845867,-867343,0],[-1843819,-878607,0],[-1843819,-901135,0],[-1842795,-905231,0],[-1840747,-908303,0],[-1830507,-917007,0],[-1827435,-917519,0],[-1824875,-925199,0],[-1822827,-943631,0],[-1820779,-946703,0],[-1820267,-950287,0],[-1818219,-983055,0],[-1816171,-989711,0],[-1815659,-996367,0],[-1809003,-1005583,0],[-1804907,-1015311,0],[-1804395,-1019407,0],[-1804907,-1029135,0],[-1803371,-1037839,0],[-1803883,-1041935,0],[-1802347,-1045007,0],[-1800299,-1047055,0],[-1797227,-1054223,0],[-1796715,-1057807,0],[-1799787,-1074191,0],[-1803371,-1080335,0],[-1807467,-1085967,0],[-1810027,-1091599,0],[-1818731,-1103375,0],[-1819243,-1106447,0],[-1822315,-1110543,0],[-1822827,-1115663,0],[-1827435,-1120783,0],[-1831531,-1129999,0],[-1835627,-1135119,0],[-1835627,-1141263,0],[-1837163,-1149455,0],[-1837163,-1159183,0],[-1835627,-1167375,0],[-1826923,-1175567,0],[-1823339,-1180687,0],[-1819755,-1182735,0],[-1818219,-1183247,0],[-1815659,-1185807,0],[-1816683,-1186831,0],[-1819243,-1185295,0],[-1821291,-1185295,0],[-1824875,-1187343,0],[-1826411,-1189391,0],[-1828971,-1187343,0],[-1829995,-1187343,0],[-1835627,-1190415,0],[-1836139,-1191951,0],[-1835627,-1196047,0],[-1834603,-1197071,0],[-1834603,-1198607,0],[-1832043,-1199119,0],[-1831019,-1200143,0],[-1831019,-1200655,0],[-1842283,-1200143,0],[-1844843,-1197583,0],[-1846379,-1197071,0],[-1846379,-1202191,0],[-1844843,-1204751,0],[-1844331,-1209359,0],[-1843819,-1210383,0],[-1839211,-1210895,0],[-1839723,-1214479,0],[-1841771,-1216527,0],[-1841771,-1218575,0],[-1843819,-1223695,0],[-1847403,-1226255,0],[-1846891,-1230863,0],[-1848939,-1237519,0],[-1850475,-1240591,0],[-1853035,-1242639,0],[-1857131,-1244175,0],[-1861227,-1243663,0],[-1870443,-1244175,0],[-1876587,-1242127,0],[-1885803,-1245199,0],[-1897067,-1251343,0],[-1905259,-1260559,0],[-1906795,-1255439,0],[-1912427,-1251343,0],[-1916523,-1244175,0],[-1919595,-1241615,0],[-1925227,-1231887,0],[-1929323,-1227791,0],[-1933419,-1225743,0],[-1942123,-1218575,0],[-1952363,-1212943,0],[-1958507,-1210895,0],[-1962091,-1208335,0],[-1969771,-1205263,0],[-1975915,-1201167,0],[-1989739,-1195535,0],[-2000491,-1192463,0],[-2005611,-1192975,0],[-2009707,-1193999,0],[-2017899,-1200143,0],[-2025067,-1203215,0],[-2031723,-1207823,0],[-2041963,-1210895,0],[-2050155,-1210895,0],[-2065003,-1213967,0],[-2069099,-1216015,0],[-2072683,-1218575,0],[-2075243,-1224207,0],[-2089579,-1242639,0],[-2113131,-1252367,0],[-2121835,-1256975,0],[-2123883,-1259535,0],[-2133611,-1266191,0],[-2149483,-1274895,0],[-2143851,-1277455,0],[-2141291,-1281039,0],[-2140267,-1284623,0],[-2148971,-1285135,0],[-2153579,-1282575,0],[-2157163,-1284111,0],[-2159723,-1281039,0],[-2169451,-1282575,0],[-2175595,-1282063,0],[-2181227,-1283599,0],[-2183787,-1279503,0],[-2185323,-1273359,0],[-2191467,-1265679,0],[-2193515,-1256463,0],[-2190443,-1248783,0],[-2204779,-1245199,0],[-2208363,-1246223,0],[-2207339,-1243663,0],[-2208363,-1222159,0],[-2207339,-1209871,0],[-2208363,-1202703,0],[-2209387,-1198607,0],[-2211435,-1196047,0],[-2216555,-1192463,0],[-2228331,-1186319,0],[-2237035,-1177103,0],[-2239083,-1173519,0],[-2242155,-1170447,0],[-2245227,-1168911,0],[-2253419,-1166863,0],[-2268779,-1168399,0],[-2271339,-1169423,0],[-2286187,-1171983,0],[-2291819,-1171471,0],[-2300011,-1165839,0],[-2303595,-1159695,0],[-2306155,-1157135,0],[-2311275,-1154575,0],[-2322539,-1154063,0],[-2333291,-1150479,0],[-2338411,-1146895,0],[-2339947,-1140751,0],[-2338923,-1135631,0],[-2339435,-1132559,0],[-2340459,-1131535,0],[-2344043,-1129487,0],[-2357355,-1128975,0],[-2363499,-1124879,0],[-2368107,-1120271,0],[-2371691,-1114639,0],[-2373227,-1108495,0],[-2373227,-1103887,0],[-2367595,-1099279,0],[-2366571,-1096719,0],[-2365547,-1091599,0],[-2366059,-1087503,0],[-2376811,-1077775,0],[-2381931,-1072143,0],[-2399339,-1043471,0],[-2400875,-1041423,0],[-2399851,-1039375,0],[-2397291,-1036303,0],[-2389611,-1032719,0],[-2382955,-1032207,0],[-2375275,-1037327,0],[-2371691,-1037327,0],[-2368107,-1038351,0],[-2348139,-1037839,0],[-2341483,-1040399,0],[-2327659,-1043471,0],[-2321515,-1042959,0],[-2318443,-1043471,0],[-2312299,-1041935,0],[-2309739,-1037327,0],[-2305643,-1021967,0],[-2304619,-1014799,0],[-2305131,-996367,0],[-2308203,-984591,0],[-2309739,-973839,0],[-2308203,-968719,0],[-2301035,-956431,0],[-2300523,-952847,0],[-2301547,-943631,0],[-2300011,-940559,0],[-2294891,-935439,0],[-2291307,-933903,0],[-2282091,-926735,0],[-2274923,-919055,0],[-2271339,-911887,0],[-2270315,-902671,0],[-2263147,-899087,0],[-2260587,-890895,0],[-2258539,-886799,0],[-2255979,-884751,0],[-2252907,-884239,0],[-2250859,-885263,0],[-2243691,-885775,0],[-2240107,-883727,0],[-2228331,-871951,0],[-2221675,-859663,0],[-2218091,-857103,0],[-2213995,-849423,0],[-2211947,-839695,0],[-2216043,-833551,0],[-2212971,-832527,0],[-2210923,-834575,0],[-2204779,-834063,0],[-2194539,-835087,0],[-2193003,-835599,0],[-2189419,-839695,0],[-2184299,-841743,0],[-2179691,-839183,0],[-2174059,-838159,0],[-2173035,-836623,0],[-2169963,-836111,0],[-2169451,-839183,0],[-2169451,-846351,0],[-2167403,-848911,0],[-2162283,-849423,0],[-2160235,-846351,0],[-2156139,-843791,0],[-2151019,-837135,0],[-2148459,-836623,0],[-2144875,-837135,0],[-2140779,-838671,0],[-2138731,-840719,0],[-2136171,-841743,0],[-2131051,-839183,0],[-2127467,-834575,0],[-2124395,-834063,0],[-2119275,-829967,0],[-2111595,-834063,0],[-2109547,-833551,0],[-2108523,-836623,0],[-2101355,-837135,0],[-2098283,-841231,0],[-2096235,-842767,0],[-2087019,-841231,0],[-2085995,-847887,0],[-2089579,-851471,0],[-2093163,-854031,0],[-2100843,-852495,0],[-2101355,-853519,0],[-2100843,-856591,0],[-2105963,-868879,0],[-2102891,-872463,0],[-2084459,-870415,0],[-2085995,-863759,0],[-2079339,-861711,0],[-2075243,-862223,0],[-2071147,-859663,0],[-2070635,-860175,0],[-2069099,-860687,0],[-2069099,-862223,0],[-2070635,-863759,0],[-2073195,-863247,0],[-2078315,-867343,0],[-2075755,-870927,0],[-2076267,-878095,0],[-2072171,-879631,0],[-2070635,-883727,0],[-2069611,-884239,0],[-2066027,-883727,0],[-2063467,-884239,0],[-2060395,-885263,0],[-2057835,-888847,0],[-2055787,-888847,0],[-2044011,-893455,0],[-2034795,-891407,0],[-2032235,-889871,0],[-2028139,-884751,0],[-2024043,-882191,0],[-2017899,-881679,0],[-2006635,-877583,0],[-1994347,-865295,0],[-1986155,-855567,0],[-1976939,-847887,0],[-1968747,-844303,0],[-1961067,-843279,0],[-1957483,-841231,0],[-1953387,-842255,0],[-1950315,-843791,0],[-1940587,-853519,0],[-1936491,-854543,0],[-1933931,-857103,0],[-1924203,-857103,0],[-1921643,-856591,0],[-1916011,-852495,0],[-1912427,-851471,0],[-1906795,-846351,0],[-1896555,-834575,0],[-1890923,-832015,0],[-1884779,-832015,0],[-1880171,-829967,0],[-1876587,-828943,0],[-1873003,-829967,0],[-1862251,-828431,0]]]},{"id":18,"color":[0.3787921568627451,0.7371294117647058,0.6568470588235295,1],"coordinates":[[[-2236523,-1203727,0],[-2231915,-1204239,0],[-2230379,-1207311,0],[-2230891,-1208847,0],[-2228331,-1211919,0],[-2224235,-1212943,0],[-2224235,-1216527,0],[-2228843,-1216015,0],[-2229355,-1217039,0],[-2234475,-1222159,0],[-2234987,-1223695,0],[-2234987,-1224719,0],[-2232939,-1225743,0],[-2225771,-1224207,0],[-2223723,-1224719,0],[-2224235,-1226767,0],[-2227307,-1231887,0],[-2224235,-1235983,0],[-2223723,-1243151,0],[-2228843,-1244175,0],[-2233451,-1242639,0],[-2238059,-1246223,0],[-2243691,-1241103,0],[-2237547,-1233935,0],[-2244203,-1225743,0],[-2245739,-1222159,0],[-2242155,-1218063,0],[-2237547,-1214991,0],[-2239595,-1212431,0],[-2239595,-1207823,0],[-2238571,-1204751,0],[-2236523,-1203727,0]]]},{"id":19,"color":[0.7045228758169934,0.8804705882352941,0.6362352941176471,1],"coordinates":[[[-1786987,-257551,0],[-1783915,-258063,0],[-1781355,-259087,0],[-1772651,-267791,0],[-1767019,-281615,0],[-1767019,-286223,0],[-1764971,-290831,0],[-1761387,-313871,0],[-1759339,-320015,0],[-1756779,-333327,0],[-1754731,-338959,0],[-1747563,-351759,0],[-1749611,-358927,0],[-1752171,-360463,0],[-1754219,-365583,0],[-1758827,-371727,0],[-1758315,-373775,0],[-1760363,-373263,0],[-1761899,-377871,0],[-1765483,-384527,0],[-1765483,-387599,0],[-1768043,-387087,0],[-1770091,-387599,0],[-1771627,-386063,0],[-1776235,-388111,0],[-1795179,-388623,0],[-1799275,-387599,0],[-1809515,-392207,0],[-1808491,-409103,0],[-1805931,-416271,0],[-1805419,-425487,0],[-1806955,-435727,0],[-1816683,-448015,0],[-1826411,-455183,0],[-1831019,-461839,0],[-1832043,-464911,0],[-1831531,-473103,0],[-1825899,-491535,0],[-1825899,-500751,0],[-1828971,-509967,0],[-1837675,-524303,0],[-1840747,-527375,0],[-1844331,-529423,0],[-1849963,-538127,0],[-1853035,-545295,0],[-1859179,-549903,0],[-1860715,-553487,0],[-1866859,-559631,0],[-1868907,-562703,0],[-1874539,-564751,0],[-1877611,-569359,0],[-1876587,-571919,0],[-1874027,-574479,0],[-1871979,-581135,0],[-1870955,-582159,0],[-1871467,-596495,0],[-1870443,-599055,0],[-1866347,-605711,0],[-1864299,-606223,0],[-1852523,-605711,0],[-1842795,-602127,0],[-1843819,-601103,0],[-1845867,-600591,0],[-1846891,-598031,0],[-1843819,-598543,0],[-1839723,-595983,0],[-1839211,-593423,0],[-1842283,-593423,0],[-1842795,-592399,0],[-1839723,-590863,0],[-1838187,-590863,0],[-1835115,-597007,0],[-1833579,-597519,0],[-1829995,-597519,0],[-1829483,-598031,0],[-1828971,-604175,0],[-1827947,-606223,0],[-1822315,-611343,0],[-1818731,-616975,0],[-1815659,-624655,0],[-1815147,-631823,0],[-1817195,-634895,0],[-1829483,-643087,0],[-1834091,-648207,0],[-1836139,-659471,0],[-1839723,-668687,0],[-1840235,-672271,0],[-1839211,-675343,0],[-1836651,-677903,0],[-1831019,-681487,0],[-1825899,-683535,0],[-1821291,-692239,0],[-1819755,-703503,0],[-1821291,-719887,0],[-1820779,-727055,0],[-1822827,-736271,0],[-1825387,-741903,0],[-1823851,-749071,0],[-1812075,-755215,0],[-1801323,-755215,0],[-1792107,-756239,0],[-1784939,-760335,0],[-1781355,-763919,0],[-1779307,-767503,0],[-1779307,-770063,0],[-1773675,-779791,0],[-1764459,-799247,0],[-1754731,-817167,0],[-1750123,-836623,0],[-1751659,-837647,0],[-1750635,-840719,0],[-1751147,-846863,0],[-1750123,-853519,0],[-1751659,-854543,0],[-1752171,-857103,0],[-1754731,-860175,0],[-1754219,-861711,0],[-1750635,-863759,0],[-1750635,-866831,0],[-1755755,-867343,0],[-1766507,-871439,0],[-1767531,-878607,0],[-1763947,-896527,0],[-1764971,-900623,0],[-1769067,-909839,0],[-1770091,-911375,0],[-1773163,-911887,0],[-1774699,-913935,0],[-1778795,-919567,0],[-1780331,-923151,0],[-1780843,-923151,0],[-1782891,-921103,0],[-1785451,-920591,0],[-1789035,-920591,0],[-1794667,-918543,0],[-1795691,-919055,0],[-1797739,-922639,0],[-1799787,-923151,0],[-1801323,-922127,0],[-1801323,-921103,0],[-1803371,-919567,0],[-1804395,-913935,0],[-1805931,-911887,0],[-1806955,-910863,0],[-1807467,-911887,0],[-1808491,-911887,0],[-1809003,-909327,0],[-1815147,-907791,0],[-1820779,-912399,0],[-1827435,-917519,0],[-1830507,-917007,0],[-1840747,-908303,0],[-1842795,-905231,0],[-1843819,-901135,0],[-1843819,-878607,0],[-1845867,-867343,0],[-1845355,-861711,0],[-1845867,-852495,0],[-1849963,-835599,0],[-1850475,-833551,0],[-1852011,-833039,0],[-1853547,-823823,0],[-1857643,-820239,0],[-1878635,-815631,0],[-1880683,-811535,0],[-1881195,-807439,0],[-1879147,-802831,0],[-1880683,-799247,0],[-1879659,-792591,0],[-1877099,-790543,0],[-1886827,-783887,0],[-1887339,-781839,0],[-1885803,-780303,0],[-1886315,-776719,0],[-1890411,-775695,0],[-1895531,-777743,0],[-1898091,-776207,0],[-1900651,-776207,0],[-1909355,-777743,0],[-1912427,-775695,0],[-1913963,-775695,0],[-1917035,-765967,0],[-1919595,-762383,0],[-1920107,-760335,0],[-1923691,-757775,0],[-1925227,-758799,0],[-1928811,-759311,0],[-1934955,-756239,0],[-1938027,-756751,0],[-1939563,-755215,0],[-1941611,-753679,0],[-1941611,-751631,0],[-1943147,-750607,0],[-1943659,-749071,0],[-1942635,-745999,0],[-1938027,-740879,0],[-1938027,-737295,0],[-1939051,-735759,0],[-1944171,-734223,0],[-1947243,-732175,0],[-1948267,-730639,0],[-1947243,-728591,0],[-1945195,-726031,0],[-1944171,-723471,0],[-1947243,-721935,0],[-1949291,-721935,0],[-1951339,-723471,0],[-1953899,-718351,0],[-1953899,-714255,0],[-1959019,-715791,0],[-1959019,-719375,0],[-1961579,-719375,0],[-1963115,-718863,0],[-1962603,-717327,0],[-1963115,-715791,0],[-1975915,-711183,0],[-1977963,-713231,0],[-1981547,-713743,0],[-1983595,-723471,0],[-1990763,-725519,0],[-1992811,-726543,0],[-1993323,-729615,0],[-1996395,-730639,0],[-1997419,-730127,0],[-1995371,-726543,0],[-1996907,-724495,0],[-1998443,-724495,0],[-1998443,-728591,0],[-1999467,-729615,0],[-2001515,-729615,0],[-2003563,-725007,0],[-2008171,-723983,0],[-2011755,-721423,0],[-2011755,-720911,0],[-2010219,-718351,0],[-2009707,-715791,0],[-2010219,-713743,0],[-2011755,-712207,0],[-2013803,-712719,0],[-2017387,-717327,0],[-2018923,-716815,0],[-2021995,-713743,0],[-2025579,-714255,0],[-2028139,-710159,0],[-2028139,-709135,0],[-2027115,-706575,0],[-2029163,-703503,0],[-2024043,-691215,0],[-2025067,-690191,0],[-2028139,-691215,0],[-2028651,-690703,0],[-2029163,-689167,0],[-2027115,-686095,0],[-2028139,-684559,0],[-2030699,-684047,0],[-2033259,-681487,0],[-2032747,-677391,0],[-2034283,-675343,0],[-2033259,-674319,0],[-2022507,-672271,0],[-2014827,-669199,0],[-2010731,-666127,0],[-2008171,-663055,0],[-2005611,-662031,0],[-2006123,-658447,0],[-2005099,-654863,0],[-2001515,-648719,0],[-1995883,-642575,0],[-1995883,-633359,0],[-1996907,-630799,0],[-1999979,-629263,0],[-2004075,-621583,0],[-1998955,-613391,0],[-1997419,-612879,0],[-1993323,-608783,0],[-1993835,-601615,0],[-1995371,-597007,0],[-1995883,-591375,0],[-1994347,-586767,0],[-1994859,-584207,0],[-1994859,-582671,0],[-1997419,-576527,0],[-1996907,-573967,0],[-1995883,-573967,0],[-1995883,-571407,0],[-1998955,-569359,0],[-2002027,-565775,0],[-2010219,-563215,0],[-2010731,-561679,0],[-2008171,-558095,0],[-2009195,-556047,0],[-2008683,-553999,0],[-2011755,-547343,0],[-2017899,-548367,0],[-2021483,-543759,0],[-2021995,-541711,0],[-2021483,-540687,0],[-2014827,-538127,0],[-2013803,-536591,0],[-2010219,-534543,0],[-2007659,-531983,0],[-2011243,-527375,0],[-2009195,-523279,0],[-2008171,-516111,0],[-2006123,-513039,0],[-2003051,-502799,0],[-2002539,-492559,0],[-2001003,-487439,0],[-2002539,-483855,0],[-2002539,-481295,0],[-1990763,-478223,0],[-1983083,-478223,0],[-1981035,-478735,0],[-1978475,-481807,0],[-1977451,-481807,0],[-1975915,-475151,0],[-1981547,-454671,0],[-1982571,-448015,0],[-1985131,-444431,0],[-1987691,-443407,0],[-1991787,-442895,0],[-1999979,-435727,0],[-2001515,-435727,0],[-2005099,-436751,0],[-2016875,-435215,0],[-2023531,-439823,0],[-2027115,-443407,0],[-2030699,-444431,0],[-2032747,-442895,0],[-2033259,-433679,0],[-2027115,-422415,0],[-2028651,-419855,0],[-2028139,-417295,0],[-2023019,-410639,0],[-2021483,-406031,0],[-2021995,-401423,0],[-2023531,-399887,0],[-2023531,-397839,0],[-2022507,-394767,0],[-2014827,-386575,0],[-2014315,-380943,0],[-2012267,-380431,0],[-2007659,-374287,0],[-1999467,-366607,0],[-1998955,-361487,0],[-2000491,-360463,0],[-2001515,-352271,0],[-2001515,-349199,0],[-1997931,-347663,0],[-1994859,-349199,0],[-1992811,-349199,0],[-1988715,-344591,0],[-1988203,-343055,0],[-1985131,-341007,0],[-1984619,-333839,0],[-1982571,-329231,0],[-1982571,-324623,0],[-1976939,-314383,0],[-1977451,-312335,0],[-1979499,-308751,0],[-1977451,-304655,0],[-1981547,-301071,0],[-1981547,-298511,0],[-1979499,-296463,0],[-1978475,-292879,0],[-1974891,-289807,0],[-1972843,-283151,0],[-1968747,-281103,0],[-1959531,-279055,0],[-1956971,-279567,0],[-1952363,-278543,0],[-1948267,-280591,0],[-1942123,-279055,0],[-1942635,-285711,0],[-1941099,-289295,0],[-1940587,-289807,0],[-1938027,-290319,0],[-1936491,-291855,0],[-1937515,-304143,0],[-1931883,-308751,0],[-1928811,-321039,0],[-1926763,-325135,0],[-1927787,-329743,0],[-1939563,-359439,0],[-1939563,-366095,0],[-1933931,-383503,0],[-1932907,-387599,0],[-1926251,-394767,0],[-1912939,-395791,0],[-1906283,-394767,0],[-1883243,-387599,0],[-1873515,-382479,0],[-1845355,-364559,0],[-1843307,-361487,0],[-1835627,-353807,0],[-1831531,-347151,0],[-1828971,-336911,0],[-1829483,-324111,0],[-1827435,-321551,0],[-1826411,-318991,0],[-1821291,-318991,0],[-1818219,-314895,0],[-1815659,-308239,0],[-1815659,-295439,0],[-1817195,-289807,0],[-1817707,-282639,0],[-1817195,-272399,0],[-1816683,-269839,0],[-1815147,-268815,0],[-1813611,-271887,0],[-1809515,-273423,0],[-1801323,-270863,0],[-1791595,-260623,0],[-1786987,-257551,0]]]},{"id":20,"color":[0.4,0.7607843137254902,0.6470588235294118,1],"coordinates":[[[-1598059,-213519,0],[-1596011,-216079,0],[-1590379,-215055,0],[-1587819,-217103,0],[-1583723,-221711,0],[-1579115,-220175,0],[-1576555,-220687,0],[-1568363,-219151,0],[-1564779,-219663,0],[-1563755,-224783,0],[-1561707,-227343,0],[-1560683,-228367,0],[-1557099,-227343,0],[-1551979,-231951,0],[-1547883,-236559,0],[-1542251,-232975,0],[-1540203,-235023,0],[-1538155,-236047,0],[-1537131,-230927,0],[-1537643,-228879,0],[-1536619,-220687,0],[-1533547,-219663,0],[-1530987,-220175,0],[-1528427,-221711,0],[-1523819,-221711,0],[-1521771,-222735,0],[-1516651,-221199,0],[-1514603,-221199,0],[-1511531,-219663,0],[-1506923,-221711,0],[-1504875,-223759,0],[-1504363,-227343,0],[-1496683,-228367,0],[-1495147,-229903,0],[-1493611,-233487,0],[-1490027,-236559,0],[-1490027,-639503,0],[-1491563,-636431,0],[-1494123,-635919,0],[-1496171,-633871,0],[-1504875,-623631,0],[-1506923,-623631,0],[-1513579,-625679,0],[-1516139,-625167,0],[-1520235,-622607,0],[-1519211,-620047,0],[-1517163,-617487,0],[-1517675,-615951,0],[-1520235,-613903,0],[-1521259,-611343,0],[-1525867,-611343,0],[-1530987,-607759,0],[-1534059,-605199,0],[-1535595,-602639,0],[-1540203,-597007,0],[-1543275,-596495,0],[-1544299,-597519,0],[-1545835,-601103,0],[-1545323,-604687,0],[-1545835,-608271,0],[-1543787,-610831,0],[-1545835,-613391,0],[-1546859,-617999,0],[-1546859,-622607,0],[-1551979,-627215,0],[-1556587,-634383,0],[-1557611,-642063,0],[-1563243,-639503,0],[-1569387,-638991,0],[-1574507,-634895,0],[-1574507,-639503,0],[-1577579,-646671,0],[-1580139,-648207,0],[-1581163,-650255,0],[-1582699,-657423,0],[-1583211,-668687,0],[-1582699,-684559,0],[-1584747,-723983,0],[-1584747,-739855,0],[-1587819,-761871,0],[-1587819,-765967,0],[-1589355,-771599,0],[-1590891,-773647,0],[-1594987,-775695,0],[-1601131,-772623,0],[-1622123,-763407,0],[-1635947,-758799,0],[-1641067,-758287,0],[-1651307,-754703,0],[-1655403,-755215,0],[-1667179,-754703,0],[-1674347,-754191,0],[-1677931,-752655,0],[-1680491,-753679,0],[-1678443,-757775,0],[-1673835,-758799,0],[-1670763,-762383,0],[-1667691,-760847,0],[-1665643,-761871,0],[-1665131,-766479,0],[-1663595,-769551,0],[-1661035,-771599,0],[-1657451,-777231,0],[-1662059,-781839,0],[-1664107,-780815,0],[-1669227,-783887,0],[-1671275,-786447,0],[-1674859,-786959,0],[-1684075,-790543,0],[-1685611,-790543,0],[-1687147,-789007,0],[-1692267,-789519,0],[-1697899,-789007,0],[-1699947,-790543,0],[-1703019,-790543,0],[-1704555,-792079,0],[-1701995,-797711,0],[-1702507,-800271,0],[-1699435,-805391,0],[-1698923,-809999,0],[-1700971,-814095,0],[-1714283,-827919,0],[-1718891,-838671,0],[-1720427,-847887,0],[-1722987,-852495,0],[-1724523,-850959,0],[-1726571,-851471,0],[-1728107,-853007,0],[-1734763,-857103,0],[-1736299,-862735,0],[-1739883,-863759,0],[-1744491,-862735,0],[-1748075,-859151,0],[-1751147,-846863,0],[-1750635,-840719,0],[-1751659,-837647,0],[-1750123,-836623,0],[-1754731,-817167,0],[-1764459,-799247,0],[-1773675,-779791,0],[-1779307,-770063,0],[-1779307,-767503,0],[-1781355,-763919,0],[-1784939,-760335,0],[-1792107,-756239,0],[-1801323,-755215,0],[-1812075,-755215,0],[-1823851,-749071,0],[-1825387,-741903,0],[-1822827,-736271,0],[-1820779,-727055,0],[-1821291,-719887,0],[-1819755,-703503,0],[-1821291,-692239,0],[-1825899,-683535,0],[-1831019,-681487,0],[-1836651,-677903,0],[-1839211,-675343,0],[-1840235,-672271,0],[-1839723,-668687,0],[-1836139,-659471,0],[-1834091,-648207,0],[-1829483,-643087,0],[-1817195,-634895,0],[-1815147,-631823,0],[-1815659,-624655,0],[-1818731,-616975,0],[-1822315,-611343,0],[-1827947,-606223,0],[-1828971,-604175,0],[-1829483,-598031,0],[-1829995,-597519,0],[-1833579,-597519,0],[-1835115,-597007,0],[-1838187,-590863,0],[-1839723,-590863,0],[-1842795,-592399,0],[-1842283,-593423,0],[-1839211,-593423,0],[-1839723,-595983,0],[-1843819,-598543,0],[-1846891,-598031,0],[-1845867,-600591,0],[-1843819,-601103,0],[-1842795,-602127,0],[-1852523,-605711,0],[-1864299,-606223,0],[-1866347,-605711,0],[-1870443,-599055,0],[-1871467,-596495,0],[-1870955,-582159,0],[-1871979,-581135,0],[-1874027,-574479,0],[-1876587,-571919,0],[-1877611,-569359,0],[-1874539,-564751,0],[-1868907,-562703,0],[-1866859,-559631,0],[-1860715,-553487,0],[-1859179,-549903,0],[-1853035,-545295,0],[-1849963,-538127,0],[-1844331,-529423,0],[-1840747,-527375,0],[-1837675,-524303,0],[-1828971,-509967,0],[-1825899,-500751,0],[-1825899,-491535,0],[-1831531,-473103,0],[-1832043,-464911,0],[-1831019,-461839,0],[-1826411,-455183,0],[-1816683,-448015,0],[-1806955,-435727,0],[-1805419,-425487,0],[-1805931,-416271,0],[-1808491,-409103,0],[-1809515,-392207,0],[-1799275,-387599,0],[-1795179,-388623,0],[-1776235,-388111,0],[-1771627,-386063,0],[-1770091,-387599,0],[-1768043,-387087,0],[-1765483,-387599,0],[-1765483,-384527,0],[-1761899,-377871,0],[-1760363,-373263,0],[-1758315,-373775,0],[-1758827,-371727,0],[-1754219,-365583,0],[-1752171,-360463,0],[-1749611,-358927,0],[-1747563,-351759,0],[-1754731,-338959,0],[-1756779,-333327,0],[-1759339,-320015,0],[-1761387,-313871,0],[-1764971,-290831,0],[-1767019,-286223,0],[-1767019,-281615,0],[-1772651,-267791,0],[-1781355,-259087,0],[-1783915,-258063,0],[-1786987,-257551,0],[-1791595,-260623,0],[-1801323,-270863,0],[-1809515,-273423,0],[-1813611,-271887,0],[-1815147,-268815,0],[-1815659,-263695,0],[-1813611,-256527,0],[-1794155,-225807,0],[-1791083,-223247,0],[-1786987,-224271,0],[-1782379,-224783,0],[-1774187,-228879,0],[-1766507,-229903,0],[-1753195,-233487,0],[-1749611,-240143,0],[-1746027,-254479,0],[-1744491,-258063,0],[-1741419,-259087,0],[-1736299,-259599,0],[-1734251,-260623,0],[-1730155,-258575,0],[-1720427,-251919,0],[-1713259,-251919,0],[-1711211,-252431,0],[-1701995,-263695,0],[-1698923,-265743,0],[-1696875,-266767,0],[-1688683,-267279,0],[-1682027,-263695,0],[-1674859,-255503,0],[-1667691,-235535,0],[-1661035,-225295,0],[-1656939,-229391,0],[-1649771,-232975,0],[-1645163,-236559,0],[-1640043,-238095,0],[-1634411,-241167,0],[-1628779,-239119,0],[-1624171,-236047,0],[-1624171,-229391,0],[-1622635,-227855,0],[-1621611,-225295,0],[-1615979,-222223,0],[-1613931,-218639,0],[-1612907,-213519,0],[-1610347,-213519,0],[-1606763,-216079,0],[-1601131,-216591,0],[-1599083,-213519,0],[-1598059,-213519,0]]]},{"id":21,"color":[0.3815111111111112,0.740162091503268,0.6555921568627451,1],"coordinates":[[[-1700971,-814095,0],[-1697387,-817167,0],[-1689195,-821775,0],[-1683051,-826383,0],[-1678443,-836111,0],[-1676395,-842255,0],[-1675883,-849423,0],[-1677931,-859663,0],[-1677931,-867343,0],[-1679979,-880143,0],[-1683051,-887823,0],[-1682539,-891407,0],[-1685611,-907791,0],[-1688683,-916495,0],[-1688683,-922127,0],[-1690219,-924175,0],[-1697899,-928783,0],[-1698923,-930319,0],[-1697899,-932367,0],[-1695339,-934927,0],[-1692267,-943119,0],[-1688171,-948751,0],[-1685611,-951311,0],[-1683563,-951823,0],[-1678955,-950287,0],[-1667179,-943119,0],[-1654379,-937487,0],[-1627755,-922127,0],[-1617003,-910351,0],[-1613419,-907791,0],[-1610347,-906255,0],[-1603179,-905743,0],[-1600619,-908815,0],[-1595499,-917007,0],[-1592939,-933391,0],[-1589355,-937487,0],[-1585259,-939023,0],[-1580139,-944143,0],[-1577579,-950287,0],[-1576555,-963087,0],[-1569899,-969743,0],[-1562219,-973839,0],[-1559147,-977935,0],[-1558635,-981007,0],[-1560171,-984591,0],[-1562219,-987151,0],[-1570923,-989711,0],[-1575531,-994319,0],[-1574507,-1000463,0],[-1562731,-1008655,0],[-1554539,-1021967,0],[-1544811,-1034767,0],[-1540715,-1036303,0],[-1538667,-1041935,0],[-1535083,-1044495,0],[-1533035,-1050639,0],[-1530987,-1052175,0],[-1529451,-1053199,0],[-1530987,-1056271,0],[-1536619,-1061391,0],[-1538155,-1064975,0],[-1537131,-1065999,0],[-1540203,-1070095,0],[-1538667,-1076751,0],[-1538667,-1088015,0],[-1534059,-1107471,0],[-1533035,-1115663,0],[-1535595,-1118735,0],[-1537643,-1125903,0],[-1540203,-1129999,0],[-1541227,-1137679,0],[-1540715,-1141263,0],[-1538667,-1144847,0],[-1535595,-1148431,0],[-1530987,-1150479,0],[-1529451,-1151503,0],[-1523307,-1156623,0],[-1515115,-1153039,0],[-1507435,-1159183,0],[-1502827,-1156623,0],[-1498731,-1156623,0],[-1490027,-1165327,0],[-1490027,-1264655,0],[-1495147,-1273871,0],[-1494635,-1274383,0],[-1493099,-1273359,0],[-1490027,-1274383,0],[-1490027,-1282063,0],[-1493611,-1278991,0],[-1496683,-1274895,0],[-1497707,-1271311,0],[-1501803,-1268239,0],[-1502827,-1268239,0],[-1503339,-1270287,0],[-1501803,-1270799,0],[-1503339,-1273359,0],[-1507435,-1274895,0],[-1507947,-1273871,0],[-1516651,-1275919,0],[-1530987,-1280527,0],[-1537131,-1282575,0],[-1547371,-1292303,0],[-1551467,-1293839,0],[-1555051,-1293839,0],[-1560683,-1290255,0],[-1563755,-1290767,0],[-1566827,-1291791,0],[-1573995,-1296911,0],[-1581675,-1299471,0],[-1587307,-1303567,0],[-1590891,-1308687,0],[-1600107,-1307663,0],[-1603691,-1308175,0],[-1606251,-1309199,0],[-1610347,-1324559,0],[-1612395,-1327631,0],[-1615979,-1330703,0],[-1621611,-1332751,0],[-1628779,-1337359,0],[-1630827,-1341455,0],[-1621099,-1342479,0],[-1619563,-1347599,0],[-1618027,-1349135,0],[-1621611,-1349647,0],[-1625195,-1351695,0],[-1622635,-1353743,0],[-1633899,-1363983,0],[-1635435,-1367055,0],[-1639531,-1371663,0],[-1637995,-1375247,0],[-1643115,-1379855,0],[-1649771,-1380879,0],[-1650283,-1382415,0],[-1646699,-1386511,0],[-1646187,-1394703,0],[-1642603,-1394191,0],[-1641067,-1395215,0],[-1639531,-1398799,0],[-1649259,-1411599,0],[-1650283,-1414159,0],[-1649259,-1417743,0],[-1643115,-1423375,0],[-1641067,-1423375,0],[-1636971,-1421327,0],[-1635435,-1421327,0],[-1632363,-1424911,0],[-1632363,-1430031,0],[-1635435,-1433615,0],[-1633387,-1436175,0],[-1634923,-1436175,0],[-1636459,-1438223,0],[-1635435,-1439247,0],[-1633387,-1439759,0],[-1633387,-1440783,0],[-1639019,-1440783,0],[-1641067,-1438735,0],[-1642091,-1438735,0],[-1643627,-1444367,0],[-1648235,-1448463,0],[-1648235,-1448975,0],[-1644651,-1448975,0],[-1641067,-1449999,0],[-1640043,-1451535,0],[-1641067,-1456655,0],[-1645163,-1459727,0],[-1647211,-1466383,0],[-1648235,-1466895,0],[-1653355,-1462799,0],[-1661547,-1464847,0],[-1664619,-1464335,0],[-1668203,-1466895,0],[-1669227,-1473039,0],[-1684587,-1475599,0],[-1689195,-1475087,0],[-1699947,-1470479,0],[-1706091,-1464335,0],[-1709163,-1462799,0],[-1714795,-1458703,0],[-1725547,-1454095,0],[-1732715,-1452559,0],[-1744491,-1452559,0],[-1750635,-1454607,0],[-1770603,-1464335,0],[-1777771,-1467407,0],[-1780843,-1467407,0],[-1793643,-1480207,0],[-1796715,-1464847,0],[-1795179,-1451023,0],[-1796203,-1444879,0],[-1796203,-1431567,0],[-1795179,-1429007,0],[-1790059,-1424399,0],[-1781355,-1418255,0],[-1772139,-1414671,0],[-1772651,-1413135,0],[-1774699,-1411599,0],[-1775211,-1410575,0],[-1773163,-1409551,0],[-1771627,-1406991,0],[-1769067,-1408015,0],[-1769067,-1406991,0],[-1770603,-1406479,0],[-1769579,-1402383,0],[-1770603,-1400335,0],[-1764459,-1395727,0],[-1757803,-1394191,0],[-1752171,-1390095,0],[-1749099,-1389071,0],[-1748075,-1387023,0],[-1750635,-1380879,0],[-1777771,-1377295,0],[-1783403,-1374735,0],[-1788011,-1370639,0],[-1795179,-1367055,0],[-1806443,-1368591,0],[-1807979,-1367055,0],[-1809515,-1363983,0],[-1820779,-1363983,0],[-1823339,-1363471,0],[-1822827,-1365007,0],[-1825387,-1365519,0],[-1828971,-1367567,0],[-1830507,-1360911,0],[-1833579,-1361935,0],[-1833579,-1357327,0],[-1835627,-1357839,0],[-1836651,-1351695,0],[-1843819,-1347599,0],[-1846891,-1342991,0],[-1847915,-1339919,0],[-1847915,-1336335,0],[-1848939,-1335823,0],[-1848427,-1332239,0],[-1853035,-1329679,0],[-1856619,-1323023,0],[-1860715,-1321999,0],[-1860715,-1324559,0],[-1864811,-1324559,0],[-1865323,-1330191,0],[-1871467,-1331215,0],[-1871979,-1334799,0],[-1875051,-1333775,0],[-1877611,-1334799,0],[-1879659,-1333775,0],[-1881707,-1335823,0],[-1885291,-1333263,0],[-1890411,-1335823,0],[-1892459,-1338383,0],[-1895019,-1338895,0],[-1905259,-1334287,0],[-1912939,-1328143,0],[-1922155,-1313295,0],[-1922155,-1310735,0],[-1912427,-1304591,0],[-1904747,-1301519,0],[-1902699,-1299983,0],[-1901675,-1296911,0],[-1901163,-1293839,0],[-1906283,-1289231,0],[-1910379,-1280015,0],[-1908843,-1271823,0],[-1905259,-1264655,0],[-1905259,-1260559,0],[-1897067,-1251343,0],[-1885803,-1245199,0],[-1876587,-1242127,0],[-1870443,-1244175,0],[-1861227,-1243663,0],[-1857131,-1244175,0],[-1850475,-1240591,0],[-1848939,-1237519,0],[-1846891,-1230863,0],[-1847403,-1226255,0],[-1843819,-1223695,0],[-1841771,-1218575,0],[-1841771,-1216527,0],[-1839723,-1214479,0],[-1839211,-1210895,0],[-1843819,-1210383,0],[-1844331,-1209359,0],[-1844843,-1204751,0],[-1846379,-1202191,0],[-1846379,-1197071,0],[-1844843,-1197583,0],[-1842283,-1200143,0],[-1831019,-1200655,0],[-1831019,-1200143,0],[-1832043,-1199119,0],[-1834603,-1198607,0],[-1834603,-1197071,0],[-1835627,-1196047,0],[-1836139,-1191951,0],[-1835627,-1190415,0],[-1829995,-1187343,0],[-1828971,-1187343,0],[-1826411,-1189391,0],[-1824875,-1187343,0],[-1821291,-1185295,0],[-1819243,-1185295,0],[-1816683,-1186831,0],[-1815659,-1185807,0],[-1818219,-1183247,0],[-1819755,-1182735,0],[-1823339,-1180687,0],[-1826923,-1175567,0],[-1835627,-1167375,0],[-1837163,-1159183,0],[-1837163,-1149455,0],[-1835627,-1141263,0],[-1835627,-1135119,0],[-1831531,-1129999,0],[-1827435,-1120783,0],[-1822827,-1115663,0],[-1822315,-1110543,0],[-1819243,-1106447,0],[-1818731,-1103375,0],[-1810027,-1091599,0],[-1807467,-1085967,0],[-1803371,-1080335,0],[-1799787,-1074191,0],[-1796715,-1057807,0],[-1797227,-1054223,0],[-1800299,-1047055,0],[-1802347,-1045007,0],[-1803883,-1041935,0],[-1803371,-1037839,0],[-1804907,-1029135,0],[-1804395,-1019407,0],[-1804907,-1015311,0],[-1809003,-1005583,0],[-1815659,-996367,0],[-1816171,-989711,0],[-1818219,-983055,0],[-1820267,-950287,0],[-1820779,-946703,0],[-1822827,-943631,0],[-1824875,-925199,0],[-1827435,-917519,0],[-1820779,-912399,0],[-1815147,-907791,0],[-1809003,-909327,0],[-1808491,-911887,0],[-1807467,-911887,0],[-1806955,-910863,0],[-1805931,-911887,0],[-1804395,-913935,0],[-1803371,-919567,0],[-1801323,-921103,0],[-1801323,-922127,0],[-1799787,-923151,0],[-1797739,-922639,0],[-1795691,-919055,0],[-1794667,-918543,0],[-1789035,-920591,0],[-1785451,-920591,0],[-1782891,-921103,0],[-1780843,-923151,0],[-1780331,-923151,0],[-1778795,-919567,0],[-1774699,-913935,0],[-1773163,-911887,0],[-1770091,-911375,0],[-1769067,-909839,0],[-1763947,-896527,0],[-1767531,-878607,0],[-1766507,-871439,0],[-1755755,-867343,0],[-1750635,-866831,0],[-1750635,-863759,0],[-1754219,-861711,0],[-1754731,-860175,0],[-1752171,-857103,0],[-1751659,-854543,0],[-1750123,-853519,0],[-1748075,-859151,0],[-1746027,-862223,0],[-1739371,-863759,0],[-1735787,-861711,0],[-1734763,-857103,0],[-1728107,-853007,0],[-1726571,-851471,0],[-1724523,-850959,0],[-1722987,-852495,0],[-1720427,-847887,0],[-1718891,-838671,0],[-1714283,-827919,0],[-1700971,-814095,0]]]},{"id":22,"color":[0.37824836601307193,0.7365228758169935,0.6570980392156863,1],"coordinates":[[[-2000491,-1192463,0],[-1989739,-1195535,0],[-1975915,-1201167,0],[-1969771,-1205263,0],[-1962091,-1208335,0],[-1958507,-1210895,0],[-1952363,-1212943,0],[-1942123,-1218575,0],[-1933419,-1225743,0],[-1929323,-1227791,0],[-1925227,-1231887,0],[-1919595,-1241615,0],[-1916523,-1244175,0],[-1912427,-1251343,0],[-1906795,-1255439,0],[-1905259,-1260559,0],[-1905259,-1264655,0],[-1908843,-1271823,0],[-1910379,-1280015,0],[-1906283,-1289231,0],[-1901163,-1293839,0],[-1901675,-1296911,0],[-1902699,-1299983,0],[-1904747,-1301519,0],[-1912427,-1304591,0],[-1922155,-1310735,0],[-1922155,-1313295,0],[-1916523,-1322511,0],[-1912939,-1328143,0],[-1910379,-1330703,0],[-1902699,-1335823,0],[-1895019,-1338895,0],[-1892459,-1338383,0],[-1890411,-1335823,0],[-1885291,-1333263,0],[-1881707,-1335823,0],[-1879659,-1333775,0],[-1877611,-1334799,0],[-1875051,-1333775,0],[-1871979,-1334799,0],[-1871467,-1331215,0],[-1865835,-1330191,0],[-1864811,-1324559,0],[-1860715,-1324559,0],[-1861227,-1321999,0],[-1860203,-1321999,0],[-1856619,-1323023,0],[-1853035,-1329679,0],[-1848427,-1332239,0],[-1848939,-1335823,0],[-1847915,-1336335,0],[-1847915,-1339919,0],[-1846891,-1342991,0],[-1843819,-1347599,0],[-1836651,-1351695,0],[-1835627,-1357839,0],[-1833579,-1357327,0],[-1833579,-1361935,0],[-1830507,-1360911,0],[-1828971,-1367567,0],[-1825387,-1365519,0],[-1822827,-1365007,0],[-1823339,-1363471,0],[-1820779,-1363983,0],[-1809515,-1363983,0],[-1807979,-1367055,0],[-1806443,-1368591,0],[-1795179,-1367055,0],[-1788011,-1370639,0],[-1783403,-1374735,0],[-1777771,-1377295,0],[-1750635,-1380879,0],[-1748075,-1387023,0],[-1749099,-1389071,0],[-1752171,-1390095,0],[-1757803,-1394191,0],[-1764459,-1395727,0],[-1770603,-1400335,0],[-1769579,-1402383,0],[-1770603,-1406479,0],[-1769067,-1406991,0],[-1769067,-1408015,0],[-1771627,-1406991,0],[-1773163,-1409551,0],[-1775211,-1410575,0],[-1774699,-1411599,0],[-1772651,-1413135,0],[-1772139,-1414671,0],[-1781355,-1418255,0],[-1790059,-1424399,0],[-1795179,-1429007,0],[-1796203,-1431567,0],[-1796203,-1444879,0],[-1795179,-1451023,0],[-1796715,-1464847,0],[-1794155,-1479183,0],[-1802859,-1484815,0],[-1804907,-1488911,0],[-1803883,-1497103,0],[-1804395,-1502223,0],[-1800811,-1505807,0],[-1797227,-1506831,0],[-1795691,-1508879,0],[-1796203,-1513999,0],[-1798763,-1518607,0],[-1797739,-1520655,0],[-1795179,-1520655,0],[-1794667,-1523215,0],[-1797739,-1527823,0],[-1801323,-1530383,0],[-1804395,-1530895,0],[-1804907,-1533967,0],[-1803371,-1544719,0],[-1798763,-1554959,0],[-1798251,-1559567,0],[-1796203,-1565199,0],[-1792619,-1567759,0],[-1788523,-1572879,0],[-1785963,-1588751,0],[-1778283,-1593871,0],[-1775723,-1601039,0],[-1772651,-1601551,0],[-1770091,-1601039,0],[-1768555,-1603599,0],[-1770603,-1606159,0],[-1770091,-1608207,0],[-1770603,-1612303,0],[-1774187,-1613839,0],[-1775211,-1615887,0],[-1777259,-1617935,0],[-1782379,-1620495,0],[-1783915,-1626127,0],[-1786475,-1627663,0],[-1786475,-1629711,0],[-1789035,-1630223,0],[-1789547,-1633807,0],[-1788523,-1636367,0],[-1791083,-1638415,0],[-1794155,-1643023,0],[-1790571,-1649679,0],[-1785451,-1664015,0],[-1785963,-1672207,0],[-1792107,-1674255,0],[-1797739,-1674767,0],[-1800811,-1678863,0],[-1809003,-1681423,0],[-1810027,-1683471,0],[-1811051,-1690127,0],[-1812075,-1691663,0],[-1821803,-1691663,0],[-1835627,-1690127,0],[-1839211,-1688591,0],[-1843819,-1682447,0],[-1845355,-1681423,0],[-1846379,-1681935,0],[-1847915,-1693199,0],[-1847403,-1699343,0],[-1847915,-1700367,0],[-1849963,-1701903,0],[-1865323,-1717775,0],[-1869419,-1720847,0],[-1879147,-1718287,0],[-1881195,-1719823,0],[-1882731,-1720335,0],[-1889387,-1716239,0],[-1893483,-1711631,0],[-1894507,-1708559,0],[-1895019,-1703951,0],[-1898603,-1702415,0],[-1898091,-1694223,0],[-1904235,-1689103,0],[-1911403,-1680911,0],[-1919595,-1675279,0],[-1922155,-1671695,0],[-1924203,-1672719,0],[-1931883,-1670159,0],[-1941611,-1670671,0],[-1955947,-1665039,0],[-1958507,-1664527,0],[-1959531,-1664527,0],[-1963627,-1669135,0],[-1965675,-1670671,0],[-1978987,-1672719,0],[-1981547,-1671695,0],[-1985643,-1668623,0],[-1987691,-1660431,0],[-1990763,-1657871,0],[-1991787,-1655823,0],[-1992299,-1652751,0],[-1993323,-1652751,0],[-1999979,-1654287,0],[-2002539,-1653775,0],[-2005099,-1651215,0],[-2007659,-1651215,0],[-2010731,-1652751,0],[-2019947,-1652751,0],[-2026603,-1648143,0],[-2028139,-1648655,0],[-2028139,-1650191,0],[-2030187,-1651215,0],[-2034795,-1649679,0],[-2039403,-1649167,0],[-2048107,-1651215,0],[-2053739,-1649167,0],[-2054251,-1647631,0],[-2053739,-1644047,0],[-2055787,-1638927,0],[-2057323,-1637903,0],[-2060907,-1638415,0],[-2069099,-1641999,0],[-2072683,-1636367,0],[-2073707,-1631759,0],[-2075243,-1628687,0],[-2080363,-1628687,0],[-2082923,-1627151,0],[-2094187,-1629711,0],[-2099307,-1628175,0],[-2100843,-1626639,0],[-2102379,-1618447,0],[-2105451,-1615375,0],[-2113643,-1612815,0],[-2117739,-1605647,0],[-2119275,-1605135,0],[-2121323,-1605135,0],[-2123371,-1602063,0],[-2130027,-1595919,0],[-2129003,-1587727,0],[-2129515,-1587215,0],[-2137195,-1587215,0],[-2138219,-1586703,0],[-2137195,-1579535,0],[-2134635,-1572879,0],[-2123883,-1570831,0],[-2121835,-1565711,0],[-2120299,-1564175,0],[-2114667,-1564687,0],[-2113643,-1563663,0],[-2113131,-1558031,0],[-2114667,-1554959,0],[-2113131,-1548303,0],[-2115179,-1544207,0],[-2113643,-1537039,0],[-2117227,-1537039,0],[-2119275,-1534991,0],[-2121835,-1536527,0],[-2131563,-1537039,0],[-2131563,-1536015,0],[-2130539,-1534479,0],[-2131051,-1532431,0],[-2138219,-1526287,0],[-2141803,-1520143,0],[-2146923,-1516047,0],[-2148971,-1511951,0],[-2147435,-1509391,0],[-2147435,-1507343,0],[-2150507,-1500687,0],[-2151531,-1500687,0],[-2153579,-1501199,0],[-2152043,-1505807,0],[-2156651,-1507343,0],[-2156139,-1510927,0],[-2156651,-1511951,0],[-2157675,-1511951,0],[-2164331,-1506319,0],[-2166891,-1506319,0],[-2167403,-1507343,0],[-2166891,-1515535,0],[-2167403,-1519119,0],[-2173547,-1523727,0],[-2173547,-1527823,0],[-2175083,-1531919,0],[-2180715,-1531407,0],[-2182251,-1533455,0],[-2187371,-1533455,0],[-2188907,-1532431,0],[-2189419,-1530383,0],[-2195563,-1521167,0],[-2199147,-1521167,0],[-2207339,-1514511,0],[-2209387,-1515023,0],[-2213483,-1517583,0],[-2216555,-1523727,0],[-2220651,-1527311,0],[-2227819,-1531919,0],[-2230379,-1532431,0],[-2236011,-1535503,0],[-2238059,-1534991,0],[-2240619,-1532431,0],[-2244715,-1530895,0],[-2251371,-1529359,0],[-2255979,-1528847,0],[-2259563,-1525775,0],[-2263147,-1524239,0],[-2269291,-1527823,0],[-2275947,-1528335,0],[-2280043,-1531407,0],[-2284139,-1531919,0],[-2286699,-1533967,0],[-2289771,-1533967,0],[-2290283,-1537039,0],[-2292331,-1540623,0],[-2294891,-1542159,0],[-2296939,-1541647,0],[-2298475,-1540111,0],[-2303595,-1539599,0],[-2309739,-1534991,0],[-2313835,-1535503,0],[-2315371,-1543183,0],[-2316907,-1547791,0],[-2315883,-1551375,0],[-2313323,-1555471,0],[-2316907,-1559567,0],[-2319979,-1566735,0],[-2318443,-1569807,0],[-2315883,-1584655,0],[-2319467,-1582095,0],[-2324075,-1582607,0],[-2331755,-1593871,0],[-2341995,-1599503,0],[-2346603,-1603087,0],[-2348139,-1602575,0],[-2354283,-1588239,0],[-2356331,-1587215,0],[-2360427,-1587215,0],[-2364011,-1590287,0],[-2366059,-1589775,0],[-2369643,-1586703,0],[-2371691,-1587215,0],[-2375787,-1591823,0],[-2380395,-1598991,0],[-2393195,-1593871,0],[-2399339,-1597455,0],[-2407531,-1609231,0],[-2415723,-1609231,0],[-2417771,-1614351,0],[-2420843,-1616911,0],[-2423915,-1623567,0],[-2430059,-1622543,0],[-2438251,-1628687,0],[-2442859,-1628687,0],[-2445419,-1630223,0],[-2450027,-1638415,0],[-2455147,-1638415,0],[-2458731,-1639439,0],[-2462827,-1645071,0],[-2484843,-1647631,0],[-2488939,-1632271,0],[-2491499,-1626639,0],[-2490987,-1623055,0],[-2492011,-1621007,0],[-2493035,-1621007,0],[-2497643,-1624079,0],[-2506859,-1625615,0],[-2508907,-1624591,0],[-2511979,-1622031,0],[-2514539,-1618447,0],[-2515051,-1605647,0],[-2513515,-1600015,0],[-2505835,-1594895,0],[-2506347,-1589263,0],[-2507371,-1587727,0],[-2514027,-1585167,0],[-2515051,-1583631,0],[-2516075,-1579535,0],[-2514539,-1565199,0],[-2515563,-1563151,0],[-2517611,-1562639,0],[-2519659,-1564175,0],[-2522219,-1563151,0],[-2528363,-1567247,0],[-2529899,-1567247,0],[-2531947,-1564687,0],[-2535531,-1553423,0],[-2534507,-1546767,0],[-2532459,-1541135,0],[-2536043,-1530895,0],[-2538091,-1527823,0],[-2538091,-1516047,0],[-2543211,-1512463,0],[-2545259,-1505295,0],[-2546283,-1504271,0],[-2550891,-1503759,0],[-2556523,-1498127,0],[-2560107,-1493519,0],[-2562667,-1482255,0],[-2561131,-1475087,0],[-2561131,-1464847,0],[-2560619,-1463823,0],[-2557547,-1461775,0],[-2557035,-1458703,0],[-2546283,-1452559,0],[-2538091,-1451535,0],[-2535531,-1452559,0],[-2529387,-1462799,0],[-2525803,-1463311,0],[-2519147,-1460751,0],[-2515051,-1462287,0],[-2509419,-1462287,0],[-2507883,-1463311,0],[-2499179,-1475087,0],[-2497131,-1481231,0],[-2488939,-1489935,0],[-2477675,-1490959,0],[-2469483,-1488911,0],[-2465387,-1489423,0],[-2460779,-1487887,0],[-2453611,-1487887,0],[-2448491,-1484815,0],[-2444907,-1480719,0],[-2439787,-1473551,0],[-2436715,-1472527,0],[-2432619,-1472527,0],[-2423915,-1469455,0],[-2420843,-1469455,0],[-2408043,-1466383,0],[-2397291,-1465359,0],[-2391659,-1465871,0],[-2388075,-1464847,0],[-2380907,-1464847,0],[-2370155,-1459727,0],[-2359403,-1452047,0],[-2340971,-1444367,0],[-2325099,-1433615,0],[-2312811,-1424399,0],[-2306155,-1425423,0],[-2294891,-1431567,0],[-2291819,-1432079,0],[-2289771,-1434639,0],[-2286699,-1435151,0],[-2284139,-1433103,0],[-2278507,-1427471,0],[-2273899,-1419279,0],[-2261611,-1405455,0],[-2254443,-1395727,0],[-2245227,-1385999,0],[-2242667,-1378319,0],[-2241131,-1375247,0],[-2240619,-1362959,0],[-2235499,-1356815,0],[-2237547,-1351183,0],[-2237547,-1343503,0],[-2242155,-1341455,0],[-2246251,-1336847,0],[-2248299,-1333263,0],[-2248299,-1330703,0],[-2246763,-1321487,0],[-2246251,-1319951,0],[-2244203,-1318927,0],[-2238571,-1318415,0],[-2236523,-1317903,0],[-2235499,-1314319,0],[-2233451,-1313295,0],[-2233451,-1312271,0],[-2237547,-1309199,0],[-2240619,-1304079,0],[-2243691,-1299983,0],[-2244203,-1296911,0],[-2244203,-1286671,0],[-2243691,-1285647,0],[-2237547,-1280527,0],[-2235499,-1280015,0],[-2232427,-1281039,0],[-2230891,-1279503,0],[-2229867,-1275919,0],[-2229867,-1273871,0],[-2232939,-1271823,0],[-2240107,-1272847,0],[-2242667,-1266191,0],[-2243179,-1263119,0],[-2242667,-1261071,0],[-2240619,-1257999,0],[-2234475,-1253903,0],[-2236011,-1252367,0],[-2240619,-1249295,0],[-2245227,-1251343,0],[-2249835,-1255951,0],[-2254955,-1257999,0],[-2258539,-1257999,0],[-2261099,-1253903,0],[-2259051,-1247759,0],[-2257003,-1244175,0],[-2253419,-1241103,0],[-2244715,-1235983,0],[-2240107,-1231375,0],[-2239083,-1231375,0],[-2237547,-1233935,0],[-2243691,-1241103,0],[-2238059,-1246223,0],[-2233451,-1242639,0],[-2228843,-1244175,0],[-2223723,-1243151,0],[-2217579,-1247247,0],[-2215531,-1251343,0],[-2213995,-1251855,0],[-2211435,-1250831,0],[-2208363,-1246223,0],[-2204779,-1245199,0],[-2190443,-1248783,0],[-2193515,-1256463,0],[-2191467,-1265679,0],[-2185323,-1273359,0],[-2183787,-1279503,0],[-2181227,-1283599,0],[-2175595,-1282063,0],[-2169451,-1282575,0],[-2159723,-1281039,0],[-2157163,-1284111,0],[-2153579,-1282575,0],[-2148971,-1285135,0],[-2141291,-1284623,0],[-2139755,-1284111,0],[-2142827,-1278479,0],[-2149483,-1274895,0],[-2133611,-1266191,0],[-2123883,-1259535,0],[-2121835,-1256975,0],[-2113131,-1252367,0],[-2089579,-1242639,0],[-2075243,-1224207,0],[-2072683,-1218575,0],[-2069099,-1216015,0],[-2065003,-1213967,0],[-2050155,-1210895,0],[-2041963,-1210895,0],[-2031723,-1207823,0],[-2025067,-1203215,0],[-2017899,-1200143,0],[-2009707,-1193999,0],[-2005611,-1192975,0],[-2000491,-1192463,0]],[[-2117739,-1582095,0],[-2122347,-1587215,0],[-2125931,-1589263,0],[-2126443,-1590287,0],[-2126443,-1595919,0],[-2122347,-1593359,0],[-2118251,-1588751,0],[-2117227,-1585679,0],[-2117739,-1582095,0]]]},{"id":23,"color":[0.9578039215686275,0.4342483660130719,0.26588235294117646,1],"coordinates":[[[-2228843,-1787919,0],[-2230379,-1788431,0],[-2232427,-1787919,0],[-2231403,-1786895,0],[-2231403,-1785359,0],[-2232939,-1787919,0],[-2235499,-1785871,0],[-2237547,-1782799,0],[-2242155,-1783823,0],[-2242667,-1779215,0],[-2244203,-1779215,0],[-2247275,-1780239,0],[-2248811,-1781775,0],[-2247787,-1785359,0],[-2247787,-1795599,0],[-2251883,-1794063,0],[-2252395,-1795599,0],[-2252395,-1797135,0],[-2253931,-1798671,0],[-2255979,-1798671,0],[-2255467,-1795087,0],[-2255979,-1794575,0],[-2260075,-1795087,0],[-2261099,-1796111,0],[-2262123,-1795599,0],[-2262123,-1792015,0],[-2263147,-1792015,0],[-2266731,-1795599,0],[-2264171,-1789967,0],[-2268267,-1788431,0],[-2267755,-1786895,0],[-2268779,-1787919,0],[-2271339,-1786895,0],[-2274411,-1788431,0],[-2274923,-1787407,0],[-2277995,-1787919,0],[-2281067,-1786895,0],[-2283627,-1787919,0],[-2284139,-1789455,0],[-2284139,-1792527,0],[-2288235,-1797647,0],[-2289771,-1797647,0],[-2289259,-1795599,0],[-2293867,-1797647,0],[-2294379,-1797135,0],[-2293867,-1795599,0],[-2294891,-1795599,0],[-2296427,-1797135,0],[-2297451,-1796623,0],[-2300011,-1799183,0],[-2299499,-1800207,0],[-2300523,-1801231,0],[-2298987,-1804303,0],[-2300523,-1807375,0],[-2308203,-1809423,0],[-2309739,-1807375,0],[-2310763,-1807887,0],[-2311275,-1811983,0],[-2314347,-1807375,0],[-2317419,-1808911,0],[-2321515,-1805327,0],[-2326123,-1809423,0],[-2331243,-1810447,0],[-2332267,-1811983,0],[-2331755,-1813519,0],[-2332779,-1814031,0],[-2334827,-1813007,0],[-2338411,-1816079,0],[-2341483,-1816591,0],[-2346091,-1823247,0],[-2345579,-1825295,0],[-2347115,-1825295,0],[-2350187,-1827855,0],[-2354283,-1835535,0],[-2359403,-1838095,0],[-2360427,-1840143,0],[-2362475,-1840143,0],[-2362475,-1841679,0],[-2364523,-1841679,0],[-2364523,-1843215,0],[-2367595,-1841167,0],[-2369643,-1842191,0],[-2372203,-1840655,0],[-2371691,-1835023,0],[-2373227,-1831439,0],[-2380395,-1832463,0],[-2386539,-1829391,0],[-2387563,-1827855,0],[-2386027,-1826319,0],[-2390635,-1825807,0],[-2391659,-1821199,0],[-2395243,-1816079,0],[-2402923,-1820687,0],[-2406507,-1820175,0],[-2407019,-1818639,0],[-2410091,-1815567,0],[-2408555,-1813519,0],[-2407019,-1812495,0],[-2406507,-1810959,0],[-2403947,-1810959,0],[-2410603,-1805327,0],[-2412139,-1803279,0],[-2412139,-1801231,0],[-2411115,-1799695,0],[-2409579,-1799183,0],[-2409067,-1795599,0],[-2405483,-1788431,0],[-2403435,-1786383,0],[-2402923,-1778191,0],[-2403947,-1774607,0],[-2405995,-1773583,0],[-2404459,-1770511,0],[-2404971,-1769487,0],[-2411627,-1763343,0],[-2411115,-1758223,0],[-2417259,-1741327,0],[-2419819,-1731087,0],[-2420843,-1728527,0],[-2424939,-1726991,0],[-2426475,-1723919,0],[-2427499,-1715727,0],[-2420843,-1704463,0],[-2424427,-1698831,0],[-2428011,-1696783,0],[-2430571,-1697295,0],[-2431083,-1696783,0],[-2430571,-1693711,0],[-2431595,-1689103,0],[-2433643,-1682959,0],[-2437227,-1679375,0],[-2445419,-1680399,0],[-2445419,-1678863,0],[-2451563,-1672719,0],[-2455659,-1666575,0],[-2457707,-1660431,0],[-2457707,-1657871,0],[-2458731,-1650703,0],[-2461291,-1643535,0],[-2458731,-1639439,0],[-2455147,-1638415,0],[-2450027,-1638415,0],[-2445419,-1630223,0],[-2442859,-1628687,0],[-2438251,-1628687,0],[-2434667,-1626127,0],[-2431595,-1623055,0],[-2430059,-1622543,0],[-2423915,-1623567,0],[-2420843,-1616911,0],[-2417771,-1614351,0],[-2415723,-1609231,0],[-2407531,-1609231,0],[-2399339,-1597455,0],[-2393195,-1593871,0],[-2380395,-1598991,0],[-2375787,-1591823,0],[-2371691,-1587215,0],[-2369643,-1586703,0],[-2366059,-1589775,0],[-2364011,-1590287,0],[-2360427,-1587215,0],[-2356331,-1587215,0],[-2354283,-1588239,0],[-2348139,-1602575,0],[-2346603,-1603087,0],[-2341995,-1599503,0],[-2331755,-1593871,0],[-2324075,-1582607,0],[-2319467,-1582095,0],[-2315883,-1584655,0],[-2318443,-1569807,0],[-2319979,-1566735,0],[-2316907,-1559567,0],[-2313323,-1555471,0],[-2315883,-1551375,0],[-2316907,-1547791,0],[-2315371,-1543183,0],[-2313835,-1535503,0],[-2309739,-1534991,0],[-2303595,-1539599,0],[-2298475,-1540111,0],[-2296939,-1541647,0],[-2294891,-1542159,0],[-2292331,-1540623,0],[-2290283,-1537039,0],[-2289771,-1533967,0],[-2286699,-1533967,0],[-2284139,-1531919,0],[-2280043,-1531407,0],[-2275947,-1528335,0],[-2269291,-1527823,0],[-2263147,-1524239,0],[-2259563,-1525775,0],[-2255979,-1528847,0],[-2251371,-1529359,0],[-2244715,-1530895,0],[-2240619,-1532431,0],[-2238059,-1534991,0],[-2236011,-1535503,0],[-2230379,-1532431,0],[-2227819,-1531919,0],[-2220651,-1527311,0],[-2216555,-1523727,0],[-2213483,-1517583,0],[-2209387,-1515023,0],[-2207339,-1514511,0],[-2199147,-1521167,0],[-2195563,-1521167,0],[-2189419,-1530383,0],[-2188907,-1532431,0],[-2187371,-1533455,0],[-2182251,-1533455,0],[-2180715,-1531407,0],[-2175083,-1531919,0],[-2173547,-1527823,0],[-2173547,-1523727,0],[-2167403,-1519119,0],[-2166891,-1515535,0],[-2167403,-1507343,0],[-2166891,-1506319,0],[-2164331,-1506319,0],[-2157675,-1511951,0],[-2156651,-1511951,0],[-2156139,-1510927,0],[-2156651,-1507343,0],[-2152043,-1505807,0],[-2153579,-1501711,0],[-2152043,-1500687,0],[-2150507,-1500687,0],[-2147435,-1507343,0],[-2147435,-1509391,0],[-2148971,-1511951,0],[-2146923,-1516047,0],[-2141803,-1520143,0],[-2138219,-1526287,0],[-2131051,-1532431,0],[-2130539,-1534479,0],[-2131563,-1536015,0],[-2131563,-1537039,0],[-2121835,-1536527,0],[-2119275,-1534991,0],[-2117227,-1537039,0],[-2113643,-1537039,0],[-2115179,-1544207,0],[-2113131,-1548303,0],[-2114667,-1554959,0],[-2113131,-1558031,0],[-2113643,-1563663,0],[-2114667,-1564687,0],[-2120299,-1564175,0],[-2121835,-1565711,0],[-2123883,-1570831,0],[-2133611,-1572367,0],[-2136171,-1574927,0],[-2137195,-1579535,0],[-2138219,-1586703,0],[-2137195,-1587215,0],[-2129515,-1587215,0],[-2129003,-1587727,0],[-2129515,-1590287,0],[-2130027,-1595919,0],[-2123371,-1602063,0],[-2121323,-1605135,0],[-2119275,-1605135,0],[-2117739,-1605647,0],[-2113643,-1612815,0],[-2105451,-1615375,0],[-2102379,-1618447,0],[-2100843,-1626639,0],[-2099307,-1628175,0],[-2094187,-1629711,0],[-2082923,-1627151,0],[-2080363,-1628687,0],[-2075243,-1628687,0],[-2073707,-1631759,0],[-2072683,-1636367,0],[-2069099,-1641999,0],[-2060907,-1638415,0],[-2057323,-1637903,0],[-2055787,-1638927,0],[-2053739,-1644047,0],[-2054251,-1647631,0],[-2053739,-1649167,0],[-2048107,-1651215,0],[-2039403,-1649167,0],[-2034795,-1649679,0],[-2030187,-1651215,0],[-2028139,-1650191,0],[-2028139,-1648655,0],[-2026603,-1648143,0],[-2019947,-1652751,0],[-2010731,-1652751,0],[-2007659,-1651215,0],[-2005099,-1651215,0],[-2002539,-1653775,0],[-1999979,-1654287,0],[-1993323,-1652751,0],[-1992299,-1652751,0],[-1991787,-1655823,0],[-1990763,-1657871,0],[-1987691,-1660431,0],[-1985643,-1668623,0],[-1981547,-1671695,0],[-1977451,-1673231,0],[-1970795,-1671183,0],[-1965675,-1670671,0],[-1964651,-1672207,0],[-1964651,-1673231,0],[-1965675,-1674767,0],[-1970283,-1677839,0],[-1970795,-1681935,0],[-1969259,-1686031,0],[-1964651,-1689103,0],[-1967211,-1694223,0],[-1967211,-1695759,0],[-1966187,-1697807,0],[-1963627,-1698831,0],[-1962603,-1701391,0],[-1962091,-1704975,0],[-1959019,-1712655,0],[-1959019,-1714703,0],[-1961067,-1716239,0],[-1964651,-1716751,0],[-1974891,-1719823,0],[-1978475,-1720335,0],[-1983083,-1719823,0],[-1991787,-1721871,0],[-1991787,-1726479,0],[-1990763,-1727503,0],[-1984107,-1729551,0],[-1982059,-1732623,0],[-1983083,-1735183,0],[-1990251,-1741327,0],[-1990763,-1742863,0],[-1990763,-1746959,0],[-1989227,-1749007,0],[-1984619,-1752079,0],[-1988203,-1756687,0],[-1986667,-1762319,0],[-1986667,-1774095,0],[-1987691,-1775631,0],[-1990763,-1776655,0],[-1993835,-1778703,0],[-1998955,-1787407,0],[-2004587,-1788943,0],[-2007659,-1790479,0],[-2008683,-1803279,0],[-2012779,-1805839,0],[-2014827,-1809423,0],[-2017899,-1810959,0],[-2020971,-1817615,0],[-2022507,-1818127,0],[-2029675,-1818127,0],[-2033259,-1820175,0],[-2040427,-1816591,0],[-2040427,-1811983,0],[-2046571,-1809423,0],[-2048619,-1807887,0],[-2050667,-1801231,0],[-2051691,-1800719,0],[-2052203,-1801231,0],[-2053739,-1810447,0],[-2056811,-1817615,0],[-2062443,-1829391,0],[-2065515,-1828367,0],[-2069099,-1827855,0],[-2069611,-1826831,0],[-2071147,-1826319,0],[-2071147,-1825295,0],[-2071659,-1825807,0],[-2074219,-1820687,0],[-2075755,-1821199,0],[-2076267,-1819663,0],[-2075243,-1818639,0],[-2076267,-1817615,0],[-2075243,-1816591,0],[-2076267,-1816591,0],[-2077291,-1817615,0],[-2077803,-1819151,0],[-2077803,-1816591,0],[-2078827,-1816591,0],[-2078315,-1815567,0],[-2079851,-1816079,0],[-2080875,-1814543,0],[-2081899,-1816591,0],[-2084459,-1815567,0],[-2084971,-1818127,0],[-2087019,-1820175,0],[-2088555,-1819151,0],[-2093675,-1820175,0],[-2094699,-1818127,0],[-2096235,-1819663,0],[-2098283,-1819663,0],[-2098795,-1820687,0],[-2097259,-1822735,0],[-2098283,-1822223,0],[-2100843,-1821199,0],[-2101355,-1819663,0],[-2100331,-1818127,0],[-2104939,-1813007,0],[-2103915,-1810959,0],[-2105451,-1807887,0],[-2104427,-1808399,0],[-2103403,-1807375,0],[-2105963,-1805839,0],[-2114667,-1805839,0],[-2114667,-1807887,0],[-2117227,-1807375,0],[-2115691,-1810447,0],[-2117739,-1811983,0],[-2121835,-1808399,0],[-2122859,-1809423,0],[-2117739,-1817103,0],[-2119787,-1818127,0],[-2122347,-1818639,0],[-2125931,-1813519,0],[-2127467,-1809935,0],[-2126443,-1806863,0],[-2130027,-1807887,0],[-2136683,-1808399,0],[-2137195,-1809935,0],[-2139243,-1811471,0],[-2143851,-1811983,0],[-2145387,-1810959,0],[-2148459,-1813007,0],[-2147947,-1815055,0],[-2149483,-1815567,0],[-2155115,-1815055,0],[-2156139,-1814031,0],[-2159723,-1817615,0],[-2163819,-1817615,0],[-2166891,-1815567,0],[-2170475,-1815567,0],[-2183275,-1816591,0],[-2183275,-1815055,0],[-2186859,-1815567,0],[-2186859,-1816591,0],[-2189931,-1816591,0],[-2193003,-1815055,0],[-2196075,-1816079,0],[-2197611,-1815567,0],[-2197099,-1816591,0],[-2201195,-1817615,0],[-2205291,-1815567,0],[-2206827,-1813519,0],[-2209387,-1813519,0],[-2207339,-1808911,0],[-2203243,-1807375,0],[-2203755,-1806863,0],[-2205291,-1805839,0],[-2204267,-1804303,0],[-2201707,-1803791,0],[-2201707,-1802255,0],[-2202731,-1801231,0],[-2203243,-1797135,0],[-2204779,-1794575,0],[-2207851,-1794063,0],[-2210411,-1795599,0],[-2211435,-1793039,0],[-2212971,-1792527,0],[-2212459,-1787919,0],[-2216555,-1786383,0],[-2218091,-1787407,0],[-2218603,-1790991,0],[-2220651,-1784847,0],[-2224747,-1786383,0],[-2226283,-1787919,0],[-2228331,-1788431,0],[-2228843,-1787919,0]],[[-2228843,-1787919,0],[-2229355,-1786895,0],[-2230379,-1787407,0],[-2228843,-1787919,0]]]},{"id":23,"color":[0.9578039215686275,0.4342483660130719,0.26588235294117646,1],"coordinates":[[[-2117739,-1582095,0],[-2117227,-1585679,0],[-2118251,-1588751,0],[-2122347,-1593359,0],[-2126443,-1595919,0],[-2126443,-1594383,0],[-2125931,-1589263,0],[-2122347,-1587215,0],[-2117739,-1582095,0]]]},{"id":24,"color":[0.9577098039215687,0.4335686274509804,0.2655686274509804,1],"coordinates":[[[-2228843,-1787919,0],[-2228331,-1788431,0],[-2226283,-1787919,0],[-2224747,-1786383,0],[-2220651,-1784847,0],[-2218603,-1790991,0],[-2218091,-1787407,0],[-2216555,-1786383,0],[-2212459,-1787919,0],[-2212971,-1792527,0],[-2211435,-1793039,0],[-2210411,-1795599,0],[-2207851,-1794063,0],[-2204779,-1794575,0],[-2203243,-1797135,0],[-2202731,-1801231,0],[-2201707,-1802255,0],[-2201707,-1803791,0],[-2204267,-1804303,0],[-2205291,-1805839,0],[-2203755,-1806863,0],[-2203243,-1807375,0],[-2207339,-1808911,0],[-2209387,-1813519,0],[-2206827,-1813519,0],[-2205291,-1815567,0],[-2201195,-1817615,0],[-2197099,-1816591,0],[-2197611,-1815567,0],[-2196075,-1816079,0],[-2193003,-1815055,0],[-2189931,-1816591,0],[-2186859,-1816591,0],[-2186859,-1815567,0],[-2183275,-1815055,0],[-2183275,-1816591,0],[-2170475,-1815567,0],[-2166891,-1815567,0],[-2163819,-1817615,0],[-2159723,-1817615,0],[-2156139,-1814031,0],[-2155115,-1815055,0],[-2149483,-1815567,0],[-2147947,-1815055,0],[-2148459,-1813007,0],[-2145387,-1810959,0],[-2143851,-1811983,0],[-2139243,-1811471,0],[-2137195,-1809935,0],[-2136683,-1808399,0],[-2130027,-1807887,0],[-2126443,-1806863,0],[-2127467,-1809935,0],[-2125931,-1813519,0],[-2122347,-1818639,0],[-2119787,-1818127,0],[-2117739,-1817103,0],[-2122859,-1809423,0],[-2121835,-1808399,0],[-2117739,-1811983,0],[-2115691,-1810447,0],[-2117227,-1807375,0],[-2114667,-1807887,0],[-2114667,-1805839,0],[-2105963,-1805839,0],[-2103403,-1807375,0],[-2104427,-1808399,0],[-2105451,-1807887,0],[-2103915,-1810959,0],[-2104939,-1813007,0],[-2100331,-1818127,0],[-2101355,-1819663,0],[-2100843,-1821199,0],[-2097771,-1822735,0],[-2097259,-1822735,0],[-2098795,-1820687,0],[-2098283,-1819663,0],[-2096235,-1819663,0],[-2094699,-1818127,0],[-2093675,-1820175,0],[-2088555,-1819151,0],[-2087019,-1820175,0],[-2084971,-1818127,0],[-2084459,-1815567,0],[-2081899,-1816591,0],[-2080875,-1814543,0],[-2079851,-1816079,0],[-2078315,-1815567,0],[-2078827,-1816591,0],[-2077803,-1816591,0],[-2077803,-1819151,0],[-2077291,-1817615,0],[-2076267,-1816591,0],[-2075243,-1816591,0],[-2076267,-1817615,0],[-2075243,-1818639,0],[-2076267,-1819663,0],[-2075755,-1821199,0],[-2074219,-1820687,0],[-2071659,-1825807,0],[-2071147,-1825295,0],[-2071147,-1826319,0],[-2069611,-1826831,0],[-2069099,-1827855,0],[-2065515,-1828367,0],[-2062443,-1829391,0],[-2062443,-1831439,0],[-2060395,-1836559,0],[-2058859,-1837583,0],[-2053739,-1839119,0],[-2052715,-1840143,0],[-2052715,-1841679,0],[-2054251,-1842191,0],[-2060907,-1839631,0],[-2062443,-1839631,0],[-2062443,-1846287,0],[-2063467,-1848335,0],[-2066027,-1849359,0],[-2063467,-1853967,0],[-2065515,-1854991,0],[-2069611,-1854991,0],[-2073707,-1857551,0],[-2077291,-1855503,0],[-2081899,-1855503,0],[-2082411,-1857039,0],[-2080875,-1862159,0],[-2080875,-1866767,0],[-2085483,-1873935,0],[-2091627,-1880079,0],[-2094699,-1885199,0],[-2096235,-1884687,0],[-2100331,-1880591,0],[-2108523,-1875471,0],[-2112619,-1874447,0],[-2114155,-1874447,0],[-2118251,-1876495,0],[-2120811,-1874447,0],[-2123883,-1874447,0],[-2126443,-1876495,0],[-2130539,-1877519,0],[-2131563,-1878543,0],[-2131051,-1880591,0],[-2129003,-1882639,0],[-2125419,-1884687,0],[-2123883,-1888271,0],[-2124395,-1898511,0],[-2126443,-1904143,0],[-2125419,-1906703,0],[-2120811,-1910287,0],[-2115691,-1912335,0],[-2109035,-1912847,0],[-2106475,-1914383,0],[-2106475,-1918479,0],[-2114155,-1930255,0],[-2110571,-1933327,0],[-2106475,-1939983,0],[-2096235,-1945103,0],[-2091115,-1949199,0],[-2085483,-1949711,0],[-2080875,-1949199,0],[-2078827,-1949711,0],[-2078827,-1956367,0],[-2093675,-1972239,0],[-2102379,-1974287,0],[-2105451,-1982479,0],[-2110571,-1983503,0],[-2115691,-1987087,0],[-2122347,-1989647,0],[-2123883,-1986575,0],[-2126443,-1986575,0],[-2138219,-1994767,0],[-2142315,-1995279,0],[-2144875,-1994255,0],[-2146923,-1991695,0],[-2154091,-1982479,0],[-2154603,-1979919,0],[-2161771,-1971727,0],[-2168939,-1970703,0],[-2172523,-1962511,0],[-2177643,-1958927,0],[-2180203,-1952271,0],[-2185323,-1948175,0],[-2187371,-1947663,0],[-2190955,-1948687,0],[-2194027,-1944591,0],[-2197611,-1947151,0],[-2196075,-1944591,0],[-2196587,-1944079,0],[-2195563,-1939983,0],[-2195563,-1936399,0],[-2196075,-1934863,0],[-2199147,-1934863,0],[-2201707,-1937423,0],[-2205291,-1937935,0],[-2209899,-1940495,0],[-2212459,-1941519,0],[-2211947,-1946639,0],[-2217579,-1944591,0],[-2217067,-1948175,0],[-2216043,-1950223,0],[-2220651,-1952271,0],[-2221675,-1953807,0],[-2228331,-1951759,0],[-2234475,-1951247,0],[-2236523,-1952271,0],[-2236011,-1959951,0],[-2237035,-1967119,0],[-2236523,-1979919,0],[-2238059,-1985039,0],[-2241131,-1989647,0],[-2248299,-1997839,0],[-2263147,-2001935,0],[-2263659,-2003983,0],[-2262123,-2005007,0],[-2263147,-2009103,0],[-2266219,-2013711,0],[-2268779,-2015247,0],[-2273899,-2013199,0],[-2275435,-2013711,0],[-2278507,-2015759,0],[-2291307,-2012175,0],[-2296939,-2012687,0],[-2300011,-2011151,0],[-2306667,-2010127,0],[-2308715,-2008591,0],[-2317419,-2000399,0],[-2324587,-1990671,0],[-2325099,-1987599,0],[-2324075,-1986063,0],[-2324075,-1983503,0],[-2327147,-1979919,0],[-2333803,-1978895,0],[-2333803,-1979407,0],[-2335339,-1980431,0],[-2337899,-1979407,0],[-2339435,-1976847,0],[-2339435,-1975311,0],[-2344043,-1973263,0],[-2344555,-1976847,0],[-2347115,-1979407,0],[-2349675,-1980943,0],[-2352747,-1981455,0],[-2352747,-1979407,0],[-2355307,-1975311,0],[-2355819,-1971727,0],[-2353771,-1968655,0],[-2353259,-1965583,0],[-2351723,-1965583,0],[-2350699,-1964559,0],[-2350699,-1959951,0],[-2354795,-1958927,0],[-2356843,-1957391,0],[-2360427,-1957903,0],[-2360939,-1953295,0],[-2359915,-1950223,0],[-2361963,-1947663,0],[-2363499,-1949199,0],[-2368619,-1950735,0],[-2374251,-1954319,0],[-2375275,-1952271,0],[-2373739,-1950735,0],[-2374251,-1949199,0],[-2375275,-1948175,0],[-2377323,-1949199,0],[-2379371,-1946127,0],[-2380907,-1945103,0],[-2390635,-1949711,0],[-2392171,-1945103,0],[-2393195,-1945103,0],[-2394219,-1943567,0],[-2394219,-1936911,0],[-2395243,-1935375,0],[-2395755,-1931279,0],[-2399339,-1934351,0],[-2401899,-1937423,0],[-2402923,-1941007,0],[-2407531,-1941007,0],[-2410091,-1937423,0],[-2410603,-1933327,0],[-2410091,-1928207,0],[-2411627,-1926159,0],[-2409579,-1925647,0],[-2411115,-1925135,0],[-2411115,-1923599,0],[-2412651,-1923087,0],[-2416747,-1924623,0],[-2420843,-1922575,0],[-2421355,-1923599,0],[-2423403,-1923599,0],[-2425963,-1925135,0],[-2424427,-1932303,0],[-2422891,-1935887,0],[-2419307,-1939983,0],[-2424427,-1940495,0],[-2430571,-1938959,0],[-2437739,-1937935,0],[-2440811,-1938447,0],[-2440811,-1944079,0],[-2438251,-1947663,0],[-2438251,-1949711,0],[-2439787,-1950735,0],[-2438251,-1953295,0],[-2437739,-1956367,0],[-2434667,-1959951,0],[-2434155,-1965583,0],[-2436203,-1973775,0],[-2441323,-1973775,0],[-2443883,-1974799,0],[-2446443,-1970191,0],[-2447979,-1972239,0],[-2451051,-1971215,0],[-2452075,-1972751,0],[-2453611,-1972751,0],[-2454635,-1973775,0],[-2456683,-1973263,0],[-2459755,-1978383,0],[-2462827,-1979919,0],[-2465387,-1980431,0],[-2466411,-1981967,0],[-2467947,-1981967,0],[-2468459,-1984015,0],[-2477675,-1988111,0],[-2487915,-1993743,0],[-2489451,-1995279,0],[-2501227,-1995279,0],[-2502763,-1995791,0],[-2505323,-1992207,0],[-2507371,-1990671,0],[-2519659,-1992719,0],[-2529899,-1992719,0],[-2532459,-1989135,0],[-2532459,-1981455,0],[-2538091,-1979407,0],[-2541163,-1971215,0],[-2543211,-1970191,0],[-2552939,-1970191,0],[-2553963,-1969167,0],[-2554987,-1967119,0],[-2557547,-1964047,0],[-2560619,-1963023,0],[-2563691,-1960463,0],[-2563179,-1956879,0],[-2560619,-1953295,0],[-2557547,-1945615,0],[-2557547,-1938447,0],[-2563179,-1933327,0],[-2565227,-1933327,0],[-2567787,-1929743,0],[-2569323,-1926159,0],[-2573931,-1924111,0],[-2574955,-1924111,0],[-2577003,-1926671,0],[-2580075,-1925135,0],[-2586219,-1930255,0],[-2588267,-1930255,0],[-2590827,-1933327,0],[-2594923,-1933327,0],[-2595947,-1932815,0],[-2596459,-1929743,0],[-2599531,-1927695,0],[-2602091,-1927695,0],[-2617963,-1947663,0],[-2620011,-1949199,0],[-2627691,-1948175,0],[-2632299,-1944591,0],[-2633323,-1933327,0],[-2638443,-1924111,0],[-2638955,-1920527,0],[-2641515,-1917455,0],[-2643051,-1916943,0],[-2647659,-1917455,0],[-2648171,-1912847,0],[-2638443,-1907215,0],[-2638443,-1900559,0],[-2639979,-1889807,0],[-2639467,-1881103,0],[-2638443,-1877007,0],[-2636395,-1875471,0],[-2636395,-1873935,0],[-2634347,-1874447,0],[-2632811,-1879567,0],[-2630251,-1881103,0],[-2628203,-1880591,0],[-2629739,-1869839,0],[-2627179,-1870351,0],[-2623083,-1868303,0],[-2623083,-1866767,0],[-2621035,-1867279,0],[-2620011,-1863695,0],[-2621035,-1862159,0],[-2618987,-1861647,0],[-2616939,-1862671,0],[-2615915,-1859599,0],[-2613867,-1862159,0],[-2612843,-1861647,0],[-2613355,-1859599,0],[-2612331,-1858063,0],[-2613867,-1855503,0],[-2615915,-1854479,0],[-2611819,-1854991,0],[-2611307,-1850895,0],[-2609771,-1852943,0],[-2610283,-1854991,0],[-2608747,-1856015,0],[-2609259,-1859599,0],[-2607211,-1859087,0],[-2604139,-1859599,0],[-2603115,-1858063,0],[-2600555,-1858575,0],[-2601579,-1854991,0],[-2604139,-1850383,0],[-2599531,-1844751,0],[-2591339,-1847823,0],[-2588267,-1847311,0],[-2580587,-1853967,0],[-2579563,-1851407,0],[-2578027,-1851407,0],[-2575467,-1855503,0],[-2572907,-1855503,0],[-2566251,-1857039,0],[-2564203,-1851407,0],[-2560619,-1848335,0],[-2559595,-1849359,0],[-2552939,-1849871,0],[-2546795,-1853455,0],[-2546283,-1850895,0],[-2547307,-1848335,0],[-2545771,-1840143,0],[-2543723,-1836047,0],[-2537067,-1836047,0],[-2533483,-1835535,0],[-2531435,-1832975,0],[-2526315,-1823759,0],[-2527339,-1817103,0],[-2526827,-1815567,0],[-2518123,-1814031,0],[-2515051,-1809935,0],[-2512491,-1808911,0],[-2507371,-1807887,0],[-2507883,-1806863,0],[-2508907,-1798671,0],[-2508395,-1795087,0],[-2508907,-1791503,0],[-2509931,-1789455,0],[-2506859,-1787407,0],[-2506347,-1786383,0],[-2509419,-1784847,0],[-2510955,-1781775,0],[-2511979,-1770511,0],[-2517611,-1763855,0],[-2521707,-1765903,0],[-2523755,-1765391,0],[-2524267,-1761295,0],[-2525803,-1759247,0],[-2524779,-1755151,0],[-2525803,-1753103,0],[-2528875,-1752591,0],[-2530923,-1751055,0],[-2534507,-1751567,0],[-2536043,-1751055,0],[-2533483,-1746959,0],[-2532971,-1742351,0],[-2530923,-1742863,0],[-2528875,-1745423,0],[-2526315,-1745423,0],[-2524779,-1744399,0],[-2522731,-1745935,0],[-2519659,-1743887,0],[-2518123,-1740815,0],[-2521195,-1738767,0],[-2524267,-1740815,0],[-2527339,-1735183,0],[-2526827,-1734671,0],[-2527851,-1732623,0],[-2527339,-1731599,0],[-2527851,-1731087,0],[-2526827,-1729039,0],[-2527339,-1727503,0],[-2525803,-1726991,0],[-2524779,-1728015,0],[-2524267,-1726991,0],[-2524267,-1713679,0],[-2518635,-1713167,0],[-2511979,-1722383,0],[-2508395,-1721359,0],[-2502251,-1723407,0],[-2497131,-1720847,0],[-2489963,-1721871,0],[-2486379,-1718287,0],[-2486891,-1716239,0],[-2484843,-1711631,0],[-2484843,-1707023,0],[-2481771,-1698831,0],[-2475627,-1690639,0],[-2472043,-1687567,0],[-2470507,-1683471,0],[-2467947,-1682447,0],[-2464363,-1676815,0],[-2457707,-1672719,0],[-2456171,-1670159,0],[-2455659,-1666575,0],[-2451563,-1672719,0],[-2445419,-1678863,0],[-2445419,-1680399,0],[-2437227,-1679375,0],[-2433643,-1682959,0],[-2431595,-1689103,0],[-2430571,-1693711,0],[-2431083,-1696783,0],[-2430571,-1697295,0],[-2428011,-1696783,0],[-2424427,-1698831,0],[-2420843,-1704463,0],[-2427499,-1715727,0],[-2426475,-1723919,0],[-2424939,-1726991,0],[-2420843,-1728527,0],[-2419819,-1731087,0],[-2417259,-1741327,0],[-2411115,-1758223,0],[-2411627,-1763343,0],[-2404971,-1769487,0],[-2404459,-1770511,0],[-2405995,-1773583,0],[-2403947,-1774607,0],[-2402923,-1778191,0],[-2403435,-1786383,0],[-2405483,-1788431,0],[-2409067,-1795599,0],[-2409579,-1799183,0],[-2411115,-1799695,0],[-2412139,-1801231,0],[-2412139,-1803279,0],[-2410603,-1805327,0],[-2403947,-1810959,0],[-2406507,-1810959,0],[-2407019,-1812495,0],[-2408555,-1813519,0],[-2410091,-1815567,0],[-2407019,-1818639,0],[-2406507,-1820175,0],[-2402923,-1820687,0],[-2395243,-1816079,0],[-2391659,-1821199,0],[-2390635,-1825807,0],[-2386027,-1826319,0],[-2387563,-1827855,0],[-2386539,-1829391,0],[-2380395,-1832463,0],[-2373227,-1831439,0],[-2371691,-1835023,0],[-2372203,-1840655,0],[-2369643,-1842191,0],[-2367595,-1841167,0],[-2364523,-1843215,0],[-2364523,-1841679,0],[-2362475,-1841679,0],[-2362475,-1840143,0],[-2360427,-1840143,0],[-2359403,-1838095,0],[-2354283,-1835535,0],[-2350187,-1827855,0],[-2347115,-1825295,0],[-2345579,-1825295,0],[-2346091,-1823247,0],[-2341483,-1816591,0],[-2338411,-1816079,0],[-2334827,-1813007,0],[-2332779,-1814031,0],[-2331755,-1813519,0],[-2332267,-1811983,0],[-2331243,-1810447,0],[-2326123,-1809423,0],[-2321515,-1805327,0],[-2317419,-1808911,0],[-2314347,-1807375,0],[-2311275,-1811983,0],[-2310763,-1807887,0],[-2309739,-1807375,0],[-2308203,-1809423,0],[-2300523,-1807375,0],[-2298987,-1804303,0],[-2300523,-1801231,0],[-2299499,-1800207,0],[-2300011,-1799183,0],[-2297451,-1796623,0],[-2296427,-1797135,0],[-2294891,-1795599,0],[-2293867,-1795599,0],[-2294379,-1797135,0],[-2293867,-1797647,0],[-2289259,-1795599,0],[-2289771,-1797647,0],[-2288235,-1797647,0],[-2284139,-1792527,0],[-2284139,-1789455,0],[-2283627,-1787919,0],[-2281067,-1786895,0],[-2277995,-1787919,0],[-2274923,-1787407,0],[-2274411,-1788431,0],[-2271339,-1786895,0],[-2268779,-1787919,0],[-2267755,-1786895,0],[-2268267,-1788431,0],[-2264171,-1789967,0],[-2266731,-1795599,0],[-2263147,-1792015,0],[-2262123,-1792015,0],[-2262123,-1795599,0],[-2261099,-1796111,0],[-2260075,-1795087,0],[-2255979,-1794575,0],[-2255467,-1795087,0],[-2255979,-1798671,0],[-2253931,-1798671,0],[-2252395,-1797135,0],[-2252395,-1795599,0],[-2251883,-1794063,0],[-2247787,-1795599,0],[-2247787,-1785359,0],[-2248811,-1781775,0],[-2247275,-1780239,0],[-2244203,-1779215,0],[-2242667,-1779215,0],[-2242155,-1783823,0],[-2237547,-1782799,0],[-2235499,-1785871,0],[-2232939,-1787919,0],[-2231403,-1785359,0],[-2231403,-1786895,0],[-2232427,-1787919,0],[-2230379,-1788431,0],[-2228843,-1787919,0]]]},{"id":24,"color":[0.9577098039215687,0.4335686274509804,0.2655686274509804,1],"coordinates":[[[-2228843,-1787919,0],[-2230379,-1787407,0],[-2229355,-1786895,0],[-2228843,-1787919,0]]]},{"id":25,"color":[0.9578980392156863,0.4349281045751634,0.26619607843137255,1],"coordinates":[[[-2420843,-1922575,0],[-2416747,-1924623,0],[-2412651,-1923087,0],[-2411115,-1923599,0],[-2411115,-1925135,0],[-2409579,-1925647,0],[-2411627,-1926159,0],[-2410091,-1928207,0],[-2410603,-1933327,0],[-2410091,-1937423,0],[-2407531,-1941007,0],[-2402923,-1941007,0],[-2401899,-1937423,0],[-2399339,-1934351,0],[-2395755,-1931279,0],[-2395243,-1935375,0],[-2394219,-1936911,0],[-2394219,-1943567,0],[-2393195,-1945103,0],[-2392171,-1945103,0],[-2390635,-1949711,0],[-2380907,-1945103,0],[-2379371,-1946127,0],[-2377323,-1949199,0],[-2375275,-1948175,0],[-2374251,-1949199,0],[-2373739,-1950735,0],[-2375275,-1952271,0],[-2374251,-1954319,0],[-2368619,-1950735,0],[-2363499,-1949199,0],[-2361963,-1947663,0],[-2359915,-1950223,0],[-2360939,-1953295,0],[-2360427,-1957903,0],[-2356843,-1957391,0],[-2354795,-1958927,0],[-2350699,-1959951,0],[-2350699,-1964559,0],[-2351723,-1965583,0],[-2353259,-1965583,0],[-2353771,-1968655,0],[-2355819,-1971727,0],[-2355307,-1975311,0],[-2352747,-1979407,0],[-2352747,-1981455,0],[-2349675,-1980943,0],[-2347115,-1979407,0],[-2344555,-1976847,0],[-2344043,-1973263,0],[-2339435,-1975311,0],[-2339435,-1976847,0],[-2337899,-1979407,0],[-2335339,-1980431,0],[-2333803,-1979407,0],[-2333803,-1978895,0],[-2327147,-1979919,0],[-2324075,-1983503,0],[-2325099,-1989135,0],[-2317419,-2000399,0],[-2312811,-2004495,0],[-2311275,-2007055,0],[-2306667,-2010127,0],[-2300011,-2011151,0],[-2296939,-2012687,0],[-2291307,-2012175,0],[-2278507,-2015759,0],[-2275435,-2013711,0],[-2268779,-2015247,0],[-2266219,-2013711,0],[-2263659,-2010639,0],[-2262123,-2005007,0],[-2263659,-2003983,0],[-2263147,-2001935,0],[-2248299,-1997839,0],[-2242667,-1991695,0],[-2238059,-1985039,0],[-2236523,-1979919,0],[-2237035,-1967119,0],[-2236011,-1959951,0],[-2236523,-1952271,0],[-2234475,-1951247,0],[-2228331,-1951759,0],[-2221675,-1953807,0],[-2220651,-1952271,0],[-2216043,-1950223,0],[-2217067,-1948175,0],[-2217579,-1944591,0],[-2211947,-1946639,0],[-2212459,-1941519,0],[-2209899,-1940495,0],[-2205291,-1937935,0],[-2201707,-1937423,0],[-2198635,-1934863,0],[-2196075,-1934863,0],[-2195563,-1936399,0],[-2195563,-1939983,0],[-2196587,-1944079,0],[-2196075,-1944591,0],[-2197611,-1947151,0],[-2194027,-1944591,0],[-2190955,-1948687,0],[-2187371,-1947663,0],[-2185323,-1948175,0],[-2180203,-1952271,0],[-2177643,-1958927,0],[-2172523,-1962511,0],[-2168939,-1970703,0],[-2161771,-1971727,0],[-2157675,-1975823,0],[-2148459,-1990159,0],[-2144875,-1994255,0],[-2141291,-1995279,0],[-2138219,-1994767,0],[-2125419,-1986063,0],[-2123883,-1986575,0],[-2122347,-1989647,0],[-2125419,-1999887,0],[-2126955,-2001423,0],[-2135147,-2004495,0],[-2139243,-2009615,0],[-2140779,-2010127,0],[-2141803,-2004495,0],[-2143339,-2003471,0],[-2145387,-2003471,0],[-2152555,-2006543,0],[-2157163,-2011151,0],[-2161771,-2014223,0],[-2162283,-2015247,0],[-2161771,-2018319,0],[-2162795,-2020879,0],[-2166891,-2023439,0],[-2172523,-2026511,0],[-2175083,-2029071,0],[-2175595,-2032655,0],[-2181739,-2044943,0],[-2185323,-2043919,0],[-2186347,-2044431,0],[-2187883,-2049039,0],[-2185835,-2053647,0],[-2187371,-2056719,0],[-2190955,-2059279,0],[-2198123,-2059791,0],[-2199147,-2064399,0],[-2199659,-2068495,0],[-2198635,-2070543,0],[-2197099,-2071055,0],[-2179179,-2071567,0],[-2167915,-2073103,0],[-2162283,-2075151,0],[-2158187,-2075151,0],[-2151531,-2076687,0],[-2147435,-2076687,0],[-2138731,-2083343,0],[-2136171,-2083343,0],[-2134123,-2080783,0],[-2132075,-2081295,0],[-2131051,-2082831,0],[-2132587,-2089999,0],[-2132075,-2098703,0],[-2134635,-2103311,0],[-2136683,-2104847,0],[-2137707,-2107407,0],[-2137195,-2111503,0],[-2138731,-2116111,0],[-2138219,-2120719,0],[-2138731,-2125839,0],[-2135147,-2128399,0],[-2130539,-2133007,0],[-2125419,-2126351,0],[-2123371,-2125839,0],[-2120811,-2126351,0],[-2120299,-2128911,0],[-2118763,-2128911,0],[-2117739,-2126351,0],[-2115179,-2125327,0],[-2108523,-2117135,0],[-2106475,-2115599,0],[-2101355,-2115087,0],[-2099307,-2117135,0],[-2098795,-2121231,0],[-2097771,-2123791,0],[-2095211,-2126351,0],[-2097259,-2134543,0],[-2091115,-2134543,0],[-2088043,-2136079,0],[-2091115,-2136079,0],[-2092651,-2138639,0],[-2094699,-2137615,0],[-2097259,-2138127,0],[-2098795,-2139663,0],[-2101867,-2138639,0],[-2108523,-2139151,0],[-2110571,-2142735,0],[-2113643,-2144271,0],[-2120299,-2141711,0],[-2123883,-2143247,0],[-2127467,-2147343,0],[-2131051,-2146831,0],[-2131051,-2144783,0],[-2133611,-2145807,0],[-2133611,-2147343,0],[-2135659,-2148879,0],[-2138219,-2152975,0],[-2136683,-2153487,0],[-2136171,-2155535,0],[-2135147,-2156559,0],[-2135147,-2158607,0],[-2139243,-2160143,0],[-2136683,-2164751,0],[-2140779,-2166799,0],[-2139243,-2168847,0],[-2140779,-2170383,0],[-2142827,-2170895,0],[-2145899,-2172431,0],[-2148459,-2174991,0],[-2149483,-2174479,0],[-2151531,-2175503,0],[-2155115,-2173967,0],[-2158187,-2176015,0],[-2161259,-2176015,0],[-2163819,-2172943,0],[-2163307,-2171919,0],[-2163819,-2171919,0],[-2164331,-2172943,0],[-2161771,-2176015,0],[-2161771,-2177551,0],[-2162795,-2178063,0],[-2162795,-2180623,0],[-2170475,-2194447,0],[-2176107,-2197519,0],[-2182251,-2198543,0],[-2183275,-2199567,0],[-2182251,-2201615,0],[-2175083,-2204175,0],[-2174059,-2205199,0],[-2175083,-2207759,0],[-2175083,-2211855,0],[-2177131,-2215439,0],[-2177131,-2219535,0],[-2179179,-2224655,0],[-2183275,-2230799,0],[-2185835,-2233359,0],[-2189419,-2234383,0],[-2190443,-2235407,0],[-2190955,-2242575,0],[-2195563,-2245135,0],[-2197099,-2253839,0],[-2198123,-2253327,0],[-2199659,-2253839,0],[-2204779,-2251791,0],[-2206827,-2252815,0],[-2208875,-2252303,0],[-2209899,-2251279,0],[-2210923,-2246671,0],[-2219115,-2238479,0],[-2220139,-2238479,0],[-2223723,-2244623,0],[-2222699,-2251279,0],[-2221163,-2253839,0],[-2215531,-2254351,0],[-2207851,-2258447,0],[-2205291,-2261519,0],[-2204267,-2267663,0],[-2201195,-2268687,0],[-2201195,-2269711,0],[-2205291,-2271759,0],[-2207851,-2276367,0],[-2209899,-2276879,0],[-2212971,-2274831,0],[-2215019,-2271247,0],[-2219115,-2271247,0],[-2227819,-2268175,0],[-2232939,-2256399,0],[-2232427,-2253839,0],[-2228843,-2252303,0],[-2229867,-2248719,0],[-2231915,-2247183,0],[-2239083,-2250255,0],[-2242667,-2249743,0],[-2242667,-2248719,0],[-2239083,-2244111,0],[-2238571,-2243087,0],[-2239595,-2242063,0],[-2245739,-2243087,0],[-2246763,-2244623,0],[-2248299,-2252303,0],[-2252395,-2252815,0],[-2265707,-2252815,0],[-2269803,-2251279,0],[-2271339,-2253839,0],[-2278507,-2253839,0],[-2282603,-2250767,0],[-2283115,-2249231,0],[-2286187,-2246671,0],[-2285675,-2247695,0],[-2287723,-2248207,0],[-2288747,-2249743,0],[-2287723,-2249231,0],[-2287211,-2249743,0],[-2288235,-2251791,0],[-2287723,-2252303,0],[-2285163,-2251791,0],[-2285675,-2255375,0],[-2287723,-2256911,0],[-2285675,-2258447,0],[-2286187,-2258959,0],[-2287723,-2257423,0],[-2287723,-2258447,0],[-2285163,-2262031,0],[-2284139,-2264079,0],[-2282091,-2266127,0],[-2281579,-2269199,0],[-2282603,-2272271,0],[-2285675,-2275343,0],[-2286699,-2278415,0],[-2287723,-2284047,0],[-2291819,-2289679,0],[-2293867,-2290191,0],[-2294891,-2289167,0],[-2294891,-2284559,0],[-2295915,-2283023,0],[-2297963,-2282511,0],[-2304107,-2288143,0],[-2304619,-2289679,0],[-2305131,-2291727,0],[-2302059,-2302479,0],[-2298987,-2307087,0],[-2293355,-2312207,0],[-2292843,-2313231,0],[-2295915,-2318351,0],[-2294891,-2319887,0],[-2296427,-2322959,0],[-2299499,-2321935,0],[-2303083,-2322447,0],[-2304619,-2321935,0],[-2308715,-2315279,0],[-2317931,-2311695,0],[-2321003,-2311695,0],[-2325099,-2314255,0],[-2327659,-2314767,0],[-2328171,-2310159,0],[-2329195,-2307087,0],[-2330731,-2305039,0],[-2333803,-2302991,0],[-2336875,-2304015,0],[-2337387,-2307087,0],[-2333803,-2317839,0],[-2334827,-2322959,0],[-2335851,-2324495,0],[-2337387,-2326031,0],[-2341483,-2327055,0],[-2344555,-2325519,0],[-2348139,-2319375,0],[-2351211,-2320911,0],[-2354795,-2326031,0],[-2355307,-2329615,0],[-2352235,-2335759,0],[-2358891,-2336271,0],[-2366059,-2343439,0],[-2369131,-2343951,0],[-2373739,-2348047,0],[-2387563,-2348047,0],[-2389611,-2345999,0],[-2396779,-2343951,0],[-2399339,-2341391,0],[-2400875,-2337295,0],[-2401899,-2335759,0],[-2403947,-2334223,0],[-2408555,-2332687,0],[-2413675,-2327055,0],[-2415211,-2324495,0],[-2412139,-2321423,0],[-2411627,-2317839,0],[-2408555,-2317839,0],[-2403947,-2321423,0],[-2402411,-2320399,0],[-2401387,-2315791,0],[-2402411,-2307087,0],[-2403947,-2297359,0],[-2406507,-2295311,0],[-2408043,-2293263,0],[-2409067,-2288655,0],[-2416747,-2279951,0],[-2422379,-2275855,0],[-2428011,-2275343,0],[-2431595,-2276367,0],[-2432619,-2275855,0],[-2428011,-2268687,0],[-2431083,-2261519,0],[-2435179,-2253839,0],[-2433643,-2250255,0],[-2426475,-2240527,0],[-2425451,-2240527,0],[-2419307,-2243599,0],[-2417259,-2241551,0],[-2409579,-2241551,0],[-2405995,-2240015,0],[-2404971,-2235407,0],[-2410091,-2228751,0],[-2409579,-2219535,0],[-2407531,-2214415,0],[-2400363,-2209295,0],[-2398315,-2204175,0],[-2399339,-2201615,0],[-2401899,-2200591,0],[-2408043,-2203151,0],[-2412651,-2203151,0],[-2415211,-2200591,0],[-2415723,-2197519,0],[-2413675,-2192399,0],[-2411627,-2190863,0],[-2399339,-2186255,0],[-2398315,-2185231,0],[-2396267,-2181647,0],[-2396779,-2177551,0],[-2408043,-2172431,0],[-2409579,-2168847,0],[-2409067,-2166287,0],[-2407019,-2164751,0],[-2397291,-2164751,0],[-2392683,-2163727,0],[-2389611,-2160655,0],[-2388075,-2153999,0],[-2393707,-2147343,0],[-2409067,-2141199,0],[-2419307,-2138127,0],[-2421355,-2136591,0],[-2421355,-2134543,0],[-2418283,-2131983,0],[-2408555,-2129935,0],[-2403947,-2126351,0],[-2401387,-2121743,0],[-2401387,-2114063,0],[-2405483,-2109455,0],[-2407019,-2103823,0],[-2414187,-2101775,0],[-2420843,-2106383,0],[-2424939,-2107407,0],[-2430571,-2103311,0],[-2433131,-2100239,0],[-2434667,-2096143,0],[-2438251,-2093071,0],[-2440299,-2086415,0],[-2441835,-2085391,0],[-2443883,-2077711,0],[-2451051,-2076687,0],[-2453611,-2080271,0],[-2459755,-2086415,0],[-2459755,-2081807,0],[-2456683,-2074127,0],[-2456171,-2071567,0],[-2457195,-2070543,0],[-2466923,-2067983,0],[-2468459,-2061839,0],[-2471019,-2060303,0],[-2482283,-2062863,0],[-2485867,-2062351,0],[-2487403,-2061327,0],[-2488427,-2055183,0],[-2488427,-2049551,0],[-2490475,-2043919,0],[-2487403,-2043407,0],[-2482283,-2043919,0],[-2481259,-2043407,0],[-2480235,-2040847,0],[-2482795,-2021903,0],[-2484843,-2018319,0],[-2490987,-2017807,0],[-2498155,-2013711,0],[-2505835,-2018319,0],[-2513003,-2024463,0],[-2515051,-2025487,0],[-2517611,-2024975,0],[-2518123,-2022415,0],[-2517099,-2019855,0],[-2512491,-2015759,0],[-2510955,-2013199,0],[-2510443,-2004495,0],[-2504811,-2001423,0],[-2503275,-1996303,0],[-2501227,-1995279,0],[-2489451,-1995279,0],[-2487915,-1993743,0],[-2477675,-1988111,0],[-2468459,-1984015,0],[-2467947,-1981967,0],[-2466411,-1981967,0],[-2464875,-1979919,0],[-2462827,-1979919,0],[-2459755,-1978383,0],[-2456683,-1973263,0],[-2454635,-1973775,0],[-2453611,-1972751,0],[-2452075,-1972751,0],[-2451051,-1971215,0],[-2447979,-1972239,0],[-2445931,-1970191,0],[-2443883,-1974799,0],[-2441323,-1973775,0],[-2436203,-1973775,0],[-2434155,-1965583,0],[-2434667,-1959951,0],[-2437739,-1956367,0],[-2438251,-1953295,0],[-2439787,-1950735,0],[-2438251,-1949711,0],[-2438251,-1947663,0],[-2440811,-1944079,0],[-2440811,-1938447,0],[-2437739,-1937935,0],[-2430571,-1938959,0],[-2424427,-1940495,0],[-2419307,-1939983,0],[-2422891,-1935887,0],[-2424427,-1932303,0],[-2425963,-1925135,0],[-2423403,-1923599,0],[-2421355,-1923599,0],[-2420843,-1922575,0]]]},{"id":25,"color":[0.9578980392156863,0.4349281045751634,0.26619607843137255,1],"coordinates":[[[-2282091,-2257935,0],[-2285163,-2259983,0],[-2284651,-2258447,0],[-2284139,-2257935,0],[-2282091,-2257935,0]]]},{"id":26,"color":[0.9576156862745099,0.4328888888888889,0.26525490196078433,1],"coordinates":[[[-1745003,-1656847,0],[-1738347,-1659919,0],[-1733227,-1659407,0],[-1726571,-1662479,0],[-1717355,-1662479,0],[-1714795,-1663503,0],[-1706091,-1658383,0],[-1705067,-1666575,0],[-1705579,-1679375,0],[-1704043,-1687567,0],[-1704043,-1697807,0],[-1702507,-1702927,0],[-1699435,-1708047,0],[-1692779,-1715727,0],[-1691755,-1722895,0],[-1692267,-1728015,0],[-1693803,-1730575,0],[-1697387,-1733647,0],[-1697387,-1745423,0],[-1695339,-1749007,0],[-1692779,-1763343,0],[-1692779,-1765391,0],[-1695339,-1771023,0],[-1695851,-1773583,0],[-1695339,-1775631,0],[-1692779,-1779727,0],[-1694827,-1785871,0],[-1694315,-1793551,0],[-1695339,-1801743,0],[-1692267,-1807375,0],[-1692779,-1809423,0],[-1698923,-1819151,0],[-1699435,-1821199,0],[-1695851,-1826319,0],[-1693291,-1827343,0],[-1688171,-1832463,0],[-1679467,-1837583,0],[-1677419,-1841167,0],[-1678955,-1851407,0],[-1672811,-1857039,0],[-1670763,-1861135,0],[-1669227,-1864719,0],[-1669739,-1866767,0],[-1671787,-1868815,0],[-1673835,-1872911,0],[-1673835,-1882127,0],[-1673323,-1884175,0],[-1671787,-1885199,0],[-1672299,-1889295,0],[-1673323,-1891343,0],[-1672811,-1893903,0],[-1673323,-1894415,0],[-1672811,-1896463,0],[-1668203,-1897487,0],[-1666667,-1896463,0],[-1664107,-1897999,0],[-1665643,-1899023,0],[-1664107,-1901583,0],[-1665131,-1905679,0],[-1667179,-1906703,0],[-1668203,-1908751,0],[-1665643,-1909263,0],[-1667179,-1912335,0],[-1666667,-1914895,0],[-1667179,-1917455,0],[-1666155,-1921551,0],[-1667179,-1926671,0],[-1666667,-1931279,0],[-1667691,-1938959,0],[-1664107,-1945103,0],[-1665131,-1948175,0],[-1669739,-1955343,0],[-1669739,-1958415,0],[-1668203,-1961487,0],[-1665643,-1961999,0],[-1656427,-1958927,0],[-1654379,-1959439,0],[-1642603,-1968143,0],[-1636459,-1977871,0],[-1637995,-1981455,0],[-1636459,-1980943,0],[-1636971,-1982991,0],[-1635435,-1984015,0],[-1635947,-1986063,0],[-1633387,-1987087,0],[-1631339,-1985551,0],[-1632875,-1984015,0],[-1630827,-1984015,0],[-1630827,-1982991,0],[-1628267,-1980431,0],[-1623659,-1984015,0],[-1623659,-1985551,0],[-1621099,-1986063,0],[-1620075,-1987599,0],[-1620075,-1989647,0],[-1619563,-1989647,0],[-1618539,-1984015,0],[-1614955,-1982479,0],[-1612395,-1982479,0],[-1612907,-1984015,0],[-1614443,-1986063,0],[-1616491,-1985551,0],[-1617003,-1991695,0],[-1616491,-1993743,0],[-1608811,-1995791,0],[-1604715,-2003471,0],[-1606763,-2005007,0],[-1614443,-2004495,0],[-1615467,-2006543,0],[-1617003,-2007567,0],[-1620587,-2008591,0],[-1620587,-2013711,0],[-1623147,-2013711,0],[-1625707,-2010639,0],[-1632363,-2008079,0],[-1638507,-2007567,0],[-1641579,-2005007,0],[-1646187,-2006031,0],[-1649259,-2005519,0],[-1652331,-2013199,0],[-1651307,-2015247,0],[-1649259,-2015247,0],[-1647723,-2016271,0],[-1648235,-2027535,0],[-1649259,-2029583,0],[-1654891,-2031119,0],[-1658475,-2029583,0],[-1665131,-2032143,0],[-1667691,-2030095,0],[-1670251,-2030095,0],[-1671787,-2029583,0],[-1672299,-2028559,0],[-1670763,-2027535,0],[-1670763,-2026511,0],[-1671787,-2022927,0],[-1673323,-2022927,0],[-1675883,-2025999,0],[-1680491,-2024463,0],[-1683051,-2038287,0],[-1688171,-2045967,0],[-1699947,-2049039,0],[-1707627,-2048015,0],[-1712235,-2050575,0],[-1738859,-2055183,0],[-1745515,-2058255,0],[-1756779,-2061327,0],[-1762411,-2064399,0],[-1766507,-2091023,0],[-1765995,-2099215,0],[-1769067,-2108431,0],[-1768555,-2110479,0],[-1763435,-2116111,0],[-1762923,-2117647,0],[-1763947,-2124815,0],[-1759851,-2150415,0],[-1760363,-2151951,0],[-1764971,-2154511,0],[-1770603,-2160143,0],[-1771627,-2166799,0],[-1778795,-2167311,0],[-1781867,-2168335,0],[-1783403,-2171407,0],[-1784427,-2176527,0],[-1783915,-2179599,0],[-1780843,-2181135,0],[-1776747,-2185231,0],[-1774699,-2186255,0],[-1768555,-2188303,0],[-1767019,-2191375,0],[-1767019,-2193423,0],[-1770603,-2197007,0],[-1774699,-2198031,0],[-1784939,-2192911,0],[-1786987,-2193423,0],[-1793131,-2201615,0],[-1797739,-2204687,0],[-1798251,-2205711,0],[-1799787,-2213903,0],[-1796203,-2220559,0],[-1799275,-2221583,0],[-1809515,-2220559,0],[-1810027,-2231823,0],[-1808491,-2234383,0],[-1808491,-2239503,0],[-1804395,-2241551,0],[-1805419,-2251791,0],[-1806955,-2258447,0],[-1813099,-2256911,0],[-1815659,-2257935,0],[-1818219,-2268687,0],[-1822315,-2276879,0],[-1822315,-2279951,0],[-1824363,-2285071,0],[-1825387,-2285583,0],[-1828459,-2285071,0],[-1833579,-2281487,0],[-1832043,-2277391,0],[-1837675,-2266127,0],[-1836139,-2265615,0],[-1835627,-2261519,0],[-1839723,-2259471,0],[-1840235,-2257423,0],[-1840235,-2255375,0],[-1838699,-2251279,0],[-1838699,-2247695,0],[-1842283,-2244623,0],[-1841259,-2238991,0],[-1844331,-2233359,0],[-1845867,-2228751,0],[-1845867,-2226191,0],[-1842795,-2220559,0],[-1839723,-2219023,0],[-1838699,-2217487,0],[-1839723,-2216463,0],[-1844331,-2215439,0],[-1846891,-2205199,0],[-1846379,-2202639,0],[-1842795,-2197007,0],[-1842795,-2194447,0],[-1844331,-2192399,0],[-1846379,-2191887,0],[-1855083,-2194959,0],[-1855595,-2200079,0],[-1856619,-2201103,0],[-1859179,-2200591,0],[-1861739,-2194959,0],[-1862251,-2190863,0],[-1864811,-2183183,0],[-1862763,-2179599,0],[-1858155,-2176015,0],[-1856619,-2172431,0],[-1858155,-2170383,0],[-1866859,-2168335,0],[-1868907,-2167311,0],[-1872491,-2162703,0],[-1873003,-2159119,0],[-1877099,-2153487,0],[-1882731,-2139663,0],[-1884779,-2136079,0],[-1886315,-2134543,0],[-1892971,-2134031,0],[-1898091,-2136079,0],[-1902187,-2136079,0],[-1904235,-2134543,0],[-1905771,-2133007,0],[-1902187,-2131471,0],[-1901675,-2130447,0],[-1902187,-2127887,0],[-1902699,-2126863,0],[-1906795,-2126351,0],[-1922667,-2126863,0],[-1927787,-2136079,0],[-1930347,-2136591,0],[-1939051,-2136591,0],[-1939563,-2138127,0],[-1938027,-2141199,0],[-1938027,-2142735,0],[-1942635,-2145295,0],[-1955435,-2147855,0],[-1959531,-2155535,0],[-1971307,-2161167,0],[-1979499,-2167311,0],[-1984619,-2168335,0],[-1986155,-2167311,0],[-1988715,-2164239,0],[-1993323,-2166799,0],[-1998443,-2165775,0],[-1999979,-2166287,0],[-2001515,-2171407,0],[-2003051,-2171919,0],[-2005099,-2171407,0],[-2009707,-2167823,0],[-2015851,-2165263,0],[-2024043,-2167311,0],[-2026091,-2161167,0],[-2025067,-2156047,0],[-2025579,-2152975,0],[-2031211,-2147855,0],[-2037867,-2146319,0],[-2038891,-2148879,0],[-2040939,-2146831,0],[-2043499,-2147343,0],[-2045035,-2148367,0],[-2048619,-2147855,0],[-2051691,-2149903,0],[-2058347,-2156047,0],[-2076779,-2160143,0],[-2080875,-2157583,0],[-2082411,-2147855,0],[-2086507,-2136591,0],[-2091115,-2134543,0],[-2097259,-2134543,0],[-2095211,-2126351,0],[-2097771,-2123791,0],[-2099819,-2115599,0],[-2103915,-2115087,0],[-2106475,-2115599,0],[-2115179,-2125327,0],[-2117739,-2126351,0],[-2118763,-2128911,0],[-2120299,-2128911,0],[-2120811,-2126351,0],[-2123371,-2125839,0],[-2125419,-2126351,0],[-2130539,-2133007,0],[-2135147,-2128399,0],[-2138731,-2125839,0],[-2138219,-2120719,0],[-2138731,-2116111,0],[-2137195,-2111503,0],[-2137707,-2107407,0],[-2136683,-2104847,0],[-2134635,-2103311,0],[-2132075,-2098703,0],[-2132587,-2089999,0],[-2131051,-2082831,0],[-2132075,-2081295,0],[-2134123,-2080783,0],[-2136171,-2083343,0],[-2138731,-2083343,0],[-2147435,-2076687,0],[-2162283,-2075151,0],[-2167915,-2073103,0],[-2179179,-2071567,0],[-2197099,-2071055,0],[-2198635,-2070543,0],[-2199659,-2066959,0],[-2198123,-2059791,0],[-2190955,-2059279,0],[-2187371,-2056719,0],[-2185835,-2053647,0],[-2187883,-2049039,0],[-2186347,-2044431,0],[-2185323,-2043919,0],[-2181739,-2044943,0],[-2175595,-2032655,0],[-2175083,-2029071,0],[-2172523,-2026511,0],[-2166891,-2023439,0],[-2162795,-2020879,0],[-2161771,-2018319,0],[-2162283,-2015247,0],[-2161771,-2014223,0],[-2157163,-2011151,0],[-2152555,-2006543,0],[-2149995,-2005007,0],[-2142827,-2003471,0],[-2141291,-2005007,0],[-2140779,-2010127,0],[-2139243,-2009615,0],[-2135147,-2004495,0],[-2126955,-2001423,0],[-2124395,-1998351,0],[-2122347,-1989647,0],[-2115691,-1987087,0],[-2110571,-1983503,0],[-2105451,-1982479,0],[-2102379,-1974287,0],[-2093675,-1972239,0],[-2079339,-1956879,0],[-2078827,-1955343,0],[-2079339,-1954319,0],[-2078315,-1951247,0],[-2078827,-1949711,0],[-2080875,-1949199,0],[-2085483,-1949711,0],[-2091115,-1949199,0],[-2096235,-1945103,0],[-2106475,-1939983,0],[-2110571,-1933327,0],[-2114155,-1930255,0],[-2106475,-1918479,0],[-2106475,-1914383,0],[-2109035,-1912847,0],[-2115691,-1912335,0],[-2120811,-1910287,0],[-2125419,-1906703,0],[-2126443,-1904143,0],[-2124395,-1898511,0],[-2123883,-1888271,0],[-2125419,-1884687,0],[-2131051,-1880591,0],[-2131051,-1877519,0],[-2126443,-1876495,0],[-2122859,-1874447,0],[-2120299,-1874959,0],[-2118251,-1876495,0],[-2114155,-1874447,0],[-2111083,-1874959,0],[-2100331,-1880591,0],[-2096235,-1884687,0],[-2094699,-1885199,0],[-2091627,-1880079,0],[-2085483,-1873935,0],[-2080875,-1866767,0],[-2080875,-1862159,0],[-2082411,-1857039,0],[-2081899,-1855503,0],[-2077291,-1855503,0],[-2073707,-1857551,0],[-2069611,-1854991,0],[-2064491,-1854991,0],[-2063467,-1853967,0],[-2065515,-1849359,0],[-2063467,-1848335,0],[-2062443,-1846287,0],[-2062443,-1839631,0],[-2060907,-1839631,0],[-2054251,-1842191,0],[-2052715,-1841679,0],[-2053739,-1839119,0],[-2059371,-1837071,0],[-2062443,-1830927,0],[-2061419,-1827343,0],[-2056811,-1818639,0],[-2053739,-1810447,0],[-2051691,-1800719,0],[-2050667,-1801231,0],[-2048619,-1807887,0],[-2046571,-1809423,0],[-2040427,-1811983,0],[-2040427,-1816591,0],[-2033259,-1820175,0],[-2029675,-1818127,0],[-2021995,-1818127,0],[-2020971,-1817103,0],[-2017899,-1810959,0],[-2014827,-1809423,0],[-2012779,-1805839,0],[-2008683,-1803279,0],[-2007659,-1790479,0],[-2004587,-1788943,0],[-1998955,-1787407,0],[-1993835,-1778703,0],[-1990763,-1776655,0],[-1987691,-1775631,0],[-1986667,-1774095,0],[-1986667,-1762319,0],[-1988203,-1756687,0],[-1984619,-1752079,0],[-1989227,-1749007,0],[-1990763,-1746959,0],[-1990763,-1742863,0],[-1990251,-1741327,0],[-1983083,-1735183,0],[-1982059,-1732623,0],[-1984107,-1729551,0],[-1990763,-1727503,0],[-1991787,-1726479,0],[-1991787,-1721871,0],[-1983083,-1719823,0],[-1978475,-1720335,0],[-1974891,-1719823,0],[-1964651,-1716751,0],[-1961067,-1716239,0],[-1959019,-1714191,0],[-1962603,-1701391,0],[-1963627,-1698831,0],[-1966187,-1697807,0],[-1967211,-1695759,0],[-1967211,-1694223,0],[-1964651,-1689103,0],[-1969259,-1686031,0],[-1970795,-1681935,0],[-1971307,-1679887,0],[-1970283,-1677839,0],[-1965675,-1674767,0],[-1964651,-1673231,0],[-1965675,-1670671,0],[-1963627,-1669135,0],[-1959531,-1664527,0],[-1955947,-1665039,0],[-1941611,-1670671,0],[-1931883,-1670159,0],[-1924203,-1672719,0],[-1922667,-1671695,0],[-1921643,-1671695,0],[-1919595,-1675279,0],[-1911403,-1680911,0],[-1904235,-1689103,0],[-1898091,-1694223,0],[-1898603,-1702415,0],[-1895019,-1703951,0],[-1894507,-1708559,0],[-1893483,-1711631,0],[-1889387,-1716239,0],[-1882731,-1720335,0],[-1881195,-1719823,0],[-1879147,-1718287,0],[-1869931,-1720847,0],[-1865323,-1717775,0],[-1847403,-1699855,0],[-1847915,-1693199,0],[-1846379,-1681935,0],[-1845355,-1681423,0],[-1843819,-1682447,0],[-1839211,-1688591,0],[-1835627,-1690127,0],[-1821803,-1691663,0],[-1812075,-1691663,0],[-1811051,-1690127,0],[-1809515,-1681935,0],[-1800811,-1678863,0],[-1797739,-1674767,0],[-1792107,-1674255,0],[-1785963,-1672207,0],[-1763947,-1669135,0],[-1756267,-1666575,0],[-1754219,-1664527,0],[-1752683,-1664015,0],[-1752683,-1662991,0],[-1748587,-1658383,0],[-1747051,-1657871,0],[-1745003,-1656847,0]]]},{"id":27,"color":[0.9572392156862746,0.43016993464052283,0.264,1],"coordinates":[[[-1636971,-1611791,0],[-1630827,-1614351,0],[-1626219,-1614863,0],[-1602667,-1613839,0],[-1599595,-1614863,0],[-1599595,-1617935,0],[-1602155,-1623567,0],[-1600619,-1631759,0],[-1601643,-1638415,0],[-1600107,-1645071,0],[-1600619,-1646095,0],[-1599083,-1649167,0],[-1597547,-1649679,0],[-1595499,-1647631,0],[-1594987,-1644047,0],[-1593451,-1640975,0],[-1593451,-1636879,0],[-1592427,-1635855,0],[-1589355,-1636879,0],[-1584747,-1635855,0],[-1578091,-1636367,0],[-1573995,-1639951,0],[-1568363,-1641999,0],[-1563755,-1636879,0],[-1559659,-1636367,0],[-1556587,-1634831,0],[-1555051,-1633295,0],[-1553003,-1628175,0],[-1550955,-1627151,0],[-1545835,-1625615,0],[-1538155,-1624591,0],[-1533035,-1624079,0],[-1530987,-1625615,0],[-1528939,-1627663,0],[-1526891,-1627151,0],[-1522795,-1629199,0],[-1515627,-1626127,0],[-1511019,-1627151,0],[-1509995,-1628175,0],[-1509483,-1634319,0],[-1502827,-1643023,0],[-1501291,-1644047,0],[-1499755,-1644047,0],[-1496683,-1641487,0],[-1490027,-1639951,0],[-1490027,-2250255,0],[-1494635,-2253327,0],[-1498219,-2256911,0],[-1499243,-2262031,0],[-1500779,-2265103,0],[-1502315,-2266127,0],[-1503339,-2265103,0],[-1506411,-2264591,0],[-1511531,-2268687,0],[-1513067,-2268687,0],[-1520235,-2263567,0],[-1530987,-2261007,0],[-1546347,-2259471,0],[-1555563,-2259983,0],[-1568363,-2263567,0],[-1576043,-2266639,0],[-1584747,-2274319,0],[-1593963,-2278927,0],[-1597035,-2278927,0],[-1610347,-2273807,0],[-1616491,-2275343,0],[-1619563,-2276879,0],[-1621611,-2279951,0],[-1628267,-2283023,0],[-1636459,-2284047,0],[-1639531,-2282511,0],[-1647211,-2273295,0],[-1650283,-2271759,0],[-1654379,-2271247,0],[-1672299,-2280975,0],[-1687659,-2291215,0],[-1690731,-2295311,0],[-1696875,-2307087,0],[-1700971,-2320399,0],[-1701483,-2326031,0],[-1699435,-2343439,0],[-1701995,-2348047,0],[-1752171,-2348047,0],[-1754731,-2338831,0],[-1758315,-2333711,0],[-1767019,-2329103,0],[-1772651,-2325007,0],[-1785963,-2307087,0],[-1786475,-2307087,0],[-1787499,-2307599,0],[-1787499,-2310159,0],[-1786987,-2313231,0],[-1794155,-2311183,0],[-1796715,-2312207,0],[-1802347,-2312719,0],[-1806955,-2316303,0],[-1815659,-2315791,0],[-1819755,-2318863,0],[-1821803,-2319375,0],[-1825387,-2318863,0],[-1830507,-2315279,0],[-1834091,-2307087,0],[-1837163,-2304527,0],[-1841259,-2297871,0],[-1848427,-2289167,0],[-1851499,-2285071,0],[-1852011,-2282511,0],[-1848427,-2281999,0],[-1845355,-2284047,0],[-1841771,-2284559,0],[-1839211,-2284047,0],[-1837163,-2281487,0],[-1835115,-2280975,0],[-1832043,-2281999,0],[-1828459,-2285071,0],[-1825387,-2285583,0],[-1824363,-2285071,0],[-1822315,-2279951,0],[-1822315,-2276879,0],[-1818219,-2268687,0],[-1815659,-2257935,0],[-1813099,-2256911,0],[-1806955,-2258447,0],[-1805419,-2251791,0],[-1804395,-2241551,0],[-1808491,-2239503,0],[-1808491,-2234383,0],[-1810027,-2231823,0],[-1809515,-2220559,0],[-1799275,-2221583,0],[-1796203,-2220559,0],[-1799787,-2213903,0],[-1798251,-2205711,0],[-1797739,-2204687,0],[-1793131,-2201615,0],[-1786987,-2193423,0],[-1784939,-2192911,0],[-1774699,-2198031,0],[-1770603,-2197007,0],[-1767019,-2193423,0],[-1767019,-2191375,0],[-1768555,-2188303,0],[-1774699,-2186255,0],[-1776747,-2185231,0],[-1780843,-2181135,0],[-1783915,-2179599,0],[-1784427,-2176527,0],[-1783403,-2171407,0],[-1781867,-2168335,0],[-1778795,-2167311,0],[-1771627,-2166799,0],[-1770603,-2160143,0],[-1764971,-2154511,0],[-1760363,-2151951,0],[-1759851,-2150415,0],[-1763947,-2124815,0],[-1762923,-2117647,0],[-1763435,-2116111,0],[-1768555,-2110479,0],[-1769067,-2108431,0],[-1765995,-2099215,0],[-1766507,-2091023,0],[-1762411,-2064399,0],[-1756779,-2061327,0],[-1745515,-2058255,0],[-1738859,-2055183,0],[-1712235,-2050575,0],[-1707627,-2048015,0],[-1699947,-2049039,0],[-1688171,-2045967,0],[-1683051,-2038287,0],[-1680491,-2024463,0],[-1675883,-2025999,0],[-1673323,-2022927,0],[-1671787,-2022927,0],[-1670763,-2026511,0],[-1670763,-2027535,0],[-1672299,-2028559,0],[-1671787,-2029583,0],[-1670251,-2030095,0],[-1667691,-2030095,0],[-1665131,-2032143,0],[-1658475,-2029583,0],[-1654891,-2031119,0],[-1649259,-2029583,0],[-1648235,-2027535,0],[-1647723,-2016271,0],[-1649259,-2015247,0],[-1651307,-2015247,0],[-1652331,-2013199,0],[-1649259,-2005519,0],[-1646187,-2006031,0],[-1641579,-2005007,0],[-1638507,-2007567,0],[-1632363,-2008079,0],[-1625707,-2010639,0],[-1623147,-2013711,0],[-1620587,-2013711,0],[-1620587,-2008591,0],[-1617003,-2007567,0],[-1615467,-2006543,0],[-1614443,-2004495,0],[-1606763,-2005007,0],[-1604715,-2003471,0],[-1608811,-1995791,0],[-1616491,-1993743,0],[-1617003,-1991695,0],[-1616491,-1985551,0],[-1614443,-1986063,0],[-1612907,-1984015,0],[-1612395,-1982479,0],[-1614955,-1982479,0],[-1618539,-1984015,0],[-1619563,-1989647,0],[-1620075,-1989647,0],[-1620075,-1987599,0],[-1621099,-1986063,0],[-1623659,-1985551,0],[-1623659,-1984015,0],[-1628267,-1980431,0],[-1630827,-1982991,0],[-1630827,-1984015,0],[-1632875,-1984015,0],[-1631339,-1985551,0],[-1633387,-1987087,0],[-1635947,-1986063,0],[-1635435,-1984015,0],[-1636971,-1982991,0],[-1636459,-1980943,0],[-1637995,-1981455,0],[-1636459,-1977871,0],[-1642603,-1968143,0],[-1654379,-1959439,0],[-1656427,-1958927,0],[-1665643,-1961999,0],[-1668203,-1961487,0],[-1669739,-1958415,0],[-1669739,-1955343,0],[-1665131,-1948175,0],[-1664107,-1945103,0],[-1667691,-1938959,0],[-1666667,-1931279,0],[-1667179,-1926671,0],[-1666155,-1921551,0],[-1667179,-1917455,0],[-1666667,-1914895,0],[-1667179,-1912335,0],[-1665643,-1909263,0],[-1668203,-1908751,0],[-1667179,-1906703,0],[-1665131,-1905679,0],[-1664107,-1901583,0],[-1665643,-1899023,0],[-1664107,-1897999,0],[-1666667,-1896463,0],[-1668203,-1897487,0],[-1672811,-1896463,0],[-1673323,-1894415,0],[-1672811,-1893903,0],[-1673323,-1891343,0],[-1672299,-1889295,0],[-1671787,-1885199,0],[-1673323,-1884175,0],[-1673835,-1882127,0],[-1673835,-1872911,0],[-1671787,-1868815,0],[-1669739,-1866767,0],[-1669227,-1864719,0],[-1670763,-1861135,0],[-1672811,-1857039,0],[-1678955,-1851407,0],[-1677419,-1841167,0],[-1679467,-1837583,0],[-1688171,-1832463,0],[-1693291,-1827343,0],[-1695851,-1826319,0],[-1699435,-1821199,0],[-1698923,-1819151,0],[-1692779,-1809423,0],[-1692267,-1807375,0],[-1695339,-1801743,0],[-1694315,-1793551,0],[-1694827,-1785871,0],[-1692779,-1779727,0],[-1695339,-1775631,0],[-1695851,-1773583,0],[-1695339,-1771023,0],[-1692779,-1765391,0],[-1692779,-1763343,0],[-1695339,-1749007,0],[-1697387,-1745423,0],[-1697387,-1733647,0],[-1693803,-1730575,0],[-1692267,-1728015,0],[-1691755,-1722895,0],[-1692779,-1715727,0],[-1699435,-1708047,0],[-1702507,-1702927,0],[-1704043,-1697807,0],[-1704043,-1687567,0],[-1705579,-1679375,0],[-1705067,-1666575,0],[-1706091,-1658383,0],[-1702507,-1656847,0],[-1696875,-1657359,0],[-1689195,-1655311,0],[-1684075,-1651727,0],[-1679979,-1646095,0],[-1676395,-1643023,0],[-1673323,-1638927,0],[-1665131,-1634831,0],[-1656939,-1628175,0],[-1653867,-1624591,0],[-1650283,-1622031,0],[-1647211,-1619983,0],[-1641579,-1619471,0],[-1640555,-1616399,0],[-1636971,-1611791,0]],[[-1790571,-2310159,0],[-1787499,-2311695,0],[-1787499,-2310159,0],[-1789547,-2310159,0],[-1788523,-2309647,0],[-1789035,-2308623,0],[-1790059,-2308623,0],[-1790571,-2310159,0]],[[-1791595,-2304015,0],[-1792619,-2304527,0],[-1791595,-2305039,0],[-1790059,-2305039,0],[-1791595,-2304015,0]]]},{"id":27,"color":[0.9572392156862746,0.43016993464052283,0.264,1],"coordinates":[[[-1696363,-2343951,0],[-1695339,-2347023,0],[-1697387,-2344463,0],[-1696875,-2343951,0],[-1696363,-2343951,0]]]},{"id":28,"color":[0.39891241830065355,0.7595712418300653,0.6475607843137255,1],"coordinates":[[[-1505899,-168975,0],[-1508459,-169487,0],[-1506411,-173583,0],[-1503851,-173071,0],[-1501291,-176655,0],[-1504363,-175631,0],[-1506923,-177679,0],[-1508459,-176143,0],[-1508971,-177167,0],[-1507435,-178191,0],[-1508971,-179215,0],[-1507947,-184847,0],[-1509483,-187919,0],[-1513067,-188943,0],[-1515115,-191503,0],[-1515115,-193551,0],[-1514091,-195087,0],[-1515627,-196111,0],[-1515115,-199695,0],[-1512555,-201743,0],[-1508971,-203279,0],[-1508459,-204303,0],[-1511019,-208911,0],[-1513579,-210959,0],[-1513067,-214543,0],[-1510507,-218639,0],[-1514603,-221199,0],[-1516651,-221199,0],[-1521771,-222735,0],[-1523819,-221711,0],[-1528427,-221711,0],[-1530987,-220175,0],[-1533547,-219663,0],[-1536619,-220687,0],[-1537643,-228879,0],[-1537131,-230927,0],[-1538155,-236047,0],[-1540203,-235023,0],[-1542251,-232975,0],[-1547883,-236559,0],[-1551979,-231951,0],[-1557099,-227343,0],[-1560683,-228367,0],[-1561707,-227343,0],[-1563755,-224783,0],[-1564779,-219663,0],[-1568363,-219151,0],[-1576555,-220687,0],[-1579115,-220175,0],[-1583723,-221711,0],[-1587819,-217103,0],[-1590379,-215055,0],[-1596011,-216079,0],[-1598059,-213519,0],[-1599083,-213519,0],[-1601131,-216591,0],[-1606763,-216079,0],[-1610347,-213519,0],[-1612907,-213519,0],[-1613931,-218639,0],[-1615979,-222223,0],[-1621611,-225295,0],[-1622635,-227855,0],[-1624171,-229391,0],[-1624171,-236047,0],[-1628779,-239119,0],[-1634411,-241167,0],[-1640043,-238095,0],[-1645163,-236559,0],[-1649771,-232975,0],[-1656939,-229391,0],[-1661035,-225295,0],[-1657963,-216591,0],[-1657963,-209935,0],[-1661035,-201231,0],[-1667691,-188943,0],[-1668715,-185359,0],[-1668715,-182287,0],[-1667179,-180751,0],[-1653355,-176143,0],[-1651307,-174095,0],[-1649259,-168975,0],[-1505899,-168975,0]]]},{"id":28,"color":[0.39891241830065355,0.7595712418300653,0.6475607843137255,1],"coordinates":[[[-1505899,-168975,0],[-1501803,-168975,0],[-1502315,-171023,0],[-1503851,-170511,0],[-1505899,-168975,0]]]},{"id":29,"color":[0.3978248366013073,0.7583581699346406,0.6480627450980392,1],"coordinates":[[[-1490027,-168975,0],[-1490027,-236559,0],[-1493611,-233487,0],[-1495147,-229903,0],[-1496683,-228367,0],[-1504363,-227343,0],[-1504875,-223759,0],[-1506923,-221711,0],[-1511531,-219663,0],[-1510507,-218127,0],[-1513067,-214543,0],[-1513579,-210959,0],[-1511019,-208911,0],[-1508459,-204303,0],[-1508971,-203279,0],[-1512555,-201743,0],[-1515115,-199695,0],[-1515627,-196111,0],[-1514091,-195087,0],[-1515115,-193551,0],[-1515115,-191503,0],[-1513067,-188943,0],[-1509483,-187919,0],[-1507947,-184847,0],[-1508971,-179215,0],[-1507435,-178191,0],[-1508971,-177167,0],[-1508459,-176143,0],[-1506923,-177679,0],[-1504363,-175631,0],[-1501291,-176655,0],[-1503851,-173071,0],[-1506411,-173583,0],[-1508459,-169487,0],[-1507435,-168975,0],[-1504875,-169487,0],[-1503851,-170511,0],[-1502315,-171023,0],[-1501803,-168975,0],[-1490027,-168975,0]]]},{"id":30,"color":[0.3836862745098039,0.7425882352941175,0.6545882352941177,1],"coordinates":[[[-1543275,-596495,0],[-1540203,-597007,0],[-1535595,-602639,0],[-1534059,-605199,0],[-1530987,-607759,0],[-1525867,-611343,0],[-1521259,-611343,0],[-1520235,-613903,0],[-1517675,-615951,0],[-1517163,-617487,0],[-1519211,-620047,0],[-1520235,-622607,0],[-1516139,-625167,0],[-1513579,-625679,0],[-1506923,-623631,0],[-1504875,-623631,0],[-1496171,-633871,0],[-1494123,-635919,0],[-1491563,-636431,0],[-1490027,-639503,0],[-1490027,-1124879,0],[-1492587,-1126415,0],[-1497195,-1127439,0],[-1502315,-1131023,0],[-1504875,-1130511,0],[-1512555,-1125903,0],[-1516651,-1119759,0],[-1520747,-1116687,0],[-1524331,-1115663,0],[-1530987,-1115151,0],[-1533035,-1115663,0],[-1534059,-1107471,0],[-1538667,-1088015,0],[-1538667,-1076751,0],[-1540203,-1070607,0],[-1539179,-1068559,0],[-1537131,-1065999,0],[-1538155,-1064975,0],[-1536619,-1061391,0],[-1530987,-1056271,0],[-1529451,-1053199,0],[-1530987,-1052175,0],[-1533035,-1050639,0],[-1535083,-1044495,0],[-1538667,-1041935,0],[-1540715,-1036303,0],[-1544811,-1034767,0],[-1554539,-1021967,0],[-1562731,-1008655,0],[-1574507,-1000463,0],[-1575531,-994319,0],[-1570923,-989711,0],[-1562219,-987151,0],[-1560171,-984591,0],[-1558635,-981007,0],[-1559147,-977935,0],[-1562219,-973839,0],[-1569899,-969743,0],[-1576555,-963087,0],[-1577579,-950287,0],[-1580139,-944143,0],[-1585259,-939023,0],[-1589355,-937487,0],[-1592939,-933391,0],[-1595499,-917007,0],[-1600619,-908815,0],[-1603179,-905743,0],[-1610347,-906255,0],[-1613419,-907791,0],[-1617003,-910351,0],[-1627755,-922127,0],[-1654379,-937487,0],[-1667179,-943119,0],[-1679979,-951311,0],[-1683563,-951823,0],[-1685611,-951311,0],[-1691755,-944143,0],[-1695339,-934927,0],[-1697899,-932367,0],[-1698923,-930319,0],[-1697899,-928783,0],[-1690219,-924175,0],[-1688683,-922127,0],[-1688683,-916495,0],[-1685611,-907791,0],[-1682539,-891407,0],[-1683051,-887823,0],[-1679979,-880143,0],[-1677931,-867343,0],[-1677931,-859663,0],[-1675883,-849423,0],[-1676395,-842255,0],[-1678443,-836111,0],[-1683051,-826383,0],[-1689195,-821775,0],[-1697387,-817167,0],[-1700971,-814095,0],[-1698923,-809999,0],[-1698923,-807439,0],[-1702507,-800271,0],[-1701995,-797711,0],[-1704555,-792591,0],[-1703019,-790543,0],[-1699947,-790543,0],[-1697899,-789007,0],[-1692267,-789519,0],[-1687147,-789007,0],[-1685611,-790543,0],[-1684075,-790543,0],[-1674859,-786959,0],[-1671275,-786447,0],[-1669227,-783887,0],[-1664107,-780815,0],[-1662059,-781839,0],[-1657451,-777743,0],[-1657451,-776207,0],[-1660011,-773135,0],[-1663595,-769551,0],[-1665131,-766479,0],[-1665643,-761871,0],[-1667691,-760847,0],[-1670763,-762383,0],[-1673835,-758799,0],[-1678443,-757775,0],[-1680491,-753679,0],[-1677931,-752655,0],[-1674347,-754191,0],[-1667179,-754703,0],[-1655403,-755215,0],[-1651307,-754703,0],[-1641067,-758287,0],[-1635947,-758799,0],[-1622123,-763407,0],[-1601131,-772623,0],[-1594987,-775695,0],[-1590891,-773647,0],[-1588331,-768527,0],[-1587307,-763919,0],[-1587819,-761871,0],[-1584747,-739855,0],[-1584747,-723983,0],[-1582699,-684559,0],[-1583211,-668687,0],[-1582699,-657423,0],[-1581163,-650255,0],[-1580139,-648207,0],[-1577579,-646671,0],[-1574507,-639503,0],[-1574507,-634895,0],[-1569387,-638991,0],[-1563243,-639503,0],[-1557611,-642063,0],[-1556587,-634383,0],[-1551979,-627215,0],[-1546859,-622607,0],[-1546859,-617999,0],[-1545835,-613391,0],[-1543787,-610831,0],[-1545835,-608271,0],[-1545323,-604687,0],[-1545835,-601103,0],[-1544299,-597519,0],[-1543275,-596495,0]]]},{"id":31,"color":[0.38096732026143787,0.7395555555555554,0.6558431372549021,1],"coordinates":[[[-1490027,-1264655,0],[-1490027,-1274383,0],[-1493099,-1273359,0],[-1494635,-1274383,0],[-1495147,-1273871,0],[-1490027,-1264655,0]]]},{"id":31,"color":[0.38096732026143787,0.7395555555555554,0.6558431372549021,1],"coordinates":[[[-1490027,-1165327,0],[-1498731,-1156623,0],[-1502827,-1156623,0],[-1507435,-1159183,0],[-1515115,-1153039,0],[-1523307,-1156623,0],[-1529451,-1151503,0],[-1530987,-1150479,0],[-1535595,-1148431,0],[-1538667,-1144847,0],[-1540715,-1141263,0],[-1541227,-1137679,0],[-1540203,-1129999,0],[-1537643,-1125903,0],[-1535595,-1118735,0],[-1533035,-1115663,0],[-1530987,-1115151,0],[-1524331,-1115663,0],[-1520747,-1116687,0],[-1516651,-1119759,0],[-1512555,-1125903,0],[-1504875,-1130511,0],[-1502315,-1131023,0],[-1497195,-1127439,0],[-1492587,-1126415,0],[-1490027,-1124879,0],[-1490027,-1165327,0]]]},{"id":32,"color":[0.37987973856209156,0.7383424836601308,0.6563450980392157,1],"coordinates":[[[-1501803,-1268239,0],[-1497707,-1271311,0],[-1496683,-1274895,0],[-1493611,-1278991,0],[-1490027,-1282063,0],[-1490027,-1639951,0],[-1496683,-1641487,0],[-1499755,-1644047,0],[-1501291,-1644047,0],[-1502827,-1643023,0],[-1509483,-1634319,0],[-1509995,-1628175,0],[-1511019,-1627151,0],[-1515627,-1626127,0],[-1522795,-1629199,0],[-1526891,-1627151,0],[-1528939,-1627663,0],[-1530987,-1625615,0],[-1533035,-1624079,0],[-1538155,-1624591,0],[-1545835,-1625615,0],[-1550955,-1627151,0],[-1553003,-1628175,0],[-1555051,-1633295,0],[-1556587,-1634831,0],[-1559659,-1636367,0],[-1563755,-1636879,0],[-1568363,-1641999,0],[-1573995,-1639951,0],[-1578091,-1636367,0],[-1584747,-1635855,0],[-1589355,-1636879,0],[-1592427,-1635855,0],[-1593451,-1636879,0],[-1593451,-1640975,0],[-1594987,-1644047,0],[-1595499,-1647631,0],[-1597547,-1649679,0],[-1599083,-1649167,0],[-1600619,-1646095,0],[-1600107,-1645071,0],[-1601643,-1638415,0],[-1600619,-1631759,0],[-1602155,-1623567,0],[-1599595,-1617935,0],[-1599595,-1614863,0],[-1602667,-1613839,0],[-1626219,-1614863,0],[-1630827,-1614351,0],[-1636971,-1611791,0],[-1640555,-1616399,0],[-1641579,-1619471,0],[-1647211,-1619983,0],[-1650283,-1622031,0],[-1653867,-1624591,0],[-1656939,-1628175,0],[-1665131,-1634831,0],[-1673323,-1638927,0],[-1676395,-1643023,0],[-1679979,-1646095,0],[-1684075,-1651727,0],[-1689195,-1655311,0],[-1696875,-1657359,0],[-1703531,-1657359,0],[-1712747,-1661455,0],[-1714795,-1663503,0],[-1717355,-1662479,0],[-1726571,-1662479,0],[-1733227,-1659407,0],[-1738347,-1659919,0],[-1745003,-1656847,0],[-1748587,-1658383,0],[-1752683,-1662991,0],[-1752683,-1664015,0],[-1754219,-1664527,0],[-1756267,-1666575,0],[-1763947,-1669135,0],[-1785963,-1672207,0],[-1785451,-1664015,0],[-1790571,-1649679,0],[-1794155,-1643023,0],[-1791083,-1638415,0],[-1788523,-1636367,0],[-1789547,-1633807,0],[-1789035,-1630223,0],[-1786475,-1629711,0],[-1786475,-1627663,0],[-1783915,-1626127,0],[-1782379,-1620495,0],[-1777259,-1617935,0],[-1775211,-1615887,0],[-1774187,-1613839,0],[-1770603,-1612303,0],[-1770091,-1608207,0],[-1770603,-1606159,0],[-1768555,-1603599,0],[-1770091,-1601039,0],[-1772651,-1601551,0],[-1775723,-1601039,0],[-1778283,-1593871,0],[-1785963,-1588751,0],[-1788523,-1572879,0],[-1792619,-1567759,0],[-1796203,-1565199,0],[-1798251,-1559567,0],[-1798763,-1554959,0],[-1803371,-1544719,0],[-1804907,-1533967,0],[-1804395,-1530895,0],[-1801323,-1530383,0],[-1797739,-1527823,0],[-1794667,-1523215,0],[-1795179,-1520655,0],[-1797739,-1520655,0],[-1798763,-1518607,0],[-1796203,-1513999,0],[-1795691,-1508879,0],[-1797227,-1506831,0],[-1800811,-1505807,0],[-1804395,-1502223,0],[-1803883,-1497103,0],[-1804907,-1488911,0],[-1802859,-1484815,0],[-1794155,-1479183,0],[-1793643,-1480207,0],[-1780843,-1467407,0],[-1777771,-1467407,0],[-1770603,-1464335,0],[-1750635,-1454607,0],[-1744491,-1452559,0],[-1732715,-1452559,0],[-1725547,-1454095,0],[-1720939,-1455631,0],[-1706091,-1464335,0],[-1699947,-1470479,0],[-1689195,-1475087,0],[-1684587,-1475599,0],[-1669227,-1473039,0],[-1668203,-1466895,0],[-1664619,-1464335,0],[-1661547,-1464847,0],[-1653355,-1462799,0],[-1648235,-1466895,0],[-1647211,-1466383,0],[-1645163,-1459727,0],[-1641067,-1456655,0],[-1640043,-1451535,0],[-1641067,-1449999,0],[-1644651,-1448975,0],[-1648235,-1448975,0],[-1648235,-1448463,0],[-1643627,-1444367,0],[-1642091,-1438735,0],[-1641067,-1438735,0],[-1639019,-1440783,0],[-1633387,-1441295,0],[-1633387,-1439759,0],[-1635435,-1439247,0],[-1636459,-1438223,0],[-1634923,-1436175,0],[-1633387,-1436175,0],[-1635435,-1433615,0],[-1632363,-1430031,0],[-1631851,-1427983,0],[-1632363,-1424911,0],[-1635435,-1421327,0],[-1642603,-1423375,0],[-1649259,-1417743,0],[-1650283,-1414159,0],[-1649259,-1411599,0],[-1639531,-1398799,0],[-1641067,-1395215,0],[-1642603,-1394191,0],[-1646187,-1394703,0],[-1646699,-1386511,0],[-1650283,-1382415,0],[-1649771,-1380879,0],[-1643115,-1379855,0],[-1637995,-1375247,0],[-1639531,-1371663,0],[-1635435,-1367055,0],[-1633899,-1363983,0],[-1622635,-1353743,0],[-1625195,-1351695,0],[-1621611,-1349647,0],[-1618027,-1349135,0],[-1619563,-1347599,0],[-1621099,-1342479,0],[-1630827,-1341455,0],[-1628779,-1337359,0],[-1621611,-1332751,0],[-1615979,-1330703,0],[-1612395,-1327631,0],[-1610347,-1324559,0],[-1606251,-1309199,0],[-1603691,-1308175,0],[-1600107,-1307663,0],[-1590891,-1308687,0],[-1587307,-1303567,0],[-1581675,-1299471,0],[-1573995,-1296911,0],[-1566827,-1291791,0],[-1563755,-1290767,0],[-1560683,-1290255,0],[-1555051,-1293839,0],[-1551467,-1293839,0],[-1547371,-1292303,0],[-1537131,-1282575,0],[-1530987,-1280527,0],[-1516651,-1275919,0],[-1507947,-1273871,0],[-1507435,-1274895,0],[-1503339,-1273359,0],[-1501803,-1270799,0],[-1503339,-1270287,0],[-1502827,-1268239,0],[-1501803,-1268239,0]]]},{"id":33,"color":[0.9645803921568628,0.4831895424836601,0.2884705882352941,1],"coordinates":[[[-3501163,-2074127,0],[-3483243,-2075663,0],[-3482731,-2080783,0],[-3484267,-2086415,0],[-3490411,-2095119,0],[-3492459,-2105871,0],[-3492459,-2113551,0],[-3494507,-2120719,0],[-3493483,-2123279,0],[-3491947,-2124815,0],[-3481195,-2131471,0],[-3479659,-2133007,0],[-3478635,-2136591,0],[-3476587,-2138127,0],[-3471467,-2139663,0],[-3466347,-2138127,0],[-3459179,-2138639,0],[-3454059,-2137615,0],[-3452523,-2138127,0],[-3443819,-2151439,0],[-3440747,-2159631,0],[-3433579,-2167311,0],[-3427435,-2170895,0],[-3420779,-2172431,0],[-3399787,-2181135,0],[-3393643,-2184719,0],[-3392107,-2186767,0],[-3392619,-2192399,0],[-3391083,-2196495,0],[-3386987,-2199567,0],[-3373675,-2205199,0],[-3371115,-2211855,0],[-3366507,-2217487,0],[-3363947,-2217999,0],[-3360875,-2217487,0],[-3353707,-2214927,0],[-3349611,-2205711,0],[-3340395,-2191887,0],[-3338347,-2190351,0],[-3331691,-2190351,0],[-3328619,-2188815,0],[-3331179,-2170895,0],[-3329131,-2168335,0],[-3325035,-2167823,0],[-3319915,-2173455,0],[-3312747,-2177039,0],[-3307627,-2184719,0],[-3299947,-2190863,0],[-3299435,-2191375,0],[-3294827,-2189327,0],[-3285611,-2198031,0],[-3282539,-2198543,0],[-3278443,-2198031,0],[-3275371,-2199055,0],[-3266667,-2207759,0],[-3263083,-2209807,0],[-3261035,-2213391,0],[-3248747,-2214927,0],[-3241579,-2219023,0],[-3236971,-2217487,0],[-3233899,-2217487,0],[-3227243,-2221071,0],[-3218539,-2223119,0],[-3212395,-2222095,0],[-3204715,-2225167,0],[-3194475,-2224655,0],[-3194475,-2226191,0],[-3197035,-2235407,0],[-3196523,-2241551,0],[-3195499,-2246159,0],[-3192939,-2248207,0],[-3183211,-2251279,0],[-3173483,-2261007,0],[-3170923,-2262031,0],[-3161195,-2256911,0],[-3153003,-2254351,0],[-3149419,-2251791,0],[-3147883,-2251279,0],[-3142763,-2256399,0],[-3142251,-2258959,0],[-3143275,-2261519,0],[-3141739,-2264591,0],[-3135083,-2272271,0],[-3135595,-2275855,0],[-3139691,-2280463,0],[-3141739,-2282511,0],[-3147883,-2285071,0],[-3151979,-2290703,0],[-3154539,-2292239,0],[-3155051,-2294287,0],[-3152491,-2297871,0],[-3156075,-2307087,0],[-3159147,-2323471,0],[-3158123,-2325007,0],[-3150955,-2333199,0],[-3142763,-2331663,0],[-3143275,-2335759,0],[-3145323,-2339343,0],[-3145835,-2341391,0],[-3142763,-2348047,0],[-3669099,-2348047,0],[-3669099,-2157583,0],[-3665515,-2156047,0],[-3662443,-2156047,0],[-3654763,-2151951,0],[-3642987,-2149391,0],[-3638379,-2149391,0],[-3632747,-2151439,0],[-3628139,-2151951,0],[-3621483,-2152463,0],[-3613291,-2153999,0],[-3606635,-2151951,0],[-3599979,-2155023,0],[-3599467,-2148367,0],[-3598443,-2147855,0],[-3589227,-2142223,0],[-3578987,-2141199,0],[-3568235,-2146831,0],[-3565163,-2152975,0],[-3561067,-2153999,0],[-3561067,-2151439,0],[-3562603,-2151439,0],[-3563627,-2147855,0],[-3563115,-2145807,0],[-3566187,-2141711,0],[-3569259,-2134543,0],[-3569259,-2133007,0],[-3561579,-2130447,0],[-3558507,-2124815,0],[-3556459,-2109455,0],[-3553899,-2105359,0],[-3548779,-2102287,0],[-3545195,-2100751,0],[-3543147,-2098703,0],[-3542123,-2094607,0],[-3536491,-2089999,0],[-3509867,-2075151,0],[-3501163,-2074127,0]]]},{"id":34,"color":[0.964486274509804,0.4825098039215686,0.28815686274509805,1],"coordinates":[[[-2778731,-2262543,0],[-2779755,-2263055,0],[-2780779,-2265103,0],[-2783851,-2263567,0],[-2785899,-2264591,0],[-2786411,-2265103,0],[-2785387,-2265615,0],[-2786411,-2267151,0],[-2784363,-2268175,0],[-2785387,-2270735,0],[-2788459,-2268175,0],[-2794603,-2266639,0],[-2795115,-2265615,0],[-2797675,-2266127,0],[-2799723,-2265103,0],[-2799723,-2266127,0],[-2798699,-2266639,0],[-2799211,-2268175,0],[-2789483,-2279951,0],[-2790507,-2282511,0],[-2788971,-2285583,0],[-2788459,-2288655,0],[-2791019,-2291727,0],[-2791531,-2295311,0],[-2787947,-2299407,0],[-2784875,-2307087,0],[-2782827,-2309135,0],[-2779755,-2309647,0],[-2778219,-2311183,0],[-2775147,-2311183,0],[-2776171,-2313231,0],[-2775147,-2315791,0],[-2779755,-2316815,0],[-2780267,-2322959,0],[-2781291,-2324495,0],[-2784875,-2326543,0],[-2784875,-2329615,0],[-2787947,-2333711,0],[-2792555,-2342927,0],[-2793579,-2346511,0],[-2793067,-2348047,0],[-2809963,-2348047,0],[-2809963,-2345487,0],[-2811499,-2343951,0],[-2817643,-2344463,0],[-2819691,-2343439,0],[-2829931,-2348047,0],[-2842219,-2347023,0],[-2843755,-2348047,0],[-3142763,-2348047,0],[-3145835,-2341391,0],[-3145323,-2339343,0],[-3143275,-2335759,0],[-3142763,-2331663,0],[-3150955,-2333199,0],[-3158123,-2325007,0],[-3159147,-2323471,0],[-3156075,-2307087,0],[-3152491,-2297871,0],[-3155051,-2293263,0],[-3151979,-2290703,0],[-3149419,-2286095,0],[-3147883,-2285071,0],[-3141739,-2282511,0],[-3139691,-2280463,0],[-3135595,-2275855,0],[-3135083,-2272271,0],[-3132011,-2272271,0],[-3130475,-2270735,0],[-3126379,-2270735,0],[-3119211,-2266639,0],[-3115627,-2261007,0],[-3103851,-2254863,0],[-3099243,-2249231,0],[-3092075,-2249231,0],[-3087467,-2246671,0],[-3085419,-2247695,0],[-3084907,-2249231,0],[-3083883,-2250255,0],[-3085419,-2251279,0],[-3087467,-2257423,0],[-3085931,-2266127,0],[-3086443,-2267663,0],[-3085931,-2269199,0],[-3081835,-2269711,0],[-3075691,-2264591,0],[-3070059,-2257935,0],[-3068011,-2258959,0],[-3064427,-2264591,0],[-3062379,-2264591,0],[-3060331,-2263055,0],[-3059307,-2256911,0],[-3056747,-2256399,0],[-3055211,-2256911,0],[-3053675,-2252815,0],[-3053675,-2251279,0],[-3051627,-2250767,0],[-3049579,-2245647,0],[-3047019,-2244623,0],[-3046507,-2237967,0],[-3043435,-2233871,0],[-3041387,-2232847,0],[-3042411,-2227727,0],[-3040875,-2226191,0],[-3036779,-2223631,0],[-3034219,-2223631,0],[-3033707,-2225679,0],[-3030635,-2225167,0],[-3025003,-2226191,0],[-3016299,-2222095,0],[-3015787,-2221071,0],[-3016811,-2219023,0],[-3014251,-2218511,0],[-3014763,-2215951,0],[-3010667,-2214927,0],[-3009643,-2213903,0],[-3010155,-2211343,0],[-3007595,-2204687,0],[-3009131,-2197519,0],[-3011691,-2190351,0],[-3011691,-2186767,0],[-3013227,-2182159,0],[-3014763,-2180111,0],[-3016811,-2179087,0],[-3017835,-2178063,0],[-3017323,-2174991,0],[-3015275,-2174479,0],[-3015275,-2172431,0],[-3012715,-2168847,0],[-3008107,-2166287,0],[-3006571,-2163727,0],[-3006571,-2157071,0],[-3003499,-2150927,0],[-3002475,-2145807,0],[-2993771,-2138639,0],[-2987627,-2128911,0],[-2984043,-2126351,0],[-2978411,-2125839,0],[-2975851,-2121231,0],[-2975851,-2115599,0],[-2974315,-2111503,0],[-2974827,-2110991,0],[-2978411,-2110479,0],[-2979435,-2107407,0],[-2984043,-2101775,0],[-2983531,-2099215,0],[-2981483,-2094607,0],[-2981483,-2088463,0],[-2977899,-2079759,0],[-2978411,-2074639,0],[-2979947,-2070543,0],[-2976875,-2070031,0],[-2974315,-2066447,0],[-2970219,-2064399,0],[-2968683,-2062351,0],[-2967147,-2062863,0],[-2963051,-2061327,0],[-2962027,-2059791,0],[-2962539,-2054159,0],[-2958955,-2050575,0],[-2953835,-2048527,0],[-2951275,-2049551,0],[-2945131,-2048527,0],[-2941035,-2049039,0],[-2937451,-2047503,0],[-2930795,-2046479,0],[-2927723,-2044943,0],[-2920043,-2037263,0],[-2904683,-2031119,0],[-2903659,-2030095,0],[-2904171,-2022415,0],[-2903147,-2018319,0],[-2901099,-2014735,0],[-2899051,-2012687,0],[-2892395,-2011151,0],[-2876011,-2011663,0],[-2873963,-2012175,0],[-2873451,-2015759,0],[-2867819,-2015247,0],[-2864235,-2009615,0],[-2865259,-2007055,0],[-2865259,-2002959,0],[-2863723,-1996815,0],[-2862187,-1994767,0],[-2856043,-1995279,0],[-2850411,-1993231,0],[-2847339,-1992719,0],[-2845291,-1991183,0],[-2842219,-1990671,0],[-2833003,-1991695,0],[-2820203,-1994767,0],[-2816107,-1993231,0],[-2806379,-1996815,0],[-2803307,-1996303,0],[-2796651,-1998351,0],[-2790507,-1995791,0],[-2784363,-1994255,0],[-2779243,-1993743,0],[-2773611,-1994767,0],[-2767467,-1987087,0],[-2759787,-1984015,0],[-2748011,-1982479,0],[-2743915,-1982991,0],[-2738283,-1993231,0],[-2738283,-1998351,0],[-2751595,-2011663,0],[-2748011,-2018319,0],[-2742891,-2021903,0],[-2741867,-2023951,0],[-2739819,-2025487,0],[-2730091,-2020367,0],[-2728555,-2020367,0],[-2727531,-2021391,0],[-2729067,-2029071,0],[-2727531,-2030607,0],[-2727531,-2033167,0],[-2730603,-2037775,0],[-2731115,-2041871,0],[-2740843,-2056719,0],[-2734699,-2063375,0],[-2733675,-2066447,0],[-2735211,-2067983,0],[-2738795,-2069007,0],[-2744939,-2073103,0],[-2748523,-2079759,0],[-2746987,-2080271,0],[-2747499,-2083855,0],[-2750059,-2085391,0],[-2746475,-2086927,0],[-2745451,-2089487,0],[-2743403,-2086927,0],[-2740331,-2086415,0],[-2734187,-2088975,0],[-2732139,-2090511,0],[-2733163,-2093583,0],[-2729067,-2095119,0],[-2728555,-2095119,0],[-2727531,-2092047,0],[-2727019,-2092559,0],[-2725483,-2094607,0],[-2727019,-2100239,0],[-2734699,-2110479,0],[-2740843,-2115087,0],[-2741867,-2116623,0],[-2731627,-2128911,0],[-2724459,-2127375,0],[-2722411,-2129935,0],[-2723435,-2133007,0],[-2723435,-2135055,0],[-2720875,-2138127,0],[-2717803,-2139151,0],[-2717291,-2141199,0],[-2716267,-2141711,0],[-2716779,-2142223,0],[-2720363,-2146319,0],[-2719339,-2149391,0],[-2720363,-2150927,0],[-2726507,-2151439,0],[-2733675,-2153487,0],[-2734187,-2154511,0],[-2734187,-2156559,0],[-2732651,-2157583,0],[-2727019,-2158095,0],[-2724459,-2161167,0],[-2716267,-2164239,0],[-2713707,-2165775,0],[-2715755,-2168847,0],[-2740843,-2191375,0],[-2738795,-2209807,0],[-2740331,-2210831,0],[-2743403,-2211855,0],[-2743403,-2215439,0],[-2745451,-2219023,0],[-2742891,-2222095,0],[-2741867,-2228239,0],[-2742891,-2231823,0],[-2742891,-2235407,0],[-2741355,-2234383,0],[-2740331,-2236431,0],[-2737259,-2234383,0],[-2734187,-2234383,0],[-2732139,-2237967,0],[-2733163,-2243599,0],[-2732139,-2248719,0],[-2733163,-2251791,0],[-2735723,-2250767,0],[-2738283,-2252815,0],[-2737771,-2257423,0],[-2736235,-2257423,0],[-2735211,-2260495,0],[-2737259,-2261007,0],[-2737259,-2264079,0],[-2739819,-2266639,0],[-2739307,-2268687,0],[-2736747,-2271759,0],[-2736747,-2273295,0],[-2741355,-2279951,0],[-2743915,-2277903,0],[-2745451,-2269711,0],[-2749035,-2264079,0],[-2751083,-2256399,0],[-2753643,-2252815,0],[-2753643,-2250255,0],[-2754667,-2251279,0],[-2760299,-2251791,0],[-2760811,-2255375,0],[-2761835,-2255375,0],[-2762347,-2252815,0],[-2763883,-2252815,0],[-2764907,-2250767,0],[-2764907,-2246671,0],[-2765931,-2247183,0],[-2765931,-2251791,0],[-2767979,-2255887,0],[-2766955,-2258447,0],[-2767979,-2258959,0],[-2769003,-2261007,0],[-2770539,-2260495,0],[-2773611,-2261519,0],[-2773611,-2254351,0],[-2777195,-2253839,0],[-2776683,-2254863,0],[-2779243,-2254351,0],[-2779243,-2255375,0],[-2781291,-2255375,0],[-2781291,-2256911,0],[-2779243,-2257423,0],[-2780779,-2258959,0],[-2779243,-2258959,0],[-2778731,-2259983,0],[-2778731,-2262543,0]]]},{"id":35,"color":[0.9649568627450981,0.48590849673202613,0.28972549019607846,1],"coordinates":[[[-2829931,-2348047,0],[-2819691,-2343439,0],[-2817643,-2344463,0],[-2811499,-2343951,0],[-2809963,-2345487,0],[-2809963,-2348047,0],[-2829931,-2348047,0]]]},{"id":35,"color":[0.9649568627450981,0.48590849673202613,0.28972549019607846,1],"coordinates":[[[-2786923,-2348047,0],[-2783851,-2347023,0],[-2781291,-2348047,0],[-2786923,-2348047,0]]]},{"id":35,"color":[0.9649568627450981,0.48590849673202613,0.28972549019607846,1],"coordinates":[[[-2829931,-2348047,0],[-2843755,-2348047,0],[-2842219,-2347023,0],[-2829931,-2348047,0]]]},{"id":36,"color":[0.9579921568627452,0.43560784313725487,0.26650980392156864,1],"coordinates":[[[-2778731,-2262543,0],[-2778731,-2259983,0],[-2779243,-2258959,0],[-2780779,-2258959,0],[-2779243,-2257423,0],[-2781291,-2256911,0],[-2781291,-2255375,0],[-2779243,-2255375,0],[-2779243,-2254351,0],[-2776683,-2254863,0],[-2777195,-2253839,0],[-2773611,-2254351,0],[-2773611,-2261519,0],[-2770539,-2260495,0],[-2769003,-2261007,0],[-2767979,-2258959,0],[-2766955,-2258447,0],[-2767979,-2255887,0],[-2765931,-2251791,0],[-2765931,-2247183,0],[-2764907,-2246671,0],[-2764907,-2250767,0],[-2763883,-2252815,0],[-2762347,-2252815,0],[-2761835,-2255375,0],[-2760811,-2255375,0],[-2760299,-2251791,0],[-2754667,-2251279,0],[-2753643,-2250255,0],[-2753643,-2252815,0],[-2751083,-2256399,0],[-2749035,-2264079,0],[-2745451,-2269711,0],[-2743915,-2277903,0],[-2741355,-2279951,0],[-2736747,-2273295,0],[-2736747,-2271759,0],[-2739307,-2268687,0],[-2739819,-2266639,0],[-2737259,-2264079,0],[-2737259,-2261007,0],[-2735211,-2260495,0],[-2736235,-2257423,0],[-2737771,-2257423,0],[-2738283,-2252815,0],[-2735723,-2250767,0],[-2733163,-2251791,0],[-2732139,-2248719,0],[-2733163,-2243599,0],[-2732139,-2237967,0],[-2734187,-2234383,0],[-2737259,-2234383,0],[-2740331,-2236431,0],[-2741355,-2234383,0],[-2742891,-2235407,0],[-2742891,-2231823,0],[-2741867,-2228239,0],[-2742891,-2222095,0],[-2745451,-2219023,0],[-2743403,-2215439,0],[-2743403,-2211855,0],[-2740331,-2210831,0],[-2738795,-2209807,0],[-2740843,-2191887,0],[-2736235,-2187279,0],[-2728555,-2181135,0],[-2715755,-2168847,0],[-2713707,-2165775,0],[-2716267,-2164239,0],[-2724459,-2161167,0],[-2727019,-2158095,0],[-2731627,-2157583,0],[-2733675,-2157071,0],[-2734699,-2155535,0],[-2733675,-2153487,0],[-2726507,-2151439,0],[-2720363,-2150927,0],[-2719339,-2149391,0],[-2720363,-2146319,0],[-2707563,-2133519,0],[-2696299,-2123279,0],[-2687083,-2117647,0],[-2663531,-2100239,0],[-2657899,-2093583,0],[-2654827,-2088975,0],[-2649707,-2085903,0],[-2647147,-2085391,0],[-2644587,-2091023,0],[-2637419,-2094607,0],[-2635371,-2094607,0],[-2627691,-2088975,0],[-2624619,-2081295,0],[-2624107,-2074639,0],[-2624619,-2069519,0],[-2628203,-2056207,0],[-2636395,-2047503,0],[-2637419,-2044943,0],[-2636395,-2041359,0],[-2623083,-2025487,0],[-2610795,-2015759,0],[-2603627,-2008591,0],[-2593899,-1994767,0],[-2587243,-1989647,0],[-2582123,-1983503,0],[-2574955,-1972239,0],[-2568299,-1963023,0],[-2566251,-1958927,0],[-2563179,-1956879,0],[-2563691,-1960463,0],[-2560619,-1963023,0],[-2557547,-1964047,0],[-2554987,-1967119,0],[-2553963,-1969167,0],[-2552939,-1970191,0],[-2543211,-1970191,0],[-2541163,-1971215,0],[-2538091,-1979407,0],[-2532459,-1981455,0],[-2532459,-1989135,0],[-2529899,-1992719,0],[-2519659,-1992719,0],[-2507371,-1990671,0],[-2505323,-1992207,0],[-2502763,-1995791,0],[-2504811,-2001423,0],[-2510443,-2004495,0],[-2510955,-2013199,0],[-2512491,-2015759,0],[-2517099,-2019855,0],[-2518123,-2022415,0],[-2517611,-2024975,0],[-2515051,-2025487,0],[-2513003,-2024463,0],[-2505835,-2018319,0],[-2498155,-2013711,0],[-2490987,-2017807,0],[-2484843,-2018319,0],[-2482795,-2021903,0],[-2480235,-2040847,0],[-2481259,-2043407,0],[-2482283,-2043919,0],[-2487403,-2043407,0],[-2490475,-2043919,0],[-2488427,-2049551,0],[-2488427,-2055183,0],[-2487403,-2061327,0],[-2485867,-2062351,0],[-2482283,-2062863,0],[-2471019,-2060303,0],[-2468459,-2061839,0],[-2466923,-2067983,0],[-2457195,-2070543,0],[-2456171,-2071567,0],[-2456683,-2074127,0],[-2459755,-2081807,0],[-2459755,-2086415,0],[-2453611,-2080271,0],[-2451051,-2076687,0],[-2443883,-2077711,0],[-2441835,-2085391,0],[-2440299,-2086415,0],[-2438251,-2093071,0],[-2434667,-2096143,0],[-2433131,-2100239,0],[-2430571,-2103311,0],[-2424939,-2107407,0],[-2420843,-2106383,0],[-2414187,-2101775,0],[-2407019,-2103823,0],[-2405483,-2109455,0],[-2401387,-2114063,0],[-2401387,-2121743,0],[-2403947,-2126351,0],[-2408555,-2129935,0],[-2418283,-2131983,0],[-2421355,-2134543,0],[-2421355,-2136591,0],[-2419307,-2138127,0],[-2409067,-2141199,0],[-2393707,-2147343,0],[-2388075,-2153999,0],[-2389611,-2160655,0],[-2392683,-2163727,0],[-2397291,-2164751,0],[-2407019,-2164751,0],[-2409067,-2166287,0],[-2409579,-2168847,0],[-2408043,-2172431,0],[-2396779,-2177551,0],[-2396267,-2181647,0],[-2398315,-2185231,0],[-2399339,-2186255,0],[-2411627,-2190863,0],[-2413675,-2192399,0],[-2415723,-2197519,0],[-2415211,-2200591,0],[-2412651,-2203151,0],[-2408043,-2203151,0],[-2401899,-2200591,0],[-2399339,-2201615,0],[-2398315,-2204175,0],[-2400363,-2209295,0],[-2407531,-2214415,0],[-2409579,-2219535,0],[-2410091,-2228751,0],[-2404971,-2235407,0],[-2405995,-2240015,0],[-2409579,-2241551,0],[-2417259,-2241551,0],[-2419307,-2243599,0],[-2425451,-2240527,0],[-2426475,-2240527,0],[-2433643,-2250255,0],[-2435179,-2253839,0],[-2431083,-2261519,0],[-2428011,-2268687,0],[-2432619,-2275855,0],[-2431595,-2276367,0],[-2428011,-2275343,0],[-2422379,-2275855,0],[-2416747,-2279951,0],[-2409067,-2288655,0],[-2408043,-2293263,0],[-2406507,-2295311,0],[-2403947,-2297359,0],[-2402411,-2307087,0],[-2401387,-2315791,0],[-2402411,-2320399,0],[-2403947,-2321423,0],[-2408555,-2317839,0],[-2411627,-2317839,0],[-2412139,-2321423,0],[-2415211,-2324495,0],[-2408555,-2332687,0],[-2403947,-2334223,0],[-2401899,-2335759,0],[-2398315,-2342927,0],[-2389611,-2345999,0],[-2387563,-2348047,0],[-2781291,-2348047,0],[-2783851,-2347023,0],[-2793067,-2348047,0],[-2793579,-2346511,0],[-2792555,-2342927,0],[-2787947,-2333711,0],[-2784875,-2329615,0],[-2784875,-2326543,0],[-2781291,-2324495,0],[-2780267,-2322959,0],[-2779755,-2316815,0],[-2775147,-2315791,0],[-2776171,-2313231,0],[-2775147,-2311183,0],[-2778219,-2311183,0],[-2779755,-2309647,0],[-2782827,-2309135,0],[-2784875,-2307087,0],[-2787947,-2299407,0],[-2791531,-2295311,0],[-2791019,-2291727,0],[-2788459,-2288655,0],[-2788971,-2285583,0],[-2790507,-2282511,0],[-2789483,-2279951,0],[-2799211,-2268175,0],[-2798699,-2266639,0],[-2799723,-2266127,0],[-2799723,-2265103,0],[-2797675,-2266127,0],[-2795115,-2265615,0],[-2794603,-2266639,0],[-2788459,-2268175,0],[-2785387,-2270735,0],[-2784363,-2268175,0],[-2786411,-2267151,0],[-2785387,-2265615,0],[-2786411,-2265103,0],[-2785899,-2264591,0],[-2783851,-2263567,0],[-2780779,-2265103,0],[-2779755,-2263055,0],[-2778731,-2262543,0]]]},{"id":36,"color":[0.9579921568627452,0.43560784313725487,0.26650980392156864,1],"coordinates":[[[-2373739,-2348047,0],[-2369131,-2343951,0],[-2366059,-2343439,0],[-2358891,-2336271,0],[-2352235,-2335759,0],[-2355307,-2329615,0],[-2355307,-2327567,0],[-2351211,-2320911,0],[-2348139,-2319375,0],[-2343019,-2326543,0],[-2339435,-2327055,0],[-2337387,-2326031,0],[-2334827,-2322959,0],[-2333803,-2317839,0],[-2337387,-2307087,0],[-2336875,-2304015,0],[-2333803,-2302991,0],[-2330731,-2305039,0],[-2329195,-2307087,0],[-2327659,-2311695,0],[-2326635,-2321423,0],[-2317931,-2330639,0],[-2316395,-2334223,0],[-2313323,-2338831,0],[-2313835,-2341391,0],[-2318443,-2348047,0],[-2373739,-2348047,0]]]},{"id":37,"color":[0.958086274509804,0.4362875816993464,0.26682352941176474,1],"coordinates":[[[-2163819,-2172943,0],[-2161259,-2176015,0],[-2158187,-2176015,0],[-2155115,-2173967,0],[-2151531,-2175503,0],[-2149483,-2174479,0],[-2148459,-2174991,0],[-2145899,-2172431,0],[-2142827,-2170895,0],[-2140779,-2170383,0],[-2139243,-2168847,0],[-2140779,-2166799,0],[-2136683,-2164751,0],[-2139243,-2160143,0],[-2135147,-2158607,0],[-2135147,-2156559,0],[-2136171,-2155535,0],[-2136683,-2153487,0],[-2138219,-2152975,0],[-2135659,-2148879,0],[-2133611,-2147343,0],[-2133611,-2145807,0],[-2131051,-2144783,0],[-2131051,-2146831,0],[-2127467,-2147343,0],[-2123883,-2143247,0],[-2120299,-2141711,0],[-2113643,-2144271,0],[-2110571,-2142735,0],[-2108523,-2139151,0],[-2101867,-2138639,0],[-2098795,-2139663,0],[-2097259,-2138127,0],[-2094699,-2137615,0],[-2092651,-2138639,0],[-2091115,-2136079,0],[-2088043,-2136079,0],[-2086507,-2136591,0],[-2082411,-2147855,0],[-2080875,-2157583,0],[-2076779,-2160143,0],[-2058347,-2156047,0],[-2051691,-2149903,0],[-2048619,-2147855,0],[-2045035,-2148367,0],[-2043499,-2147343,0],[-2040939,-2146831,0],[-2038891,-2148879,0],[-2037867,-2146319,0],[-2031211,-2147855,0],[-2025579,-2152975,0],[-2025067,-2156047,0],[-2026091,-2161167,0],[-2024043,-2167311,0],[-2015851,-2165263,0],[-2009707,-2167823,0],[-2005099,-2171407,0],[-2003051,-2171919,0],[-2001515,-2171407,0],[-1999979,-2166287,0],[-1998443,-2165775,0],[-1993323,-2166799,0],[-1988715,-2164239,0],[-1986155,-2167311,0],[-1984619,-2168335,0],[-1979499,-2167311,0],[-1971307,-2161167,0],[-1959531,-2155535,0],[-1955435,-2147855,0],[-1942635,-2145295,0],[-1938027,-2142735,0],[-1938027,-2141199,0],[-1939563,-2138127,0],[-1939051,-2136591,0],[-1930347,-2136591,0],[-1927787,-2136079,0],[-1922667,-2126863,0],[-1906795,-2126351,0],[-1904235,-2126351,0],[-1902187,-2127887,0],[-1902187,-2130959,0],[-1905771,-2133007,0],[-1903211,-2135567,0],[-1899627,-2136079,0],[-1892971,-2134031,0],[-1888363,-2134031,0],[-1885291,-2135055,0],[-1881707,-2142223,0],[-1880171,-2146831,0],[-1879147,-2147855,0],[-1877099,-2153487,0],[-1873003,-2159119,0],[-1872491,-2162703,0],[-1868907,-2167311,0],[-1866859,-2168335,0],[-1858155,-2170383,0],[-1856619,-2172431,0],[-1858155,-2176015,0],[-1862763,-2179599,0],[-1864811,-2183183,0],[-1862251,-2190863,0],[-1861739,-2194959,0],[-1859179,-2200591,0],[-1856619,-2201103,0],[-1855595,-2200079,0],[-1855083,-2194959,0],[-1846379,-2191887,0],[-1844331,-2192399,0],[-1842795,-2194447,0],[-1842795,-2197007,0],[-1846379,-2202639,0],[-1846891,-2205711,0],[-1844331,-2215439,0],[-1839211,-2216975,0],[-1838699,-2217999,0],[-1841771,-2220047,0],[-1844843,-2224143,0],[-1845867,-2228751,0],[-1843307,-2235919,0],[-1841259,-2238991,0],[-1842283,-2244623,0],[-1838699,-2247695,0],[-1838699,-2251279,0],[-1840235,-2255375,0],[-1840235,-2257423,0],[-1839723,-2259471,0],[-1835627,-2261519,0],[-1836139,-2265615,0],[-1837675,-2266127,0],[-1834603,-2271247,0],[-1832043,-2277903,0],[-1833579,-2281487,0],[-1837163,-2281487,0],[-1840235,-2284559,0],[-1843819,-2284559,0],[-1849963,-2281487,0],[-1852011,-2282511,0],[-1852011,-2283535,0],[-1848427,-2289167,0],[-1841259,-2297871,0],[-1837163,-2304527,0],[-1836651,-2307087,0],[-1836139,-2312207,0],[-1838187,-2316303,0],[-1841259,-2315791,0],[-1844331,-2311695,0],[-1848427,-2312719,0],[-1850987,-2314767,0],[-1856107,-2323471,0],[-1858667,-2325007,0],[-1864299,-2333199,0],[-1864811,-2339343,0],[-1865835,-2343951,0],[-1868907,-2348047,0],[-2318443,-2348047,0],[-2313835,-2341391,0],[-2313323,-2338831,0],[-2316395,-2334223,0],[-2317931,-2330639,0],[-2326635,-2321423,0],[-2327659,-2314767,0],[-2325099,-2314255,0],[-2321003,-2311695,0],[-2317931,-2311695,0],[-2308715,-2315279,0],[-2304619,-2321935,0],[-2303083,-2322447,0],[-2299499,-2321935,0],[-2296427,-2322959,0],[-2294891,-2319887,0],[-2295915,-2318351,0],[-2292843,-2313231,0],[-2293355,-2312207,0],[-2298987,-2307087,0],[-2302059,-2302479,0],[-2305131,-2291727,0],[-2304619,-2289679,0],[-2304107,-2288143,0],[-2297963,-2282511,0],[-2295915,-2283023,0],[-2294891,-2284559,0],[-2294891,-2289167,0],[-2293867,-2290191,0],[-2291819,-2289679,0],[-2287723,-2284047,0],[-2286699,-2278415,0],[-2285675,-2275343,0],[-2282603,-2272271,0],[-2281579,-2269199,0],[-2282091,-2266127,0],[-2284139,-2264079,0],[-2285163,-2262031,0],[-2287723,-2258447,0],[-2287723,-2257423,0],[-2286187,-2258959,0],[-2285675,-2258447,0],[-2287723,-2256911,0],[-2285675,-2255375,0],[-2285163,-2251791,0],[-2287723,-2252303,0],[-2288235,-2251791,0],[-2287211,-2249743,0],[-2287723,-2249231,0],[-2288747,-2249743,0],[-2287723,-2248207,0],[-2285675,-2247695,0],[-2285675,-2246159,0],[-2283115,-2249231,0],[-2282603,-2250767,0],[-2278507,-2253839,0],[-2271339,-2253839,0],[-2269803,-2251279,0],[-2265707,-2252815,0],[-2252395,-2252815,0],[-2248299,-2252303,0],[-2246763,-2244623,0],[-2245739,-2243087,0],[-2239595,-2242063,0],[-2238571,-2243087,0],[-2239083,-2244111,0],[-2242667,-2248719,0],[-2242667,-2249743,0],[-2239083,-2250255,0],[-2231915,-2247183,0],[-2229867,-2248719,0],[-2228843,-2252303,0],[-2232427,-2253839,0],[-2232939,-2256399,0],[-2227819,-2268175,0],[-2219115,-2271247,0],[-2215019,-2271247,0],[-2212971,-2274831,0],[-2209899,-2276879,0],[-2207851,-2276367,0],[-2205291,-2271759,0],[-2201195,-2269711,0],[-2201195,-2268687,0],[-2204267,-2267663,0],[-2205291,-2261519,0],[-2207851,-2258447,0],[-2215531,-2254351,0],[-2221163,-2253839,0],[-2222699,-2251279,0],[-2223723,-2244623,0],[-2220139,-2238479,0],[-2219115,-2238479,0],[-2210923,-2246671,0],[-2209899,-2251279,0],[-2208875,-2252303,0],[-2206827,-2252815,0],[-2204779,-2251791,0],[-2199659,-2253839,0],[-2198123,-2253327,0],[-2197099,-2253839,0],[-2195563,-2245135,0],[-2190955,-2242575,0],[-2190443,-2235407,0],[-2189419,-2234383,0],[-2185835,-2233359,0],[-2183275,-2230799,0],[-2179179,-2224655,0],[-2177131,-2219535,0],[-2177131,-2215439,0],[-2175083,-2211855,0],[-2175083,-2207759,0],[-2174059,-2205199,0],[-2175083,-2204175,0],[-2182251,-2201615,0],[-2183275,-2199567,0],[-2182251,-2198543,0],[-2176107,-2197519,0],[-2170475,-2194447,0],[-2162795,-2180623,0],[-2162795,-2178063,0],[-2161771,-2177551,0],[-2161771,-2176015,0],[-2164331,-2172943,0],[-2163819,-2172943,0]],[[-1877099,-2329615,0],[-1879659,-2331663,0],[-1878635,-2336783,0],[-1873515,-2341903,0],[-1870955,-2338831,0],[-1869931,-2332175,0],[-1865323,-2332175,0],[-1867883,-2330639,0],[-1866859,-2329615,0],[-1868395,-2325519,0],[-1869931,-2325007,0],[-1872491,-2322959,0],[-1875051,-2323983,0],[-1875051,-2327055,0],[-1877099,-2329103,0],[-1877099,-2329615,0]],[[-2284139,-2257423,0],[-2285163,-2258959,0],[-2285163,-2259983,0],[-2284139,-2258959,0],[-2282091,-2257935,0],[-2284139,-2257423,0]]]},{"id":38,"color":[0.9574274509803922,0.4315294117647059,0.26462745098039214,1],"coordinates":[[[-1837163,-2304527,0],[-1834091,-2307087,0],[-1830507,-2315279,0],[-1825387,-2318863,0],[-1819755,-2318863,0],[-1815659,-2315791,0],[-1806955,-2316303,0],[-1802347,-2312719,0],[-1796715,-2312207,0],[-1793131,-2310671,0],[-1792107,-2311183,0],[-1786987,-2313231,0],[-1787499,-2310159,0],[-1787499,-2307599,0],[-1786475,-2307087,0],[-1785963,-2307087,0],[-1772651,-2325007,0],[-1767019,-2329103,0],[-1758315,-2333711,0],[-1754731,-2338831,0],[-1752171,-2348047,0],[-1868907,-2348047,0],[-1865323,-2342927,0],[-1864299,-2333199,0],[-1858667,-2325007,0],[-1856107,-2323471,0],[-1850987,-2314767,0],[-1848427,-2312719,0],[-1844331,-2311695,0],[-1841259,-2315791,0],[-1838187,-2316303,0],[-1836139,-2312207,0],[-1836651,-2307087,0],[-1837163,-2304527,0]]]},{"id":38,"color":[0.9574274509803922,0.4315294117647059,0.26462745098039214,1],"coordinates":[[[-1701995,-2348047,0],[-1699435,-2343439,0],[-1701483,-2326031,0],[-1700971,-2320399,0],[-1696875,-2307087,0],[-1690731,-2295311,0],[-1687659,-2291215,0],[-1672299,-2280975,0],[-1654379,-2271247,0],[-1650283,-2271759,0],[-1647211,-2273295,0],[-1639531,-2282511,0],[-1636459,-2284047,0],[-1628267,-2283023,0],[-1621611,-2279951,0],[-1619563,-2276879,0],[-1616491,-2275343,0],[-1610347,-2273807,0],[-1597035,-2278927,0],[-1593963,-2278927,0],[-1584747,-2274319,0],[-1576043,-2266639,0],[-1568363,-2263567,0],[-1555563,-2259983,0],[-1546347,-2259471,0],[-1530987,-2261007,0],[-1520235,-2263567,0],[-1513067,-2268687,0],[-1511531,-2268687,0],[-1506411,-2264591,0],[-1503339,-2265103,0],[-1502315,-2266127,0],[-1500779,-2265103,0],[-1499243,-2262031,0],[-1498219,-2256911,0],[-1494635,-2253327,0],[-1490027,-2250255,0],[-1490027,-2348047,0],[-1701995,-2348047,0]],[[-1695339,-2347023,0],[-1696363,-2343951,0],[-1696875,-2343951,0],[-1695339,-2347023,0]]]},{"id":38,"color":[0.9574274509803922,0.4315294117647059,0.26462745098039214,1],"coordinates":[[[-1877099,-2329615,0],[-1877099,-2329103,0],[-1875051,-2327055,0],[-1875051,-2323983,0],[-1873003,-2322959,0],[-1871979,-2322959,0],[-1869931,-2325007,0],[-1868395,-2325519,0],[-1866859,-2329615,0],[-1867883,-2330639,0],[-1865323,-2332687,0],[-1869931,-2332175,0],[-1870443,-2337295,0],[-1870955,-2339343,0],[-1873515,-2341903,0],[-1878635,-2336783,0],[-1879659,-2331663,0],[-1877099,-2329615,0]]]},{"id":38,"color":[0.9574274509803922,0.4315294117647059,0.26462745098039214,1],"coordinates":[[[-1789035,-2308623,0],[-1788523,-2309647,0],[-1789547,-2310159,0],[-1787499,-2310159,0],[-1787499,-2311695,0],[-1790571,-2310159,0],[-1790059,-2308623,0],[-1789035,-2308623,0]]]},{"id":38,"color":[0.9574274509803922,0.4315294117647059,0.26462745098039214,1],"coordinates":[[[-1791595,-2304015,0],[-1790059,-2305039,0],[-1792619,-2304527,0],[-1791595,-2304015,0]]]}] \ No newline at end of file diff --git a/test/unit/geom/buffer/polygon/fill_buffer-spec.js b/test/unit/geom/buffer/polygon/fill_buffer-spec.js new file mode 100644 index 0000000000..e04f531259 --- /dev/null +++ b/test/unit/geom/buffer/polygon/fill_buffer-spec.js @@ -0,0 +1,13 @@ +import { expect } from 'chai'; +import FillBuffer from '../../../../../src/geom/buffer/polygon/fill_buffer'; +import { layerData } from '../../../../asset/data/layer_data'; +describe('FillBuffer', () => { + it('fill buffer', () => { + console.time('buffer'); + const fillBuffer = new FillBuffer({ + layerData + }); + console.timeEnd('buffer'); + console.log(fillBuffer); + }); +});