From ba7c9a0c1db01cfcdbe22ac01156ae32cbb8fae3 Mon Sep 17 00:00:00 2001 From: "@thinkinggis" Date: Thu, 29 Dec 2022 16:06:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=A0=85=E6=A0=BCrampcolor=20=E6=94=AF?= =?UTF-8?q?=E6=8C=81cat=E3=80=81quantize=E3=80=81custom=20=E7=9D=80?= =?UTF-8?q?=E8=89=B2=E6=96=B9=E5=BC=8F=20(#1554)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: circle meter size && remove unuse code file * docs: add demo * feat: 新增attribute diff 校验 * fix: lint error * feat: 增强 rampcolor 类型 * fix: rampcolor domain * docs: rampcolor 优化 * fix: 纬度范围大于85 的情况 * fix: rampcolor quantize * docs: 更新demo --- dev-demos/bugs/larkmap/demos/polygon.tsx | 98 + dev-demos/bugs/larkmap/polygon.md | 2 + dev-demos/bugs/polygon/demos/scale.tsx | 5107 +---------------- dev-demos/bugs/polygon/select.md | 2 +- dev-demos/features/line/demos/linearline.tsx | 6 +- dev-demos/gallery/scale/map.md | 2 + dev-demos/gallery/scale/map.tsx | 112 + dev-demos/raster/demos/rasterFile.tsx | 2 +- dev-demos/raster/single/demos/light.tsx | 6 +- dev-demos/raster/single/demos/rasterFile.tsx | 20 +- dev-demos/tile/Raster/demos/rasterData.tsx | 56 +- .../src/services/asset/ITextureService.ts | 4 +- .../core/src/services/layer/ILayerService.ts | 2 +- .../core/src/services/renderer/ITexture2D.ts | 1 + packages/layers/src/core/BaseLayer.ts | 33 +- packages/layers/src/core/TextureService.ts | 51 +- .../layers/src/plugins/DataMappingPlugin.ts | 12 +- packages/layers/src/raster/models/raster.ts | 28 +- .../src/raster/models/rasterTerrainRgb.ts | 11 +- .../layers/src/raster/models/rasterTile.ts | 101 - .../src/raster/shaders/raster_2d_frag.glsl | 1 + .../src/tile/tileFactory/RasterRGBTile.ts | 1 - .../layers/src/tile/tileFactory/RasterTile.ts | 10 +- .../tileFactory/layers/RasterDataLayer.ts | 28 - packages/renderer/src/regl/ReglTexture2D.ts | 4 + .../api/raster_layer/common/rampcolors.md | 72 + .../docs/api/raster_layer/common/style.md | 17 +- .../api/raster_layer/common/style_single.md | 18 +- .../docs/api/raster_layer/raster_layer.zh.md | 2 +- .../site/docs/common/layer/layer_event.md | 4 +- .../site/examples/raster/basic/demo/meta.json | 5 - .../site/examples/raster/basic/index.zh.md | 2 +- .../examples/raster/data_raster/index.zh.md | 2 +- .../examples/raster/single_raster/demo/dem.js | 50 + .../raster/single_raster/demo/dem_quantize.js | 50 + .../{basic => single_raster}/demo/light.js | 5 +- .../single_raster/demo/light_default.js | 59 + .../raster/single_raster/demo/meta.json | 29 + .../examples/raster/single_raster/index.en.md | 4 + .../examples/raster/single_raster/index.zh.md | 4 + .../site/examples/tile/raster/demo/tiff.js | 54 +- packages/utils/src/color.ts | 181 +- packages/utils/src/workers/triangulation.ts | 12 +- 43 files changed, 943 insertions(+), 5327 deletions(-) create mode 100644 dev-demos/bugs/larkmap/demos/polygon.tsx create mode 100644 dev-demos/bugs/larkmap/polygon.md create mode 100644 dev-demos/gallery/scale/map.md create mode 100644 dev-demos/gallery/scale/map.tsx delete mode 100644 packages/layers/src/raster/models/rasterTile.ts delete mode 100644 packages/layers/src/tile/tileFactory/layers/RasterDataLayer.ts create mode 100644 packages/site/docs/api/raster_layer/common/rampcolors.md create mode 100644 packages/site/examples/raster/single_raster/demo/dem.js create mode 100644 packages/site/examples/raster/single_raster/demo/dem_quantize.js rename packages/site/examples/raster/{basic => single_raster}/demo/light.js (87%) create mode 100644 packages/site/examples/raster/single_raster/demo/light_default.js create mode 100644 packages/site/examples/raster/single_raster/demo/meta.json create mode 100644 packages/site/examples/raster/single_raster/index.en.md create mode 100644 packages/site/examples/raster/single_raster/index.zh.md diff --git a/dev-demos/bugs/larkmap/demos/polygon.tsx b/dev-demos/bugs/larkmap/demos/polygon.tsx new file mode 100644 index 0000000000..1856272e94 --- /dev/null +++ b/dev-demos/bugs/larkmap/demos/polygon.tsx @@ -0,0 +1,98 @@ +import type { ChoroplethLayerProps,IconImageLayerProps } from '@antv/larkmap'; +import { ChoroplethLayer, LarkMap,LegendRamp,CustomControl,IconImageLayer} from '@antv/larkmap'; +import React, { useEffect, useState } from 'react'; +; +const layerOptions: Omit = { + autoFit: true, + fillColor: { + field: '达峰进度条', + value: [ + '#fee5d9', + '#fc9272', + '#fb6a4a', + '#de2d26', + '#a50f15', + ], + scale: { + type: 'quantize', + domain: [0, 100], + unknown: '#f7f4f9', + } + }, + opacity: 1, + strokeColor: '#ddd', + lineWidth: 1, + state: { + active: { strokeColor: 'green', lineWidth: 1.5, lineOpacity: 0.8 }, + select: { strokeColor: 'red', lineWidth: 1.5, lineOpacity: 0.8 }, + }, + + label: { + field: 'name', + visible: false, + style: { + textAllowOverlap: true, + fill: '#333', fontSize: 10, stroke: '#aaa', strokeWidth: 1 }, + }, + }; + + export default () => { + const [update,setUpdate] = useState() + const [options, setOptions] = useState(layerOptions); + const [source, setSource] = useState({ + data: { type: 'FeatureCollection', features: [] }, + parser: { + type: 'json', + geometry: 'geometry', + } + }); + + const [labelsource, setLabelsource] = useState({ + data: { type: 'FeatureCollection', features: [] }, + parser: { + type: 'json', + geometry: 'centroid', + } + }); + + + useEffect(() => { + fetch('https://mdn.alipayobjects.com/afts/file/A*7HqFT7he7KoAAAAAAAAAAAAADrd2AQ/12.20%20%E5%90%84%E7%9C%81%E4%BB%BD%E9%A6%96%E8%BD%AE%E6%84%9F%E6%9F%93%E9%AB%98%E5%B3%B0%E6%9C%9F%E9%A2%84%E6%B5%8B.json') + .then((response) => response.json()) + .then((data: any) => { + setSource((prevState) => ({ ...prevState, data })); + setLabelsource((prevState) => ({ ...prevState, data })) + }); + setInterval(()=>{ + setUpdate(Math.random()) + },2000) + }, []); + return ( + + { + console.log('onDataUpdate') + }} /> + +

达峰进度

+ +
+ +
+ ); + }; \ No newline at end of file diff --git a/dev-demos/bugs/larkmap/polygon.md b/dev-demos/bugs/larkmap/polygon.md new file mode 100644 index 0000000000..e60adcc827 --- /dev/null +++ b/dev-demos/bugs/larkmap/polygon.md @@ -0,0 +1,2 @@ +### 区域图 + \ No newline at end of file diff --git a/dev-demos/bugs/polygon/demos/scale.tsx b/dev-demos/bugs/polygon/demos/scale.tsx index e6ab8303d8..f50098aae1 100644 --- a/dev-demos/bugs/polygon/demos/scale.tsx +++ b/dev-demos/bugs/polygon/demos/scale.tsx @@ -3,5110 +3,269 @@ // @ts-ignore import { PolygonLayer, Scene } from '@antv/l7'; // @ts-ignore -import { GaodeMap, Map, GaodeMapV1 } from '@antv/l7-maps'; +import { GaodeMap, Map,Mapbox, GaodeMapV1 } from '@antv/l7-maps'; import React, { useEffect } from 'react'; const data = { - type: "FeatureCollection", - features: [ - { - type: "Feature", - geometry: { - type: "MultiPolygon", - coordinates: [ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ [ - [ - [47.7381, 43.9251], - [47.6716, 44.0021], - [47.8742, 43.99], - [47.7381, 43.9251] - ] + -180, + -90 ], [ - [ - [-172.2987, 65.6437], - [-172.5855, 65.691], - [-172.6439, 65.6239], - [-172.3724, 65.568], - [-172.3013, 65.4699], - [-172.155, 65.4072], - [-172.2123, 65.3218], - [-172.1993, 65.203], - [-172.118, 65.0429], - [-172.3874, 64.9167], - [-172.4851, 64.9225], - [-172.7529, 64.838], - [-172.742, 64.7691], - [-172.8603, 64.6623], - [-172.4068, 64.5154], - [-172.277, 64.4271], - [-172.6024, 64.3769], - [-172.8178, 64.4576], - [-172.8391, 64.3012], - [-172.9447, 64.2613], - [-173.1673, 64.2517], - [-173.3538, 64.2921], - [-173.3522, 64.3533], - [-173.6136, 64.329], - [-173.9793, 64.4227], - [-174.0371, 64.5392], - [-174.9246, 64.799], - [-175.0468, 64.7728], - [-175.3733, 64.8022], - [-175.3825, 64.8563], - [-175.8379, 64.9847], - [-175.724, 65.1452], - [-175.8881, 65.2833], - [-175.9099, 65.4131], - [-176.408, 65.5003], - [-176.8687, 65.594], - [-177.096, 65.5912], - [-177.3076, 65.4847], - [-177.7508, 65.4433], - [-178.0987, 65.4631], - [-178.2553, 65.4467], - [-178.53, 65.4985], - [-178.3921, 65.6949], - [-178.5794, 65.7315], - [-178.6929, 65.8402], - [-178.8586, 65.9024], - [-178.6506, 66.0176], - [-178.4314, 66.2783], - [-178.5809, 66.3487], - [-178.7154, 66.1869], - [-178.9603, 66.159], - [-179.1136, 66.2747], - [-179.2922, 66.2521], - [-179.2209, 66.1537], - [-179.3479, 66.1086], - [-179.7452, 66.0825], - [-179.771, 65.896], - [-179.5812, 65.722], - [-179.2703, 65.6196], - [-179.2594, 65.5298], - [-179.4726, 65.4059], - [-179.529, 65.2313], - [-179.6667, 65.1301], - [-179.7698, 65.1244], - [-180, 65.0276], - [-180, 68.9795], - [-179.7816, 68.913], - [-179.4773, 68.917], - [-179.3002, 68.8518], - [-178.8314, 68.7448], - [-178.537, 68.6038], - [-177.4109, 68.2458], - [-176.798, 68.0846], - [-176.0486, 67.8681], - [-175.8875, 67.8415], - [-175.6231, 67.7451], - [-175.2585, 67.6479], - [-175.241, 67.544], - [-174.8925, 67.4149], - [-174.7472, 67.3073], - [-174.8684, 67.2695], - [-174.9096, 67.0824], - [-174.7874, 66.9379], - [-174.7064, 66.7707], - [-174.9184, 66.6894], - [-174.8134, 66.5925], - [-174.6806, 66.5942], - [-174.4226, 66.5228], - [-174.468, 66.3875], - [-174.3655, 66.3357], - [-173.9652, 66.4567], - [-173.862, 66.3161], - [-173.7021, 66.3691], - [-173.685, 66.4394], - [-173.8468, 66.511], - [-174.191, 66.5527], - [-174.1902, 66.595], - [-173.9143, 66.6763], - [-173.9471, 66.8388], - [-174.04, 66.9743], - [-174.1883, 67.0025], - [-174.0896, 67.0858], - [-173.7191, 67.078], - [-173.6233, 67.113], - [-173.3772, 67.077], - [-172.8954, 67.0391], - [-172.6621, 67.0043], - [-172.0298, 66.9545], - [-171.6909, 66.9473], - [-171.6505, 66.8476], - [-171.3386, 66.758], - [-171.3537, 66.6727], - [-171.1342, 66.5821], - [-170.7293, 66.4468], - [-170.5699, 66.3514], - [-170.1992, 66.2792], - [-170.1098, 66.1817], - [-169.7502, 66.1622], - [-169.6586, 66.0833], - [-169.7129, 66.0148], - [-169.9086, 66.0496], - [-170.1496, 66.0161], - [-170.5289, 65.8664], - [-170.5098, 65.6521], - [-170.613, 65.6006], - [-171.1625, 65.701], - [-171.2286, 65.6542], - [-170.9887, 65.5896], - [-171.0532, 65.4635], - [-171.2602, 65.5265], - [-171.7375, 65.5012], - [-172.1461, 65.5315], - [-172.2987, 65.6437] - ] + -180, + 90 ], [ - [ - [-179.5379, 70.8651], - [-179.6723, 70.9452], - [-180, 70.9748], - [-180, 71.5283], - [-179.6162, 71.5677], - [-179.3272, 71.5335], - [-179.1156, 71.5863], - [-178.6517, 71.5684], - [-178.1149, 71.4782], - [-177.7355, 71.3044], - [-177.4586, 71.2189], - [-177.5925, 71.1081], - [-177.9247, 71.0261], - [-178.7521, 70.9581], - [-179.152, 70.8975], - [-179.5379, 70.8651] - ] + 180, + 90 ], [ - [ - [-172.456, 64.8221], - [-172.2826, 64.8325], - [-172.0959, 64.7819], - [-172.3455, 64.708], - [-172.6358, 64.7072], - [-172.456, 64.8221] - ] + 180, + -90 ], [ - [ - [21.2765, 55.2457], - [21.4117, 55.2774], - [21.5021, 55.1945], - [21.6534, 55.1823], - [21.7486, 55.1279], - [22.0711, 55.0262], - [22.2759, 55.0671], - [22.6125, 55.0202], - [22.7313, 54.9665], - [22.8928, 54.8137], - [22.7289, 54.6944], - [22.6861, 54.5884], - [22.7021, 54.4653], - [22.7934, 54.3682], - [22.5713, 54.3511], - [21.4715, 54.3207], - [20.5405, 54.3718], - [20.2195, 54.408], - [19.7861, 54.4367], - [20.2605, 54.6203], - [20.3147, 54.6864], - [20.0588, 54.7146], - [19.9391, 54.7047], - [19.9696, 54.7985], - [19.9466, 54.925], - [20.0233, 54.95], - [20.5299, 54.9606], - [20.9907, 54.8926], - [21.2156, 54.9239], - [21.2243, 55.0103], - [21.1798, 55.193], - [21.2765, 55.2457] - ] - ], - [ - [ - [35.8509, 65], - [35.5145, 65.0694], - [35.4974, 65.1181], - [35.6727, 65.1644], - [35.8172, 65.1528], - [35.7696, 65.0666], - [35.8509, 65] - ] - ], - [ - [ - [48.4913, 80.7987], - [48.7185, 80.6231], - [48.1393, 80.6481], - [47.9828, 80.7223], - [47.5257, 80.6732], - [46.8737, 80.5547], - [46.529, 80.5276], - [45.4172, 80.5484], - [45.0178, 80.6158], - [46.1149, 80.6622], - [46.9049, 80.7412], - [47.4705, 80.8517], - [47.9457, 80.7973], - [48.4913, 80.7987] - ] - ], - [ - [ - [48.2739, 80.1154], - [47.8526, 80.1637], - [47.8567, 80.2458], - [47.4215, 80.2239], - [47.1154, 80.1609], - [46.7549, 80.3151], - [47.1838, 80.376], - [48.0915, 80.4113], - [47.612, 80.4832], - [48.3342, 80.5478], - [49.1541, 80.5134], - [49.2362, 80.5861], - [49.6705, 80.6606], - [49.329, 80.6992], - [49.1782, 80.7973], - [49.6465, 80.8491], - [49.8051, 80.9074], - [50.5828, 80.8959], - [51.0027, 80.8576], - [51.8017, 80.713], - [50.9865, 80.5458], - [49.666, 80.4783], - [49.7497, 80.3681], - [49.1341, 80.3711], - [48.85, 80.2123], - [49.1139, 80.1697], - [48.2739, 80.1154] - ] - ], - [ - [ - [50, 69.0613], - [49.6636, 68.8592], - [49.179, 68.7612], - [48.5835, 68.7164], - [48.223, 68.8625], - [48.2026, 68.9567], - [48.277, 69.2197], - [48.4126, 69.3477], - [48.6696, 69.4484], - [48.9101, 69.4963], - [49.2062, 69.5084], - [49.3991, 69.4763], - [50.1494, 69.2583], - [50.3028, 69.1276], - [50, 69.0613] - ] - ], - [ - [ - [50, 80.2224], - [50.3943, 80.1623], - [49.8857, 80.0548], - [49.552, 80.1592], - [50, 80.2224] - ] - ], - [ - [ - [50.5994, 80], - [51.0133, 80.103], - [51.2712, 80.0447], - [51.1054, 79.9061], - [50.3771, 79.9397], - [50.5994, 80] - ] - ], - [ - [ - [50.906, 81.0964], - [50.5177, 81.049], - [50.3676, 81.1492], - [50.748, 81.1875], - [50.906, 81.0964] - ] - ], - [ - [ - [55.2414, 70.6369], - [55.1542, 70.5485], - [54.8181, 70.6366], - [54.7212, 70.7266], - [54.4874, 70.7718], - [54.2038, 70.7186], - [54.0102, 70.7274], - [53.9165, 70.7857], - [53.6651, 70.8105], - [53.7569, 70.9502], - [53.5533, 71.035], - [53.7017, 71.0678], - [54.1192, 71.0974], - [53.9725, 71.1528], - [53.5832, 71.1857], - [53.329, 71.3343], - [53.2891, 71.4279], - [53.0187, 71.4259], - [52.4078, 71.5017], - [52.0883, 71.4572], - [51.8965, 71.4591], - [51.6122, 71.541], - [51.432, 71.8281], - [51.5636, 72.0511], - [51.8736, 72.15], - [51.9463, 72.1022], - [52.4025, 72.0951], - [52.5106, 72.2444], - [52.7142, 72.2915], - [52.728, 72.5454], - [52.8185, 72.6469], - [52.5617, 72.6606], - [52.461, 72.7094], - [52.571, 72.8474], - [53.0679, 72.8937], - [53.1673, 73.1281], - [53.3784, 73.2188], - [53.5529, 73.2204], - [53.8932, 73.2905], - [54.2163, 73.2527], - [54.5046, 73.3617], - [54.9044, 73.4259], - [55.3976, 73.3185], - [55.7494, 73.3214], - [55.9992, 73.2484], - [56.3459, 73.2283], - [56.5006, 73.1868], - [56.5419, 73.1044], - [56.4145, 73.0221], - [56.1787, 72.9606], - [56.2095, 72.8542], - [56.1037, 72.793], - [55.8459, 72.7839], - [55.9063, 72.6514], - [55.648, 72.6461], - [55.4505, 72.4379], - [55.4688, 72.3628], - [55.3288, 72.2882], - [55.5735, 72.1711], - [55.4192, 72.1163], - [55.3623, 71.9984], - [55.4896, 71.8972], - [55.5763, 71.7063], - [56.1981, 71.1861], - [57.0364, 70.8497], - [57.4068, 70.7985], - [57.5233, 70.7104], - [57.4314, 70.6276], - [57.1354, 70.6115], - [57.0899, 70.5567], - [56.7178, 70.6162], - [56.4263, 70.7005], - [56.1693, 70.6789], - [56.0032, 70.5918], - [55.5932, 70.6831], - [55.3302, 70.7075], - [55.2414, 70.6369] - ] - ], - [ - [ - [52.4578, 80.1824], - [53.0352, 80.3875], - [53.9475, 80.23], - [53.5446, 80.1433], - [52.6918, 80.1544], - [52.4578, 80.1824] - ] - ], - [ - [ - [52.7659, 71.1381], - [52.6091, 71.2257], - [52.3753, 71.2198], - [52.2648, 71.3249], - [52.4573, 71.3636], - [52.8165, 71.3875], - [53.1922, 71.2221], - [53.227, 71.1477], - [53.0267, 70.9872], - [52.7659, 71.1381] - ] - ], - [ - [ - [55.5289, 74.5586], - [55.5751, 74.6294], - [56.3875, 74.7069], - [56.3401, 74.7864], - [56.0773, 74.7759], - [56.0037, 74.844], - [56.3711, 74.9018], - [56.3697, 75.0217], - [56.0521, 74.9725], - [55.9838, 75.0538], - [55.807, 75.0892], - [56.0038, 75.1923], - [56.455, 75.0667], - [56.9492, 75.2248], - [56.742, 75.2958], - [57.0579, 75.3733], - [57.5801, 75.3088], - [57.7437, 75.403], - [57.5693, 75.472], - [57.9912, 75.5566], - [58.0372, 75.6551], - [58.6599, 75.7212], - [58.6338, 75.775], - [58.8715, 75.8503], - [59.0809, 75.8425], - [59.341, 75.9145], - [59.7993, 75.9239], - [60.3634, 75.9904], - [60.0829, 76.0455], - [60.5232, 76.1223], - [60.8439, 76.0489], - [61.0624, 76.2592], - [61.7643, 76.274], - [62.4132, 76.2499], - [62.4129, 76.1765], - [63.1001, 76.2193], - [63.6956, 76.323], - [64.0734, 76.2926], - [64.3199, 76.3496], - [64.6596, 76.3593], - [64.8, 76.4652], - [65.3428, 76.4933], - [65.5535, 76.5658], - [66.0622, 76.5201], - [65.7959, 76.655], - [66.4271, 76.8268], - [67.2527, 76.9336], - [67.5618, 76.9932], - [68.1161, 76.9927], - [68.4848, 76.9562], - [68.8351, 76.8645], - [68.9954, 76.6722], - [68.8528, 76.6338], - [68.7437, 76.495], - [68.5824, 76.4074], - [68.1043, 76.2492], - [67.4357, 76.1514], - [67.0593, 76.0673], - [66.7215, 76.041], - [65.4212, 75.8681], - [65.0377, 75.7888], - [64.878, 75.7923], - [64.3208, 75.7174], - [64.0961, 75.7122], - [63.798, 75.6381], - [62.9993, 75.5603], - [62.3308, 75.4467], - [62.0109, 75.4426], - [61.6666, 75.3235], - [61.5203, 75.2259], - [60.8996, 75.1509], - [60.7687, 75.0166], - [60.627, 75.0314], - [60.5662, 74.8485], - [60.227, 74.8449], - [60.3089, 74.7405], - [59.8688, 74.7156], - [59.8724, 74.6156], - [59.6105, 74.5735], - [59.2318, 74.6465], - [59.0823, 74.4817], - [58.9108, 74.435], - [58.646, 74.5026], - [58.6794, 74.2758], - [58.32, 74.1366], - [58.1845, 74.045], - [58.2758, 73.9934], - [57.6143, 74.0182], - [57.8899, 73.9018], - [57.8984, 73.7759], - [57.673, 73.7126], - [57.5994, 73.5992], - [57.2435, 73.5434], - [57.2219, 73.4849], - [56.9896, 73.3265], - [56.7629, 73.3526], - [56.7433, 73.2332], - [56.0894, 73.2742], - [56.071, 73.3649], - [55.7859, 73.3323], - [55.3967, 73.3288], - [54.9358, 73.4394], - [54.5022, 73.3877], - [54.3261, 73.3274], - [54.0459, 73.3388], - [54.2021, 73.4858], - [54.3768, 73.564], - [54.6837, 73.615], - [54.5033, 73.6839], - [54.3404, 73.6211], - [53.9677, 73.6224], - [53.684, 73.7234], - [53.9151, 73.7667], - [54.3146, 73.9194], - [54.6983, 73.9596], - [54.5996, 74.0198], - [54.9043, 74.1191], - [55.1748, 74.1598], - [55.58, 74.1191], - [55.5939, 74.1829], - [55.2693, 74.2191], - [55.6747, 74.3176], - [55.3, 74.347], - [55.3487, 74.4109], - [56.1007, 74.4551], - [56.0144, 74.5221], - [55.761, 74.5179], - [55.5289, 74.5586] - ] - ], - [ - [ - [54.1416, 80.5907], - [54.538, 80.4665], - [54.2691, 80.4143], - [53.8903, 80.4479], - [54.1416, 80.5907] - ] - ], - [ - [ - [55, 80.7111], - [54.051, 80.8001], - [54.3797, 80.8619], - [55.1949, 80.8711], - [55.9664, 80.7659], - [55, 80.7111] - ] - ], - [ - [ - [54.2053, 80.1664], - [54.1241, 80.2925], - [54.4201, 80.2847], - [54.2053, 80.1664] - ] - ], - [ - [ - [56.699, 80.7756], - [55.7731, 80.8456], - [55.3911, 80.9224], - [55.0348, 80.933], - [54.4619, 81.0276], - [54.9666, 81.074], - [55.4991, 80.9996], - [56.0251, 81.0236], - [56.6549, 80.9575], - [56.8932, 80.8758], - [57.5859, 80.8201], - [57.813, 80.7562], - [57.1804, 80.6684], - [56.699, 80.7756] - ] - ], - [ - [ - [56.5895, 80.7464], - [57.0141, 80.673], - [56.8923, 80.6219], - [56.3709, 80.5952], - [55.5694, 80.6273], - [55.8175, 80.7363], - [56.5895, 80.7464] - ] - ], - [ - [ - [55.7681, 81.3066], - [56.3174, 81.2682], - [56.4967, 81.3327], - [57.0124, 81.3876], - [57.5279, 81.3068], - [56.6526, 81.1663], - [55.5635, 81.2087], - [55.7681, 81.3066] - ] - ], - [ - [ - [57.0076, 80.339], - [57.171, 80.3164], - [57.0217, 80.0573], - [56.0994, 80.0616], - [55.825, 80.0899], - [56.1531, 80.1777], - [55.9401, 80.2967], - [56.2419, 80.3313], - [57.0076, 80.339] - ] - ], - [ - [ - [56.6381, 81.0293], - [57.6182, 81.0234], - [57.8656, 80.9506], - [58.341, 80.9048], - [57.8487, 80.8154], - [57.3278, 80.8579], - [56.6381, 81.0293] - ] - ], - [ - [ - [57.8196, 81.5234], - [58.3592, 81.4796], - [58.5534, 81.406], - [57.8402, 81.3781], - [57.4605, 81.4357], - [56.9056, 81.4452], - [57.0351, 81.5412], - [57.8196, 81.5234] - ] - ], - [ - [ - [57.0569, 81.1342], - [57.3597, 81.201], - [58.0469, 81.21], - [57.7849, 81.1065], - [57.0569, 81.1342] - ] - ], - [ - [ - [58.0752, 80.1009], - [57.3497, 80.153], - [57.294, 80.3464], - [57.0061, 80.4464], - [58.0791, 80.4758], - [58.9148, 80.4188], - [59.3166, 80.3209], - [58.6482, 80.3253], - [58.1013, 80.231], - [58.4911, 80.1981], - [58.0752, 80.1009] - ] - ], - [ - [ - [58.9645, 80.8437], - [58.971, 80.7616], - [58.5696, 80.724], - [57.9464, 80.7566], - [58.1658, 80.8474], - [58.7521, 80.8762], - [58.9645, 80.8437] - ] - ], - [ - [ - [58.085, 80.9916], - [58.3855, 81.0729], - [58.76, 81.0042], - [58.6061, 80.9336], - [58.085, 80.9916] - ] - ], - [ - [ - [59.3549, 81.8311], - [59.2372, 81.7344], - [57.9763, 81.7138], - [57.9125, 81.8109], - [58.8496, 81.8568], - [59.3549, 81.8311] - ] - ], - [ - [ - [60, 69.6962], - [59.794, 69.6855], - [59.5892, 69.7243], - [59.7157, 69.7799], - [59.5402, 69.8643], - [59.1129, 69.8978], - [58.8041, 69.9674], - [58.6305, 70.0594], - [58.6112, 70.142], - [58.4456, 70.2218], - [58.7881, 70.3723], - [58.8098, 70.4267], - [59.0517, 70.4518], - [59.3656, 70.3477], - [59.6043, 70.2067], - [59.7992, 70.1269], - [60.0454, 70.0687], - [60.4409, 69.9335], - [60.5455, 69.7917], - [60.4903, 69.7322], - [60.2134, 69.6797], - [60, 69.6962] - ] - ], - [ - [ - [59.2087, 81.3912], - [59.0274, 81.293], - [58.5773, 81.3738], - [59.2087, 81.3912] - ] - ], - [ - [ - [60, 79.9916], - [59.7172, 79.9373], - [59.3056, 79.9373], - [58.8132, 80.0128], - [59.2965, 80.0781], - [59.6622, 80.0812], - [60, 79.9916] - ] - ], - [ - [ - [60, 80.7931], - [60.4134, 80.7742], - [61.3565, 80.8158], - [61.5759, 80.8621], - [62.0436, 80.8597], - [62.2183, 80.7662], - [62.0115, 80.578], - [61.6603, 80.555], - [61.647, 80.4684], - [61.0877, 80.3624], - [60.5977, 80.3946], - [60.3528, 80.4509], - [59.6654, 80.3868], - [59.3381, 80.485], - [59.4715, 80.6906], - [60, 80.7931] - ] - ], - [ - [ - [61.5236, 81.0726], - [61.5806, 81.0177], - [61.2064, 80.9211], - [60.4179, 80.9043], - [60.0012, 80.9736], - [61.1446, 81.1129], - [61.5236, 81.0726] - ] - ], - [ - [ - [63.8044, 81.6226], - [63.4604, 81.5691], - [62.6938, 81.5995], - [62.5078, 81.7023], - [63.3474, 81.71], - [63.8044, 81.6226] - ] - ], - [ - [ - [65, 81.1709], - [65.4028, 81.014], - [65.3849, 80.9127], - [64.979, 80.7797], - [64.4157, 80.7053], - [63.5987, 80.6824], - [63.1641, 80.6379], - [62.5206, 80.7802], - [63.3832, 80.9562], - [63.9678, 80.9547], - [64.1883, 81.0067], - [64.1895, 81.1359], - [64.5755, 81.1902], - [65, 81.1709] - ] - ], - [ - [ - [67.3, 69.4463], - [67.0359, 69.4748], - [67.22, 69.5709], - [67.3847, 69.5039], - [67.3, 69.4463] - ] - ], - [ - [ - [70.0689, 66.5345], - [69.8694, 66.5499], - [69.6301, 66.6105], - [69.5174, 66.7074], - [69.7415, 66.663], - [69.7706, 66.6324], - [69.9295, 66.6143], - [70.0984, 66.5537], - [70.0689, 66.5345] - ] - ], - [ - [ - [70.0039, 66.6935], - [70.0111, 66.5998], - [69.9028, 66.6258], - [69.7679, 66.6403], - [69.7304, 66.674], - [69.6114, 66.7049], - [69.7532, 66.7513], - [70.0039, 66.6935] - ] - ], - [ - [ - [70, 73.0086], - [69.9241, 73.0724], - [70.0263, 73.252], - [69.9875, 73.3863], - [70.3072, 73.4511], - [70.7891, 73.491], - [71.2718, 73.4278], - [71.5416, 73.2785], - [71.6484, 73.1737], - [71.3607, 73.1629], - [71.1445, 73.1095], - [70.8969, 73.1139], - [70.4415, 73.0193], - [70, 73.0086] - ] - ], - [ - [ - [70.4397, 66.6423], - [70.5915, 66.675], - [71.0017, 66.582], - [70.9881, 66.5266], - [70.6973, 66.4891], - [70.3368, 66.5659], - [70.4397, 66.6423] - ] - ], - [ - [ - [71.5873, 66.7278], - [71.5428, 66.6233], - [71.2711, 66.6375], - [70.9701, 66.595], - [70.6283, 66.683], - [70.8752, 66.8041], - [71.0812, 66.7959], - [71.2127, 66.8534], - [71.4808, 66.8779], - [71.5873, 66.7278] - ] - ], - [ - [ - [74.6601, 73.025], - [74.546, 72.8463], - [74.0741, 72.9873], - [74.3281, 73.1121], - [74.7176, 73.075], - [74.6601, 73.025] - ] - ], - [ - [ - [76.7787, 79.4727], - [76.6702, 79.5345], - [76.3045, 79.5386], - [76.1192, 79.6378], - [76.6574, 79.618], - [77.3675, 79.5305], - [77.4684, 79.4783], - [76.7787, 79.4727] - ] - ], + -180, + -90 + ] + ], + [ [ - [ - [77.2276, 72.4344], - [77.3408, 72.5247], - [77.6142, 72.6028], - [78.1937, 72.5538], - [78.3407, 72.4601], - [77.6444, 72.2947], - [76.9274, 72.2721], - [76.9243, 72.352], - [77.2276, 72.4344] - ] + 105.5815853942313, + 29.71236446366261 ], [ - [ - [79.4652, 80.835], - [78.6631, 80.8325], - [78.8678, 80.9426], - [79.2382, 80.9675], - [79.8122, 80.9412], - [79.9409, 80.8922], - [79.4652, 80.835] - ] + 105.58430314673814, + 29.711392515200814 ], [ - [ - [79.5311, 72.7605], - [79.3614, 72.6995], - [79.0274, 72.7202], - [78.626, 72.8033], - [78.6201, 72.8556], - [79.1691, 73.0816], - [79.508, 72.9204], - [79.5311, 72.7605] - ] + 105.58472461637894, + 29.711203173496614 ], [ - [ - [82.3164, 75.3374], - [81.8977, 75.287], - [81.6192, 75.2895], - [81.6821, 75.4038], - [82.3164, 75.3374] - ] + 105.58469554950659, + 29.710837111855113 ], [ - [ - [82.6849, 70.2486], - [82.5677, 70.2569], - [82.4651, 70.3529], - [82.2234, 70.4289], - [82.2448, 70.5479], - [82.3766, 70.5951], - [82.5936, 70.5328], - [82.6182, 70.4599], - [82.9246, 70.3569], - [82.6849, 70.2486] - ] + 105.5845356817128, + 29.710332197057085 ], [ - [ - [82.3572, 70.3249], - [82.5875, 70.2256], - [82.4213, 70.1904], - [82.2763, 70.2673], - [82.3572, 70.3249] - ] + 105.58449208140422, + 29.709978755188033 ], [ - [ - [83.1441, 75.9166], - [82.4779, 75.9532], - [82.5555, 75.9955], - [83.1065, 75.965], - [83.1441, 75.9166] - ] + 105.58444848109718, + 29.70967580402356 ], [ - [ - [82.7839, 70.4324], - [82.6257, 70.5031], - [82.6337, 70.5225], - [82.5447, 70.5754], - [82.4747, 70.585], - [82.4406, 70.663], - [82.5321, 70.7421], - [82.7529, 70.6906], - [82.975, 70.5498], - [83.0519, 70.4501], - [82.7839, 70.4324] - ] + 105.58447754796947, + 29.709309736814248 ], [ - [ - [82.7319, 74.0337], - [82.4999, 74.0545], - [82.6433, 74.141], - [82.834, 74.1094], - [82.7319, 74.0337] - ] + 105.58452114827668, + 29.70893104519307 ], [ - [ - [82.8834, 70.6359], - [82.6586, 70.7526], - [82.81, 70.9314], - [83.1237, 70.846], - [83.1398, 70.7669], - [82.9104, 70.6947], - [82.8834, 70.6359] - ] + 105.58478275012226, + 29.70870382953494 ], [ - [ - [83.0637, 70.3704], - [83.1014, 70.514], - [83.3039, 70.4493], - [83.0637, 70.3704] - ] + 105.58521875319786, + 29.707996933088538 ], [ - [ - [83.6632, 69.7357], - [83.5144, 69.7496], - [83.4819, 69.8291], - [83.6202, 69.8568], - [83.8377, 69.7487], - [83.6632, 69.7357] - ] + 105.58549488847967, + 29.707757092091867 ], [ - [ - [85.1911, 74.5111], - [85.2845, 74.5769], - [85.6602, 74.5177], - [85.3504, 74.4492], - [85.1911, 74.5111] - ] + 105.58526234713759, + 29.70748948515464 ], [ - [ - [86.2713, 74.9035], - [86.6819, 74.9365], - [87.0334, 74.9918], - [87.1972, 74.9437], - [86.8476, 74.8299], - [86.3542, 74.847], - [86.2713, 74.9035] - ] + 105.5850298121643, + 29.707300136090566 ], [ - [ - [89.4673, 77.1587], - [89.2195, 77.2021], - [89.2846, 77.268], - [89.6539, 77.2943], - [89.7262, 77.2346], - [89.4673, 77.1587] - ] + 105.58475367688249, + 29.707060293429635 ], [ - [ - [90.9275, 81.0319], - [90.2069, 81.0692], - [90.2394, 81.183], - [91.054, 81.211], - [91.6018, 81.1782], - [91.7236, 81.1128], - [91.3419, 81.0379], - [90.9275, 81.0319] - ] + 105.58401247165273, + 29.70695930687515 ], [ - [ - [91.3684, 80], - [91.3241, 80.0655], - [93.0085, 80.0268], - [93.8982, 79.9208], - [93.7501, 79.8408], - [93.1327, 79.7126], - [92.4899, 79.6777], - [92.1073, 79.6888], - [91.9308, 79.8088], - [91.2904, 79.8388], - [91.3684, 80] - ] + 105.58340206734715, + 29.706833073538547 ], [ - [ - [95.4647, 81.192], - [95.8825, 81.2564], - [96.2772, 81.1063], - [96.7765, 80.9835], - [96.7339, 80.9426], - [97.4668, 80.8143], - [97.8163, 80.7881], - [98.0212, 80.669], - [97.4314, 80.6104], - [97.1191, 80.5125], - [97.2634, 80.3344], - [97.4692, 80.2901], - [96.9873, 80.2161], - [95.6747, 80.2018], - [95.4036, 80.1657], - [94.4996, 80.1224], - [94.3504, 80.067], - [93.5904, 80.0118], - [92.738, 80.1238], - [92.458, 80.1227], - [92.3518, 80.2173], - [91.7327, 80.3257], - [91.9884, 80.4083], - [92.8919, 80.4861], - [92.9533, 80.6217], - [93.3413, 80.7251], - [92.627, 80.702], - [92.8837, 80.8298], - [93.3241, 80.9425], - [93.7702, 81.008], - [94.9108, 81.1044], - [95.4647, 81.192] - ] + 105.58309686519294, + 29.70664372323681 ], [ - [ - [99.9764, 79.7265], - [99.8545, 79.5472], - [99.8439, 79.2761], - [99.3142, 79.2451], - [99.932, 79.0941], - [100.0486, 78.9477], - [99.5946, 78.8431], - [99.1777, 78.801], - [98.3382, 78.8013], - [97.9293, 78.8304], - [97.6657, 78.8088], - [96.9832, 78.9349], - [96.9639, 78.9872], - [96.0321, 78.9795], - [95.7383, 78.9942], - [95.6386, 79.0974], - [95.1051, 79.0262], - [94.6793, 79.1202], - [94.7294, 79.1793], - [94.4657, 79.2786], - [94.3817, 79.4878], - [94.0929, 79.4898], - [93.7196, 79.5602], - [93.6594, 79.6225], - [94.104, 79.7696], - [94.6797, 79.7819], - [94.7237, 79.828], - [94.3492, 79.894], - [94.7741, 80.0421], - [95.5058, 80.1031], - [96.5604, 80.0997], - [97.1886, 80.1599], - [97.6826, 80.1574], - [98.1107, 80.0419], - [98.0282, 79.9287], - [97.5715, 79.8328], - [97.8533, 79.7932], - [98.2755, 79.8244], - [98.3971, 79.956], - [98.6418, 80.0632], - [99.4644, 80.0216], - [100.155, 79.7837], - [99.9764, 79.7265] - ] + 105.58305326488585, + 29.70649224273795 ], [ - [ - [95, 76.2749], - [94.8814, 76.1753], - [94.6221, 76.2247], - [95, 76.2749] - ] + 105.58266086211734, + 29.706277644973994 ], [ - [ - [95.9378, 77.0109], - [95.9442, 77.0885], - [96.4672, 77.1894], - [96.4603, 77.0662], - [96.2046, 76.9853], - [95.9378, 77.0109] - ] + 105.58237019339936, + 29.706100917059004 ], [ - [ - [96.3382, 76.0983], - [96.2594, 76.1468], - [95.7958, 76.1455], - [95.3708, 76.2381], - [95.8692, 76.3101], - [96.0113, 76.2845], - [96.6819, 76.2536], - [96.3382, 76.0983] - ] + 105.581745254169, + 29.705633849344423 ], [ - [ - [102.8505, 79.1282], - [102.7468, 79.0489], - [102.9892, 79.016], - [103.8355, 79.1416], - [103.9887, 79.0495], - [104.5148, 78.9235], - [104.4828, 78.8335], - [104.8559, 78.8464], - [105.2044, 78.7945], - [105.324, 78.7004], - [105.3551, 78.5035], - [104.8528, 78.3132], - [104.3323, 78.316], - [103.8913, 78.2537], - [103.2678, 78.2103], - [102.3393, 78.2045], - [101.2709, 78.1699], - [100.8751, 78.0804], - [100.1136, 77.951], - [99.5826, 77.9635], - [99.6976, 78.163], - [100.0951, 78.3066], - [100.1481, 78.415], - [100.4304, 78.6613], - [100.8691, 78.8402], - [101.4068, 79.2042], - [102.2782, 79.2425], - [102.3337, 79.3977], - [102.8922, 79.3612], - [103.1862, 79.2744], - [102.8505, 79.1282] - ] + 105.58116391673298, + 29.7053435086015 ], [ - [ - [106.8083, 78.2835], - [106.286, 78.1927], - [106.1323, 78.2518], - [106.8083, 78.2835] - ] + 105.58052444555511, + 29.7053435086015 ], [ - [ - [107.5166, 78.0397], - [107.5142, 78.0747], - [106.7372, 78.1031], - [106.8413, 78.1797], - [107.7474, 78.1362], - [107.5166, 78.0397] - ] + 105.58000124186378, + 29.705419249745532 ], [ - [ - [113.1131, 74.1969], - [112.8262, 74.0809], - [112.2032, 74.1336], - [111.9464, 74.2199], - [111.4919, 74.2917], - [111.6986, 74.3696], - [112.0122, 74.3804], - [111.9806, 74.5105], - [112.0811, 74.5519], - [112.6235, 74.5167], - [113.1612, 74.505], - [113.3436, 74.4724], - [113.4246, 74.3262], - [113.1131, 74.1969] - ] + 105.57982684063381, + 29.7054444967809 ], [ - [ - [112.6381, 76.424], - [112.1075, 76.5524], - [112.0329, 76.6141], - [112.5657, 76.6311], - [112.6381, 76.424] - ] + 105.57924550319922, + 29.70574746071088 ], [ - [ - [131.8261, 42.9271], - [131.7511, 42.9942], - [131.8483, 43.0556], - [131.9356, 42.9922], - [131.8261, 42.9271] - ] + 105.57898390135358, + 29.70620190489163 ], [ - [ - [135.7201, 74.1047], - [136.1269, 74.0577], - [136.3384, 73.9217], - [136.1975, 73.8818], - [135.7201, 74.1047] - ] + 105.57895483459976, + 29.706656347063984 ], [ - [ - [135.6516, 75.365], - [135.5115, 75.4403], - [135.6199, 75.5058], - [135.6175, 75.6557], - [135.7326, 75.8221], - [135.9516, 75.6903], - [136.2386, 75.623], - [135.9772, 75.4854], - [135.8954, 75.3764], - [135.6516, 75.365] - ] + 105.57872229751007, + 29.70683307283619 ], [ - [ - [136.7916, 55], - [137.0222, 55.0986], - [137.199, 55.1031], - [137.0598, 54.9727], - [137.0654, 54.91], - [136.6939, 54.9459], - [136.7916, 55] - ] + 105.57860603002342, + 29.707136032577154 ], [ - [ - [142.2606, 75], - [141.8839, 75.0046], - [141.6253, 74.9414], - [140.8392, 74.8859], - [140.2314, 74.8127], - [139.8039, 74.9575], - [139.6365, 74.9587], - [139.6403, 74.8411], - [139.4736, 74.7065], - [139.0769, 74.64], - [138.7747, 74.7081], - [138.2006, 74.7593], - [137.9082, 74.9312], - [137.3764, 75.0615], - [136.9784, 75.2514], - [136.96, 75.3476], - [137.2079, 75.3756], - [137.3099, 75.5769], - [137.1752, 75.7301], - [137.4897, 75.7502], - [137.4606, 75.926], - [137.6586, 75.9913], - [138.1037, 76.0012], - [138.2641, 76.1153], - [138.8447, 76.2005], - [139.6007, 75.9906], - [139.9898, 75.9527], - [139.8317, 75.8851], - [140.1645, 75.804], - [140.5097, 75.7824], - [140.5891, 75.7095], - [140.922, 75.7032], - [140.9291, 75.8914], - [141.1054, 76.061], - [141.5876, 76.0203], - [141.5355, 76.0942], - [141.8111, 76.1116], - [142.6392, 75.8556], - [143.1915, 75.8004], - [143.5327, 75.8539], - [144.0672, 75.8047], - [144.3428, 75.7214], - [144.6831, 75.6986], - [145.1466, 75.5974], - [145.202, 75.5036], - [144.8755, 75.4256], - [144.8594, 75.2938], - [144.7416, 75.1488], - [144.4062, 75.0516], - [143.9819, 75.0128], - [143.7908, 75.0706], - [143.5228, 75.0594], - [143.7027, 74.937], - [143.5572, 74.9017], - [142.9331, 74.8728], - [142.4318, 74.8075], - [142.0038, 74.9259], - [142.2606, 75] - ] + 105.57860603002342, + 29.70746423793102 ], [ - [ - [137.321, 71.4942], - [137.3856, 71.5866], - [137.971, 71.5696], - [138.0274, 71.4976], - [137.7651, 71.4036], - [137.321, 71.4942] - ] + 105.57876589781864, + 29.707704079627163 ], [ - [ - [138.1939, 55], - [138.1121, 54.9921], - [137.9957, 54.9105], - [138.0151, 54.8038], - [137.9532, 54.7479], - [137.7347, 54.6388], - [137.6714, 54.64], - [137.4904, 54.8567], - [137.2629, 54.7535], - [137.2797, 54.8519], - [137.4879, 55.0396], - [137.5573, 55.181], - [137.8848, 55.1257], - [138.1939, 55] - ] + 105.57886763200304, + 29.708044906343105 ], [ - [ - [139.8493, 73.431], - [140.373, 73.4415], - [140.6203, 73.5138], - [140.8104, 73.6225], - [140.9012, 73.7431], - [141.1651, 73.8659], - [141.3092, 73.8423], - [141.8609, 73.9091], - [142.0903, 73.9175], - [142.5255, 73.8458], - [143.2724, 73.6273], - [143.6007, 73.4412], - [143.4991, 73.3485], - [143.568, 73.2389], - [143.273, 73.1795], - [142.7741, 73.232], - [142.4923, 73.2253], - [141.6327, 73.2938], - [140.8913, 73.4189], - [140.3912, 73.4098], - [139.9882, 73.3415], - [139.8493, 73.431] - ] + 105.57915830071966, + 29.708246877167795 ], [ - [ - [140.2881, 74.2362], - [140.8542, 74.2744], - [141.1249, 74.2031], - [141.0707, 74.0183], - [140.5254, 73.9074], - [140.203, 74.0741], - [140.2881, 74.2362] - ] + 105.57955070348811, + 29.708549832643413 ], [ - [ - [143.2567, 52.5951], - [143.1164, 52.3582], - [143.1685, 52.3071], - [143.1343, 52.1612], - [143.0927, 52.1207], - [143.1427, 51.977], - [143.1417, 51.8756], - [143.2371, 51.8499], - [143.2968, 51.7514], - [143.2451, 51.6873], - [143.2029, 51.5114], - [143.4024, 51.5601], - [143.467, 51.362], - [143.4536, 51.3002], - [143.5257, 51.2243], - [143.6074, 50.9769], - [143.6954, 50.6531], - [143.7187, 50.4946], - [143.7874, 50.3188], - [143.9955, 50.0122], - [143.9941, 49.9684], - [144.1249, 49.7413], - [144.1463, 49.6046], - [144.239, 49.5083], - [144.2192, 49.4263], - [144.2854, 49.2493], - [144.4048, 49.0292], - [144.6596, 48.8897], - [144.5796, 48.8716], - [144.4333, 49.0018], - [144.2785, 49.0822], - [144.1359, 49.2233], - [143.8531, 49.296], - [143.5815, 49.3196], - [143.32, 49.2954], - [143.1217, 49.2271], - [142.9659, 49.1048], - [142.9478, 49.0165], - [142.97, 48.8828], - [142.8139, 48.6679], - [142.5522, 48.0688], - [142.5247, 47.8924], - [142.5715, 47.6774], - [142.7323, 47.4655], - [142.9476, 47.3499], - [143.0235, 47.2541], - [143.026, 47.0751], - [143.1181, 46.8906], - [143.2959, 46.7988], - [143.4839, 46.8141], - [143.5679, 46.2963], - [143.4245, 46.1999], - [143.3364, 46.3825], - [143.3348, 46.4684], - [143.1518, 46.6015], - [143.0654, 46.5911], - [142.9036, 46.6205], - [142.8011, 46.5968], - [142.7318, 46.7347], - [142.5757, 46.711], - [142.4594, 46.6457], - [142.2561, 46.2823], - [142.1903, 46.0389], - [142.042, 45.9199], - [141.9219, 46.043], - [141.9333, 46.0995], - [141.8872, 46.3169], - [141.8243, 46.4767], - [141.8486, 46.6216], - [141.9219, 46.8125], - [141.9888, 46.9008], - [142.0538, 47.065], - [142.0595, 47.1654], - [141.9724, 47.3073], - [142.0019, 47.3582], - [141.9603, 47.5267], - [141.9691, 47.6191], - [142.0693, 47.7736], - [142.1, 47.8706], - [142.1928, 47.9466], - [142.14, 48.3283], - [141.8688, 48.6767], - [141.8423, 48.7696], - [141.9725, 48.8758], - [142.0872, 49.2178], - [142.0703, 49.3545], - [142.1232, 49.449], - [142.157, 49.8088], - [142.126, 49.8884], - [142.1669, 50.1414], - [142.1457, 50.3631], - [142.0402, 50.5515], - [142.116, 50.8905], - [142.2352, 51.0114], - [142.2494, 51.1466], - [142.0624, 51.4289], - [142.0767, 51.4715], - [141.7621, 51.7014], - [141.8242, 51.7412], - [141.7582, 51.8434], - [141.6375, 51.8771], - [141.6807, 51.9693], - [141.627, 52.071], - [141.6798, 52.1794], - [141.6234, 52.3192], - [141.6482, 52.3899], - [141.7614, 52.462], - [141.8214, 52.5546], - [141.8133, 52.7211], - [141.9199, 53.0519], - [141.8416, 53.1362], - [141.7533, 53.3664], - [141.86, 53.4287], - [142.162, 53.5185], - [142.2388, 53.4943], - [142.2592, 53.3612], - [142.4579, 53.3722], - [142.5903, 53.5586], - [142.4909, 53.559], - [142.4868, 53.6577], - [142.5906, 53.7258], - [142.6899, 53.8779], - [142.6835, 53.9481], - [142.4193, 54.1459], - [142.3352, 54.2598], - [142.5466, 54.2795], - [142.6693, 54.3602], - [142.7835, 54.298], - [142.9654, 54.1412], - [142.9934, 54.0788], - [142.9017, 53.9839], - [142.8829, 53.8886], - [142.9405, 53.7336], - [143.0527, 53.529], - [143.0471, 53.4345], - [143.1585, 53.3837], - [143.2563, 53.1649], - [143.1305, 53.2098], - [143.1741, 53.3115], - [143.0895, 53.3466], - [143.0285, 53.261], - [143.165, 52.9293], - [143.3263, 52.8388], - [143.3169, 52.6004], - [143.2567, 52.5951] - ] + 105.5802773752817, + 29.70849934012719 ], [ - [ - [150, 74.8028], - [149.2359, 74.7312], - [148.727, 74.7357], - [148.2276, 74.7754], - [147.7064, 74.9496], - [147.1037, 75.0138], - [146.7511, 75.1085], - [146.1782, 75.2142], - [146.3145, 75.2743], - [146.2416, 75.3891], - [146.3761, 75.4446], - [146.4017, 75.544], - [146.7613, 75.5097], - [146.66, 75.4309], - [146.8078, 75.3498], - [147.1685, 75.3225], - [147.3706, 75.4136], - [147.6312, 75.4428], - [148.0236, 75.3929], - [148.4005, 75.4043], - [148.5786, 75.373], - [148.5858, 75.2147], - [148.8013, 75.197], - [149.3366, 75.2643], - [150.2732, 75.1821], - [150.5403, 75.0956], - [150.9831, 75.1317], - [150.6962, 74.9974], - [150.6666, 74.8666], - [150, 74.8028] - ] + 105.58084417928154, + 29.70857507889164 ], [ - [ - [149.1972, 76.6328], - [148.8546, 76.724], - [149.1873, 76.7423], - [149.1972, 76.6328] - ] + 105.5811348479981, + 29.70872655624804 ], [ - [ - [150, 45.8201], - [149.9397, 45.8122], - [149.6846, 45.6191], - [149.5477, 45.5692], - [149.448, 45.5891], - [149.6856, 45.8498], - [149.8117, 45.8647], - [149.8886, 45.9554], - [150.0626, 46.0886], - [150.1956, 46.1033], - [150.1899, 46.1575], - [150.357, 46.2254], - [150.4681, 46.2008], - [150.4244, 46.1289], - [150.233, 46.0201], - [150.206, 45.9421], - [150, 45.8201] - ] + 105.58144005015237, + 29.70885278720435 ], [ - [ - [154.8479, 49.3509], - [154.8108, 49.2833], - [154.6232, 49.2786], - [154.611, 49.3582], - [154.7803, 49.5941], - [154.9054, 49.6031], - [154.8138, 49.468], - [154.8479, 49.3509] - ] + 105.5811720640055, + 29.709614475400542 ], [ - [ - [155.3985, 50], - [155.3628, 50.0487], - [155.2111, 50.0705], - [155.2609, 50.1533], - [155.2366, 50.306], - [155.3706, 50.293], - [155.4129, 50.3489], - [155.6355, 50.376], - [155.7332, 50.4395], - [155.8318, 50.5632], - [155.8524, 50.6438], - [155.9779, 50.7458], - [156.1443, 50.7536], - [156.1215, 50.6611], - [156.1653, 50.511], - [156.0524, 50.4761], - [156.023, 50.3981], - [155.8898, 50.2476], - [155.7659, 50.1812], - [155.6159, 50.1867], - [155.4643, 50.1042], - [155.3985, 50] - ] + 105.58114299713321, + 29.709879557881166 ], [ - [ - [155.6714, 50.851], - [155.5194, 50.813], - [155.453, 50.8843], - [155.5309, 50.924], - [155.6526, 50.9083], - [155.6714, 50.851] - ] + 105.5811720640055, + 29.710283491743866 ], [ - [ - [156.4059, 50.6404], - [156.2746, 50.6374], - [156.1696, 50.7034], - [156.2013, 50.7556], - [156.3876, 50.8533], - [156.4978, 50.847], - [156.5103, 50.7662], - [156.4059, 50.6404] - ] + 105.5812011308766, + 29.71051070382748 ], [ - [ - [163.4308, 58.553], - [163.5451, 58.5677], - [163.749, 58.7631], - [163.7773, 58.8847], - [163.9288, 58.9952], - [164.3175, 59.1077], - [164.5648, 59.2282], - [164.7515, 59.0288], - [164.6557, 58.8701], - [164.4674, 58.8657], - [164.2054, 58.8159], - [163.8881, 58.6999], - [163.5995, 58.5739], - [163.4308, 58.553] - ] + 105.58111393026093, + 29.710826275312897 ], [ - [ - [166.6606, 54.6658], - [166.565, 54.713], - [166.4804, 54.8201], - [166.3757, 54.8173], - [166.1654, 54.9471], - [166.0574, 55.0651], - [166.0655, 55.1133], - [165.9292, 55.2303], - [165.6912, 55.2922], - [165.9039, 55.3759], - [166.172, 55.3273], - [166.2087, 55.2109], - [166.432, 54.9496], - [166.6301, 54.8578], - [166.6606, 54.6658] - ] + 105.58108486338989, + 29.711192336993292 ], [ - [ - [168, 54.5281], - [167.793, 54.6415], - [167.6919, 54.6615], - [167.4541, 54.8032], - [167.4643, 54.8593], - [167.6765, 54.7733], - [167.8261, 54.682], - [168, 54.5281] - ] + 105.58111393026093, + 29.711432169784118 ], [ - [ - [168.5053, 69.9991], - [168.9624, 69.909], - [169.416, 69.8606], - [169.4584, 69.8102], - [169.2737, 69.7079], - [169.3104, 69.6582], - [169.2151, 69.554], - [168.9699, 69.552], - [168.3798, 69.6303], - [168.0743, 69.7461], - [167.7818, 69.804], - [167.9163, 69.9107], - [168.2627, 70.013], - [168.5053, 69.9991] - ] + 105.58124473118363, + 29.71184872011284 ], [ - [ - [180, 71.5281], - [180, 71], - [180, 70.9747], - [179.5839, 70.8662], - [179.2345, 70.8748], - [178.8293, 70.7907], - [178.6408, 70.9708], - [178.6121, 71.074], - [178.8778, 71.2155], - [179.1599, 71.2736], - [179.4388, 71.404], - [179.7287, 71.4422], - [180, 71.5281] - ] + 105.5813755321065, + 29.712189532732367 ], [ - [ - [116.7252, 49.8556], - [116.6067, 49.9403], - [116.4477, 49.963], - [116.2052, 50.0317], - [116.026, 49.9983], - [115.721, 49.8846], - [115.3746, 49.9078], - [115.2379, 49.9794], - [115.0041, 50.1774], - [114.6723, 50.2563], - [114.5072, 50.2371], - [114.3491, 50.2829], - [114.0344, 50.1856], - [113.8688, 50.0846], - [113.7956, 50.0941], - [113.2302, 49.8349], - [113.1863, 49.8009], - [113.0874, 49.6081], - [112.9661, 49.5865], - [112.7163, 49.4918], - [112.5132, 49.5465], - [112.1109, 49.4313], - [111.9345, 49.3955], - [111.6625, 49.3963], - [111.5019, 49.3438], - [111.3923, 49.3731], - [111.1698, 49.3003], - [110.9922, 49.1999], - [110.7663, 49.1451], - [110.5962, 49.1621], - [110.3995, 49.2584], - [110.2341, 49.1651], - [109.7015, 49.2316], - [109.5711, 49.2226], - [109.4895, 49.285], - [109.3291, 49.3415], - [109.1845, 49.3603], - [109.0425, 49.3361], - [108.9655, 49.3594], - [108.5556, 49.3343], - [108.3681, 49.4429], - [108.2842, 49.5288], - [108.1515, 49.5549], - [107.9589, 49.667], - [107.947, 49.8555], - [107.7532, 49.9806], - [107.7045, 49.9561], - [107.2547, 49.9926], - [107.1308, 50.0269], - [106.9245, 50.2475], - [106.7579, 50.3214], - [106.5078, 50.3425], - [106.2792, 50.2957], - [106.0921, 50.351], - [106.0801, 50.3938], - [105.8429, 50.4305], - [105.6118, 50.4324], - [105.3877, 50.4792], - [105.2868, 50.468], - [105.1519, 50.4], - [104.9118, 50.3884], - [104.5891, 50.3136], - [104.4051, 50.305], - [104.251, 50.2019], - [104.061, 50.1544], - [103.8548, 50.2029], - [103.7575, 50.194], - [103.6905, 50.1373], - [103.4751, 50.2052], - [103.2872, 50.2191], - [103.2046, 50.3127], - [102.9807, 50.3043], - [102.8246, 50.3786], - [102.6421, 50.4294], - [102.5052, 50.5409], - [102.3206, 50.5841], - [102.2932, 50.6503], - [102.3551, 50.7503], - [102.2407, 50.8185], - [102.2669, 50.9655], - [102.2016, 51.0593], - [102.1513, 51.264], - [102.2086, 51.3294], - [102.0688, 51.3971], - [101.642, 51.4566], - [101.5413, 51.5032], - [101.3479, 51.4704], - [101.2586, 51.5394], - [101.1609, 51.5423], - [100.9434, 51.6262], - [100.5156, 51.7504], - [100.4476, 51.7404], - [100.1246, 51.7605], - [99.9935, 51.7533], - [99.8331, 51.8238], - [99.7706, 51.8817], - [99.2948, 51.9752], - [99.2732, 52.0201], - [99.0485, 52.072], - [98.9537, 52.1479], - [98.8714, 52.1292], - [98.8526, 52.041], - [98.6963, 51.8204], - [98.3152, 51.7178], - [98.2405, 51.5666], - [98.2343, 51.4622], - [98.0482, 51.4379], - [97.9449, 51.3229], - [97.9413, 51.2079], - [97.8677, 51.0455], - [97.8673, 50.9498], - [98.0129, 50.8741], - [97.955, 50.7819], - [98.0489, 50.6528], - [98.1326, 50.5964], - [98.3245, 50.539], - [98.2567, 50.4111], - [98.278, 50.312], - [98.1162, 50.1039], - [97.8627, 49.9479], - [97.7655, 49.9843], - [97.43, 49.7881], - [97.3162, 49.7574], - [97.1937, 49.7747], - [97.003, 49.9145], - [96.8394, 49.9436], - [96.7169, 49.9079], - [96.6118, 49.982], - [96.4083, 49.9023], - [96.302, 49.9871], - [96.0958, 50.0195], - [95.9738, 49.9798], - [95.8185, 50.0385], - [95.724, 49.9619], - [95.4778, 49.9224], - [95.3341, 49.9514], - [95.1295, 49.9489], - [94.9913, 50.0534], - [94.8191, 50.0601], - [94.6088, 50.0387], - [94.5108, 50.1694], - [94.3989, 50.2341], - [94.3486, 50.4648], - [94.3034, 50.5521], - [94.2237, 50.5827], - [93.9568, 50.5912], - [93.6697, 50.5778], - [93.4027, 50.5855], - [93.104, 50.5668], - [92.9824, 50.6582], - [93.033, 50.7629], - [92.8439, 50.7941], - [92.748, 50.7093], - [92.6071, 50.7155], - [92.6026, 50.7669], - [92.4711, 50.7767], - [92.4007, 50.8829], - [92.3253, 50.8864], - [92.3051, 50.7441], - [92.1958, 50.6848], - [92.0228, 50.6835], - [91.8839, 50.7304], - [91.7566, 50.7204], - [91.6628, 50.6668], - [91.6579, 50.5838], - [91.4464, 50.5496], - [91.4443, 50.4654], - [91.2571, 50.4844], - [91.1393, 50.4579], - [90.7377, 50.4879], - [90.668, 50.3368], - [90.775, 50.2885], - [90.6625, 50.1636], - [90.5422, 50.1775], - [90.3682, 50.1444], - [90.2875, 50.0323], - [90.0867, 50.0376], - [89.9008, 49.9845], - [89.7531, 49.9984], - [89.6207, 49.974], - [89.6367, 49.8317], - [89.7385, 49.7945], - [89.6818, 49.7097], - [89.4447, 49.6588], - [89.3697, 49.5959], - [89.2235, 49.6463], - [89.2266, 49.5592], - [89.0995, 49.4998], - [88.9639, 49.4846], - [88.8911, 49.5558], - [88.8151, 49.4662], - [88.679, 49.475], - [88.65, 49.5201], - [88.4453, 49.4801], - [88.3398, 49.5081], - [88.2232, 49.4899], - [88.103, 49.3655], - [88.1968, 49.2873], - [88.0553, 49.2664], - [87.9943, 49.1864], - [87.8313, 49.1483], - [87.7931, 49.1823], - [87.5056, 49.1428], - [87.4366, 49.0752], - [87.3271, 49.1081], - [87.3215, 49.1091], - [87.3088, 49.1254], - [87.2814, 49.2028], - [87.1719, 49.2518], - [87.0471, 49.2547], - [86.902, 49.3508], - [86.9088, 49.4142], - [86.8214, 49.4445], - [86.7961, 49.5476], - [86.6342, 49.5817], - [86.618, 49.6316], - [86.7834, 49.711], - [86.8032, 49.8032], - [86.6236, 49.7732], - [86.4265, 49.6387], - [86.25, 49.5878], - [86.1554, 49.5008], - [85.9797, 49.4862], - [85.9313, 49.5524], - [85.6513, 49.5612], - [85.6047, 49.6057], - [85.2879, 49.588], - [85.2123, 49.6268], - [85.1965, 49.7376], - [85.1048, 49.8747], - [84.981, 49.9208], - [84.998, 50.0561], - [84.8342, 50.0967], - [84.65, 50.2127], - [84.4659, 50.2459], - [84.3299, 50.2259], - [84.2626, 50.2697], - [84.2113, 50.4714], - [84.2189, 50.5323], - [83.9394, 50.7418], - [83.9641, 50.7866], - [83.8323, 50.8747], - [83.6941, 50.9004], - [83.641, 50.9477], - [83.4907, 50.9558], - [83.3821, 51.0012], - [83.1208, 51.0198], - [83.0768, 50.953], - [82.9522, 50.8937], - [82.7641, 50.9378], - [82.7225, 50.8425], - [82.5687, 50.759], - [82.472, 50.7462], - [82.3094, 50.7739], - [82.1778, 50.7383], - [82.0077, 50.7997], - [81.8825, 50.811], - [81.593, 50.7531], - [81.4792, 50.8208], - [81.4038, 50.9823], - [81.0743, 50.9454], - [81.1575, 51.1877], - [81.0692, 51.172], - [80.9221, 51.2541], - [80.6824, 51.3081], - [80.6224, 51.2069], - [80.4409, 51.2058], - [80.4744, 51.1013], - [80.4688, 50.9744], - [80.251, 50.9271], - [80.1926, 50.832], - [80.092, 50.8317], - [79.9685, 50.8911], - [79.6109, 51.3643], - [79.0944, 52.0315], - [78.6247, 52.5456], - [78.2499, 52.9543], - [77.9115, 53.2785], - [77.5703, 53.4809], - [76.762, 53.8691], - [76.5838, 53.9678], - [76.4267, 54.1682], - [76.7486, 54.1604], - [76.8425, 54.2346], - [76.913, 54.4579], - [76.7452, 54.4197], - [76.6518, 54.3464], - [76.5041, 54.3268], - [76.234, 54.3561], - [76.2273, 54.2743], - [75.6009, 54.1051], - [75.4073, 54.0852], - [75.4636, 53.9783], - [75.0394, 53.791], - [74.8032, 53.8159], - [74.7585, 53.7324], - [74.6413, 53.667], - [74.4719, 53.6837], - [74.4848, 53.5801], - [74.4039, 53.4611], - [74.1514, 53.5511], - [74.0745, 53.6255], - [73.9034, 53.6484], - [73.8337, 53.5863], - [73.6749, 53.6243], - [73.6494, 53.5593], - [73.449, 53.4448], - [73.4008, 53.5316], - [73.246, 53.5752], - [73.3295, 53.6879], - [73.3476, 53.7928], - [73.4562, 53.8135], - [73.4743, 53.8829], - [73.6913, 53.8621], - [73.7504, 54.0543], - [73.6314, 54.0424], - [73.2893, 53.9533], - [73.0844, 53.9905], - [72.9811, 54.0983], - [72.6009, 54.134], - [72.5198, 54.0501], - [72.5541, 53.9896], - [72.4934, 53.9138], - [72.3775, 53.9533], - [72.4181, 54.1495], - [72.2985, 54.1956], - [72.2633, 54.32], - [72.1772, 54.3588], - [72.0822, 54.2359], - [71.7671, 54.2486], - [71.7466, 54.1385], - [71.6556, 54.1027], - [71.5249, 54.1086], - [71.4915, 54.1594], - [71.354, 54.1835], - [71.2104, 54.1109], - [71.073, 54.2161], - [71.093, 54.2771], - [71.2261, 54.3629], - [71.1989, 54.5853], - [71.2972, 54.6655], - [71.1369, 54.7082], - [70.9665, 54.8745], - [70.9612, 54.9971], - [71.0181, 55.1001], - [70.9448, 55.1319], - [70.8202, 55.298], - [70.6477, 55.2628], - [70.471, 55.2806], - [70.4115, 55.2092], - [70.2286, 55.1363], - [69.9196, 55.2156], - [69.8315, 55.3024], - [69.668, 55.343], - [69.3302, 55.3626], - [69.1857, 55.3392], - [69.1397, 55.3892], - [68.9202, 55.4289], - [69.0104, 55.3091], - [68.8141, 55.353], - [68.5574, 55.201], - [68.1769, 55.1823], - [68.2853, 55.0644], - [68.1022, 54.9177], - [67.8844, 54.9786], - [67.7523, 54.8787], - [67.5525, 54.8384], - [67.3807, 54.8504], - [67.0485, 54.7742], - [66.9519, 54.7787], - [66.4054, 54.6968], - [66.0201, 54.6181], - [65.9707, 54.6923], - [65.8325, 54.6884], - [65.7419, 54.603], - [65.5013, 54.6512], - [65.4461, 54.5701], - [65.3578, 54.5809], - [65.2008, 54.5246], - [65.2402, 54.3675], - [65.1208, 54.3378], - [64.9779, 54.4196], - [64.7328, 54.3567], - [64.597, 54.3749], - [64.0307, 54.2815], - [63.8804, 54.2859], - [63.4787, 54.2038], - [63.1683, 54.1924], - [63.1618, 54.1268], - [63.0621, 54.1004], - [62.8513, 54.1123], - [62.4541, 53.9259], - [62.346, 54.0358], - [62.0884, 54.0579], - [62.0422, 53.9706], - [61.9496, 53.9458], - [61.7376, 54.0294], - [61.5815, 53.9954], - [61.4611, 54.084], - [61.3313, 54.0798], - [61.2757, 53.9848], - [61.0277, 53.9519], - [61.2183, 53.8159], - [61.1108, 53.7161], - [60.9183, 53.6175], - [61.1746, 53.5686], - [61.5583, 53.5757], - [61.5813, 53.5012], - [61.4836, 53.4621], - [61.3037, 53.508], - [61.1634, 53.3929], - [61.1851, 53.2969], - [61.3976, 53.2679], - [61.4652, 53.2246], - [61.6121, 53.216], - [61.6696, 53.2526], - [61.8014, 53.1617], - [62.113, 53.1176], - [62.1396, 53.0065], - [62.0103, 52.9524], - [61.8953, 53.0113], - [61.7173, 52.998], - [61.6602, 52.9614], - [61.462, 53.0358], - [61.3736, 52.9875], - [61.2392, 53.0326], - [61.0719, 52.9217], - [60.8526, 52.8347], - [60.8236, 52.7627], - [60.7193, 52.7423], - [60.7226, 52.6324], - [60.8436, 52.6197], - [60.8457, 52.5272], - [60.9817, 52.4839], - [60.9723, 52.4184], - [61.0702, 52.3346], - [60.9643, 52.2736], - [60.7972, 52.2322], - [60.7242, 52.1694], - [60.4848, 52.1443], - [60.298, 52.0544], - [60.2715, 52.0123], - [60.0105, 51.989], - [60.0711, 51.8583], - [60.1809, 51.9036], - [60.4038, 51.8135], - [60.5194, 51.7986], - [60.3562, 51.6885], - [60.4353, 51.6309], - [60.5986, 51.6152], - [60.9051, 51.6141], - [61.0027, 51.4651], - [61.5105, 51.4139], - [61.5527, 51.3403], - [61.6763, 51.2648], - [61.5798, 51.232], - [61.4508, 50.8073], - [61.008, 50.6861], - [60.8279, 50.661], - [60.3549, 50.6794], - [60.069, 50.8656], - [60.0037, 50.829], - [59.8327, 50.5843], - [59.5313, 50.5145], - [59.442, 50.6351], - [59.2863, 50.6347], - [59.0283, 50.7002], - [58.8469, 50.7271], - [58.7762, 50.8052], - [58.6058, 50.8315], - [58.5074, 50.9811], - [58.4908, 51.0815], - [58.3573, 51.0907], - [58.25, 51.149], - [58.1704, 51.0677], - [57.7566, 51.1041], - [57.7398, 50.932], - [57.58, 50.9226], - [57.4935, 50.8793], - [57.3155, 50.9399], - [57.294, 51.0298], - [57.1051, 51.0718], - [56.9068, 51.0487], - [56.7391, 50.9698], - [56.6331, 50.9932], - [56.5132, 51.067], - [56.4245, 51.0448], - [56.4423, 50.9699], - [56.3836, 50.926], - [56.1739, 50.9186], - [56.1329, 50.7217], - [55.7094, 50.5583], - [55.4991, 50.6465], - [55.355, 50.6599], - [55.0611, 50.8326], - [55, 50.9056], - [54.7119, 50.8915], - [54.6554, 50.8105], - [54.7286, 50.6346], - [54.625, 50.5508], - [54.5081, 50.54], - [54.4258, 50.6194], - [54.4731, 50.7889], - [54.4433, 50.872], - [54.3155, 50.8786], - [54.166, 51.0202], - [54.1295, 51.1188], - [53.9063, 51.1971], - [53.7499, 51.2035], - [53.6147, 51.2928], - [53.5703, 51.4316], - [53.3635, 51.5176], - [53.2743, 51.4915], - [53.1484, 51.5255], - [52.9582, 51.4719], - [52.8021, 51.505], - [52.5456, 51.4674], - [52.5043, 51.547], - [52.383, 51.6568], - [52.3543, 51.7598], - [52.1412, 51.668], - [52.0379, 51.6529], - [51.8573, 51.6833], - [51.7615, 51.6028], - [51.794, 51.5307], - [51.6491, 51.4687], - [51.586, 51.5339], - [51.4289, 51.4826], - [51.2756, 51.5003], - [51.3642, 51.5767], - [51.3586, 51.6533], - [51.2668, 51.6897], - [51.0617, 51.6678], - [50.8895, 51.6805], - [50.8626, 51.7394], - [50.7431, 51.7649], - [50.7168, 51.6284], - [50.5676, 51.6424], - [50.5142, 51.6013], - [50.4606, 51.4393], - [50.3623, 51.4366], - [50.3676, 51.3403], - [50.2203, 51.2943], - [49.9523, 51.2406], - [49.736, 51.1147], - [49.4205, 51.1296], - [49.3248, 50.9896], - [49.4109, 50.8584], - [49.093, 50.7835], - [48.9387, 50.6588], - [48.8248, 50.6003], - [48.7005, 50.6232], - [48.636, 50.5423], - [48.7168, 50.256], - [48.7794, 50.1802], - [48.7619, 50.1019], - [48.8776, 50.0234], - [48.735, 49.9267], - [48.4333, 49.838], - [48.2169, 49.9094], - [48.1302, 50.0025], - [48.0965, 50.0914], - [47.8166, 50.3313], - [47.6239, 50.4383], - [47.5095, 50.4562], - [47.3196, 50.3318], - [47.2609, 50.1989], - [47.3394, 50.1053], - [47.2241, 49.9664], - [47.1087, 49.9031], - [46.8929, 49.8393], - [46.8596, 49.6082], - [46.8199, 49.557], - [46.7827, 49.3327], - [47.0215, 49.2089], - [47.0528, 49.1649], - [46.9376, 49.0037], - [46.7785, 48.9385], - [46.4919, 48.443], - [46.7718, 48.3562], - [47.1138, 48.2655], - [47.0971, 48.1049], - [47.1394, 48.0399], - [47.0176, 48], - [47.1619, 47.8368], - [47.1743, 47.7608], - [47.3713, 47.6769], - [47.4067, 47.8126], - [47.6668, 47.7474], - [48.0583, 47.7606], - [48.1823, 47.6781], - [48.3807, 47.4336], - [48.6078, 47.4145], - [48.6614, 47.2091], - [48.7813, 47.0109], - [48.971, 46.8351], - [49.0053, 46.7672], - [48.9141, 46.6931], - [48.7513, 46.6879], - [48.657, 46.7713], - [48.5115, 46.7332], - [48.4807, 46.6577], - [48.5587, 46.6083], - [48.7759, 46.5359], - [48.8162, 46.4802], - [49.1668, 46.3596], - [49.0174, 46.2084], - [49.0273, 46.1677], - [48.8089, 46.0237], - [48.8321, 45.9516], - [48.7382, 45.9265], - [48.7642, 45.7911], - [48.6905, 45.7888], - [48.6292, 45.9045], - [48.5421, 45.9468], - [48.4981, 45.869], - [48.3605, 45.8259], - [48.4523, 45.6865], - [48.3745, 45.5963], - [48.2768, 45.7369], - [48.2179, 45.7083], - [48.0258, 45.6925], - [47.9415, 45.7157], - [47.651, 45.6117], - [47.5998, 45.5633], - [47.5838, 45.4209], - [47.443, 45.3512], - [47.4255, 45.2299], - [47.2956, 45.1544], - [47.2478, 45.0548], - [47.1975, 44.8402], - [47.1543, 44.7961], - [47.0052, 44.7981], - [46.8503, 44.6817], - [46.7965, 44.6934], - [46.691, 44.5701], - [46.6854, 44.4581], - [46.8405, 44.3316], - [46.9937, 44.3588], - [47.0666, 44.256], - [47.1417, 44.209], - [47.227, 44.2251], - [47.2802, 44.1168], - [47.3799, 44.0127], - [47.43, 43.8857], - [47.5239, 43.8417], - [47.7129, 43.9271], - [47.5785, 43.7097], - [47.5015, 43.5045], - [47.4729, 43.3645], - [47.566, 43.3299], - [47.4721, 43.1294], - [47.4709, 42.9975], - [47.5635, 42.9588], - [47.7107, 42.8399], - [47.7114, 42.7066], - [47.7562, 42.6365], - [47.8937, 42.5634], - [47.9197, 42.4952], - [48.0335, 42.367], - [48.1178, 42.3069], - [48.2814, 42.101], - [48.3569, 41.9497], - [48.5338, 41.885], - [48.4143, 41.6267], - [48.1936, 41.5033], - [48.0511, 41.4912], - [47.9409, 41.3599], - [47.8788, 41.2192], - [47.7199, 41.1975], - [47.6137, 41.2364], - [47.5359, 41.2072], - [47.4782, 41.2681], - [47.4049, 41.2663], - [47.2699, 41.3185], - [47.2275, 41.4423], - [47.1009, 41.5872], - [47.0097, 41.556], - [46.8958, 41.7316], - [46.7812, 41.7854], - [46.7612, 41.853], - [46.5768, 41.8066], - [46.5397, 41.8738], - [46.4181, 41.9056], - [46.2262, 42.0018], - [46.0148, 42.0421], - [45.7687, 42.1258], - [45.6061, 42.219], - [45.6407, 42.2894], - [45.7135, 42.2906], - [45.7729, 42.4363], - [45.6956, 42.4848], - [45.4709, 42.5552], - [45.35, 42.529], - [45.1765, 42.6907], - [45.0351, 42.7013], - [44.8783, 42.7469], - [44.7982, 42.6317], - [44.6621, 42.7503], - [44.5233, 42.7512], - [44.5035, 42.7013], - [44.323, 42.7133], - [44.209, 42.6268], - [44.0347, 42.605], - [43.9481, 42.5585], - [43.7702, 42.5877], - [43.7314, 42.6276], - [43.7909, 42.7501], - [43.6449, 42.7999], - [43.5617, 42.8661], - [43.3431, 42.89], - [43.1921, 42.9344], - [43.0266, 43.0499], - [43.0386, 43.0906], - [42.8935, 43.1791], - [42.6817, 43.1737], - [42.4885, 43.2063], - [42.4399, 43.2557], - [42.3239, 43.2147], - [42.0386, 43.1968], - [41.8782, 43.2461], - [41.8147, 43.2038], - [41.5825, 43.2354], - [41.4203, 43.3531], - [41.3332, 43.3354], - [41.1392, 43.3946], - [40.949, 43.4221], - [40.6688, 43.5582], - [40.5718, 43.5161], - [40.2827, 43.571], - [40.0923, 43.5545], - [40.0102, 43.3832], - [39.912, 43.4266], - [39.8757, 43.4982], - [39.7307, 43.5681], - [39.6846, 43.6333], - [39.4687, 43.7843], - [39.2929, 43.9448], - [39.1472, 44.0279], - [38.9827, 44.1625], - [38.8886, 44.1833], - [38.7928, 44.2749], - [38.5772, 44.344], - [38.2264, 44.4053], - [38.0619, 44.5434], - [37.9726, 44.5757], - [37.9362, 44.6503], - [37.8475, 44.7031], - [37.73, 44.6463], - [37.5505, 44.6741], - [37.3865, 44.7598], - [37.2136, 45.0019], - [36.8907, 45.1041], - [36.7366, 45.1067], - [36.6329, 45.1373], - [36.689, 45.2211], - [36.9815, 45.2754], - [36.9276, 45.3248], - [36.7991, 45.3013], - [36.7588, 45.3989], - [36.7901, 45.4361], - [36.9221, 45.4259], - [37.0584, 45.3631], - [37.1927, 45.3307], - [37.3729, 45.3256], - [37.5749, 45.4055], - [37.6005, 45.4876], - [37.5964, 45.6384], - [37.8524, 45.7813], - [37.9228, 45.9785], - [37.9703, 46.029], - [38.1481, 46.0376], - [38.2896, 46.2612], - [38.0943, 46.3967], - [37.9042, 46.412], - [37.7377, 46.6776], - [37.908, 46.6324], - [38.0389, 46.6364], - [38.1362, 46.6889], - [38.3004, 46.6906], - [38.4993, 46.6396], - [38.6046, 46.679], - [38.4181, 46.8118], - [38.4989, 46.8751], - [38.7216, 46.8718], - [38.8581, 46.9131], - [39.1046, 47.0338], - [39.3005, 47.0199], - [39.3143, 47.0606], - [39.2208, 47.1999], - [39.2014, 47.2847], - [39.0909, 47.2897], - [38.9434, 47.2563], - [38.8617, 47.1735], - [38.5792, 47.1402], - [38.461, 47.1473], - [38.2344, 47.1154], - [38.2459, 47.2284], - [38.3342, 47.253], - [38.2983, 47.3759], - [38.2905, 47.5202], - [38.3716, 47.6111], - [38.6055, 47.6379], - [38.6751, 47.6968], - [38.7648, 47.6841], - [38.8394, 47.8541], - [39.0382, 47.865], - [39.1262, 47.8397], - [39.3794, 47.8758], - [39.5296, 47.8291], - [39.7477, 47.8297], - [39.8206, 47.9582], - [39.8189, 48.0491], - [40.0149, 48.2666], - [39.9408, 48.3868], - [39.8519, 48.4721], - [39.8501, 48.5708], - [39.681, 48.5932], - [39.7204, 48.7318], - [39.8004, 48.8378], - [40, 48.7946], - [40.0709, 48.867], - [39.9496, 48.9055], - [39.8204, 48.8959], - [39.6692, 49.0446], - [39.9415, 49.0591], - [40.0334, 49.181], - [40.2003, 49.2706], - [40.1644, 49.394], - [40.0987, 49.4397], - [40.0701, 49.532], - [40.2074, 49.5631], - [40.1424, 49.6194], - [39.8025, 49.5748], - [39.6427, 49.6399], - [39.6117, 49.74], - [39.4598, 49.7636], - [39.2823, 49.7616], - [39.164, 49.878], - [39.0826, 49.8196], - [38.9467, 49.8111], - [38.6125, 49.9859], - [38.5382, 49.9674], - [38.3665, 50.0029], - [38.3503, 50.0744], - [38.2064, 50.0803], - [38.1952, 49.952], - [38.0294, 49.9205], - [37.9109, 50.0459], - [37.7614, 50.092], - [37.6253, 50.221], - [37.6491, 50.2869], - [37.4813, 50.3711], - [37.4931, 50.429], - [37.3433, 50.4254], - [37.175, 50.3552], - [36.932, 50.3537], - [36.7294, 50.2929], - [36.6568, 50.2375], - [36.4528, 50.334], - [36.3154, 50.294], - [36.2311, 50.4187], - [36.0867, 50.4562], - [35.86, 50.4349], - [35.7245, 50.3682], - [35.6179, 50.3785], - [35.5887, 50.4594], - [35.5092, 50.4818], - [35.4084, 50.5907], - [35.4943, 50.6688], - [35.49, 50.7751], - [35.4234, 50.8006], - [35.3195, 51.072], - [35.1674, 51.082], - [35.128, 51.2219], - [34.9628, 51.2352], - [34.8222, 51.1768], - [34.7261, 51.176], - [34.6561, 51.2471], - [34.4573, 51.2409], - [34.3772, 51.2678], - [34.3414, 51.3543], - [34.2245, 51.4059], - [34.3023, 51.5051], - [34.1517, 51.6893], - [34.4387, 51.7272], - [34.4091, 51.8381], - [34.265, 51.8551], - [34.258, 51.9099], - [34.1387, 51.9697], - [34.0763, 52.0704], - [34.1292, 52.1402], - [34.0214, 52.1933], - [33.8145, 52.3629], - [33.7063, 52.3574], - [33.5459, 52.3023], - [33.3809, 52.3672], - [33.2013, 52.3694], - [32.9055, 52.2438], - [32.7063, 52.2546], - [32.5394, 52.3267], - [32.388, 52.3351], - [32.3961, 52.261], - [32.2963, 52.1044], - [31.9741, 52.0256], - [31.9373, 52.0901], - [31.7968, 52.1074], - [31.712, 52.2749], - [31.6091, 52.32], - [31.6359, 52.4055], - [31.572, 52.4881], - [31.6098, 52.5314], - [31.5234, 52.8023], - [31.3893, 52.9291], - [31.3282, 53.0386], - [31.4395, 53.2081], - [31.7554, 53.1915], - [31.8276, 53.1186], - [32.1554, 53.079], - [32.3079, 53.1294], - [32.5126, 53.2691], - [32.7288, 53.3272], - [32.761, 53.4634], - [32.6633, 53.4647], - [32.4797, 53.5522], - [32.4397, 53.6628], - [32.2754, 53.7763], - [32.1314, 53.8154], - [31.9045, 53.7818], - [31.7953, 53.8082], - [31.8932, 54.0378], - [31.5539, 54.1395], - [31.3233, 54.2567], - [31.3042, 54.3637], - [31.2369, 54.4652], - [31.0879, 54.5016], - [31.2163, 54.6387], - [31.1005, 54.6648], - [30.76, 54.8077], - [30.8408, 54.908], - [30.9438, 54.9596], - [31.026, 55.0682], - [30.9844, 55.1869], - [30.8401, 55.338], - [30.9286, 55.3847], - [30.9565, 55.4938], - [30.9399, 55.6166], - [30.761, 55.6033], - [30.6153, 55.7399], - [30.2012, 55.8653], - [30.1007, 55.8349], - [30.0131, 55.8781], - [29.8122, 55.7924], - [29.6027, 55.7685], - [29.5013, 55.7013], - [29.3723, 55.7527], - [29.4256, 55.9644], - [29.2292, 55.9876], - [29.1039, 56.0554], - [28.851, 55.972], - [28.7377, 55.9669], - [28.6762, 56.0913], - [28.4022, 56.1046], - [28.298, 56.0684], - [28.1513, 56.1658], - [28.2411, 56.2756], - [28.1649, 56.3801], - [28.1843, 56.4411], - [28.0398, 56.5951], - [27.9833, 56.7081], - [27.9205, 56.7361], - [27.9718, 56.8238], - [27.8463, 56.8757], - [27.7088, 56.855], - [27.7269, 57.0996], - [27.8215, 57.1597], - [27.8394, 57.3166], - [27.5396, 57.4342], - [27.5128, 57.541], - [27.3221, 57.5484], - [27.5013, 57.7926], - [27.5595, 57.8305], - [27.8269, 57.8585], - [27.6253, 58.0057], - [27.6149, 58.0792], - [27.4907, 58.2185], - [27.4371, 58.3805], - [27.4767, 58.6482], - [27.5482, 58.8617], - [27.742, 58.998], - [27.8084, 59.1297], - [27.9707, 59.2749], - [28.1174, 59.2942], - [28.1958, 59.4007], - [28.0489, 59.4708], - [28.0982, 59.6019], - [28.0114, 59.6963], - [28.1261, 59.7963], - [28.24, 59.6809], - [28.4313, 59.6767], - [28.4858, 59.8342], - [28.725, 59.7771], - [28.9885, 59.8145], - [29.1304, 59.9874], - [29.335, 59.9802], - [29.7426, 59.9309], - [30.0289, 59.8623], - [30.1824, 59.8869], - [30.2113, 59.9928], - [29.9717, 60.0103], - [29.9301, 60.1439], - [29.6156, 60.1983], - [29.4538, 60.165], - [29.1443, 60.1617], - [29.0344, 60.1803], - [28.9447, 60.2684], - [28.5988, 60.3705], - [28.5746, 60.4248], - [28.7088, 60.4765], - [28.6413, 60.7049], - [28.4022, 60.6474], - [28.3556, 60.5969], - [28.1548, 60.514], - [27.8705, 60.5164], - [27.8018, 60.5494], - [28.1119, 60.7332], - [28.5277, 60.9533], - [28.6557, 60.9527], - [28.8289, 61.1258], - [29.2456, 61.2734], - [29.4909, 61.4461], - [29.629, 61.4977], - [29.8768, 61.6877], - [30.7188, 62.2129], - [31.2298, 62.5071], - [31.3745, 62.6627], - [31.435, 62.7803], - [31.5809, 62.908], - [31.5045, 62.9986], - [31.2586, 63.1356], - [31.2312, 63.2258], - [30.7909, 63.4046], - [30.5051, 63.4619], - [29.9809, 63.7545], - [30.2398, 63.8183], - [30.5262, 64.0491], - [30.5503, 64.1259], - [30.485, 64.2549], - [30.053, 64.4043], - [30.0183, 64.5917], - [30.143, 64.6527], - [30.0457, 64.7922], - [29.7544, 64.788], - [29.6327, 64.8902], - [29.6228, 65.0592], - [29.8229, 65.1404], - [29.8776, 65.2133], - [29.6577, 65.2278], - [29.6186, 65.2734], - [29.7686, 65.3341], - [29.742, 65.4661], - [29.8812, 65.5641], - [29.7344, 65.6279], - [30.1278, 65.7349], - [30.0647, 65.9134], - [29.9175, 66.1279], - [29.6699, 66.2919], - [29.4768, 66.5417], - [29.0863, 66.8243], - [29.0519, 66.9767], - [29.5402, 67.2877], - [29.9592, 67.5173], - [30.0345, 67.6694], - [29.6945, 67.7938], - [29.3347, 68.0747], - [28.6598, 68.1951], - [28.4504, 68.5477], - [28.7184, 68.7395], - [28.8035, 68.8749], - [28.4348, 68.9084], - [28.9269, 69.0574], - [29.0938, 69.0322], - [29.2589, 69.1198], - [29.3421, 69.3104], - [29.5472, 69.3153], - [29.8304, 69.4187], - [29.9711, 69.4118], - [30.1919, 69.5351], - [30.1522, 69.6371], - [30.3658, 69.6171], - [30.5355, 69.5415], - [30.8201, 69.5417], - [30.9456, 69.5862], - [30.9313, 69.6868], - [30.8354, 69.7852], - [31.0158, 69.7774], - [31.411, 69.7103], - [31.6885, 69.7096], - [31.7816, 69.8315], - [32.191, 69.9218], - [32.6677, 69.7748], - [32.9473, 69.7695], - [33.1157, 69.7246], - [33.0907, 69.6442], - [32.852, 69.5625], - [32.1829, 69.6329], - [32.1857, 69.5861], - [32.6355, 69.4564], - [33.0745, 69.4499], - [33.2373, 69.4071], - [33.4391, 69.4182], - [33.5743, 69.293], - [34.1953, 69.2989], - [34.8149, 69.2155], - [35.2758, 69.1939], - [35.2375, 69.2462], - [35.8055, 69.1786], - [36.0364, 69.1156], - [36.6828, 68.9814], - [37.4353, 68.7357], - [37.5693, 68.7185], - [37.9857, 68.5643], - [38.2128, 68.4409], - [38.5298, 68.3083], - [38.6417, 68.3595], - [39.0811, 68.1962], - [39.5647, 68.0378], - [39.8442, 68.0322], - [40.3907, 67.8807], - [40.3083, 67.8245], - [40.4126, 67.7567], - [40.5909, 67.7973], - [40.8203, 67.7155], - [40.9653, 67.7033], - [41.0424, 67.6248], - [40.9755, 67.464], - [41.11, 67.4093], - [41.0752, 67.2562], - [41.3418, 67.1966], - [41.2927, 67.1417], - [41.3366, 66.9815], - [41.2007, 66.8177], - [40.5949, 66.5085], - [40.5318, 66.4355], - [39.994, 66.2507], - [39.4625, 66.1766], - [39.1067, 66.0928], - [38.8314, 66.0884], - [38.6751, 66.0536], - [38.2801, 66.0451], - [37.8703, 66.0818], - [37.1206, 66.2407], - [36.8769, 66.2756], - [36.5374, 66.2793], - [36.0233, 66.3401], - [35.5199, 66.3827], - [34.8294, 66.598], - [34.4962, 66.5356], - [34.3963, 66.6474], - [34.1443, 66.6877], - [33.9624, 66.6813], - [33.7017, 66.7979], - [33.4278, 66.7392], - [32.9901, 66.8981], - [32.6174, 67.1188], - [32.3272, 67.1537], - [32.3289, 67.0421], - [32.5135, 67.0203], - [32.5463, 66.8738], - [32.9562, 66.7], - [33.1501, 66.6764], - [33.11, 66.6068], - [33.3145, 66.4671], - [33.5491, 66.4495], - [33.6232, 66.4105], - [33.5104, 66.3288], - [33.9444, 66.2181], - [34.1059, 66.224], - [34.5214, 66.0767], - [34.6932, 65.9153], - [34.8283, 65.883], - [34.6449, 65.7823], - [34.7492, 65.6091], - [34.6765, 65.4382], - [34.4059, 65.3994], - [34.4599, 65.2675], - [34.6659, 65.1756], - [34.6819, 65.0767], - [34.9293, 64.7998], - [34.7852, 64.7414], - [34.968, 64.6055], - [34.7813, 64.5125], - [34.9294, 64.4945], - [35.1391, 64.3523], - [35.3126, 64.3411], - [35.4082, 64.2866], - [35.7011, 64.3614], - [36.24, 64.1312], - [36.2559, 64.0108], - [36.6591, 63.9111], - [37.2259, 63.8698], - [37.2749, 63.8058], - [37.4464, 63.7851], - [37.6099, 63.8137], - [37.7002, 63.9015], - [37.8772, 63.8907], - [38.0781, 64], - [37.9111, 64.2336], - [38.005, 64.2931], - [37.8237, 64.3556], - [37.8112, 64.4274], - [37.4801, 64.3834], - [37.3308, 64.3424], - [37.1053, 64.4111], - [36.7079, 64.7012], - [36.5759, 64.7206], - [36.55, 64.897], - [36.8093, 64.9598], - [36.8438, 65.146], - [37.0318, 65.1641], - [37.672, 65.035], - [37.7649, 64.9363], - [38.0442, 64.8531], - [38.3704, 64.8389], - [37.9999, 64.7296], - [38.1178, 64.6786], - [38.316, 64.7407], - [38.643, 64.7623], - [38.8834, 64.7414], - [39.1173, 64.6661], - [39.2878, 64.649], - [39.5131, 64.5532], - [39.6985, 64.5498], - [39.9036, 64.6349], - [40.0852, 64.6085], - [40.1552, 64.5505], - [40.5195, 64.5252], - [40.4186, 64.6923], - [40.3942, 64.9244], - [40.3143, 65.0036], - [40.108, 65.071], - [39.9008, 65.2373], - [39.7226, 65.3389], - [39.7184, 65.4938], - [39.8832, 65.6355], - [40.1854, 65.6969], - [40.4761, 65.8052], - [40.6444, 65.931], - [40.7918, 65.9929], - [41.2726, 66.0492], - [41.4977, 66.1112], - [41.9499, 66.3322], - [42.1015, 66.4837], - [42.3116, 66.5105], - [42.5927, 66.4403], - [42.6556, 66.3945], - [43.1782, 66.4114], - [43.3603, 66.3235], - [43.5711, 66.298], - [43.9597, 66.0992], - [44.0722, 66.1751], - [44.1133, 66.3031], - [44.4884, 66.6653], - [44.3609, 66.7831], - [44.4877, 66.832], - [44.3986, 66.9862], - [44.1485, 67.1354], - [43.8788, 67.1488], - [43.7695, 67.1933], - [43.8047, 67.3481], - [43.8969, 67.4808], - [44.1689, 67.7525], - [44.107, 67.8351], - [44.2283, 68.036], - [44.2206, 68.2773], - [44.0093, 68.3872], - [43.5503, 68.5233], - [43.2512, 68.6494], - [43.4445, 68.6724], - [44.103, 68.5321], - [44.6997, 68.5407], - [45.4754, 68.5057], - [45.8677, 68.4167], - [46.3163, 68.1805], - [46.4955, 68.1369], - [46.5615, 67.9969], - [46.683, 67.9036], - [46.675, 67.8131], - [46.3177, 67.8221], - [45.8567, 67.754], - [45.5172, 67.7467], - [45.3272, 67.6917], - [45.3021, 67.5742], - [45.1454, 67.5621], - [44.9455, 67.4575], - [44.913, 67.3239], - [45.1605, 67.2475], - [45.5694, 67.1649], - [45.601, 67.0806], - [45.8093, 66.902], - [46.0431, 66.8242], - [46.5565, 66.8297], - [47.0618, 66.8549], - [47.3909, 66.9244], - [47.5758, 66.9091], - [47.744, 67.0127], - [47.7567, 67.1426], - [47.676, 67.1956], - [47.7977, 67.2564], - [47.7784, 67.3447], - [47.9215, 67.4741], - [47.8519, 67.5866], - [48.0153, 67.6394], - [48.1395, 67.6157], - [48.3249, 67.657], - [48.462, 67.6384], - [48.7376, 67.7158], - [48.7503, 67.8522], - [49.1604, 67.8527], - [49.5262, 67.9417], - [50.0584, 68.1], - [50.8021, 68.3658], - [50.8763, 68.3418], - [51.2935, 68.383], - [51.5807, 68.484], - [52.1581, 68.5039], - [52.3221, 68.4274], - [52.1653, 68.3642], - [52.299, 68.3097], - [52.7081, 68.4173], - [52.767, 68.474], - [52.5583, 68.5574], - [52.2875, 68.5913], - [53.3611, 68.8825], - [53.8758, 68.9595], - [54.2474, 68.9864], - [54.3419, 68.9488], - [53.6745, 68.8952], - [54.006, 68.8302], - [53.8869, 68.787], - [53.8583, 68.6861], - [53.7321, 68.5975], - [53.8898, 68.5341], - [53.9498, 68.3911], - [53.7887, 68.3348], - [53.6833, 68.3828], - [53.3156, 68.3332], - [53.1548, 68.2191], - [53.6846, 68.2479], - [53.8674, 68.2158], - [54.2529, 68.2245], - [54.4769, 68.2924], - [54.7388, 68.1501], - [54.9035, 68.1657], - [54.965, 68.2445], - [54.8681, 68.2971], - [55.017, 68.4265], - [55.3701, 68.5439], - [55.6572, 68.5452], - [55.9401, 68.6335], - [56.4381, 68.5882], - [56.618, 68.6179], - [57.0476, 68.5175], - [57.3141, 68.5293], - [57.7425, 68.7702], - [58.4104, 68.8842], - [58.7783, 68.9651], - [59.1159, 68.9838], - [59.0535, 68.9075], - [59.4075, 68.8091], - [59.509, 68.7087], - [59.258, 68.6751], - [59.0732, 68.5664], - [59.1508, 68.511], - [59.1652, 68.3835], - [59.6713, 68.3405], - [59.8816, 68.3869], - [59.9472, 68.4421], - [59.7996, 68.6045], - [59.9388, 68.7039], - [60.0723, 68.6746], - [60.3746, 68.6779], - [60.6404, 68.7498], - [60.9347, 68.9259], - [60.9616, 69.0637], - [60.8471, 69.1453], - [60.6321, 69.1448], - [60.6359, 69.2514], - [60.1837, 69.551], - [60.3456, 69.6614], - [60.6255, 69.6547], - [60.7208, 69.7998], - [60.8531, 69.8582], - [61.3529, 69.7868], - [62.1483, 69.7307], - [62.6777, 69.7227], - [62.9997, 69.6974], - [63.7888, 69.5879], - [64.3848, 69.4766], - [64.8763, 69.3138], - [64.9583, 69.2506], - [65.1337, 69.2501], - [65.2842, 69.1896], - [65.7752, 69.1063], - [66.4035, 68.9269], - [66.6545, 68.8784], - [67.1666, 68.8154], - [67.0675, 68.7858], - [67.2026, 68.6915], - [67.3749, 68.6616], - [67.6973, 68.5399], - [67.8171, 68.4434], - [68.1736, 68.3866], - [68.2768, 68.3125], - [68.1879, 68.2405], - [68.3324, 68.1699], - [68.5122, 68.2482], - [68.5995, 68.3606], - [68.8501, 68.5402], - [68.9949, 68.7328], - [69.1306, 68.8186], - [69.0446, 68.9386], - [68.7108, 68.9058], - [68.486, 68.9677], - [68.3917, 69.0564], - [68.1158, 69.2211], - [68.0261, 69.3332], - [68.1159, 69.3671], - [68.0449, 69.4702], - [67.8587, 69.4905], - [67.6585, 69.5748], - [67.3915, 69.6005], - [67.056, 69.6899], - [66.8075, 69.7027], - [66.8871, 69.9597], - [67.261, 69.957], - [67.4364, 70.0287], - [67.1279, 70.2116], - [67.225, 70.3718], - [67.3245, 70.4395], - [67.2086, 70.5282], - [67.3808, 70.6665], - [67.3327, 70.7882], - [67.1811, 70.8325], - [66.9606, 70.7815], - [66.72, 70.7673], - [66.6473, 70.8614], - [66.913, 71.0094], - [66.7687, 71.1062], - [66.9598, 71.2629], - [67.5204, 71.3808], - [67.9538, 71.5058], - [68.263, 71.6376], - [68.5089, 71.8263], - [68.7511, 72.2435], - [68.8122, 72.4416], - [68.9355, 72.6562], - [69.1619, 72.7617], - [69.3159, 72.9225], - [69.5959, 72.8499], - [70.1975, 72.8794], - [70.7177, 72.8648], - [71.5548, 72.885], - [71.8773, 72.8291], - [72.6303, 72.7308], - [72.7874, 72.6282], - [72.6764, 72.5909], - [72.766, 72.501], - [72.8185, 72.2615], - [72.6994, 72.2056], - [72.6864, 72.112], - [72.5686, 72.0572], - [72.4677, 71.8782], - [72.3491, 71.8613], - [72.3357, 71.7065], - [71.8368, 71.4874], - [72.0337, 71.2926], - [72.2872, 71.1937], - [72.5539, 71.1513], - [72.6537, 71.074], - [72.5904, 71.0043], - [72.8274, 70.8717], - [72.7136, 70.5463], - [72.7608, 70.3874], - [72.6382, 70.3714], - [72.4071, 70.2573], - [72.5776, 70.1443], - [72.4898, 69.9888], - [72.6616, 69.8532], - [72.6833, 69.7599], - [72.5182, 69.6313], - [72.687, 69.4956], - [72.6404, 69.2734], - [72.5115, 69.2046], - [72.4873, 69.0917], - [72.5834, 68.9239], - [72.81, 68.7975], - [73.1303, 68.7062], - [73.4747, 68.5771], - [73.4908, 68.4624], - [73.4295, 68.3707], - [73.1299, 68.2437], - [73.0427, 68.0787], - [73.1882, 67.9503], - [73.2023, 67.8399], - [73.0867, 67.7981], - [73.1223, 67.7296], - [72.9084, 67.6837], - [72.8606, 67.6185], - [72.6036, 67.5775], - [72.4513, 67.4629], - [72.4034, 67.3056], - [72.1611, 67.2983], - [72.2498, 67.179], - [71.819, 66.9494], - [71.323, 66.8732], - [71.2019, 66.8683], - [71.0624, 66.8074], - [70.8718, 66.8163], - [70.7892, 66.7695], - [70.4834, 66.7305], - [70.3151, 66.7577], - [70.1058, 66.7378], - [69.9952, 66.8036], - [69.657, 66.8098], - [69.3297, 66.8532], - [69.1174, 66.906], - [69.0682, 66.8139], - [69.1833, 66.7244], - [69.1314, 66.6167], - [69.3863, 66.5052], - [69.8265, 66.4523], - [69.9492, 66.3887], - [70.3907, 66.3204], - [71.0083, 66.3508], - [71.4194, 66.3361], - [71.7232, 66.2933], - [71.822, 66.2345], - [72.0833, 66.2229], - [72.252, 66.2497], - [72.4196, 66.3519], - [72.3637, 66.5064], - [72.4779, 66.5797], - [72.9296, 66.6405], - [73.089, 66.7354], - [73.5058, 66.8227], - [73.6241, 66.9207], - [73.8109, 66.967], - [73.9669, 67.1931], - [73.9266, 67.2817], - [74.1004, 67.4127], - [74.7083, 67.6537], - [74.7788, 67.7427], - [74.8043, 68.0122], - [74.5904, 68.2516], - [74.3146, 68.3639], - [74.4659, 68.5315], - [74.439, 68.6628], - [74.6099, 68.7652], - [75.4488, 68.9054], - [75.6396, 68.9084], - [76.1866, 68.9942], - [76.5548, 68.9878], - [76.6394, 68.8865], - [76.6122, 68.7539], - [77.1741, 68.5643], - [77.2506, 68.3772], - [77.1257, 68.2976], - [77.3145, 68.2325], - [77.1898, 68.1221], - [77.1879, 67.9427], - [77.273, 67.8846], - [77.0877, 67.7514], - [77.5264, 67.6458], - [77.6863, 67.5719], - [77.6522, 67.4358], - [78.2291, 67.5597], - [78.3328, 67.5218], - [78.5799, 67.527], - [78.7233, 67.4944], - [78.947, 67.5875], - [78.5765, 67.658], - [78.3925, 67.6296], - [77.886, 67.6812], - [77.7837, 67.746], - [77.6339, 67.7096], - [77.4458, 67.7599], - [77.501, 67.9094], - [77.4778, 68.1136], - [77.7699, 68.2296], - [77.9917, 68.223], - [78.1492, 68.2606], - [77.7867, 68.5163], - [77.7182, 68.6008], - [77.7501, 68.7165], - [77.6503, 68.8835], - [76.9441, 69.0203], - [76.713, 69.1319], - [76.3731, 69.1604], - [76.1123, 69.2361], - [75.5135, 69.2652], - [75.1936, 69.1676], - [75.1643, 69.1193], - [74.7933, 69.1008], - [74.5062, 69.1513], - [73.8911, 69.0964], - [73.7778, 69.206], - [73.884, 69.3207], - [73.9101, 69.4262], - [73.8328, 69.5209], - [73.6312, 69.6208], - [73.5434, 69.7647], - [73.6598, 69.8176], - [73.799, 70.056], - [73.6937, 70.1065], - [74.069, 70.3065], - [74.2666, 70.4541], - [74.3135, 70.5621], - [74.2275, 70.6833], - [73.9656, 70.809], - [73.9271, 70.9441], - [73.6899, 71.0602], - [73.6106, 71.1764], - [73.3129, 71.3183], - [72.9886, 71.3992], - [73.1185, 71.4799], - [73.4217, 71.5867], - [73.5495, 71.7072], - [73.5513, 71.8037], - [74.5283, 71.9875], - [74.9943, 72.1714], - [75.0735, 72.287], - [75.0652, 72.4362], - [74.9887, 72.6043], - [74.7662, 72.7943], - [74.9678, 72.8685], - [75.4536, 72.7438], - [75.2927, 72.7087], - [75.6328, 72.5346], - [75.4761, 72.4855], - [75.6807, 72.2616], - [75.5085, 72.1986], - [75.3702, 72.0126], - [75.2474, 71.9248], - [75.2164, 71.7748], - [75.4654, 71.6278], - [75.4922, 71.5151], - [75.2024, 71.4142], - [75.3921, 71.2887], - [75.8938, 71.1973], - [76.3141, 71.169], - [76.6331, 71.1705], - [77.2422, 71.1361], - [77.4171, 71.1469], - [77.7761, 71.1106], - [77.9118, 70.9639], - [78.3249, 70.9095], - [78.4334, 70.999], - [78.2199, 71.103], - [78.2769, 71.2386], - [77.7605, 71.3047], - [77.6937, 71.2583], - [77.2961, 71.3191], - [77.1302, 71.3994], - [76.6909, 71.4607], - [76.3297, 71.5615], - [76.3041, 71.6574], - [76.1586, 71.7479], - [76.0551, 71.9016], - [76.4731, 72.0224], - [76.8855, 72.0555], - [77.3593, 71.9049], - [77.5059, 71.835], - [77.8284, 71.812], - [78.1093, 71.8616], - [78.2471, 71.9511], - [78.04, 72.0891], - [77.7355, 72.0984], - [77.5239, 72.0558], - [77.394, 72.1051], - [77.5062, 72.1737], - [77.7338, 72.2084], - [77.8838, 72.3094], - [78.0985, 72.3455], - [78.3578, 72.3149], - [78.5096, 72.38], - [79.4703, 72.3452], - [79.8995, 72.2074], - [80.6055, 72.0998], - [80.7462, 72], - [81.2426, 71.8389], - [81.3279, 71.7469], - [81.663, 71.6843], - [82.2405, 71.696], - [82.7076, 71.7578], - [83.2205, 71.7124], - [83.3048, 71.6488], - [83.1402, 71.5555], - [82.9763, 71.5275], - [83.004, 71.4049], - [82.3144, 71.2746], - [82.235, 71.2367], - [82.3255, 71.0694], - [82.219, 70.9525], - [82.414, 70.7529], - [82.0874, 70.5613], - [82.1844, 70.2847], - [82.3614, 70.165], - [82.7336, 70.1285], - [82.9952, 70.0231], - [82.9933, 69.9592], - [83.1652, 69.929], - [83.5615, 69.7165], - [83.9712, 69.7237], - [84.132, 69.596], - [84.4124, 69.5629], - [84.5515, 69.6089], - [84.3141, 69.6935], - [84.0694, 69.7117], - [83.7023, 69.8633], - [83.4379, 70.045], - [83.1435, 70.0804], - [83.1507, 70.1759], - [82.9922, 70.2786], - [83.3775, 70.3094], - [83.5929, 70.3484], - [83.782, 70.4586], - [83.7723, 70.5271], - [83.6014, 70.6975], - [83.5303, 70.8681], - [83.3624, 71.029], - [83.2251, 71.0514], - [83.2528, 71.1546], - [83.1544, 71.2339], - [83.3248, 71.2944], - [83.434, 71.4706], - [83.5527, 71.4942], - [83.6517, 71.6268], - [83.3967, 71.7284], - [83.3041, 71.8363], - [83.0463, 71.8726], - [82.6747, 71.8763], - [82.5126, 72.0281], - [82.2996, 72.073], - [82.4461, 72.1279], - [82.2713, 72.2454], - [81.6478, 72.3387], - [81.3011, 72.3428], - [80.9231, 72.4138], - [80.7807, 72.4935], - [80.8239, 72.5644], - [80.6889, 72.6561], - [80.6963, 72.7244], - [80.8576, 72.7892], - [80.8871, 72.9177], - [80.8014, 73.0037], - [80.5126, 73.1766], - [80.6304, 73.2534], - [80.358, 73.2854], - [80.4609, 73.3558], - [80.7002, 73.4196], - [80.5077, 73.5014], - [80.5506, 73.5469], - [81.2916, 73.5641], - [81.6642, 73.6165], - [82.3567, 73.6399], - [83.4794, 73.6338], - [84.4012, 73.7036], - [84.7189, 73.7468], - [85.2, 73.6938], - [85.4942, 73.7106], - [85.5584, 73.7857], - [86.0571, 73.8467], - [86.787, 73.8874], - [87.1693, 73.8722], - [87.0753, 73.9654], - [86.7077, 74.1255], - [86.78, 74.1859], - [86.5932, 74.2442], - [85.9626, 74.2927], - [85.9541, 74.388], - [86.1547, 74.3892], - [86.4573, 74.4747], - [86.4845, 74.5798], - [86.2869, 74.6196], - [85.7611, 74.6484], - [86.1609, 74.7748], - [86.3261, 74.7883], - [86.6525, 74.7138], - [87.0311, 74.7708], - [87.0866, 74.8613], - [87.3093, 74.9232], - [87.5819, 74.9367], - [87.604, 75.0298], - [86.8761, 75.0875], - [87.1657, 75.1486], - [87.9487, 75.1081], - [88.292, 75.1875], - [88.7882, 75.3619], - [89.332, 75.4573], - [90.0322, 75.4944], - [90.0272, 75.5622], - [90.4633, 75.5817], - [90.7099, 75.6341], - [91.1458, 75.6532], - [91.6779, 75.6363], - [91.8508, 75.7142], - [92.3167, 75.738], - [92.4932, 75.7773], - [92.9903, 75.7956], - [93.4408, 75.8803], - [93.2482, 75.9619], - [93.4337, 76.0573], - [93.9876, 76.0433], - [93.8884, 76.1099], - [94.3106, 76.1239], - [94.567, 76.0808], - [94.8722, 76.153], - [95.2737, 76.1038], - [95.4489, 76.1608], - [96.1877, 76.0895], - [96.1185, 75.9566], - [96.4445, 76.0041], - [96.7768, 75.8847], - [97.1527, 75.9872], - [97.2711, 75.952], - [98.1369, 76.0713], - [98.0479, 76.1304], - [98.433, 76.1649], - [98.6829, 76.2274], - [99.368, 76.1881], - [99.3107, 76.1175], - [99.7756, 76.1309], - [99.2945, 76.3301], - [99.0946, 76.3391], - [98.8898, 76.4559], - [99.0275, 76.4934], - [99.417, 76.4433], - [100.063, 76.4579], - [100.323, 76.4419], - [100.8341, 76.4881], - [101.1348, 76.5484], - [101.2908, 76.7319], - [101.0845, 76.7541], - [100.9524, 76.8414], - [101.0969, 76.9448], - [101.3347, 76.9726], - [101.2848, 77.0442], - [102.1656, 77.3618], - [103.0419, 77.5511], - [103.2601, 77.6359], - [103.6758, 77.6268], - [104.1081, 77.7289], - [104.3827, 77.6687], - [104.8115, 77.6856], - [104.8488, 77.6149], - [105.3579, 77.5512], - [105.8467, 77.5599], - [106.1423, 77.3503], - [105.8336, 77.3583], - [105.4179, 77.2009], - [104.5348, 77.0813], - [105.1015, 77.0551], - [105.8747, 77.0991], - [106.2184, 77.0552], - [107.006, 76.9931], - [107.3056, 76.9951], - [107.502, 76.8956], - [107.241, 76.7951], - [106.7979, 76.6795], - [106.641, 76.4771], - [107.3647, 76.5202], - [107.7114, 76.4928], - [107.9776, 76.5505], - [108.0356, 76.7333], - [108.6862, 76.7061], - [109.1037, 76.7497], - [109.697, 76.7548], - [110.1325, 76.7126], - [110.6581, 76.772], - [110.9411, 76.7361], - [111.7227, 76.6882], - [111.5969, 76.6378], - [111.9547, 76.5817], - [112.2643, 76.4549], - [112.7959, 76.3317], - [112.7295, 76.2375], - [112.9109, 76.0444], - [113.0683, 76.084], - [113.008, 76.2428], - [113.3056, 76.2509], - [113.4475, 76.1833], - [113.5862, 75.9277], - [113.9035, 75.9071], - [113.9153, 75.8243], - [113.7134, 75.6174], - [112.8387, 75.7395], - [112.8675, 75.6337], - [113.2258, 75.665], - [113.376, 75.5205], - [113.7027, 75.5052], - [113.6727, 75.3114], - [113.5097, 75.2104], - [112.9187, 75.0162], - [112.7696, 74.9424], - [112.1944, 74.878], - [111.8036, 74.6562], - [111.361, 74.6732], - [111.0199, 74.5545], - [110.55, 74.4842], - [110.1634, 74.3789], - [109.8508, 74.32], - [109.9118, 74.2211], - [109.5227, 74.0804], - [109.0802, 74.0457], - [108.5313, 73.7865], - [108.2123, 73.666], - [107.8541, 73.6193], - [107.5086, 73.613], - [106.9527, 73.6355], - [107.0652, 73.5537], - [107.0382, 73.4759], - [106.8787, 73.4357], - [106.8604, 73.3493], - [106.6448, 73.2942], - [106.3015, 73.3103], - [106.1042, 73.2461], - [105.9006, 73.0728], - [105.9139, 73.0037], - [105.7222, 72.8814], - [106.2199, 72.9661], - [106.2002, 73.093], - [106.3659, 73.1774], - [106.876, 73.1237], - [107.1398, 73.1538], - [107.767, 73.1469], - [108.0189, 73.2167], - [108.406, 73.0868], - [108.4391, 73.2438], - [108.6534, 73.3126], - [109.4174, 73.3934], - [109.4808, 73.4474], - [109.7491, 73.4305], - [110.0994, 73.495], - [110.4495, 73.6387], - [110.7638, 73.6558], - [110.8895, 73.7635], - [110.6736, 73.7924], - [110.2423, 73.6835], - [110.0984, 73.7033], - [109.6227, 73.6929], - [109.5422, 73.8212], - [109.8402, 73.8794], - [109.9891, 74.0023], - [110.2815, 74.0203], - [110.5485, 73.9924], - [110.9173, 73.9013], - [111.1987, 73.9464], - [111.2986, 73.8555], - [111.5303, 73.7812], - [111.8736, 73.726], - [112.3344, 73.6995], - [112.7946, 73.7149], - [113.1671, 73.8616], - [113.4558, 73.6259], - [113.2079, 73.4347], - [113.5522, 73.3261], - [113.8983, 73.3403], - [113.5992, 73.4255], - [113.5388, 73.5], - [114.2481, 73.601], - [114.5232, 73.5826], - [114.9142, 73.6048], - [115.3199, 73.7022], - [115.9916, 73.6923], - [116.2807, 73.6553], - [116.5154, 73.671], - [117.279, 73.5847], - [117.844, 73.5663], - [118.0184, 73.5828], - [118.6151, 73.5673], - [118.8084, 73.5375], - [118.9708, 73.4574], - [118.7739, 73.4293], - [118.5514, 73.4661], - [118.4137, 73.4118], - [118.3747, 73.2934], - [118.5285, 73.1794], - [119.115, 73.0918], - [119.4713, 73.0576], - [119.6951, 73.0019], - [119.883, 73.0223], - [120.159, 72.9947], - [120.6534, 72.9813], - [121.1203, 72.9307], - [121.6617, 72.9734], - [121.8415, 72.9467], - [122.2659, 72.9711], - [122.5536, 72.9227], - [122.7572, 72.9658], - [123.3166, 72.919], - [123.4431, 72.9906], - [123.4084, 73.0534], - [123.6457, 73.1184], - [123.5264, 73.1708], - [123.5798, 73.2704], - [123.3845, 73.3451], - [123.3707, 73.55], - [123.876, 73.6211], - [124.4804, 73.7502], - [124.8931, 73.7298], - [125.0214, 73.6198], - [125.3644, 73.5287], - [125.6227, 73.5425], - [125.7365, 73.4335], - [126.4301, 73.5043], - [126.4139, 73.3956], - [126.5143, 73.368], - [126.9773, 73.4186], - [127.0252, 73.5243], - [127.3654, 73.5146], - [127.476, 73.4423], - [127.9018, 73.4673], - [127.9573, 73.4053], - [128.1939, 73.3547], - [128.4501, 73.3551], - [128.4719, 73.2387], - [128.8735, 73.2062], - [128.9402, 73.1048], - [129.172, 73.1114], - [129.5748, 72.9356], - [129.4074, 72.8708], - [129.3084, 72.7189], - [129.5358, 72.6479], - [129.4366, 72.6008], - [128.8836, 72.5807], - [128.8208, 72.5216], - [128.9793, 72.4738], - [129.438, 72.4387], - [129.5563, 72.3159], - [129.412, 72.1851], - [129.5279, 72.1102], - [128.9964, 72.04], - [128.6898, 72.0576], - [128.5044, 71.9589], - [128.6788, 71.8672], - [128.7909, 71.7456], - [128.9852, 71.7238], - [129.2762, 71.8044], - [129.5164, 71.7336], - [128.9308, 71.6813], - [129.0663, 71.5914], - [129.2364, 71.5963], - [129.3374, 71.5223], - [129.4786, 71.2951], - [129.7566, 71.2147], - [129.8181, 71.1298], - [130.1737, 71.0694], - [130.3576, 70.9022], - [130.5689, 70.8991], - [130.6607, 70.8384], - [130.8781, 70.8829], - [130.9596, 70.748], - [131.1979, 70.7159], - [131.6138, 70.8765], - [131.7583, 70.9813], - [131.7707, 71.113], - [132.0134, 71.2856], - [132.1782, 71.5605], - [132.3442, 71.7201], - [132.5729, 71.8785], - [132.7866, 71.9123], - [132.783, 71.7651], - [132.9639, 71.7335], - [133.1992, 71.5812], - [133.5462, 71.4644], - [134.0721, 71.3776], - [134.3522, 71.3589], - [134.7146, 71.3904], - [134.95, 71.4929], - [135.6518, 71.6244], - [136.034, 71.6256], - [136.8549, 71.5261], - [137.1344, 71.4133], - [137.5405, 71.3637], - [137.5496, 71.2674], - [137.7565, 71.2744], - [138.0186, 71.2096], - [138.1924, 71.2352], - [137.942, 71.3621], - [138.0848, 71.4668], - [138.132, 71.567], - [138.4555, 71.5802], - [138.8568, 71.629], - [139.1388, 71.5766], - [139.1719, 71.4218], - [139.4456, 71.4227], - [139.4906, 71.487], - [139.7951, 71.447], - [139.9991, 71.5225], - [139.7735, 71.6872], - [139.7965, 71.7688], - [139.7123, 71.9167], - [139.7838, 72.0464], - [140.0023, 72.167], - [139.6186, 72.2173], - [139.447, 72.1425], - [139.2088, 72.1745], - [139.1692, 72.2644], - [139.2778, 72.3561], - [139.6177, 72.4867], - [140.4905, 72.4672], - [140.7308, 72.4903], - [141.2352, 72.5857], - [140.7541, 72.8319], - [140.7597, 72.8819], - [141.3125, 72.8545], - [141.7391, 72.7441], - [141.9703, 72.7219], - [142.6836, 72.6983], - [143.5535, 72.6903], - [144.0955, 72.6602], - [144.8293, 72.5939], - [145.6118, 72.544], - [146.0973, 72.484], - [146.8158, 72.3702], - [147.0861, 72.296], - [147.4572, 72.3274], - [148.4666, 72.318], - [149.2062, 72.223], - [149.5834, 72.1491], - [149.9519, 72.0162], - [150.0828, 71.9188], - [150.0633, 71.8286], - [149.7071, 71.7515], - [149.4429, 71.8904], - [149.02, 71.7127], - [149.4641, 71.6471], - [149.9313, 71.6704], - [150.16, 71.6068], - [150.2902, 71.5137], - [150.7026, 71.493], - [150.7784, 71.3579], - [151.1089, 71.3938], - [151.657, 71.2911], - [151.8701, 71.1238], - [152.1391, 70.9951], - [151.9304, 70.9746], - [152.1207, 70.8954], - [152.5646, 70.819], - [152.9954, 70.8228], - [153.8787, 70.8808], - [154.3551, 70.953], - [155.4458, 71.0373], - [155.5591, 71.0627], - [156.1701, 71.084], - [156.5825, 71.0737], - [156.9101, 71.0907], - [157.341, 71.0699], - [158.1531, 70.9999], - [158.7075, 70.9235], - [159.1325, 70.8348], - [159.5835, 70.6999], - [159.8886, 70.5427], - [160.1153, 70.2662], - [159.9534, 70.1075], - [159.8858, 69.9733], - [159.6934, 69.8714], - [159.869, 69.7734], - [160.0706, 69.7135], - [160.9818, 69.6165], - [160.9713, 69.446], - [161.0406, 69.261], - [161.1757, 69.3112], - [161.0972, 69.4499], - [161.3955, 69.5305], - [161.3664, 69.3618], - [161.6181, 69.3941], - [161.8341, 69.4974], - [162.0429, 69.5181], - [162.2143, 69.6163], - [162.6347, 69.6601], - [162.8842, 69.6356], - [163.1901, 69.6924], - [163.4842, 69.6701], - [163.8542, 69.6814], - [164.0111, 69.7469], - [164.4218, 69.6109], - [164.9025, 69.5533], - [165.2011, 69.5835], - [165.8348, 69.5611], - [166.2381, 69.5005], - [166.964, 69.4741], - [167.203, 69.5459], - [167.7521, 69.764], - [167.9501, 69.7076], - [167.9635, 69.6386], - [168.2799, 69.5461], - [168.2357, 69.2867], - [168.3554, 69.2079], - [168.737, 69.1994], - [169.17, 69.0833], - [169.412, 69.0569], - [169.4806, 68.9345], - [169.4418, 68.8586], - [169.6355, 68.7599], - [170.3615, 68.8062], - [170.5015, 68.8665], - [170.8645, 68.9522], - [171.0659, 69.0503], - [171.0256, 69.14], - [170.8965, 69.1739], - [170.9404, 69.2871], - [170.7883, 69.3805], - [170.7898, 69.457], - [170.5768, 69.5944], - [170.248, 69.5755], - [170.2568, 69.6766], - [170.6273, 69.751], - [170.5531, 69.906], - [170.616, 70.0401], - [170.9917, 70.0885], - [171.472, 70.0506], - [172.0094, 69.9778], - [172.5297, 69.9318], - [172.7625, 69.9642], - [172.8378, 69.9012], - [173.1273, 69.8357], - [173.2705, 69.9063], - [173.4896, 69.935], - [173.7727, 69.8072], - [174.0837, 69.8664], - [174.2605, 69.8713], - [174.8055, 69.8381], - [175.1167, 69.8375], - [175.8142, 69.8781], - [176.1268, 69.8733], - [176.364, 69.7574], - [176.8905, 69.637], - [177.4747, 69.585], - [177.8596, 69.4884], - [178.2875, 69.4207], - [178.4033, 69.4489], - [178.8209, 69.3861], - [179.4197, 69.223], - [180, 68.9799], - [180, 68.8], - [180, 67.7], - [180, 66.6], - [180, 65.5], - [180, 65.0274], - [179.8506, 64.9885], - [179.5337, 64.7998], - [179.133, 64.7517], - [178.8113, 64.6428], - [178.764, 64.6691], - [178.3293, 64.6373], - [178.1657, 64.6684], - [177.7199, 64.6882], - [177.4883, 64.8168], - [177.5153, 64.9051], - [177.2802, 64.9081], - [177.2849, 64.8258], - [177.1818, 64.762], - [176.9617, 64.8232], - [176.676, 64.8504], - [176.5615, 64.7959], - [176.2217, 64.8714], - [176.325, 64.7601], - [176.5218, 64.6628], - [176.8769, 64.5931], - [177.0819, 64.7024], - [177.3713, 64.7469], - [177.534, 64.7151], - [177.4224, 64.5551], - [177.4871, 64.4206], - [177.8132, 64.2517], - [178.0581, 64.1936], - [178.3562, 64.3287], - [178.6678, 63.994], - [178.7983, 63.6855], - [178.841, 63.4838], - [179.0985, 63.2621], - [179.329, 63.191], - [179.452, 63.1078], - [179.2663, 62.9937], - [179.3482, 62.8746], - [179.5187, 62.86], - [179.6284, 62.6815], - [179.5804, 62.6097], - [179.4503, 62.5727], - [179.3644, 62.4687], - [179.2032, 62.48], - [179.1118, 62.4143], - [179.173, 62.3068], - [178.4488, 62.4267], - [178.0799, 62.5209], - [177.5627, 62.553], - [177.1239, 62.5317], - [176.9363, 62.5046], - [176.5441, 62.408], - [176.241, 62.2752], - [176, 62.2475], - [175.5728, 62.1521], - [175.2702, 62.0259], - [174.9239, 61.9461], - [174.6079, 61.8245], - [174.3167, 61.801], - [174.1669, 61.8353], - [174.0304, 61.8132], - [174.0053, 61.7013], - [173.8239, 61.67], - [173.6385, 61.7402], - [173.5031, 61.7057], - [173.4919, 61.5411], - [173.3634, 61.5383], - [173.2633, 61.4294], - [173.128, 61.3863], - [172.9092, 61.4635], - [172.7454, 61.3962], - [172.9393, 61.337], - [172.9721, 61.282], - [172.7765, 61.2418], - [172.585, 61.1637], - [172.4404, 61.141], - [172.4081, 61.0086], - [172.1703, 61.0244], - [172.2202, 60.9467], - [172.0995, 60.8719], - [171.894, 60.8171], - [171.7197, 60.8338], - [171.3423, 60.6129], - [171.1486, 60.5479], - [170.8481, 60.4761], - [170.7979, 60.42], - [170.6585, 60.4096], - [170.7012, 60.3157], - [170.4959, 60.2162], - [170.4307, 59.9695], - [170.2911, 59.9276], - [170.1623, 60.0143], - [169.9702, 60.0692], - [169.8748, 60.2324], - [169.7873, 60.2647], - [169.7402, 60.3956], - [169.4211, 60.5129], - [169.1049, 60.5582], - [168.6334, 60.5554], - [168.5258, 60.5973], - [168.3724, 60.5988], - [168.0975, 60.5619], - [167.7652, 60.4681], - [167.4824, 60.4257], - [167.3646, 60.3795], - [166.9854, 60.3026], - [166.7363, 60.1064], - [166.4103, 59.9311], - [166.2785, 59.8186], - [166.086, 59.816], - [166.178, 59.9828], - [166.1999, 60.1247], - [166.3024, 60.1922], - [166.2746, 60.3342], - [166.3746, 60.4078], - [166.24, 60.4682], - [166.0951, 60.4303], - [166.0108, 60.3623], - [165.7543, 60.2662], - [165.3415, 60.1534], - [165.1787, 60.075], - [165.2366, 59.9974], - [165.1061, 59.864], - [164.8474, 59.7851], - [164.8012, 59.9195], - [164.7165, 60.0018], - [164.4529, 60.1081], - [164.3274, 60.0729], - [164.319, 59.9865], - [164.1992, 59.9666], - [164.0324, 60.0217], - [163.8738, 60.0036], - [163.7004, 59.8739], - [163.4775, 59.8609], - [163.3914, 59.7775], - [163.4281, 59.6244], - [163.2326, 59.5786], - [163.207, 59.4909], - [163.3137, 59.4286], - [163.3433, 59.2856], - [163.0864, 59.2484], - [163.1048, 59.1794], - [162.9148, 59.1156], - [163.0095, 59.0204], - [163.0056, 58.9416], - [162.8998, 58.9164], - [162.7988, 58.8296], - [162.5576, 58.7466], - [162.4495, 58.6776], - [162.1595, 58.3841], - [162.0149, 58.1355], - [162.0021, 58.0129], - [162.1395, 57.8432], - [162.386, 57.7798], - [162.5164, 57.7739], - [162.5078, 57.8627], - [162.5656, 57.9297], - [162.8492, 57.9018], - [163.0386, 57.8188], - [163.2092, 57.8156], - [163.2988, 57.7315], - [163.1131, 57.489], - [162.9169, 57.4308], - [162.7876, 57.3412], - [162.7797, 57.1848], - [162.8613, 57.0187], - [162.79, 56.787], - [162.9399, 56.6955], - [163.2046, 56.7351], - [163.2682, 56.6939], - [163.2449, 56.613], - [163.2764, 56.4827], - [163.3617, 56.3048], - [163.3694, 56.1851], - [163.2055, 56.1418], - [163.0613, 56.0235], - [162.8294, 56.0639], - [162.7578, 56.1499], - [162.5955, 56.2329], - [162.215, 56.1461], - [162.0919, 56.0821], - [161.9145, 55.7871], - [161.7872, 55.6455], - [161.7507, 55.5631], - [161.7372, 55.3612], - [161.7937, 55.1841], - [162.1535, 54.8465], - [162.1218, 54.7523], - [161.8276, 54.5996], - [161.729, 54.5115], - [161.4743, 54.5147], - [161.2784, 54.4855], - [161.1994, 54.5773], - [160.9669, 54.5864], - [160.7024, 54.5144], - [160.3958, 54.3693], - [160.2801, 54.2802], - [160.0978, 54.2004], - [159.9777, 54.0906], - [159.8553, 53.8393], - [159.8451, 53.7144], - [159.9593, 53.5734], - [159.9643, 53.4926], - [159.8418, 53.4536], - [159.8466, 53.3963], - [159.9752, 53.3136], - [159.9062, 53.2446], - [160.0421, 53.2025], - [160.0222, 53.0876], - [159.6169, 53.2495], - [159.4741, 53.2186], - [159.3858, 53.1456], - [159.2453, 53.1455], - [158.9012, 53.0168], - [158.7123, 52.8776], - [158.6409, 53.0219], - [158.5786, 53.0556], - [158.4389, 53.0114], - [158.4339, 52.8879], - [158.6447, 52.8372], - [158.4805, 52.7619], - [158.5972, 52.6967], - [158.5182, 52.551], - [158.5069, 52.4266], - [158.5722, 52.3743], - [158.5258, 52.2664], - [158.3811, 52.2016], - [158.2998, 52.0956], - [158.2725, 51.9552], - [158.0358, 51.7898], - [157.8924, 51.6232], - [157.6921, 51.5533], - [157.5001, 51.4504], - [157.4675, 51.3599], - [157.3883, 51.3552], - [157.2325, 51.2163], - [157.0907, 51.1501], - [156.7519, 50.9304], - [156.7605, 51.0705], - [156.7176, 51.1765], - [156.645, 51.2497], - [156.5413, 51.289], - [156.4785, 51.5278], - [156.5022, 51.9087], - [156.4622, 52.1266], - [156.3724, 52.3899], - [156.1675, 52.7695], - [156.1237, 52.9221], - [156.0717, 53.2677], - [155.9055, 53.9508], - [155.803, 54.2174], - [155.6824, 54.5991], - [155.5514, 55.1924], - [155.5466, 55.3885], - [155.6144, 55.6081], - [155.6626, 55.9946], - [155.7178, 56.0817], - [155.9887, 56.6876], - [156.1172, 56.8155], - [156.4715, 56.9555], - [156.5572, 57.0539], - [156.7802, 57.159], - [156.9771, 57.3858], - [157.0084, 57.4539], - [156.9623, 57.608], - [156.8191, 57.7305], - [156.8553, 57.7996], - [157.0107, 57.8585], - [157.0821, 57.7953], - [157.3272, 57.7701], - [157.4541, 57.796], - [157.5799, 57.8722], - [157.5772, 57.9309], - [157.6781, 58.0128], - [157.9324, 57.9724], - [158.1002, 57.9956], - [158.3542, 58.0824], - [158.7275, 58.2894], - [159.0855, 58.433], - [159.2391, 58.5689], - [159.3477, 58.6127], - [159.7363, 58.87], - [159.7262, 58.9899], - [159.925, 59.1186], - [160.0497, 59.2267], - [160.4166, 59.4043], - [160.5151, 59.5638], - [160.8959, 59.625], - [161.0597, 59.743], - [161.2849, 59.8471], - [161.5008, 60.0396], - [161.7767, 60.1201], - [161.9509, 60.2289], - [161.9104, 60.3102], - [161.9555, 60.4158], - [162.3911, 60.5319], - [162.5256, 60.6027], - [162.714, 60.6005], - [162.904, 60.7461], - [163.1893, 60.7996], - [163.3992, 60.8026], - [163.7844, 60.9182], - [163.5621, 60.983], - [163.6316, 61.1062], - [163.9297, 61.2141], - [164.0391, 61.3541], - [163.9339, 61.4325], - [163.7576, 61.4621], - [163.8586, 61.5631], - [163.8788, 61.6439], - [164.0654, 61.679], - [164.1066, 61.8895], - [164.0932, 62.0926], - [164.1724, 62.2704], - [164.4552, 62.3563], - [164.541, 62.4395], - [164.7536, 62.4518], - [164.9696, 62.4147], - [165.1107, 62.4839], - [164.7329, 62.5685], - [164.607, 62.6749], - [164.377, 62.6841], - [164.0527, 62.6456], - [163.9305, 62.5751], - [163.7954, 62.5992], - [163.3364, 62.5311], - [163.2051, 62.4333], - [163.2452, 62.3092], - [163.1121, 62.2287], - [163.1489, 62.028], - [163.0741, 61.961], - [163.0106, 61.781], - [163.2958, 61.7213], - [163.3342, 61.656], - [163.1184, 61.6125], - [162.9435, 61.6379], - [162.8456, 61.7088], - [162.6358, 61.6598], - [162.436, 61.6698], - [162.3375, 61.5826], - [162.0315, 61.4026], - [161.7905, 61.2997], - [161.6015, 61.254], - [161.3142, 61.0563], - [161.1486, 60.9642], - [160.9261, 60.8912], - [160.8046, 60.7185], - [160.6199, 60.7124], - [160.3253, 60.6501], - [160.2092, 60.825], - [160.4354, 60.9919], - [160.3794, 61.0456], - [160.2056, 61.0397], - [159.9555, 60.9417], - [159.9382, 61.0226], - [160.0079, 61.1095], - [159.9807, 61.1754], - [159.7951, 61.2584], - [159.9101, 61.2909], - [160.1026, 61.4076], - [160.1298, 61.4958], - [160.235, 61.5153], - [160.3266, 61.641], - [160.3159, 61.7013], - [160.4238, 61.7635], - [160.4051, 61.8812], - [160.304, 61.9359], - [160.048, 61.8406], - [159.9015, 61.7079], - [159.5294, 61.6893], - [159.541, 61.7761], - [159.3568, 61.8202], - [159.3215, 61.8978], - [159.152, 61.9205], - [158.9035, 61.8982], - [158.85, 61.8144], - [158.7095, 61.8351], - [158.2571, 61.8152], - [158.0465, 61.7252], - [157.8307, 61.779], - [157.5653, 61.789], - [157.4464, 61.7692], - [157.374, 61.6898], - [157.057, 61.6459], - [156.9742, 61.5627], - [156.8283, 61.5123], - [156.6845, 61.5132], - [156.6327, 61.2803], - [156.667, 61.2143], - [156.3966, 61.1489], - [156.0542, 60.9753], - [155.9205, 60.9271], - [155.9201, 60.7456], - [155.7233, 60.6498], - [155.5771, 60.6213], - [155.3344, 60.5211], - [155.1679, 60.4166], - [154.9861, 60.37], - [154.8007, 60.2819], - [154.5786, 60.0962], - [154.4151, 60.0675], - [154.4871, 59.881], - [154.2232, 59.874], - [154.1898, 59.5748], - [154.0876, 59.5031], - [154.1437, 59.4572], - [154.3069, 59.4437], - [154.4566, 59.5217], - [154.6784, 59.5215], - [154.7761, 59.4709], - [155.0104, 59.4774], - [155.0242, 59.4318], - [155.1888, 59.3646], - [155.2167, 59.2993], - [155.1531, 59.205], - [155.007, 59.1767], - [154.83, 59.1926], - [154.754, 59.1365], - [154.5951, 59.1957], - [154.4385, 59.2128], - [154.3288, 59.1863], - [154.3009, 59.0876], - [154.1645, 59.0891], - [154.0432, 59.046], - [153.9403, 59.0668], - [153.8267, 59.169], - [153.5999, 59.1945], - [153.3904, 59.242], - [153.3352, 59.0868], - [153.1151, 59.0881], - [153.0142, 59.062], - [152.871, 58.92], - [152.7354, 58.9092], - [152.3708, 59.0227], - [152.1473, 58.9726], - [152.1506, 58.9141], - [152.0019, 58.8788], - [151.8152, 58.876], - [151.6661, 58.8434], - [151.3649, 58.8615], - [151.1643, 59.0351], - [151.2163, 59.0831], - [151.4289, 59.1645], - [151.6579, 59.1588], - [151.7727, 59.129], - [152.0835, 59.1451], - [152.2831, 59.2441], - [152.1285, 59.3005], - [152.014, 59.2663], - [151.772, 59.3577], - [151.6492, 59.4674], - [151.3328, 59.5549], - [151.0553, 59.5791], - [150.9138, 59.5612], - [150.9145, 59.4419], - [150.7811, 59.4349], - [150.7631, 59.5642], - [150.5838, 59.5441], - [150.4528, 59.6154], - [150.1486, 59.655], - [149.6823, 59.7532], - [149.5048, 59.7522], - [149.3132, 59.7094], - [149.0891, 59.6291], - [149.0969, 59.4873], - [148.9439, 59.4553], - [148.76, 59.4804], - [148.7318, 59.3657], - [148.9805, 59.3757], - [148.9613, 59.2496], - [148.8106, 59.2738], - [148.5789, 59.2419], - [148.456, 59.2823], - [148.4096, 59.3724], - [148.21, 59.4086], - [147.8501, 59.3751], - [147.8494, 59.2937], - [147.6491, 59.3016], - [147.4858, 59.2395], - [147.2897, 59.3295], - [147.1684, 59.3194], - [147.0125, 59.3677], - [146.8618, 59.3623], - [146.6361, 59.4406], - [146.4515, 59.4627], - [146.3053, 59.3896], - [146.3048, 59.2748], - [146.0414, 59.141], - [145.8315, 59.2473], - [145.9671, 59.4007], - [145.5276, 59.4153], - [145.3435, 59.3846], - [145.2772, 59.4181], - [144.9901, 59.3657], - [144.2914, 59.3729], - [144.0429, 59.4007], - [143.7259, 59.3777], - [143.468, 59.3209], - [143.2457, 59.3593], - [142.4727, 59.2037], - [142.1862, 59.089], - [141.977, 58.9603], - [141.7339, 58.7207], - [141.5449, 58.6012], - [141.1874, 58.4677], - [140.986, 58.419], - [140.7734, 58.2993], - [140.6541, 58.1649], - [140.5011, 57.9109], - [140.4921, 57.8483], - [140.327, 57.7794], - [140.053, 57.7291], - [139.8772, 57.6015], - [139.8186, 57.509], - [139.6079, 57.4586], - [139.5179, 57.3505], - [139.4124, 57.2964], - [139.1786, 57.2646], - [138.9461, 57.1417], - [138.9274, 57.0544], - [138.6177, 56.9544], - [138.5493, 56.8431], - [138.4361, 56.841], - [138.3951, 56.7368], - [138.277, 56.6866], - [138.1057, 56.5334], - [138.1595, 56.4545], - [138.0331, 56.3806], - [137.9135, 56.367], - [137.8315, 56.2298], - [137.6806, 56.1235], - [137.5912, 56.1212], - [137.4219, 56.0404], - [137.4209, 55.97], - [137.3111, 55.9626], - [137.0881, 55.8471], - [137.0515, 55.7824], - [136.9083, 55.7659], - [136.8079, 55.6965], - [136.5284, 55.5744], - [136.3619, 55.5241], - [136.2209, 55.3533], - [135.8752, 55.1681], - [135.6965, 55.1058], - [135.5513, 55.0859], - [135.2996, 54.9469], - [135.1824, 54.8521], - [135.2829, 54.7205], - [135.7019, 54.6412], - [135.7502, 54.5554], - [135.9743, 54.5599], - [136.23, 54.6066], - [136.505, 54.5829], - [136.809, 54.6335], - [136.8353, 54.5381], - [136.7498, 54.406], - [136.7551, 54.288], - [136.8079, 54.2347], - [136.7888, 54.057], - [136.7018, 54.015], - [136.6783, 53.9181], - [136.715, 53.7918], - [136.8039, 53.7612], - [136.9515, 53.8509], - [137.1418, 53.8105], - [137.2942, 54.0202], - [137.2043, 54.0344], - [137.0942, 54.1384], - [137.3235, 54.2694], - [137.455, 54.3111], - [137.7363, 54.2946], - [137.5048, 54.1335], - [137.345, 54.1274], - [137.3027, 54.0565], - [137.4481, 54.0342], - [137.5351, 53.9771], - [137.7738, 53.9569], - [137.8103, 53.9038], - [137.666, 53.868], - [137.6103, 53.7788], - [137.4787, 53.6716], - [137.2699, 53.6272], - [137.2392, 53.5545], - [137.39, 53.5256], - [137.6998, 53.5441], - [137.9641, 53.5791], - [138.302, 53.7298], - [138.3701, 53.9005], - [138.5753, 53.99], - [138.5715, 53.8075], - [138.3348, 53.6211], - [138.2725, 53.5404], - [138.3584, 53.5003], - [138.4928, 53.5343], - [138.6213, 53.6514], - [138.7668, 53.9846], - [138.7748, 54.0752], - [138.7225, 54.1394], - [138.7588, 54.2912], - [139.0275, 54.2141], - [139.2775, 54.1758], - [139.443, 54.1916], - [139.7307, 54.2934], - [139.7789, 54.2106], - [139.9707, 54.1149], - [140.1968, 54.0471], - [140.206, 53.9945], - [140.3187, 53.9474], - [140.248, 53.8705], - [140.3329, 53.7813], - [140.517, 53.7054], - [140.6072, 53.6101], - [140.9079, 53.5091], - [140.9017, 53.4295], - [141.0805, 53.3727], - [141.1876, 53.3104], - [141.4119, 53.2893], - [141.3649, 53.2417], - [141.428, 53.1546], - [141.3632, 53.0809], - [141.1388, 52.9889], - [140.8756, 53.0816], - [140.9549, 52.9381], - [141.2057, 52.8502], - [141.1652, 52.803], - [141.2448, 52.7308], - [141.2644, 52.5926], - [141.2187, 52.512], - [141.1122, 52.4831], - [141.1224, 52.3919], - [141.4112, 52.2117], - [141.4217, 52.147], - [141.3333, 52.0955], - [141.3431, 51.9881], - [141.4182, 51.9513], - [141.1812, 51.8436], - [141.0995, 51.7112], - [140.874, 51.6258], - [140.893, 51.5194], - [140.7932, 51.4866], - [140.7983, 51.3359], - [140.6704, 51.3232], - [140.6449, 51.1174], - [140.6786, 51.0538], - [140.6349, 50.9475], - [140.561, 50.9243], - [140.4351, 50.7128], - [140.491, 50.6258], - [140.4219, 50.5446], - [140.5265, 50.338], - [140.4979, 50.2067], - [140.5445, 50.1159], - [140.6863, 50.0888], - [140.4916, 49.9944], - [140.4083, 49.8662], - [140.5312, 49.7766], - [140.4981, 49.6984], - [140.5435, 49.5664], - [140.42, 49.4129], - [140.4211, 49.3081], - [140.3101, 49.2077], - [140.3759, 48.9705], - [140.3191, 48.8868], - [140.2355, 48.8413], - [140.1931, 48.7608], - [140.1663, 48.4426], - [140.0335, 48.3353], - [139.9209, 48.3039], - [139.707, 48.1497], - [139.5379, 47.9648], - [139.4158, 47.9221], - [139.2884, 47.8131], - [139.0639, 47.4736], - [138.9923, 47.3427], - [138.8509, 47.2724], - [138.6909, 47.1178], - [138.5971, 47.0581], - [138.5046, 46.9257], - [138.5063, 46.8791], - [138.3887, 46.7464], - [138.3419, 46.5268], - [138.1902, 46.4479], - [138.1248, 46.3456], - [138.1118, 46.2351], - [137.7741, 45.9353], - [137.6905, 45.7996], - [137.4916, 45.6633], - [137.4191, 45.6415], - [137.145, 45.3671], - [136.8034, 45.1894], - [136.7603, 45.0848], - [136.6339, 45.0264], - [136.4749, 44.835], - [136.351, 44.7875], - [136.3316, 44.7107], - [136.2343, 44.6631], - [136.1534, 44.496], - [135.8856, 44.4035], - [135.8019, 44.2658], - [135.6594, 44.173], - [135.6351, 44.0309], - [135.5321, 43.9966], - [135.4838, 43.8191], - [135.4232, 43.7539], - [135.2802, 43.6828], - [135.1492, 43.5086], - [134.8543, 43.3892], - [134.7934, 43.336], - [134.3469, 43.1094], - [134.1882, 43.068], - [133.9255, 42.8678], - [133.887, 42.9067], - [133.7515, 42.8405], - [133.6565, 42.8587], - [133.4796, 42.7927], - [133.2341, 42.7485], - [133.1692, 42.69], - [133.0615, 42.685], - [133.0542, 42.762], - [132.991, 42.8061], - [132.8146, 42.7609], - [132.6979, 42.8494], - [132.5813, 42.8347], - [132.4495, 42.929], - [132.3638, 42.8963], - [132.3012, 42.9445], - [132.3236, 43.1112], - [132.3803, 43.2152], - [132.2634, 43.2588], - [132.1213, 43.1865], - [131.9698, 43.0742], - [131.8679, 43.1013], - [131.9241, 43.2034], - [132.0044, 43.2338], - [132.0727, 43.3104], - [131.7612, 43.3146], - [131.7588, 43.1924], - [131.6084, 43.0763], - [131.5774, 43.0101], - [131.4489, 42.9199], - [131.4155, 42.8426], - [131.2668, 42.7751], - [131.2523, 42.6872], - [131.1675, 42.5681], - [131.1135, 42.665], - [130.9845, 42.6431], - [130.9204, 42.5923], - [130.7258, 42.6954], - [130.66, 42.6617], - [130.8378, 42.5608], - [130.7416, 42.3446], - [130.6457, 42.4264], - [130.6423, 42.4278], - [130.5656, 42.5065], - [130.6348, 42.6], - [130.5923, 42.6713], - [130.4651, 42.6883], - [130.4667, 42.7726], - [130.6674, 42.8481], - [130.8917, 42.8529], - [131.0182, 42.9154], - [131.1444, 42.9398], - [131.1025, 43.0223], - [131.218, 43.1478], - [131.2062, 43.2371], - [131.2552, 43.2651], - [131.3141, 43.3925], - [131.2759, 43.4956], - [131.2003, 43.5327], - [131.233, 43.6358], - [131.2111, 43.787], - [131.2543, 43.8941], - [131.2511, 44.0134], - [131.3107, 44.0466], - [131.1115, 44.7101], - [130.9872, 44.8677], - [131.2943, 44.9289], - [131.3532, 44.9827], - [131.4645, 44.9635], - [131.6851, 45.1156], - [131.6843, 45.2162], - [131.7885, 45.2459], - [131.9152, 45.34], - [131.9954, 45.2587], - [132.8516, 45.0632], - [132.9753, 45.0239], - [133.131, 45.1279], - [133.1068, 45.3149], - [133.1486, 45.4361], - [133.2188, 45.5166], - [133.3879, 45.5759], - [133.4832, 45.693], - [133.4678, 45.835], - [133.624, 45.9438], - [133.6727, 45.9403], - [133.7467, 46.0708], - [133.6897, 46.148], - [133.8577, 46.2111], - [133.9174, 46.2655], - [133.8784, 46.3338], - [133.9491, 46.401], - [133.8507, 46.4779], - [133.9087, 46.5676], - [134.0112, 46.6381], - [134.0522, 46.7764], - [134.0215, 46.8264], - [134.1481, 47.0962], - [134.2302, 47.1823], - [134.1572, 47.2591], - [134.1805, 47.3296], - [134.3279, 47.438], - [134.4937, 47.4468], - [134.568, 47.4779], - [134.7773, 47.7138], - [134.6786, 47.8192], - [134.6662, 47.8948], - [134.5498, 47.9913], - [134.6729, 48.1497], - [134.6766, 48.2341], - [134.8641, 48.3324], - [135.0728, 48.3913], - [135.0957, 48.4375], - [134.8954, 48.4425], - [134.8042, 48.3717], - [134.5335, 48.4178], - [134.3505, 48.3786], - [134.2393, 48.3819], - [134.0113, 48.31], - [133.8241, 48.2773], - [133.7018, 48.1924], - [133.5729, 48.182], - [133.5311, 48.1163], - [133.3021, 48.103], - [133.154, 48.137], - [133.0666, 48.117], - [132.9797, 48.0314], - [132.8826, 48.0023], - [132.6857, 47.8884], - [132.5705, 47.7211], - [132.3446, 47.7672], - [132.2426, 47.71], - [131.9991, 47.711], - [131.9706, 47.6716], - [131.7139, 47.7112], - [131.5904, 47.6608], - [131.5335, 47.7384], - [131.2929, 47.7377], - [131.0797, 47.6898], - [130.9703, 47.7258], - [130.9617, 47.828], - [130.8712, 47.9431], - [130.6664, 48.1051], - [130.7659, 48.1893], - [130.845, 48.3055], - [130.7477, 48.4044], - [130.7797, 48.4914], - [130.6778, 48.4937], - [130.6057, 48.5941], - [130.5366, 48.6275], - [130.6907, 48.8697], - [130.5347, 48.858], - [130.4446, 48.91], - [130.2691, 48.8657], - [130.021, 49.0211], - [129.9373, 49.0404], - [129.8616, 49.1728], - [129.7666, 49.1968], - [129.7304, 49.2883], - [129.5962, 49.2799], - [129.5399, 49.4066], - [129.4223, 49.4421], - [129.3791, 49.3671], - [129.2489, 49.3995], - [129.085, 49.3599], - [129.0136, 49.4573], - [128.8881, 49.4909], - [128.755, 49.4895], - [128.7229, 49.5664], - [128.5662, 49.6014], - [128.3899, 49.5901], - [128.1858, 49.5394], - [128.0014, 49.5923], - [127.8107, 49.5968], - [127.678, 49.6978], - [127.6598, 49.779], - [127.564, 49.7935], - [127.5018, 50.0567], - [127.5993, 50.1601], - [127.6032, 50.2394], - [127.4038, 50.282], - [127.3332, 50.3489], - [127.3646, 50.4384], - [127.2964, 50.4606], - [127.3707, 50.5812], - [127.1442, 50.9102], - [126.9229, 51.0618], - [126.9032, 51.1882], - [126.984, 51.3188], - [126.8993, 51.4096], - [126.7842, 51.4481], - [126.8424, 51.5331], - [126.6986, 51.5769], - [126.7404, 51.6483], - [126.5633, 51.8622], - [126.4625, 51.9485], - [126.4619, 52.036], - [126.5602, 52.1339], - [126.307, 52.2057], - [126.3381, 52.4121], - [126.208, 52.5332], - [125.9693, 52.6425], - [126.0618, 52.6734], - [125.8362, 52.8988], - [125.7369, 52.9498], - [125.6243, 53.0787], - [125.4714, 53.1054], - [125.164, 53.2013], - [125.0306, 53.2018], - [124.9058, 53.1241], - [124.7344, 53.1467], - [124.6884, 53.2054], - [124.5196, 53.2036], - [124.3716, 53.2627], - [124.2394, 53.3796], - [124.1243, 53.3484], - [123.8941, 53.4813], - [123.7028, 53.496], - [123.6719, 53.5281], - [123.4848, 53.4992], - [123.4542, 53.5365], - [123.2476, 53.5566], - [122.8268, 53.4572], - [122.3944, 53.4634], - [122.3463, 53.5055], - [122.097, 53.4232], - [121.9876, 53.4295], - [121.6865, 53.3889], - [121.5899, 53.3509], - [121.337, 53.3257], - [121.2345, 53.281], - [120.9569, 53.2985], - [120.8405, 53.2735], - [120.6905, 53.1748], - [120.6401, 53.104], - [120.5442, 53.0724], - [120.2971, 52.8699], - [120.0315, 52.7728], - [120.0722, 52.5871], - [120.1949, 52.5789], - [120.2864, 52.623], - [120.4438, 52.6411], - [120.7341, 52.54], - [120.6275, 52.324], - [120.7565, 52.2577], - [120.7685, 52.1118], - [120.659, 51.928], - [120.4022, 51.8338], - [120.362, 51.7891], - [120.0576, 51.6317], - [120.0522, 51.5536], - [119.9855, 51.5038], - [119.9447, 51.3667], - [119.7604, 51.2137], - [119.7647, 51.0989], - [119.5961, 50.9826], - [119.4913, 50.8789], - [119.5214, 50.7914], - [119.4347, 50.6857], - [119.2969, 50.5779], - [119.263, 50.4682], - [119.1585, 50.3602], - [119.3584, 50.359], - [119.3188, 50.2189], - [119.3474, 50.1678], - [119.0924, 49.9862], - [118.931, 49.9894], - [118.5705, 49.9297], - [118.4812, 49.8372], - [118.2374, 49.7388], - [118.0828, 49.6166], - [117.8664, 49.5921], - [117.8138, 49.5206], - [117.4771, 49.6328], - [117.2781, 49.6364], - [117.0449, 49.7068], - [116.7252, 49.8556] - ] + 105.5815853942313, + 29.71236446366261 ] ] - }, - properties: { - name: "俄罗斯", - name_en: "Russian Federation", - code: "RUS", - centroid: [87.172390186655, 62.25011493807239] - } + ] } - ] - }; + } + ] +} console.log(data); export default () => { useEffect(() => { const scene = new Scene({ id: 'map', map: new Map({ - center: [64.50191700000005, 41.52862851827109], + center: [105.58430314673814, + 29.711392515200814], style: 'light', - zoom: 5 + zoom: 10 }) }); // @ts-ignore window.scene = scene; const fill = new PolygonLayer({ - autoFit: true + autoFit: false }) .source(data) .shape('fill') .color('red') .style({ - opacity: 0.6, + opacity: 1, }); const line = new PolygonLayer({ @@ -5122,7 +281,7 @@ export default () => { }); scene.addLayer(fill); - // scene.addLayer(line); + scene.addLayer(line); // scene.on('zoom', () => { // console.log(scene.getZoom(), scene.getCenter()) // }) diff --git a/dev-demos/bugs/polygon/select.md b/dev-demos/bugs/polygon/select.md index 6ab899bd88..d38431837f 100644 --- a/dev-demos/bugs/polygon/select.md +++ b/dev-demos/bugs/polygon/select.md @@ -1,2 +1,2 @@ -### polygon +### select \ No newline at end of file diff --git a/dev-demos/features/line/demos/linearline.tsx b/dev-demos/features/line/demos/linearline.tsx index 241c895668..fefe0d7d56 100644 --- a/dev-demos/features/line/demos/linearline.tsx +++ b/dev-demos/features/line/demos/linearline.tsx @@ -54,13 +54,9 @@ export default () => { rampColors: { colors: [ '#FF4818', - '#F7B74A', - '#FFF598', - '#91EABC', - '#2EA9A1', '#206C7C', ], - weights: [0.1, 0.1, 0.1, 0.1, 0.1, 0.5], + positions: [0., 1.0], }, }); diff --git a/dev-demos/gallery/scale/map.md b/dev-demos/gallery/scale/map.md new file mode 100644 index 0000000000..e576fb807a --- /dev/null +++ b/dev-demos/gallery/scale/map.md @@ -0,0 +1,2 @@ +### 疫情达峰 + \ No newline at end of file diff --git a/dev-demos/gallery/scale/map.tsx b/dev-demos/gallery/scale/map.tsx new file mode 100644 index 0000000000..34b9920ba4 --- /dev/null +++ b/dev-demos/gallery/scale/map.tsx @@ -0,0 +1,112 @@ +import { PolygonLayer, LineLayer, PointLayer, Scene, Source } from '@antv/l7'; +import { GaodeMap } from '@antv/l7-maps'; +import React, { useEffect } from 'react'; + +export default () => { + useEffect(() => { + fetch( + 'https://mdn.alipayobjects.com/afts/file/A*7HqFT7he7KoAAAAAAAAAAAAADrd2AQ/12.20%20%E5%90%84%E7%9C%81%E4%BB%BD%E9%A6%96%E8%BD%AE%E6%84%9F%E6%9F%93%E9%AB%98%E5%B3%B0%E6%9C%9F%E9%A2%84%E6%B5%8B.json', + ) + .then((res) => res.json()) + .then((data) => { + const scene = new Scene({ + id: 'map', + map: new GaodeMap({ + pitch: 0, + style: 'dark', + center: [112, 37.8], + zoom: 3, + }), + }); + const chinaSource = new Source(data, { + parser: { + type: 'json', + geometry: 'geometry', + }, + }); + const layer = new PolygonLayer({ + autoFit: true, + }) + .source(chinaSource) + .scale('达峰进度条', { + type: 'quantize', + domain: [0, 100], + unknown: '#f7f4f9', + }) + .shape('fill') + .color('达峰进度条', [ + '#fee5d9', + '#fc9272', + '#fb6a4a', + '#de2d26', + '#a50f15', + ]) + .style({ + opacity: 1, + }); + const linelayer = new LineLayer({}) + .source(chinaSource) + .shape('line') + .color('#ddd') + .style({ + opacity: 1, + }); + + layer.on('inited', () => { + console.log(layer.getLegend('color')); + }); + const pointSource = new Source(data, { + parser: { + type: 'json', + geometry: 'center', + }, + }); + const nameLayer = new PointLayer() + .source(pointSource) + .size(12) + .shape('name', 'text') + .color('#525252') + .style({ + textAnchor: 'top', // 文本相对锚点的位置 center|left|right|top|bottom|top-left + textOffset: [0, 0], // 文本相对锚点的偏移量 [水平, 垂直] + // spacing: 2, // 字符间距 + // padding: [ 1, 1 ], // 文本包围盒 padding [水平,垂直],影响碰撞检测结果,避免相邻文本靠的太近 + stroke: '#fff', // 描边颜色 + strokeWidth: 1, // 描边宽度 + strokeOpacity: 1.0, + }); + + const textLayer = new PointLayer() + .source(pointSource) + .size(14) + .shape('达峰进度条', 'text') + .color('#e7298a') + .style({ + textAnchor: 'bottom', // 文本相对锚点的位置 center|left|right|top|bottom|top-left + textOffset: [0, -20], // 文本相对锚点的偏移量 [水平, 垂直] + // spacing: 2, // 字符间距 + // padding: [ 1, 1 ], // 文本包围盒 padding [水平,垂直],影响碰撞检测结果,避免相邻文本靠的太近 + stroke: '#fff', // 描边颜色 + strokeWidth: 2, // 描边宽度 + strokeOpacity: 1.0, + fontWeight: 800, + textAllowOverlap: true, + }); + + scene.addLayer(layer); + scene.addLayer(linelayer); + scene.addLayer(nameLayer); + scene.addLayer(textLayer); + }); + }, []); + + return ( +
+ ); +}; diff --git a/dev-demos/raster/demos/rasterFile.tsx b/dev-demos/raster/demos/rasterFile.tsx index 32d3cce5c2..5149b33e6d 100644 --- a/dev-demos/raster/demos/rasterFile.tsx +++ b/dev-demos/raster/demos/rasterFile.tsx @@ -42,7 +42,7 @@ export default () => { }, }) .style({ - opacity: 0.8, + opacity: 1.0, clampLow: false, clampHigh: false, domain: [100, 8000], diff --git a/dev-demos/raster/single/demos/light.tsx b/dev-demos/raster/single/demos/light.tsx index 0188b1f80b..588f1dcca0 100644 --- a/dev-demos/raster/single/demos/light.tsx +++ b/dev-demos/raster/single/demos/light.tsx @@ -59,10 +59,12 @@ export default () => { .style({ clampLow: false, clampHigh: false, - domain: [ 0, 90 ], + domain: [ 1, 90 ], nodataValue: 0, rampColors: { - colors: [ 'rgba(92,58,16,0)', 'rgba(92,58,16,0)', '#fabd08', '#f1e93f', '#f1ff8f', '#fcfff7' ], + type:'quantize', + colors:['#1b9e77','#d95f02','#7570b3','#e7298a','#66a61e','#e6ab02'], + // colors: [ 'rgba(92,58,16,0)', 'rgba(92,58,16,0)', '#fabd08', '#f1e93f', '#f1ff8f', '#fcfff7' ], positions: [ 0, 0.05, 0.1, 0.25, 0.5, 1.0 ] } }); diff --git a/dev-demos/raster/single/demos/rasterFile.tsx b/dev-demos/raster/single/demos/rasterFile.tsx index 14bb488a46..f01c8ead0f 100644 --- a/dev-demos/raster/single/demos/rasterFile.tsx +++ b/dev-demos/raster/single/demos/rasterFile.tsx @@ -1,7 +1,7 @@ // @ts-ignore import { RasterLayer, Scene } from '@antv/l7'; // @ts-ignore -import { GaodeMap } from '@antv/l7-maps'; +import { GaodeMap,Map } from '@antv/l7-maps'; import React, { useEffect } from 'react'; import * as GeoTIFF from 'geotiff'; @@ -17,7 +17,7 @@ export default () => { useEffect(() => { const scene = new Scene({ id: 'map', - map: new GaodeMap({ + map: new Map({ center: [121.268, 30.3628], zoom: 3, }), @@ -42,20 +42,14 @@ export default () => { }, }) .style({ - opacity: 0.8, + opacity: 1, clampLow: false, clampHigh: false, - domain: [100, 8000], + domain: [0, 10000], rampColors: { - colors: [ - '#FF4818', - '#F7B74A', - '#FFF598', - '#91EABC', - '#2EA9A1', - '#206C7C', - ].reverse(), - positions: [0, 0.2, 0.4, 0.6, 0.8, 1.0], + type:'custom', + colors: ['#b2182b','#d6604d','#f4a582','#fddbc7','#f7f7f7','#d1e5f0','#92c5de','#4393c3','#2166ac'], + positions: [0, 50, 200, 500, 2000, 3000, 4000, 5000, 8000,10000], }, }); diff --git a/dev-demos/tile/Raster/demos/rasterData.tsx b/dev-demos/tile/Raster/demos/rasterData.tsx index 44e7368686..0be1b8f0cf 100644 --- a/dev-demos/tile/Raster/demos/rasterData.tsx +++ b/dev-demos/tile/Raster/demos/rasterData.tsx @@ -2,59 +2,36 @@ import { RasterLayer, Scene, Source } from '@antv/l7'; import { Map } from '@antv/l7-maps'; import React, { useEffect } from 'react'; import * as GeoTIFF from 'geotiff'; - +// https://gee-community-catalog.org/projects/esrilc2020/ const colorList = [ '#419bdf', // Water - '#419bdf', - '#397d49', // Tree - '#397d49', + '#358221', // Tree '#88b053', // Grass - '#88b053', + '#7a87c6', // vegetation - '#7a87c6', + '#e49635', // Crops - '#e49635', + '#dfc35a', // shrub - '#dfc35a', - '#c4281b', // Built Area - '#c4281b', - '#a59b8f', // Bare ground - '#a59b8f', + '#ED022A', // Built Area - '#a8ebff', // Snow - '#a8ebff', - '#616161', // Clouds - '#616161', + '#EDE9E4', // Bare ground + + + '#F2FAFF', // Snow + + '#C8C8C8', // Clouds ]; const positions = [ - 0.0, - 0.1, - 0.1, - 0.2, - 0.2, - 0.3, - 0.3, - 0.4, - 0.4, - 0.5, - 0.5, - 0.6, - 0.6, - 0.7, - 0.7, - 0.8, - 0.8, - 0.9, - 0.9, - 1.0, + 1,2,3,4,5,6,7,8,9,10,11, ]; export default () => { useEffect(() => { @@ -93,6 +70,7 @@ export default () => { const width = image.getWidth(); const height = image.getHeight(); const values = await image.readRasters(); + console.log(values) return { rasterData: values[0], width, height }; }, }, @@ -100,13 +78,13 @@ export default () => { ); layer.source(tileSource).style({ - domain: [0.001, 11.001], + // domain: [0, 255], clampLow: false, rampColors: { + type:"cat", colors: colorList, positions, - // colors: ['#f00', '#f00'], - // positions: [0, 1] + }, }); diff --git a/packages/core/src/services/asset/ITextureService.ts b/packages/core/src/services/asset/ITextureService.ts index 6e00f6faad..acbfea9802 100644 --- a/packages/core/src/services/asset/ITextureService.ts +++ b/packages/core/src/services/asset/ITextureService.ts @@ -1,8 +1,8 @@ import { IColorRamp } from '@antv/l7-utils'; import { ITexture2D } from '../renderer/ITexture2D'; export interface ITextureService { - setColorTexture(texture: ITexture2D,colorRamp: IColorRamp):void; - getColorTexture(colorRamp: IColorRamp): ITexture2D + setColorTexture(texture: ITexture2D,colorRamp: IColorRamp,domain?:[number,number]):void; + getColorTexture(colorRamp: IColorRamp, domain?:[number,number]): ITexture2D destroy():void; } \ No newline at end of file diff --git a/packages/core/src/services/layer/ILayerService.ts b/packages/core/src/services/layer/ILayerService.ts index b55ed0a111..ef0d476e97 100644 --- a/packages/core/src/services/layer/ILayerService.ts +++ b/packages/core/src/services/layer/ILayerService.ts @@ -406,7 +406,7 @@ export interface ILayer { field: StyleAttributeField, values?: StyleAttributeOption, updateOptions?: Partial, - ): void; + ): boolean; setLayerPickService(layerPickService:ILayerPickService):void; init(): Promise; scale(field: string | number | IScaleOptions, cfg?: IScale): ILayer; diff --git a/packages/core/src/services/renderer/ITexture2D.ts b/packages/core/src/services/renderer/ITexture2D.ts index 8efd6cd7d0..c19e9ecb41 100644 --- a/packages/core/src/services/renderer/ITexture2D.ts +++ b/packages/core/src/services/renderer/ITexture2D.ts @@ -94,6 +94,7 @@ export interface ITexture2DInitializationOptions { export interface ITexture2D { get(): unknown; + getSize():[number,number]; update(options: any): void; bind(): void; resize(options: { width: number; height: number }): void; diff --git a/packages/layers/src/core/BaseLayer.ts b/packages/layers/src/core/BaseLayer.ts index a72c8f1f0f..aa90f710a0 100644 --- a/packages/layers/src/core/BaseLayer.ts +++ b/packages/layers/src/core/BaseLayer.ts @@ -57,7 +57,7 @@ import Source from '@antv/l7-source'; import { encodePickingColor, WorkerSourceMap } from '@antv/l7-utils'; import { EventEmitter } from 'eventemitter3'; import { Container } from 'inversify'; -import { isFunction, isObject, isUndefined } from 'lodash'; +import { isEqual, isFunction, isObject, isUndefined } from 'lodash'; import { BlendTypes } from '../utils/blend'; import { styleDataMapping } from '../utils/dataMappingStyle'; import { calculateData } from '../utils/layerData'; @@ -140,7 +140,7 @@ export default class BaseLayer // 每个 Layer 都有一个 public multiPassRenderer: IMultiPassRenderer; - // 注入插件集 + // 注入插件 public plugins: ILayerPlugin[]; public startInit: boolean = false; @@ -538,8 +538,13 @@ export default class BaseLayer values?: StyleAttributeOption, updateOptions?: Partial, ) { - this.updateStyleAttribute('filter', field, values, updateOptions); - this.dataState.dataSourceNeedUpdate = true; + const flag = this.updateStyleAttribute( + 'filter', + field, + values, + updateOptions, + ); + this.dataState.dataSourceNeedUpdate = flag; return this; } @@ -552,8 +557,13 @@ export default class BaseLayer field, values, }; - this.updateStyleAttribute('shape', field, values, updateOptions); - this.dataState.dataSourceNeedUpdate = true; // 通过数据更新驱动shape 更新 + const flag = this.updateStyleAttribute( + 'shape', + field, + values, + updateOptions, + ); + this.dataState.dataSourceNeedUpdate = flag; return this; } public label( @@ -1338,7 +1348,14 @@ export default class BaseLayer field: StyleAttributeField, values?: StyleAttributeOption, updateOptions?: Partial, - ) { + ): boolean { + // encode diff + const preAttribute = this.configService.getAttributeConfig(this.id) || {}; + // @ts-ignore + if (isEqual(preAttribute[type], { field, values })) { + return false; + } + // 存储 Attribute if ( [ @@ -1358,6 +1375,7 @@ export default class BaseLayer }, }); } + if (!this.startInit) { // 开始初始化执行 this.pendingStyleAttributes.push({ @@ -1385,6 +1403,7 @@ export default class BaseLayer updateOptions, ); } + return true; } public getLayerAttributeConfig(): Partial { diff --git a/packages/layers/src/core/TextureService.ts b/packages/layers/src/core/TextureService.ts index c13609483c..0c09387dbf 100644 --- a/packages/layers/src/core/TextureService.ts +++ b/packages/layers/src/core/TextureService.ts @@ -6,7 +6,14 @@ import { TYPES, } from '@antv/l7-core'; -import { generateColorRamp, IColorRamp } from '@antv/l7-utils'; +import { + generateCatRamp, + generateColorRamp, + generateCustomRamp, + generateLinearRamp, + generateQuantizeRamp, + IColorRamp, +} from '@antv/l7-utils'; export default class TextureService implements ITextureService { private layer: ILayer; @@ -20,21 +27,21 @@ export default class TextureService implements ITextureService { TYPES.IRendererService, ); } - public getColorTexture(colorRamp: IColorRamp) { + public getColorTexture(colorRamp: IColorRamp, domain?: [number, number]) { // TODO 支持传入图片 - const currentkey = this.getTextureKey(colorRamp); + const currentkey = this.getTextureKey(colorRamp, domain); if (this.key === currentkey) { return this.colorTexture; } else { - this.createColorTexture(colorRamp); + this.createColorTexture(colorRamp, domain); } this.key = currentkey; return this.colorTexture; } - public createColorTexture(colorRamp: IColorRamp) { + public createColorTexture(colorRamp: IColorRamp, domain?: [number, number]) { const { createTexture2D } = this.rendererService; - const imageData = generateColorRamp(colorRamp) as ImageData; + const imageData = this.getColorRampBar(colorRamp, domain) as ImageData; const texture = createTexture2D({ data: imageData.data, width: imageData.width, @@ -45,8 +52,12 @@ export default class TextureService implements ITextureService { return texture; } - public setColorTexture(texture: ITexture2D, colorRamp: IColorRamp) { - this.key = this.getTextureKey(colorRamp); + public setColorTexture( + texture: ITexture2D, + colorRamp: IColorRamp, + domain: [number, number], + ) { + this.key = this.getTextureKey(colorRamp, domain); this.colorTexture = texture; } @@ -54,7 +65,27 @@ export default class TextureService implements ITextureService { this.colorTexture?.destroy(); } - private getTextureKey(colorRamp: IColorRamp): string { - return `${colorRamp.colors.join('_')}_${colorRamp.positions.join('_')}`; + private getColorRampBar(colorRamp: IColorRamp, domain?: [number, number]) { + switch (colorRamp.type) { + case 'cat': + return generateCatRamp(colorRamp); + case 'quantize': + return generateQuantizeRamp(colorRamp); + case 'custom': + return generateCustomRamp(colorRamp, domain as [number, number]); + case 'linear': + return generateLinearRamp(colorRamp, domain as [number, number]); + default: + return generateColorRamp(colorRamp) as ImageData; + } + } + + private getTextureKey( + colorRamp: IColorRamp, + domain?: [number, number], + ): string { + return `${colorRamp.colors.join('_')}_${colorRamp?.positions?.join('_')}_${ + colorRamp.type + }_${domain?.join('_')}`; } } diff --git a/packages/layers/src/plugins/DataMappingPlugin.ts b/packages/layers/src/plugins/DataMappingPlugin.ts index fe615822e3..5507a90229 100644 --- a/packages/layers/src/plugins/DataMappingPlugin.ts +++ b/packages/layers/src/plugins/DataMappingPlugin.ts @@ -43,9 +43,7 @@ export default class DataMappingPlugin implements ILayerPlugin { return flag; } layer.dataState.dataMappingNeedUpdate = false; - this.generateMaping(layer, { styleAttributeService }); - - return true; + return this.generateMaping(layer, { styleAttributeService }); }, ); @@ -72,7 +70,6 @@ export default class DataMappingPlugin implements ILayerPlugin { return this.applyAttributeMapping(filter, record)[0]; }); } - if (attributesToRemapping.length) { // 过滤数据 const encodeData = this.mapping( @@ -83,6 +80,7 @@ export default class DataMappingPlugin implements ILayerPlugin { ); layer.setEncodedData(encodeData); } + // 处理文本更新,更新文字形状 // layer.emit('remapping', null); }); @@ -96,7 +94,6 @@ export default class DataMappingPlugin implements ILayerPlugin { const attributes = styleAttributeService.getLayerStyleAttributes() || []; const filter = styleAttributeService.getLayerStyleAttribute('filter'); const { dataArray } = layer.getSource().data; - let filterData = dataArray; // 数据过滤完 再执行数据映射 if (filter?.scale) { @@ -111,8 +108,13 @@ export default class DataMappingPlugin implements ILayerPlugin { filterData = layer.processData(filterData); const encodeData = this.mapping(layer, attributes, filterData, undefined); layer.setEncodedData(encodeData); + + if (dataArray.length === 0 && layer.encodeDataLength === 0) { + return false; + } // 对外暴露事件 layer.emit('dataUpdate', null); + return true; } private mapping( diff --git a/packages/layers/src/raster/models/raster.ts b/packages/layers/src/raster/models/raster.ts index 7c02251b8f..96023adb1e 100644 --- a/packages/layers/src/raster/models/raster.ts +++ b/packages/layers/src/raster/models/raster.ts @@ -5,7 +5,7 @@ import { IModel, ITexture2D, } from '@antv/l7-core'; -import { generateColorRamp, getMask, IColorRamp } from '@antv/l7-utils'; +import { getMask,getDefaultDomain } from '@antv/l7-utils'; import BaseModel from '../../core/BaseModel'; import { IRasterLayerStyleOptions } from '../../core/interface'; import { RasterImageTriangulation } from '../../core/triangulation'; @@ -14,22 +14,21 @@ import rasterVert from '../shaders/raster_2d_vert.glsl'; export default class RasterModel extends BaseModel { protected texture: ITexture2D; protected colorTexture: ITexture2D; - private rampColors: any; public getUninforms() { const { opacity = 1, clampLow = true, clampHigh = true, noDataValue = -9999999, - domain = [0, 1], + domain, rampColors, } = this.layer.getLayerConfig() as IRasterLayerStyleOptions; - this.colorTexture = this.layer.textureService.getColorTexture(rampColors); - + const newdomain = domain ||getDefaultDomain(rampColors) + this.colorTexture = this.layer.textureService.getColorTexture(rampColors,newdomain); return { u_opacity: opacity || 1, u_texture: this.texture, - u_domain: domain, + u_domain: newdomain, u_clampLow: clampLow, u_clampHigh: typeof clampHigh !== 'undefined' ? clampHigh : clampLow, u_noDataValue: noDataValue, @@ -56,7 +55,7 @@ export default class RasterModel extends BaseModel { } } - public async initModels(): Promise { + public async initModels(): Promise { const { mask = false, maskInside = true, @@ -122,18 +121,5 @@ export default class RasterModel extends BaseModel { }, }); } - - private updateColorTexture() { - const { createTexture2D } = this.rendererService; - const { - rampColors, - } = this.layer.getLayerConfig() as IRasterLayerStyleOptions; - const imageData = generateColorRamp(rampColors as IColorRamp); - this.colorTexture = createTexture2D({ - data: imageData.data, - width: imageData.width, - height: imageData.height, - flipY: false, - }); - } + } diff --git a/packages/layers/src/raster/models/rasterTerrainRgb.ts b/packages/layers/src/raster/models/rasterTerrainRgb.ts index 0d412d4956..1f9f9834b5 100644 --- a/packages/layers/src/raster/models/rasterTerrainRgb.ts +++ b/packages/layers/src/raster/models/rasterTerrainRgb.ts @@ -6,7 +6,7 @@ import { IModelUniform, ITexture2D, } from '@antv/l7-core'; - import { getMask } from '@antv/l7-utils'; + import { getMask,getDefaultDomain } from '@antv/l7-utils'; import BaseModel from '../../core/BaseModel'; import { IRasterLayerStyleOptions } from '../../core/interface'; import { RasterImageTriangulation } from '../../core/triangulation'; @@ -21,20 +21,21 @@ import { clampLow = true, clampHigh = true, noDataValue = -9999999, - domain = [0, 1], + domain, rampColors, colorTexture } = this.layer.getLayerConfig() as IRasterLayerStyleOptions; + const newdomain = domain ||getDefaultDomain(rampColors) let texture:ITexture2D | undefined = colorTexture; if(!colorTexture) { - texture = this.layer.textureService.getColorTexture(rampColors) as ITexture2D; + texture = this.layer.textureService.getColorTexture(rampColors,newdomain) as ITexture2D; } else { - this.layer.textureService.setColorTexture(colorTexture,rampColors) + this.layer.textureService.setColorTexture(colorTexture,rampColors,newdomain) } return { u_opacity: opacity || 1, u_texture: this.texture, - u_domain: domain, + u_domain: newdomain, u_clampLow: clampLow, u_clampHigh: typeof clampHigh !== 'undefined' ? clampHigh : clampLow, u_noDataValue: noDataValue, diff --git a/packages/layers/src/raster/models/rasterTile.ts b/packages/layers/src/raster/models/rasterTile.ts deleted file mode 100644 index c6ee298171..0000000000 --- a/packages/layers/src/raster/models/rasterTile.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { - AttributeType, - gl, - IEncodeFeature, - IModel, - ITexture2D, -} from '@antv/l7-core'; -import { getMask } from '@antv/l7-utils'; -import BaseModel from '../../core/BaseModel'; -import { IRasterLayerStyleOptions } from '../../core/interface'; -import { RasterImageTriangulation } from '../../core/triangulation'; -import rasterFrag from '../shaders/raster_2d_frag.glsl'; -import rasterVert from '../shaders/raster_2d_vert.glsl'; -export default class RasterModel extends BaseModel { - protected texture: ITexture2D; - public getUninforms() { - const { createTexture2D } = this.rendererService; - const { - colorTexture = createTexture2D({ - data: [], - width: 0, - height: 0, - flipY: false, - }), - opacity = 1, - clampLow = true, - clampHigh = true, - noDataValue = -9999999, - domain = [0, 1], - } = this.layer.getLayerConfig() as IRasterLayerStyleOptions; - - return { - u_opacity: opacity || 1, - u_texture: this.texture, - u_domain: domain, - u_clampLow: clampLow, - u_clampHigh: typeof clampHigh !== 'undefined' ? clampHigh : clampLow, - u_noDataValue: noDataValue, - u_colorTexture: colorTexture, - }; - } - - public async initModels(): Promise { - const { - mask = false, - maskInside = true, - } = this.layer.getLayerConfig() as IRasterLayerStyleOptions; - const source = this.layer.getSource(); - const { createTexture2D } = this.rendererService; - const parserDataItem = source.data.dataArray[0]; - this.texture = createTexture2D({ - data: parserDataItem.data, - width: parserDataItem.width, - height: parserDataItem.height, - format: gl.LUMINANCE, - type: gl.FLOAT, - }); - - const model = await this.layer - .buildLayerModel({ - moduleName: 'rasterTileImageData', - vertexShader: rasterVert, - fragmentShader: rasterFrag, - triangulation: RasterImageTriangulation, - depth: { enable: false }, - stencil: getMask(mask, maskInside), - }) - return [model] - } - - public async buildModels():Promise { - return await this.initModels(); - } - - public clearModels(): void { - this.texture?.destroy(); - } - - protected registerBuiltinAttributes() { - this.styleAttributeService.registerStyleAttribute({ - name: 'uv', - type: AttributeType.Attribute, - descriptor: { - name: 'a_Uv', - buffer: { - usage: gl.DYNAMIC_DRAW, - data: [], - type: gl.FLOAT, - }, - size: 2, - update: ( - feature: IEncodeFeature, - featureIdx: number, - vertex: number[], - ) => { - return [vertex[3], vertex[4]]; - }, - }, - }); - } -} \ No newline at end of file diff --git a/packages/layers/src/raster/shaders/raster_2d_frag.glsl b/packages/layers/src/raster/shaders/raster_2d_frag.glsl index bdff943965..74077afdc1 100644 --- a/packages/layers/src/raster/shaders/raster_2d_frag.glsl +++ b/packages/layers/src/raster/shaders/raster_2d_frag.glsl @@ -20,6 +20,7 @@ void main() { else if ((!u_clampLow && value < u_domain[0]) || (!u_clampHigh && value > u_domain[1])) gl_FragColor = vec4(0, 0, 0, 0); else { + float normalisedValue =(value - u_domain[0]) / (u_domain[1] -u_domain[0]); vec4 color = texture2D(u_colorTexture,vec2(normalisedValue, 0)); gl_FragColor = color; diff --git a/packages/layers/src/tile/tileFactory/RasterRGBTile.ts b/packages/layers/src/tile/tileFactory/RasterRGBTile.ts index b8df99ee13..e963dd0ec2 100644 --- a/packages/layers/src/tile/tileFactory/RasterRGBTile.ts +++ b/packages/layers/src/tile/tileFactory/RasterRGBTile.ts @@ -1,5 +1,4 @@ import { ILayerAttributesOption } from '@antv/l7-core'; -// import RasterLayer from './layers/RasterDataLayer'; import RasterLayer from '../../raster' import Tile from './Tile'; diff --git a/packages/layers/src/tile/tileFactory/RasterTile.ts b/packages/layers/src/tile/tileFactory/RasterTile.ts index 26c0eb1aad..eee1f4cbc9 100644 --- a/packages/layers/src/tile/tileFactory/RasterTile.ts +++ b/packages/layers/src/tile/tileFactory/RasterTile.ts @@ -2,6 +2,7 @@ import { ILayerAttributesOption, ITexture2D } from '@antv/l7-core'; import RasterLayer from '../../raster' import { IRasterLayerStyleOptions } from '../../core/interface'; import Tile from './Tile'; +import { getDefaultDomain } from '@antv/l7-utils'; const DEFAULT_COLOR_TEXTURE_OPTION = { positions: [0, 1], @@ -12,9 +13,10 @@ export default class RasterTile extends Tile { private colorTexture: ITexture2D; public async initTileLayer(): Promise { const attributes = this.parent.getLayerAttributeConfig(); - const layerOptions = this.getLayerOptions(); + const layerOptions = this.getLayerOptions() ; const sourceOptions = this.getSourceOption(); - this.colorTexture = this.parent.textureService.getColorTexture((layerOptions as unknown as IRasterLayerStyleOptions).rampColors) + const {rampColors,domain} = this.getLayerOptions() as unknown as IRasterLayerStyleOptions; + this.colorTexture = this.parent.textureService.getColorTexture(rampColors,domain); const layer = new RasterLayer({ ...layerOptions, colorTexture: this.colorTexture, @@ -57,8 +59,8 @@ export default class RasterTile extends Tile { */ public styleUpdate(...arg: any): void { - const { rampColors = DEFAULT_COLOR_TEXTURE_OPTION } = arg; - this.colorTexture = this.parent.textureService.getColorTexture(rampColors) + const { rampColors = DEFAULT_COLOR_TEXTURE_OPTION, domain} = arg as IRasterLayerStyleOptions; + this.colorTexture = this.parent.textureService.getColorTexture(rampColors,domain || getDefaultDomain(rampColors)) this.layers.forEach(layer => layer.style({ colorTexture: this.colorTexture })); } diff --git a/packages/layers/src/tile/tileFactory/layers/RasterDataLayer.ts b/packages/layers/src/tile/tileFactory/layers/RasterDataLayer.ts deleted file mode 100644 index 367348531e..0000000000 --- a/packages/layers/src/tile/tileFactory/layers/RasterDataLayer.ts +++ /dev/null @@ -1,28 +0,0 @@ -import BaseLayer from '../../../core/BaseLayer'; -import { IRasterLayerStyleOptions } from '../../../core/interface'; -import RasterModel from '../../../raster/models/rasterTile'; -import RasterRgbModel from '../../../raster/models/rasterRgb'; - -export default class RasterTiffLayer extends BaseLayer< - Partial -> { - public type: string = 'RasterLayer'; - public async buildModels() { - const model = this.getModel(); - this.layerModel = new model(this); - await this.initLayerModels(); - } - - public getModel() { - const type = this.getModelType(); - return type === 'rasterRgb' ? RasterRgbModel :RasterModel; - } - public getModelType():string { - return this.layerSource.parser.type === 'rasterRgb' ? 'rasterRgb' : 'raster' - - } - - protected getDefaultConfig() { - return {}; - } -} diff --git a/packages/renderer/src/regl/ReglTexture2D.ts b/packages/renderer/src/regl/ReglTexture2D.ts index ae7d04db06..b04e50c672 100644 --- a/packages/renderer/src/regl/ReglTexture2D.ts +++ b/packages/renderer/src/regl/ReglTexture2D.ts @@ -98,6 +98,10 @@ export default class ReglTexture2D implements ITexture2D { this.height = height; } + public getSize(): [number, number] { + return [this.width, this.height]; + } + public destroy() { if (!this.isDestroy) { this.texture?.destroy(); diff --git a/packages/site/docs/api/raster_layer/common/rampcolors.md b/packages/site/docs/api/raster_layer/common/rampcolors.md new file mode 100644 index 0000000000..8ef5c93b2b --- /dev/null +++ b/packages/site/docs/api/raster_layer/common/rampcolors.md @@ -0,0 +1,72 @@ +### rampColors 颜色色带 +- type 类型 支持 `linear','quantize','custom','cat' +- colors  颜色数组 +- positions 数据分段区间,可选,quantize 不需要设置 position,position 为原始数据值 + +⚠️ 2.13 新增特性 + +#### cat 枚举类型色带 + +枚举类型色带只支持 0 -255 的整数类型,positions 用来设置枚举 +```tsx +{ + type:'cat', + colors:['#e41a1c','#377eb8','#4daf4a','#984ea3','#ff7f00'], + positions:[1,20,101,102,200], +} +``` + +#### quantize 等间距分类色带 + +等间距只根据数据的区间 domain 进行均匀分段,如 domain [0,10000],如果分 5 段,每段间距 2000。 +等间距不需要设置 positions,只需要设置colors,根据colors 的长度设置分段数 + +```tsx +rampColors: { + type:'quantize', + colors: ['#f0f9e8','#bae4bc','#7bccc4','#43a2ca','#0868ac'] +} +``` +#### linear 线性连续色带 + +linear 为现有连续类型的加强版,positions 支持设置源数据,不需要转换成 0-1 + +```tsx +rampColors: { + type:'linear', + colors: ['#f0f9e8','#bae4bc','#7bccc4','#43a2ca','#0868ac'], + positions [0,200,1000,4000,8000] +} + +⚠️ 兼容 2.13.0 之前版本,未设置type 时,position 值域为 0-1。 + + + +``` + +#### custom 自定义分段色带 + +自定义分段色带区别等间距色带,用户自定义分段间隔。 +自定义 positions 的长度需要比 colors 的长度多1个,同时poisitions + +```tsx +rampColors: { + type:'custom', + colors: ['#f0f9e8','#bae4bc','#7bccc4','#43a2ca','#0868ac'], + positions [0,200,1000,4000,8000,10000] +} +``` + + + +配置值域映射颜色的色带,值域的范围为 `[0 - 1]`, 对应的我们需要为每一个 `position` 位置设置一个颜色值。 + +⚠️ colors, positions 的长度要相同 + +```javascript +layer.style({ + rampColors: { + colors: ['#FF4818', '#F7B74A', '#FFF598', '#91EABC', '#2EA9A1', '#206C7C'], + positions: [0, 0.2, 0.4, 0.6, 0.8, 1.0], + }, +}); \ No newline at end of file diff --git a/packages/site/docs/api/raster_layer/common/style.md b/packages/site/docs/api/raster_layer/common/style.md index dab6507b37..d81206daf2 100644 --- a/packages/site/docs/api/raster_layer/common/style.md +++ b/packages/site/docs/api/raster_layer/common/style.md @@ -19,20 +19,5 @@ layer.style({ | noDataValue | `number` | 不会显示的值 | `-9999999` | | rampColors | `IRampColors` | 值域映射颜色的色带 | `/` | -#### rampColors -- colors  颜色数组 -- positions 数据区间 - -配置值域映射颜色的色带,值域的范围为 `[0 - 1]`, 对应的我们需要为每一个 `position` 位置设置一个颜色值。 - -⚠️ colors, positions 的长度要相同 - -```javascript -layer.style({ - rampColors: { - colors: ['#FF4818', '#F7B74A', '#FFF598', '#91EABC', '#2EA9A1', '#206C7C'], - positions: [0, 0.2, 0.4, 0.6, 0.8, 1.0], - }, -}); -``` \ No newline at end of file + \ No newline at end of file diff --git a/packages/site/docs/api/raster_layer/common/style_single.md b/packages/site/docs/api/raster_layer/common/style_single.md index d906946e79..5c380502fe 100644 --- a/packages/site/docs/api/raster_layer/common/style_single.md +++ b/packages/site/docs/api/raster_layer/common/style_single.md @@ -17,20 +17,4 @@ layer.style({ | noDataValue | `number` | 不会显示的值 | `-9999999` | | rampColors | `IRampColors` | 值域映射颜色的色带 | `/` | -#### rampColors - -- colors  颜色数组 -- positions 数据区间 - -配置值域映射颜色的色带,值域的范围为 `[0 - 1]`, 对应的我们需要为每一个 `position` 位置设置一个颜色值。 - -⚠️ colors, positions 的长度要相同 - -```javascript -layer.style({ - rampColors: { - colors: ['#FF4818', '#F7B74A', '#FFF598', '#91EABC', '#2EA9A1', '#206C7C'], - positions: [0, 0.2, 0.4, 0.6, 0.8, 1.0], - }, -}); -``` + diff --git a/packages/site/docs/api/raster_layer/raster_layer.zh.md b/packages/site/docs/api/raster_layer/raster_layer.zh.md index 9332b8702b..fc229448be 100644 --- a/packages/site/docs/api/raster_layer/raster_layer.zh.md +++ b/packages/site/docs/api/raster_layer/raster_layer.zh.md @@ -12,7 +12,7 @@ order: 0 - L7 本身内部没有提供栅格数据格式, 需要将外部的栅格数据文件解析后或者提供解析方法做传入、如 `tiff`、`lerc`。 - 栅格图层除了支持简单渲染之外还支持栅格数据的多波段计算,可以用于绘制遥感彩色影像。 -### 直接绘制 +### 数据绘制 我们可以直接在外部计算出栅格的波段数据后传给栅格图层使用。 diff --git a/packages/site/docs/common/layer/layer_event.md b/packages/site/docs/common/layer/layer_event.md index 5ffc226e64..001224d5d1 100644 --- a/packages/site/docs/common/layer/layer_event.md +++ b/packages/site/docs/common/layer/layer_event.md @@ -67,13 +67,13 @@ layer.on('legend:color', (ev) => console.log(ev)); ### legend:size -数据映射更新,图例发生变化,color 大小改变 +数据映射更新,图例发生变化,size 大小改变 参数 option - type 映射通道、图例类型 - attr 映射实例 ```js -layer.on('legend:color', (ev) => console.log(ev)); +layer.on('legend:size', (ev) => console.log(ev)); ``` diff --git a/packages/site/examples/raster/basic/demo/meta.json b/packages/site/examples/raster/basic/demo/meta.json index 37edc7bde0..a70cad0256 100644 --- a/packages/site/examples/raster/basic/demo/meta.json +++ b/packages/site/examples/raster/basic/demo/meta.json @@ -10,11 +10,6 @@ "title": "雷达图", "screenshot": "https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*JDO-R5XU7xwAAAAAAAAAAAAAARQnAQ" }, - { - "filename": "light.js", - "title": "夜光图", - "screenshot": "https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*xznhSJFEAXYAAAAAAAAAAAAAARQnAQ" - }, { "filename": "image.js", "title": "图片", diff --git a/packages/site/examples/raster/basic/index.zh.md b/packages/site/examples/raster/basic/index.zh.md index 6147459f75..f6a87349ce 100644 --- a/packages/site/examples/raster/basic/index.zh.md +++ b/packages/site/examples/raster/basic/index.zh.md @@ -1,4 +1,4 @@ --- -title: 栅格图层 +title: 图片栅格 order: 0 --- diff --git a/packages/site/examples/raster/data_raster/index.zh.md b/packages/site/examples/raster/data_raster/index.zh.md index 1799200901..a7a5a8bfd7 100644 --- a/packages/site/examples/raster/data_raster/index.zh.md +++ b/packages/site/examples/raster/data_raster/index.zh.md @@ -1,4 +1,4 @@ --- -title: 数据栅格 +title: 多波段 order: 0 --- diff --git a/packages/site/examples/raster/single_raster/demo/dem.js b/packages/site/examples/raster/single_raster/demo/dem.js new file mode 100644 index 0000000000..c408c04854 --- /dev/null +++ b/packages/site/examples/raster/single_raster/demo/dem.js @@ -0,0 +1,50 @@ +// https://gw.alipayobjects.com/zos/antvdemo/assets/2019_clip/ndvi_201905.tif +import { RasterLayer, Scene } from '@antv/l7'; +import { GaodeMap } from '@antv/l7-maps'; +import * as GeoTIFF from 'geotiff'; +const scene = new Scene({ + id: 'map', + map: new GaodeMap({ + center: [121.268, 30.3628], + zoom: 3, + }), + }); + async function getTiffData() { + const response = await fetch( + 'https://gw.alipayobjects.com/os/rmsportal/XKgkjjGaAzRyKupCBiYW.dat', + ); + const arrayBuffer = await response.arrayBuffer(); + return arrayBuffer; + } + scene.on('loaded', async () => { + const tiffdata = await getTiffData(); + const tiff = await GeoTIFF.fromArrayBuffer(tiffdata); + const image = await tiff.getImage(); + const width = image.getWidth(); + const height = image.getHeight(); + const values = await image.readRasters(); + + const layer = new RasterLayer(); + layer + .source(values[0], { + parser: { + type: 'raster', + width, + height, + extent: [73.482190241, 3.82501784112, 135.106618732, 57.6300459963], + }, + }) + .style({ + opacity: 1, + clampLow: false, + clampHigh: false, + domain: [0, 10000], + rampColors: { + type:'custom', + colors: ['#b2182b','#d6604d','#f4a582','#fddbc7','#f7f7f7','#d1e5f0','#92c5de','#4393c3','#2166ac'], + positions: [0, 50, 200, 500, 2000, 3000, 4000, 5000, 8000,10000], + }, + }); + + scene.addLayer(layer) +}); \ No newline at end of file diff --git a/packages/site/examples/raster/single_raster/demo/dem_quantize.js b/packages/site/examples/raster/single_raster/demo/dem_quantize.js new file mode 100644 index 0000000000..5f5af0f708 --- /dev/null +++ b/packages/site/examples/raster/single_raster/demo/dem_quantize.js @@ -0,0 +1,50 @@ +// https://gw.alipayobjects.com/zos/antvdemo/assets/2019_clip/ndvi_201905.tif +import { RasterLayer, Scene } from '@antv/l7'; +import { GaodeMap } from '@antv/l7-maps'; +import * as GeoTIFF from 'geotiff'; +const scene = new Scene({ + id: 'map', + map: new GaodeMap({ + center: [121.268, 30.3628], + zoom: 3, + }), + }); + async function getTiffData() { + const response = await fetch( + 'https://gw.alipayobjects.com/os/rmsportal/XKgkjjGaAzRyKupCBiYW.dat', + ); + const arrayBuffer = await response.arrayBuffer(); + return arrayBuffer; + } + scene.on('loaded', async () => { + const tiffdata = await getTiffData(); + const tiff = await GeoTIFF.fromArrayBuffer(tiffdata); + const image = await tiff.getImage(); + const width = image.getWidth(); + const height = image.getHeight(); + const values = await image.readRasters(); + + const layer = new RasterLayer(); + layer + .source(values[0], { + parser: { + type: 'raster', + width, + height, + extent: [73.482190241, 3.82501784112, 135.106618732, 57.6300459963], + }, + }) + .style({ + opacity: 1, + clampLow: false, + clampHigh: false, + domain: [0, 10000], + rampColors: { + type:'quantize', // 等间距 不需要设置 position + colors: ['#b2182b','#d6604d','#f4a582','#fddbc7','#f7f7f7','#d1e5f0','#92c5de','#4393c3','#2166ac'], + + }, + }); + + scene.addLayer(layer) +}); \ No newline at end of file diff --git a/packages/site/examples/raster/basic/demo/light.js b/packages/site/examples/raster/single_raster/demo/light.js similarity index 87% rename from packages/site/examples/raster/basic/demo/light.js rename to packages/site/examples/raster/single_raster/demo/light.js index 9f420fdce2..0963cb54f1 100644 --- a/packages/site/examples/raster/basic/demo/light.js +++ b/packages/site/examples/raster/single_raster/demo/light.js @@ -49,8 +49,9 @@ async function addLayer() { domain: [ 0, 90 ], nodataValue: 0, rampColors: { - colors: [ 'rgba(92,58,16,0)', 'rgba(92,58,16,0)', '#fabd08', '#f1e93f', '#f1ff8f', '#fcfff7' ], - positions: [ 0, 0.05, 0.1, 0.25, 0.5, 1.0 ] + type:'linear', // 2.13.0 及以后版本支持 + colors: ['rgba(92,58,16,0)','rgba(92,58,16,0)', '#fabd08', '#f1e93f', '#f1ff8f', '#fcfff7' ], + positions: [0,3, 9, 22.5, 45, 90 ] } }); diff --git a/packages/site/examples/raster/single_raster/demo/light_default.js b/packages/site/examples/raster/single_raster/demo/light_default.js new file mode 100644 index 0000000000..c38b1bfefc --- /dev/null +++ b/packages/site/examples/raster/single_raster/demo/light_default.js @@ -0,0 +1,59 @@ +// https://gw.alipayobjects.com/zos/antvdemo/assets/2019_clip/ndvi_201905.tif +import { RasterLayer, Scene } from '@antv/l7'; +import { GaodeMap } from '@antv/l7-maps'; +import * as GeoTIFF from 'geotiff'; +const scene = new Scene({ + id: 'map', + map: new GaodeMap({ + style: 'dark', + center: [ 105, 37.5 ], + zoom: 2.5 + }) +}); +scene.on('loaded', () => { + addLayer(); +}); +async function getTiffData() { + const response = await fetch( + 'https://gw.alipayobjects.com/zos/antvdemo/assets/light_clip/lightF182013.tiff' + ); + const arrayBuffer = await response.arrayBuffer(); + const tiff = await GeoTIFF.fromArrayBuffer(arrayBuffer); + const image = await tiff.getImage(); + const width = image.getWidth(); + const height = image.getHeight(); + const values = await image.readRasters(); + return { + data: values[0], + width, + height + }; +} + +async function addLayer() { + const tiffdata = await getTiffData(); + + const layer = new RasterLayer({}); + layer + .source(tiffdata.data, { + parser: { + type: 'raster', + width: tiffdata.width, + height: tiffdata.height, + extent: [ 73.4821902409999979, 3.8150178409999995, 135.1066187319999869, 57.6300459959999998 ] + } + }) + .style({ + clampLow: false, + clampHigh: false, + domain: [ 0, 90 ], + nodataValue: 0, + rampColors: { + positions: [ 0, 0.05, 0.1, 0.25, 0.5, 1.0 ],// 数据需要换成 0-1 + colors: ['rgba(92,58,16,0)','rgba(92,58,16,0)', '#fabd08', '#f1e93f', '#f1ff8f', '#fcfff7' ], + + } + }); + + scene.addLayer(layer); +} diff --git a/packages/site/examples/raster/single_raster/demo/meta.json b/packages/site/examples/raster/single_raster/demo/meta.json new file mode 100644 index 0000000000..2b9411c4fd --- /dev/null +++ b/packages/site/examples/raster/single_raster/demo/meta.json @@ -0,0 +1,29 @@ +{ + "title": { + "zh": "单波段数据栅格", + "en": "Gallery" + }, + "demos": [ + + { + "filename": "light_default.js", + "title": "夜光图-默认线性", + "screenshot": "https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*xznhSJFEAXYAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "light.js", + "title": "夜光图-线性色带", + "screenshot": "https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*xznhSJFEAXYAAAAAAAAAAAAAARQnAQ" + }, + { + "filename": "dem.js", + "title": "高程图-自定义色带", + "screenshot": "https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*_RtOTrYOOrUAAAAAAAAAAAAADmJ7AQ/original" + }, + { + "filename": "dem_quantize.js", + "title": "高程图-等间距色带", + "screenshot": "https://mdn.alipayobjects.com//huamei_qa8qxu/afts/img/A*DT1HQbl4JKMAAAAAAAAAAAAADmJ7AQ/original" + } + ] +} diff --git a/packages/site/examples/raster/single_raster/index.en.md b/packages/site/examples/raster/single_raster/index.en.md new file mode 100644 index 0000000000..389c086693 --- /dev/null +++ b/packages/site/examples/raster/single_raster/index.en.md @@ -0,0 +1,4 @@ +--- +title: Raster Data Map +order: 0 +--- diff --git a/packages/site/examples/raster/single_raster/index.zh.md b/packages/site/examples/raster/single_raster/index.zh.md new file mode 100644 index 0000000000..90e548f6f7 --- /dev/null +++ b/packages/site/examples/raster/single_raster/index.zh.md @@ -0,0 +1,4 @@ +--- +title: 单波段 +order: 0 +--- diff --git a/packages/site/examples/tile/raster/demo/tiff.js b/packages/site/examples/tile/raster/demo/tiff.js index c300ab3eff..655ac7ff44 100644 --- a/packages/site/examples/tile/raster/demo/tiff.js +++ b/packages/site/examples/tile/raster/demo/tiff.js @@ -4,56 +4,33 @@ import * as GeoTIFF from 'geotiff'; const colorList = [ '#419bdf', // Water - '#419bdf', - '#397d49', // Tree - '#397d49', + '#358221', // Tree '#88b053', // Grass - '#88b053', + '#7a87c6', // vegetation - '#7a87c6', + '#e49635', // Crops - '#e49635', + '#dfc35a', // shrub - '#dfc35a', - '#c4281b', // Built Area - '#c4281b', - '#a59b8f', // Bare ground - '#a59b8f', + '#ED022A', // Built Area - '#a8ebff', // Snow - '#a8ebff', - '#616161', // Clouds - '#616161' + '#EDE9E4', // Bare ground + + + '#F2FAFF', // Snow + + '#C8C8C8', // Clouds ]; const positions = [ - 0.0, - 0.1, - 0.1, - 0.2, - 0.2, - 0.3, - 0.3, - 0.4, - 0.4, - 0.5, - 0.5, - 0.6, - 0.6, - 0.7, - 0.7, - 0.8, - 0.8, - 0.9, - 0.9, - 1.0 + 1,2,3,4,5,6,7,8,9,10,11, ]; const scene = new Scene({ @@ -97,9 +74,10 @@ scene.on('loaded', () => { layer.source(tileSource) .style({ - domain: [ 0.001, 11.001 ], + domain: [ 0, 255],// 枚举类型domain 必须为0-255 clampLow: false, rampColors: { + type:'cat', colors: colorList, positions } @@ -115,7 +93,7 @@ const wrap = document.getElementById('map'); const legend = document.createElement('div'); const data = []; -for (let i = 0; i < colorList.length; i += 2) { +for (let i = 0; i < colorList.length; i += 1) { data.push({ color: colorList[i], text: [ @@ -129,7 +107,7 @@ for (let i = 0; i < colorList.length; i += 2) { 'Bare ground', 'Snow', 'Clouds' - ][i / 2] + ][i] }); } const strArr = []; diff --git a/packages/utils/src/color.ts b/packages/utils/src/color.ts index b917fbf26b..1f13f70527 100644 --- a/packages/utils/src/color.ts +++ b/packages/utils/src/color.ts @@ -1,9 +1,10 @@ import * as d3 from 'd3-color'; +import { Context } from 'vm'; import { $window, isMini } from './mini-adapter'; export interface IColorRamp { + type?: 'cat' | 'linear' | 'quantize' | 'custom' positions: number[]; colors: string[]; - weights?: number[]; } export function isColor(str: any) { @@ -51,6 +52,7 @@ export interface IImagedata { height: number; } +// 连续型 老版本兼容 export function generateColorRamp( colorRamp: IColorRamp, ): ImageData | IImagedata { @@ -60,29 +62,18 @@ export function generateColorRamp( canvas.height = 1; let data = null; - if (colorRamp.weights) { - // draw enum color - let count = 0; - colorRamp.weights.map((w, index) => { - const color = colorRamp.colors[index] || 'rgba(0, 0, 0, 0)'; - const stop = count + w; - ctx.fillStyle = color; - ctx.fillRect(count * 256, 0, stop * 256, 1); - count = stop; - }); - } else { - // draw linear color - const gradient = ctx.createLinearGradient(0, 0, 256, 1); + // draw linear color + const gradient = ctx.createLinearGradient(0, 0, 256, 1); - const min = colorRamp.positions[0]; - const max = colorRamp.positions[colorRamp.positions.length - 1]; - for (let i = 0; i < colorRamp.colors.length; ++i) { - const value = (colorRamp.positions[i] - min) / (max - min); - gradient.addColorStop(value, colorRamp.colors[i]); - } - ctx.fillStyle = gradient; - ctx.fillRect(0, 0, 256, 1); + const min = colorRamp.positions[0]; + const max = colorRamp.positions[colorRamp.positions.length - 1]; + for (let i = 0; i < colorRamp.colors.length; ++i) { + const value = (colorRamp.positions[i] - min) / (max - min); + gradient.addColorStop(value, colorRamp.colors[i]); } + ctx.fillStyle = gradient; + ctx.fillRect(0, 0, 256, 1); + if (!isMini) { data = ctx.getImageData(0, 0, 256, 1).data; @@ -108,3 +99,149 @@ export function generateColorRamp( return { data, width: 256, height: 1 }; } } + +// 连续型 Position 支持设置原始数据 +export function generateLinearRamp( + colorRamp: IColorRamp, + domain: [number, number], +): ImageData | IImagedata { + let canvas = $window.document.createElement('canvas'); + let ctx = canvas.getContext('2d') as CanvasRenderingContext2D; + canvas.width = 256; + canvas.height = 1; + // draw linear color + const gradient = ctx.createLinearGradient(0, 0, 256, 1); + const step = domain[1] - domain[0]; + + for (let i = 0; i < colorRamp.colors.length; ++i) { + const value = Math.max((colorRamp.positions[i] - domain[0]) / step,0); + console.log(value) + gradient.addColorStop(value, colorRamp.colors[i]); + } + ctx.fillStyle = gradient; + ctx.fillRect(0, 0, 256, 1); + const data = ctx.getImageData(0, 0, 256, 1).data; + const imageData = toIEIMageData(ctx, data); + + // @ts-ignore + canvas = null; + // @ts-ignore + ctx = null; + return imageData + +} + + +// 枚举类型 +export function generateCatRamp( + colorRamp: IColorRamp, +): ImageData | IImagedata { + + let canvas = $window.document.createElement('canvas'); + let ctx = canvas.getContext('2d') as CanvasRenderingContext2D; + canvas.width = 256; + canvas.height = 1; + const imageData = ctx.createImageData(256, 1); + imageData.data.fill(0); + colorRamp.positions.forEach((p: number, index: number) => { + const colorArray = rgb2arr(colorRamp.colors[index]) + imageData.data[p * 4 + 0] = colorArray[0] * 255; + imageData.data[p * 4 + 1] = colorArray[1] * 255; + imageData.data[p * 4 + 2] = colorArray[2] * 255; + imageData.data[p * 4 + 3] = colorArray[3] * 255; + }) + // @ts-ignore + canvas = null; + // @ts-ignore + ctx = null; + return imageData; +} + +// 等间距 +export function generateQuantizeRamp( + colorRamp: IColorRamp, +): ImageData | IImagedata { + let canvas = $window.document.createElement('canvas'); + let ctx = canvas.getContext('2d') as CanvasRenderingContext2D; + ctx.globalAlpha = 1.0 + canvas.width = 256; + canvas.height = 1; + const step = 256 / colorRamp.colors.length;// TODO 精度问题 + // draw linear color + for (let i = 0; i < colorRamp.colors.length; i++) { + ctx.beginPath(); + ctx.lineWidth = 2; + + ctx.strokeStyle = colorRamp.colors[i]; + ctx.moveTo(i * step, 0); // positioned at 50,25 + ctx.lineTo((i + 1) * step, 0); + ctx.stroke(); + + } + + const data = ctx.getImageData(0, 0, 256, 1).data; + // 使用 createImageData 替代 new ImageData、兼容 IE11 + const imageData = toIEIMageData(ctx, data); + + + // @ts-ignore + canvas = null; + // @ts-ignore + ctx = null; + return imageData; +} + +// 自定义间距 + +export function generateCustomRamp( + colorRamp: IColorRamp, + domain: [number, number], +): ImageData | IImagedata { + + let canvas = $window.document.createElement('canvas'); + let ctx = canvas.getContext('2d') as CanvasRenderingContext2D; + ctx.globalAlpha = 1.0 + canvas.width = 256; + canvas.height = 1; + const step = domain[1] - domain[0]; + if(colorRamp.positions.length - colorRamp.colors.length !==1) { + console.warn('positions 的数字个数应当比 colors 的样式多一个,poisitions 的首尾值一般为数据的最大最新值') + } + + for (let i = 0; i < colorRamp.colors.length; i++) { + ctx.beginPath(); + ctx.lineWidth = 2; + ctx.strokeStyle = colorRamp.colors[i]; + ctx.moveTo((colorRamp.positions[i] - domain[0]) / step * 255, 0); // positioned at 50,25 + ctx.lineTo((colorRamp.positions[i + 1]- domain[0]) / step * 255, 0); + ctx.stroke(); + + } + const data = ctx.getImageData(0, 0, 256, 1).data; + const imageData = toIEIMageData(ctx, data); + // @ts-ignore + canvas = null; + // @ts-ignore + ctx = null; + return imageData; +} +function toIEIMageData(ctx: Context, data: Uint8ClampedArray) { + const imageData = ctx.createImageData(256, 1); + for (let i = 0; i < imageData.data.length; i += 4) { + imageData.data[i + 0] = data[i + 0]; + imageData.data[i + 1] = data[i + 1]; + imageData.data[i + 2] = data[i + 2]; + imageData.data[i + 3] = data[i + 3]; + } + return imageData +} + +export function getDefaultDomain(rampColors:IColorRamp) { + switch (rampColors.type) { + case 'cat' : + return [0,255] + default: + [0,1] + } + +} \ No newline at end of file diff --git a/packages/utils/src/workers/triangulation.ts b/packages/utils/src/workers/triangulation.ts index f8780b3116..b280dbf198 100644 --- a/packages/utils/src/workers/triangulation.ts +++ b/packages/utils/src/workers/triangulation.ts @@ -2,7 +2,7 @@ import earcut from 'earcut'; import { calculateCentroid } from '../geo'; import ExtrudePolyline from './extrude_polyline'; import { IEncodeFeature } from './interface'; - +const LATMAX = 85.0511287798; export function LineTriangulation(feature: IEncodeFeature) { const { coordinates, originCoordinates, version } = feature; // let path = coordinates as number[][][] | number[][]; @@ -91,9 +91,17 @@ export function polygonFillTriangulation(feature: IEncodeFeature) { } function project_mercator(x: number, y: number) { + let y1 = y; + if (y > LATMAX) { + y1 = LATMAX; + } + if (y < -LATMAX) { + y1 = -LATMAX; + } + return [ (Math.PI * x) / 180 + Math.PI, - Math.PI - Math.log(Math.tan(Math.PI * 0.25 + ((Math.PI * y) / 180) * 0.5)), + Math.PI - Math.log(Math.tan(Math.PI * 0.25 + ((Math.PI * y1) / 180) * 0.5)), ]; }