From 906c167c0d228d031d7fd76848b85d6e2bf28647 Mon Sep 17 00:00:00 2001 From: luoxiao Date: Wed, 10 Jun 2026 16:15:08 +0800 Subject: [PATCH 01/24] =?UTF-8?q?[fix]webmap=E5=BC=B9=E7=AA=97=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E9=A1=B9=E8=B0=83=E6=95=B4=20AI-GEN:=200%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/mapping/WebMapBase.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/mapping/WebMapBase.js b/src/common/mapping/WebMapBase.js index e680e268f..402dcae16 100644 --- a/src/common/mapping/WebMapBase.js +++ b/src/common/mapping/WebMapBase.js @@ -365,7 +365,7 @@ export function createWebMapBaseExtending(SuperClass, { mapRepo }) { * @returns {Array} 弹窗信息数组。 */ getPopupInfos() { - return this._handler._getPopupInfos() || []; + return (this._handler && this._handler._getPopupInfos()) || []; } /** From e6cfad3a3d84d27547b9f85725c581fb83208af8 Mon Sep 17 00:00:00 2001 From: songyumeng Date: Wed, 17 Jun 2026 16:34:42 +0800 Subject: [PATCH 02/24] Add polyfill for Array.prototype.at AI-GEN: 60% Implement polyfill for Array.prototype.at method. --- test/tool/mock_l7.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/tool/mock_l7.js b/test/tool/mock_l7.js index d7e9b515f..51d9b4a09 100644 --- a/test/tool/mock_l7.js +++ b/test/tool/mock_l7.js @@ -31,6 +31,7 @@ if (!Array.prototype.at) { configurable: true }); } +<<<<<<< HEAD class Event { constructor() { this.stacks = {}; @@ -47,6 +48,8 @@ class Event { } } const event = new Event(); +======= +>>>>>>> 044e62b26... Add polyfill for Array.prototype.at class Scene { constructor() { this.layerService = { From ca4e3e55e87588b14b966b4865721216f8cf83ad Mon Sep 17 00:00:00 2001 From: luoxiao Date: Thu, 25 Jun 2026 16:27:49 +0800 Subject: [PATCH 03/24] =?UTF-8?q?[fix]setLayersVisible=20webmap=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9EisSetVisible=E5=8F=82=E6=95=B0=E6=8E=A7?= =?UTF-8?q?=E5=88=B6visible=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapping/utils/AppreciableLayerBase.js | 6 +- .../mapping/utils/AppreciableLayerBaseSpec.js | 121 ++++++++++++++++++ test/test-main-common.js | 3 +- 3 files changed, 127 insertions(+), 3 deletions(-) create mode 100644 test/common/mapping/utils/AppreciableLayerBaseSpec.js diff --git a/src/common/mapping/utils/AppreciableLayerBase.js b/src/common/mapping/utils/AppreciableLayerBase.js index aa6063ede..dfc4f2f2d 100644 --- a/src/common/mapping/utils/AppreciableLayerBase.js +++ b/src/common/mapping/utils/AppreciableLayerBase.js @@ -98,10 +98,12 @@ export class AppreciableLayerBase extends Events { } } - setLayersVisible(layers, visibility) { + setLayersVisible(layers, visibility, isSetVisible = true) { layers.forEach((layer) => { const visbleId = this._getLayerVisibleId(layer); - this.layersVisibleMap.set(visbleId, visibility === 'visible'); + if (isSetVisible) { + this.layersVisibleMap.set(visbleId, visibility === 'visible'); + } if (layer.CLASS_INSTANCE && layer.CLASS_INSTANCE.show && layer.CLASS_INSTANCE.hide) { visibility === 'visible' ? layer.CLASS_INSTANCE.show() : layer.CLASS_INSTANCE.hide(); this.map.style.fire('data', { dataType: 'style' }); diff --git a/test/common/mapping/utils/AppreciableLayerBaseSpec.js b/test/common/mapping/utils/AppreciableLayerBaseSpec.js new file mode 100644 index 000000000..50a5575b1 --- /dev/null +++ b/test/common/mapping/utils/AppreciableLayerBaseSpec.js @@ -0,0 +1,121 @@ +import { AppreciableLayerBase } from '../../../../src/common/mapping/utils/AppreciableLayerBase'; + +describe('AppreciableLayerBase', () => { + let instance; + let mockMap; + + beforeEach(() => { + mockMap = { + style: { + fire: jasmine.createSpy('fire') + }, + getLayer: jasmine.createSpy('getLayer').and.returnValue({}), + setLayoutProperty: jasmine.createSpy('setLayoutProperty') + }; + + instance = new AppreciableLayerBase({ + map: mockMap, + layers: [] + }); + }); + + describe('setLayersVisible', () => { + it('should set layer visibility to visible', () => { + const layer = { + renderLayers: ['layer1'], + CLASS_NAME: 'TestLayer' + }; + + instance.setLayersVisible([layer], 'visible', true); + + expect(mockMap.setLayoutProperty).toHaveBeenCalledWith('layer1', 'visibility', 'visible'); + }); + + it('should set layer visibility to none', () => { + const layer = { + renderLayers: ['layer1'], + CLASS_NAME: 'TestLayer' + }; + + instance.setLayersVisible([layer], 'none', true); + + expect(mockMap.setLayoutProperty).toHaveBeenCalledWith('layer1', 'visibility', 'none'); + }); + + it('should handle layer with CLASS_INSTANCE', () => { + const mockShow = jasmine.createSpy('show'); + const mockHide = jasmine.createSpy('hide'); + const layer = { + renderLayers: ['layer1'], + CLASS_NAME: 'TestLayer', + CLASS_INSTANCE: { + show: mockShow, + hide: mockHide + } + }; + + instance.setLayersVisible([layer], 'visible', true); + + expect(mockShow).toHaveBeenCalled(); + expect(mockHide).not.toHaveBeenCalled(); + expect(mockMap.style.fire).toHaveBeenCalledWith('data', { dataType: 'style' }); + }); + + it('should handle layer with CLASS_INSTANCE and hide', () => { + const mockShow = jasmine.createSpy('show'); + const mockHide = jasmine.createSpy('hide'); + const layer = { + renderLayers: ['layer1'], + CLASS_NAME: 'TestLayer', + CLASS_INSTANCE: { + show: mockShow, + hide: mockHide + } + }; + + instance.setLayersVisible([layer], 'none', true); + + expect(mockHide).toHaveBeenCalled(); + expect(mockShow).not.toHaveBeenCalled(); + expect(mockMap.style.fire).toHaveBeenCalledWith('data', { dataType: 'style' }); + }); + + it('should skip layersVisibleMap when isSetVisible is false', () => { + const layer = { + renderLayers: ['layer1'], + CLASS_NAME: 'TestLayer' + }; + + instance.setLayersVisible([layer], 'visible', false); + + // isSetVisible=false 只跳过 layersVisibleMap 的设置,但 setLayoutProperty 仍会被调用 + expect(mockMap.setLayoutProperty).toHaveBeenCalledWith('layer1', 'visibility', 'visible'); + }); + + it('should handle multiple renderLayers', () => { + const layer = { + renderLayers: ['layer1', 'layer2', 'layer3'], + CLASS_NAME: 'TestLayer' + }; + + instance.setLayersVisible([layer], 'visible', true); + + expect(mockMap.setLayoutProperty).toHaveBeenCalledTimes(3); + expect(mockMap.setLayoutProperty).toHaveBeenCalledWith('layer1', 'visibility', 'visible'); + expect(mockMap.setLayoutProperty).toHaveBeenCalledWith('layer2', 'visibility', 'visible'); + expect(mockMap.setLayoutProperty).toHaveBeenCalledWith('layer3', 'visibility', 'visible'); + }); + + it('should skip L7Layer when getLayer returns falsy', () => { + mockMap.getLayer.and.returnValue(null); + const layer = { + renderLayers: ['l7layer1'], + CLASS_NAME: 'L7Layer' + }; + + instance.setLayersVisible([layer], 'visible', true); + + expect(mockMap.setLayoutProperty).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/test/test-main-common.js b/test/test-main-common.js index 68fdb81e2..f455d2a0e 100644 --- a/test/test-main-common.js +++ b/test/test-main-common.js @@ -235,6 +235,7 @@ import './common/util/EncryptRequestSpec'; import './common/util/MapCalculateUtilSpec'; import './common/util/GeometryAnalysisSpec.js'; +import './common/mapping/utils/AppreciableLayerBaseSpec.js' import './common/mapping/utils/L7LayerUtilSpec'; import './common/mapping/utils/ColorUtilSpec.js'; import './common/mapping/utils/SourceListModelV2Spec.js'; @@ -242,4 +243,4 @@ import './common/mapping/utils/SourceListModelV3Spec.js'; import './common/mapping/utils/epsgDefineSpec.js'; import './common/mapping/utils/UtilSpec.js'; import './common/mapping/WebMapServiceSpec'; -import './common/mapping/WebMapV2BaseSpec'; \ No newline at end of file +import './common/mapping/WebMapV2BaseSpec'; From 2565a89ddd61cae13455241f7c927a097b14709d Mon Sep 17 00:00:00 2001 From: xiongjj Date: Fri, 26 Jun 2026 14:31:18 +0800 Subject: [PATCH 04/24] =?UTF-8?q?feat=20=E5=8F=AF=E6=84=9F=E7=9F=A5?= =?UTF-8?q?=E5=9B=BE=E5=B1=82=E6=96=B0=E5=A2=9EdataSource=20vector?= =?UTF-8?q?=E7=9A=84=E9=9D=9Erestmap=20=E7=B1=BB=E5=9E=8B=20AI-GEN:=2060%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/mapping/utils/SourceListModelV3.js | 33 +- .../mapping/utils/SourceListModelV3Spec.js | 1171 +++++++++++++++++ test/tool/mock_l7.js | 3 - 3 files changed, 1196 insertions(+), 11 deletions(-) diff --git a/src/common/mapping/utils/SourceListModelV3.js b/src/common/mapping/utils/SourceListModelV3.js index 637f3f776..f0ed952e5 100644 --- a/src/common/mapping/utils/SourceListModelV3.js +++ b/src/common/mapping/utils/SourceListModelV3.js @@ -175,17 +175,34 @@ export class SourceListModelV3 extends AppreciableLayerBase { const sourceOnMap = this.map.getSource(layer.source); if (!Object.keys(dataSource).length && sourceOnMap && sourceOnMap.type === 'vector') { const matchSource = this._mapInfo.sources[layer.source] || sourceOnMap; - if (matchSource.tiles && matchSource.tiles[0].includes('/rest/maps/')) { + if (matchSource.tiles && matchSource.tiles.length > 0) { const tileUrl = matchSource.tiles[0]; - const [serverUrl, leftParts] = tileUrl.split('/rest/maps/'); - const [mapName] = leftParts.split('/tileFeature'); - dataSource.url = `${serverUrl}/rest/maps`; - dataSource.mapName = mapName; - dataSource.type = 'REST_MAP'; - dataSource.layerName = serviceLayerId; + switch (true) { + case tileUrl.includes('/rest/maps/'): { + const [serverUrl, leftParts] = tileUrl.split('/rest/maps/'); + const [mapName] = leftParts.split('/tileFeature'); + dataSource.url = `${serverUrl}/rest/maps`; + dataSource.mapName = mapName; + dataSource.type = 'REST_MAP'; + dataSource.layerName = serviceLayerId; + break; + } + case tileUrl.includes('/restjsr/v1/'): { + const [serverUrl, leftParts] = tileUrl.split('/restjsr/v1/'); + const [mapName] = leftParts.split('/tiles/'); + dataSource.url = `${serverUrl}/restjsr/v1/vectortile/maps`; + dataSource.mapName = mapName; + dataSource.type = 'RESTJSR'; + break; + } + default: { + dataSource.url = tileUrl; + dataSource.type = 'VECTOR_OTHER'; + } + } } } - layerInfo.dataSource = dataSource; + layerInfo.dataSource = Object.assign(dataSource, { serviceLayerId }); if (this._l7LayerUtil.isL7Layer(layer)) { layerInfo.CLASS_NAME = 'L7Layer'; } diff --git a/test/common/mapping/utils/SourceListModelV3Spec.js b/test/common/mapping/utils/SourceListModelV3Spec.js index 9831a3fc6..b31040344 100644 --- a/test/common/mapping/utils/SourceListModelV3Spec.js +++ b/test/common/mapping/utils/SourceListModelV3Spec.js @@ -1757,4 +1757,1175 @@ describe('SourceListV3', () => { expect(nextAppreciableLayers.some(item => item.title === baseLayerInfoCopy.layers[0].metadata.title)).toBeTruthy(); done(); }); + + it('getSelfLayerIds', (done) => { + const mapInfo = JSON.parse(apstudioWebMap_layerData); + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo: JSON.parse(msProjectINfo_layerData), + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const selfLayerIds = sourceListModel.getSelfLayerIds(); + expect(Array.isArray(selfLayerIds)).toBeTruthy(); + expect(selfLayerIds.length).toBeGreaterThan(0); + selfLayerIds.forEach(id => { + expect(typeof id).toBe('string'); + }); + done(); + }); + + it('setBaseLayer with single layer', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'test-layer', + title: 'test-layer', + type: 'basic' + }, + { + visible: true, + id: 'base-layer', + title: 'base-layer', + type: 'basic' + } + ] + }, + sources: { + 'test-layer': { + type: 'raster', + tiles: ['http://localhost/test.png'] + }, + 'base-layer': { + type: 'raster', + tiles: ['http://localhost/base.png'] + } + }, + layers: [ + { + id: 'test-layer', + type: 'raster', + source: 'test-layer', + minzoom: 0, + maxzoom: 12 + }, + { + id: 'base-layer', + type: 'raster', + source: 'base-layer', + minzoom: 0, + maxzoom: 12 + } + ], + version: '3.0.0' + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo: {}, + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const newBaseLayer = { + id: 'new-base', + title: 'new-base', + layers: [ + { + id: 'new-base-layer', + type: 'raster', + source: 'new-base-source', + minzoom: 0, + maxzoom: 12 + } + ], + sources: { + 'new-base-source': { + type: 'raster', + tiles: ['http://localhost/newbase.png'] + } + } + }; + sourceListModel.setBaseLayer(newBaseLayer); + const updatedLayers = sourceListModel.getLayers(); + expect(updatedLayers.some(layer => layer.id === 'new-base-layer')).toBeTruthy(); + expect(updatedLayers[0].id).toBe('new-base-layer'); + done(); + }); + + it('setBaseLayer with group layer', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'test-layer', + title: 'test-layer', + type: 'basic' + }, + { + visible: true, + id: 'base-layer', + title: 'base-layer', + type: 'basic' + } + ] + }, + sources: { + 'test-layer': { + type: 'raster', + tiles: ['http://localhost/test.png'] + }, + 'base-layer': { + type: 'raster', + tiles: ['http://localhost/base.png'] + } + }, + layers: [ + { + id: 'test-layer', + type: 'raster', + source: 'test-layer', + minzoom: 0, + maxzoom: 12 + }, + { + id: 'base-layer', + type: 'raster', + source: 'base-layer', + minzoom: 0, + maxzoom: 12 + } + ], + version: '3.0.0' + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo: {}, + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const newBaseLayer = { + id: 'new-base-group', + title: 'new-base-group', + layers: [ + { + id: 'new-base-layer-1', + type: 'raster', + source: 'new-base-source-1', + minzoom: 0, + maxzoom: 12, + metadata: { title: 'layer-1' } + }, + { + id: 'new-base-layer-2', + type: 'raster', + source: 'new-base-source-2', + minzoom: 0, + maxzoom: 12, + metadata: { title: 'layer-2' } + } + ], + sources: { + 'new-base-source-1': { + type: 'raster', + tiles: ['http://localhost/newbase1.png'] + }, + 'new-base-source-2': { + type: 'raster', + tiles: ['http://localhost/newbase2.png'] + } + } + }; + sourceListModel.setBaseLayer(newBaseLayer); + const layerCatalog = sourceListModel.getLayerCatalog(); + const baseCatalog = layerCatalog[layerCatalog.length - 1]; + expect(baseCatalog.id).toBe('new-base-group'); + expect(baseCatalog.type).toBe('group'); + expect(baseCatalog.children.length).toBe(2); + expect(baseCatalog.children[0].title).toBe('layer-1'); + expect(baseCatalog.children[1].title).toBe('layer-2'); + done(); + }); + + it('_generateLayers with REST_DATA source', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'rest-data-layer', + title: 'REST_DATA Layer', + type: 'basic' + } + ] + }, + sources: { + 'rest-data-source': { + type: 'vector', + tiles: ['http://localhost:8090/iserver/services/data-test/rest/data/datasources/test/datasets/test_dataset/tileFeature.mvt'] + } + }, + layers: [ + { + id: 'rest-data-layer', + type: 'circle', + source: 'rest-data-source', + 'source-layer': 'test_dataset' + } + ], + version: '3.0.0' + }; + const mapResourceInfo = { + catalogs: [ + { + id: 'rest-data-layer', + msDatasetId: 'ms_test_dataset_123', + serviceLayerId: '0' + } + ], + datas: [ + { + sourceType: 'REST_DATA', + url: 'http://localhost:8090/iserver/services/data-test/rest/data/datasources/test', + datasets: [ + { + msDatasetId: 'ms_test_dataset_123', + datasetId: 'test_dataset', + datasetName: 'test:test_dataset' + } + ] + } + ] + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo, + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const layers = sourceListModel.getLayers(); + const restDataLayer = layers.find(layer => layer.id === 'rest-data-layer'); + expect(restDataLayer).toBeTruthy(); + expect(restDataLayer.layerInfo.dataSource.type).toBe('REST_DATA'); + expect(restDataLayer.layerInfo.dataSource.url).toBe('http://localhost:8090/iserver/services/data-test/rest/data'); + expect(restDataLayer.layerInfo.dataSource.dataSourceName).toBe('test:test_dataset'); + done(); + }); + + it('_generateLayers with REST_MAP source', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'rest-map-layer', + title: 'REST_MAP Layer', + type: 'basic' + } + ] + }, + sources: { + 'rest-map-source': { + type: 'vector', + tiles: ['http://localhost:8090/iserver/services/map-test/rest/maps/test_map/tileFeature.mvt'] + } + }, + layers: [ + { + id: 'rest-map-layer', + type: 'circle', + source: 'rest-map-source', + 'source-layer': 'test_layer' + } + ], + version: '3.0.0' + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo: {}, + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const layers = sourceListModel.getLayers(); + const restMapLayer = layers.find(layer => layer.id === 'rest-map-layer'); + expect(restMapLayer).toBeTruthy(); + expect(restMapLayer.layerInfo.dataSource.type).toBe('REST_MAP'); + expect(restMapLayer.layerInfo.dataSource.url).toBe('http://localhost:8090/iserver/services/map-test/rest/maps'); + expect(restMapLayer.layerInfo.dataSource.mapName).toBe('test_map'); + done(); + }); + + it('_generateLayers with RESTJSR source', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'restjsr-layer', + title: 'RESTJSR Layer', + type: 'basic' + } + ] + }, + sources: { + 'restjsr-source': { + type: 'vector', + tiles: ['http://localhost:8090/restjsr/v1/maps/test_map/tiles/{z}/{x}/{y}.mvt'] + } + }, + layers: [ + { + id: 'restjsr-layer', + type: 'circle', + source: 'restjsr-source', + 'source-layer': 'test_layer' + } + ], + version: '3.0.0' + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo: {}, + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const layers = sourceListModel.getLayers(); + const restjsrLayer = layers.find(layer => layer.id === 'restjsr-layer'); + expect(restjsrLayer).toBeTruthy(); + expect(restjsrLayer.layerInfo.dataSource.type).toBe('RESTJSR'); + expect(restjsrLayer.layerInfo.dataSource.url).toBe('http://localhost:8090/restjsr/v1/vectortile/maps'); + expect(restjsrLayer.layerInfo.dataSource.mapName).toBe('test_map'); + done(); + }); + + it('_generateLayers with VECTOR_OTHER source', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'other-vector-layer', + title: 'OTHER Vector Layer', + type: 'basic' + } + ] + }, + sources: { + 'other-vector-source': { + type: 'vector', + tiles: ['http://localhost:8080/tiles/{z}/{x}/{y}.mvt'] + } + }, + layers: [ + { + id: 'other-vector-layer', + type: 'circle', + source: 'other-vector-source', + 'source-layer': 'layer_name' + } + ], + version: '3.0.0' + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo: {}, + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const layers = sourceListModel.getLayers(); + const otherLayer = layers.find(layer => layer.id === 'other-vector-layer'); + expect(otherLayer).toBeTruthy(); + expect(otherLayer.layerInfo.dataSource.type).toBe('VECTOR_OTHER'); + expect(otherLayer.layerInfo.dataSource.url).toBe('http://localhost:8080/tiles/{z}/{x}/{y}.mvt'); + done(); + }); + + it('_generateLayers with serviceLayerId in dataSource', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'service-layer', + title: 'Service Layer', + type: 'basic' + } + ] + }, + sources: { + 'service-source': { + type: 'vector', + tiles: ['http://localhost:8090/iserver/services/data-test/rest/data/datasources/test/datasets/test_dataset/tileFeature.mvt'] + } + }, + layers: [ + { + id: 'service-layer', + type: 'circle', + source: 'service-source', + 'source-layer': 'test_dataset' + } + ], + version: '3.0.0' + }; + const mapResourceInfo = { + catalogs: [ + { + id: 'service-layer', + msDatasetId: 'ms_test_dataset_123', + serviceLayerId: '1.2' + } + ], + datas: [ + { + sourceType: 'REST_DATA', + url: 'http://localhost:8090/iserver/services/data-test/rest/data/datasources/test', + datasets: [ + { + msDatasetId: 'ms_test_dataset_123', + datasetId: 'test_dataset', + datasetName: 'test:test_dataset' + } + ] + } + ] + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo, + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const layers = sourceListModel.getLayers(); + const serviceLayer = layers.find(layer => layer.id === 'service-layer'); + expect(serviceLayer).toBeTruthy(); + expect(serviceLayer.layerInfo.dataSource.serviceLayerId).toBe('1.2'); + expect(serviceLayer.layerInfo.dataSource.type).toBe('REST_DATA'); + expect(serviceLayer.layerInfo.dataSource.url).toBe('http://localhost:8090/iserver/services/data-test/rest/data'); + expect(serviceLayer.layerInfo.dataSource.dataSourceName).toBe('test:test_dataset'); + done(); + }); + + it('_generateLayers without serviceLayerId in dataSource', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'no-service-layer', + title: 'No Service Layer', + type: 'basic' + } + ] + }, + sources: { + 'no-service-source': { + type: 'vector', + tiles: ['http://localhost:8090/iserver/services/data-test/rest/data/datasources/test/datasets/test_dataset/tileFeature.mvt'] + } + }, + layers: [ + { + id: 'no-service-layer', + type: 'circle', + source: 'no-service-source', + 'source-layer': 'test_dataset' + } + ], + version: '3.0.0' + }; + const mapResourceInfo = { + catalogs: [ + { + id: 'no-service-layer', + msDatasetId: 'ms_test_dataset_123' + } + ], + datas: [ + { + sourceType: 'REST_DATA', + url: 'http://localhost:8090/iserver/services/data-test/rest/data/datasources/test', + datasets: [ + { + msDatasetId: 'ms_test_dataset_123', + datasetId: 'test_dataset', + datasetName: 'test:test_dataset' + } + ] + } + ] + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo, + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const layers = sourceListModel.getLayers(); + const noServiceLayer = layers.find(layer => layer.id === 'no-service-layer'); + expect(noServiceLayer).toBeTruthy(); + expect(noServiceLayer.layerInfo.dataSource.serviceLayerId).toBeUndefined(); + expect(noServiceLayer.layerInfo.dataSource.type).toBe('REST_DATA'); + expect(noServiceLayer.layerInfo.dataSource.url).toBe('http://localhost:8090/iserver/services/data-test/rest/data'); + expect(noServiceLayer.layerInfo.dataSource.dataSourceName).toBe('test:test_dataset'); + done(); + }); + + it('_generateLayers with empty serviceLayerId', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'empty-service-layer', + title: 'Empty Service Layer', + type: 'basic' + } + ] + }, + sources: { + 'empty-service-source': { + type: 'vector', + tiles: ['http://localhost:8090/iserver/services/data-test/rest/data/datasources/test/datasets/test_dataset/tileFeature.mvt'] + } + }, + layers: [ + { + id: 'empty-service-layer', + type: 'circle', + source: 'empty-service-source', + 'source-layer': 'test_dataset' + } + ], + version: '3.0.0' + }; + const mapResourceInfo = { + catalogs: [ + { + id: 'empty-service-layer', + msDatasetId: 'ms_test_dataset_123', + serviceLayerId: '' + } + ], + datas: [ + { + sourceType: 'REST_DATA', + url: 'http://localhost:8090/iserver/services/data-test/rest/data/datasources/test', + datasets: [ + { + msDatasetId: 'ms_test_dataset_123', + datasetId: 'test_dataset', + datasetName: 'test:test_dataset' + } + ] + } + ] + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo, + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const layers = sourceListModel.getLayers(); + const emptyServiceLayer = layers.find(layer => layer.id === 'empty-service-layer'); + expect(emptyServiceLayer).toBeTruthy(); + expect(emptyServiceLayer.layerInfo.dataSource.serviceLayerId).toBe(''); + expect(emptyServiceLayer.layerInfo.dataSource.type).toBe('REST_DATA'); + done(); + }); + + it('_generateLayers with REST_MAP source and serviceLayerId', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'rest-map-service-layer', + title: 'REST_MAP Service Layer', + type: 'basic' + } + ] + }, + sources: { + 'rest-map-service-source': { + type: 'vector', + tiles: ['http://localhost:8090/iserver/services/map-test/rest/maps/test_map/tileFeature.mvt'] + } + }, + layers: [ + { + id: 'rest-map-service-layer', + type: 'circle', + source: 'rest-map-service-source', + 'source-layer': 'test_layer' + } + ], + version: '3.0.0' + }; + const mapResourceInfo = { + catalogs: [ + { + id: 'rest-map-service-layer', + serviceLayerId: '2' + } + ], + datas: [] + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo, + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const layers = sourceListModel.getLayers(); + const restMapLayer = layers.find(layer => layer.id === 'rest-map-service-layer'); + expect(restMapLayer).toBeTruthy(); + expect(restMapLayer.layerInfo.dataSource.type).toBe('REST_MAP'); + expect(restMapLayer.layerInfo.dataSource.url).toBe('http://localhost:8090/iserver/services/map-test/rest/maps'); + expect(restMapLayer.layerInfo.dataSource.mapName).toBe('test_map'); + expect(restMapLayer.layerInfo.dataSource.serviceLayerId).toBe('2'); + done(); + }); + + it('_generateLayers with RESTJSR source and serviceLayerId', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'restjsr-service-layer', + title: 'RESTJSR Service Layer', + type: 'basic' + } + ] + }, + sources: { + 'restjsr-service-source': { + type: 'vector', + tiles: ['http://localhost:8090/restjsr/v1/maps/test_map/tiles/{z}/{x}/{y}.mvt'] + } + }, + layers: [ + { + id: 'restjsr-service-layer', + type: 'circle', + source: 'restjsr-service-source', + 'source-layer': 'test_layer' + } + ], + version: '3.0.0' + }; + const mapResourceInfo = { + catalogs: [ + { + id: 'restjsr-service-layer', + serviceLayerId: '3' + } + ], + datas: [] + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo, + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const layers = sourceListModel.getLayers(); + const restjsrLayer = layers.find(layer => layer.id === 'restjsr-service-layer'); + expect(restjsrLayer).toBeTruthy(); + expect(restjsrLayer.layerInfo.dataSource.type).toBe('RESTJSR'); + expect(restjsrLayer.layerInfo.dataSource.url).toBe('http://localhost:8090/restjsr/v1/vectortile/maps'); + expect(restjsrLayer.layerInfo.dataSource.mapName).toBe('test_map'); + expect(restjsrLayer.layerInfo.dataSource.serviceLayerId).toBe('3'); + done(); + }); + + it('_generateLayers with VECTOR_OTHER source and serviceLayerId', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'other-service-layer', + title: 'OTHER Service Layer', + type: 'basic' + } + ] + }, + sources: { + 'other-service-source': { + type: 'vector', + tiles: ['http://localhost:8080/tiles/{z}/{x}/{y}.mvt'] + } + }, + layers: [ + { + id: 'other-service-layer', + type: 'circle', + source: 'other-service-source', + 'source-layer': 'layer_name' + } + ], + version: '3.0.0' + }; + const mapResourceInfo = { + catalogs: [ + { + id: 'other-service-layer', + serviceLayerId: '4' + } + ], + datas: [] + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo, + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const layers = sourceListModel.getLayers(); + const otherLayer = layers.find(layer => layer.id === 'other-service-layer'); + expect(otherLayer).toBeTruthy(); + expect(otherLayer.layerInfo.dataSource.type).toBe('VECTOR_OTHER'); + expect(otherLayer.layerInfo.dataSource.url).toBe('http://localhost:8080/tiles/{z}/{x}/{y}.mvt'); + expect(otherLayer.layerInfo.dataSource.serviceLayerId).toBe('4'); + done(); + }); + + it('_generateLayers with chart type layer', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'chart-layer', + title: 'Chart Layer', + type: 'basic' + } + ] + }, + sources: { + 'chart-source': { + type: 'geojson', + data: { + type: 'FeatureCollection', + features: [] + } + } + }, + layers: [ + { + id: 'chart-layer', + type: 'chart', + source: 'chart-source' + } + ], + version: '3.0.0' + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo: {}, + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const layers = sourceListModel.getLayers(); + const chartLayer = layers.find(layer => layer.id === 'chart-layer'); + expect(chartLayer).toBeTruthy(); + expect(chartLayer.layerInfo.metadata.SM_Layer_Order).toBe('top'); + done(); + }); + + it('_generateLayers with legendList', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'legend-layer', + title: 'Legend Layer', + type: 'basic' + } + ] + }, + sources: { + 'legend-source': { + type: 'vector', + tiles: ['http://localhost/test.mvt'] + } + }, + layers: [ + { + id: 'legend-layer', + type: 'circle', + source: 'legend-source' + } + ], + version: '3.0.0' + }; + const legendList = [ + { layerId: 'legend-layer', themeField: 'field1' }, + { layerId: 'legend-layer', themeField: 'field2' }, + { layerId: 'legend-layer', themeField: 'field1' } + ]; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo: {}, + legendList, + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const layers = sourceListModel.getLayers(); + const legendLayer = layers.find(layer => layer.id === 'legend-layer'); + expect(legendLayer).toBeTruthy(); + expect(legendLayer.themeSetting).toBeTruthy(); + expect(legendLayer.themeSetting.themeField).toEqual(['field1', 'field2']); + done(); + }); + + it('_generateBaseLayerInfo', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'overlay-layer', + title: 'Overlay Layer', + type: 'basic' + }, + { + visible: true, + id: 'base-layer', + title: 'Base Layer', + type: 'basic' + } + ] + }, + sources: { + 'overlay-layer': { + type: 'vector', + tiles: ['http://localhost/overlay.mvt'] + }, + 'base-layer': { + type: 'raster', + tiles: ['http://localhost/base.png'] + } + }, + layers: [ + { + id: 'base-layer', + type: 'raster', + source: 'base-layer', + minzoom: 0, + maxzoom: 12 + }, + { + id: 'overlay-layer', + type: 'circle', + source: 'overlay-layer', + minzoom: 0, + maxzoom: 12 + } + ], + version: '3.0.0' + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo: {}, + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const baseLayerInfo = sourceListModel.baseLayerInfoOnMap; + expect(baseLayerInfo).toBeTruthy(); + expect(baseLayerInfo.id).toBe('__default__base-layer'); + expect(baseLayerInfo.title).toBe('Base Layer'); + expect(baseLayerInfo.layers.length).toBe(1); + expect(baseLayerInfo.layers[0].id).toBe('base-layer'); + expect(baseLayerInfo.sources['base-layer']).toBeTruthy(); + done(); + }); + + it('_getBaseLayerRenderLayers with children', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'overlay-layer', + title: 'Overlay Layer', + type: 'basic' + }, + { + visible: true, + id: 'base-group', + title: 'Base Group', + type: 'group', + children: [ + { + visible: true, + id: 'base-layer-1', + title: 'Base Layer 1', + type: 'basic' + }, + { + visible: true, + id: 'base-layer-2', + title: 'Base Layer 2', + type: 'basic' + } + ] + } + ] + }, + sources: { + 'overlay-layer': { + type: 'vector', + tiles: ['http://localhost/overlay.mvt'] + }, + 'base-layer-1': { + type: 'raster', + tiles: ['http://localhost/base1.png'] + }, + 'base-layer-2': { + type: 'raster', + tiles: ['http://localhost/base2.png'] + } + }, + layers: [ + { + id: 'base-layer-1', + type: 'raster', + source: 'base-layer-1', + minzoom: 0, + maxzoom: 12 + }, + { + id: 'base-layer-2', + type: 'raster', + source: 'base-layer-2', + minzoom: 0, + maxzoom: 12 + }, + { + id: 'overlay-layer', + type: 'circle', + source: 'overlay-layer', + minzoom: 0, + maxzoom: 12 + } + ], + version: '3.0.0' + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo: {}, + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const baseLayerInfo = sourceListModel.baseLayerInfoOnMap; + expect(baseLayerInfo).toBeTruthy(); + expect(baseLayerInfo.layers.length).toBe(2); + expect(baseLayerInfo.layers.some(layer => layer.id === 'base-layer-1')).toBeTruthy(); + expect(baseLayerInfo.layers.some(layer => layer.id === 'base-layer-2')).toBeTruthy(); + done(); + }); + + it('_removeBaseLayerRenderLayers', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'overlay-layer', + title: 'Overlay Layer', + type: 'basic' + }, + { + visible: true, + id: 'base-layer', + title: 'Base Layer', + type: 'basic' + } + ] + }, + sources: { + 'overlay-layer': { + type: 'vector', + tiles: ['http://localhost/overlay.mvt'] + }, + 'base-layer': { + type: 'raster', + tiles: ['http://localhost/base.png'] + } + }, + layers: [ + { + id: 'base-layer', + type: 'raster', + source: 'base-layer', + minzoom: 0, + maxzoom: 12 + }, + { + id: 'overlay-layer', + type: 'circle', + source: 'overlay-layer', + minzoom: 0, + maxzoom: 12 + } + ], + version: '3.0.0' + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo: {}, + legendList: [], + l7LayerUtil: { + isL7Layer, + getL7MarkerLayers: () => ({}) + } + }); + const initialLayers = sourceListModel.getLayers(); + expect(initialLayers.length).toBeGreaterThanOrEqual(2); + sourceListModel.changeBaseLayer({ + id: 'new-base', + title: 'New Base', + layers: [ + { + id: 'new-base-layer', + type: 'raster', + source: 'new-base-source', + minzoom: 0, + maxzoom: 12 + } + ], + sources: { + 'new-base-source': { + type: 'raster', + tiles: ['http://localhost/newbase.png'] + } + } + }); + const updatedLayers = sourceListModel.getLayers(); + expect(updatedLayers.some(layer => layer.id === 'base-layer')).toBeFalsy(); + expect(updatedLayers.some(layer => layer.id === 'new-base-layer')).toBeTruthy(); + expect(updatedLayers.some(layer => layer.id === 'overlay-layer')).toBeTruthy(); + done(); + }); + + it('_generateLayers with L7 layer', (done) => { + const mapInfo = { + metadata: { + layerCatalog: [ + { + visible: true, + id: 'l7-layer', + title: 'L7 Layer', + type: 'basic' + } + ] + }, + sources: {}, + layers: [ + { + id: 'l7-layer', + type: 'custom', + renderingMode: '3d', + overlay: true + } + ], + version: '3.0.0' + }; + const l7MarkerLayers = { + 'l7-layer': { + show: () => {}, + hide: () => {} + } + }; + const sourceListModel = new SourceListModelV3({ + map, + mapInfo, + mapResourceInfo: {}, + legendList: [], + l7LayerUtil: { + isL7Layer: () => true, + getL7MarkerLayers: () => l7MarkerLayers + } + }); + const layers = sourceListModel.getLayers(); + const l7Layer = layers.find(layer => layer.id === 'l7-layer'); + expect(l7Layer).toBeTruthy(); + expect(l7Layer.CLASS_NAME).toBe('L7Layer'); + expect(l7Layer.CLASS_INSTANCE).toBe(l7MarkerLayers['l7-layer']); + done(); + }); }); diff --git a/test/tool/mock_l7.js b/test/tool/mock_l7.js index 51d9b4a09..d7e9b515f 100644 --- a/test/tool/mock_l7.js +++ b/test/tool/mock_l7.js @@ -31,7 +31,6 @@ if (!Array.prototype.at) { configurable: true }); } -<<<<<<< HEAD class Event { constructor() { this.stacks = {}; @@ -48,8 +47,6 @@ class Event { } } const event = new Event(); -======= ->>>>>>> 044e62b26... Add polyfill for Array.prototype.at class Scene { constructor() { this.layerService = { From 4853566b305e7ab7426b63403644a731e74d29f6 Mon Sep 17 00:00:00 2001 From: luoxiao Date: Tue, 30 Jun 2026 10:00:09 +0800 Subject: [PATCH 05/24] =?UTF-8?q?[fix]webmap=20=E6=8F=90=E4=BE=9BsetLegend?= =?UTF-8?q?s=EF=BC=8CcleanLayers=E5=8F=AF=E9=85=8D=E7=BD=AE=E5=8F=82?= =?UTF-8?q?=E6=95=B0=20AI-GEN:=2060%=20Cursor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/mapping/MapBase.js | 4 ++ src/common/mapping/WebMapBase.js | 15 +++-- test/common/mapping/MapBaseSpec.js | 95 +++++++++++++++++++++++++++ test/common/mapping/WebMapBaseSpec.js | 81 +++++++++++++++++++++++ test/test-main-common.js | 2 + 5 files changed, 193 insertions(+), 4 deletions(-) create mode 100644 test/common/mapping/MapBaseSpec.js create mode 100644 test/common/mapping/WebMapBaseSpec.js diff --git a/src/common/mapping/MapBase.js b/src/common/mapping/MapBase.js index d4a221adc..e9b561ae6 100644 --- a/src/common/mapping/MapBase.js +++ b/src/common/mapping/MapBase.js @@ -26,6 +26,10 @@ export function createMapClassExtending(SuperClass = class {}) { return this._legendList; } + setLegends(legendList) { + this._legendList = legendList || []; + } + getSelfAppreciableLayers() { return (this._sourceListModel && this._sourceListModel.getSelfLayers(...arguments)) || []; } diff --git a/src/common/mapping/WebMapBase.js b/src/common/mapping/WebMapBase.js index 402dcae16..e4eb2856b 100644 --- a/src/common/mapping/WebMapBase.js +++ b/src/common/mapping/WebMapBase.js @@ -485,16 +485,23 @@ export function createWebMapBaseExtending(SuperClass, { mapRepo }) { * @version 11.2.1 * @function WebMapBase.prototype.cleanLayers * @description 删除追加的图层和事件。当设置 `map` 时有效 + * @param {Array} [layersToClean] - 要删除的图层数组,默认为所有可删除的缓存图层(非 reused)。每个图层对象包含 id 属性 + * @param {boolean} [isClean=true] - 是否调用 clean(false) 销毁内部资源。为 false 时只删除指定图层并同步清理 legends */ - cleanLayers() { + cleanLayers(layersToClean = this._cacheCleanLayers.filter(item => !item.reused), isClean = true) { // 清空追加的地图图层以及对应的事件 if (!this.map) { return; } - const layersToClean = this._cacheCleanLayers.filter((item) => !item.reused); + const cacheLayers = this._cacheCleanLayers.filter((item) => !item.reused); this._handler && this._handler.cleanLayers(layersToClean); - this._cacheCleanLayers = []; - this.clean(false); + this._cacheCleanLayers = cacheLayers.filter(item => !layersToClean.some((item1=> item1.id === item.id))); + if (isClean) { + this.clean(false); + } else { + const legends = this.getLegends(); + this._handler.setLegends(legends.filter(item => !layersToClean.some((item1=> item1.id === item.layerId)))); + } } /** diff --git a/test/common/mapping/MapBaseSpec.js b/test/common/mapping/MapBaseSpec.js new file mode 100644 index 000000000..ac42e1baf --- /dev/null +++ b/test/common/mapping/MapBaseSpec.js @@ -0,0 +1,95 @@ +import { createMapClassExtending } from '@supermapgis/iclient-common/mapping/MapBase'; + +describe('MapBase', () => { + let MapBase; + let instance; + + beforeEach(() => { + MapBase = createMapClassExtending(); + instance = new MapBase(); + }); + + describe('setLegends', () => { + it('should set _legendList with provided array', () => { + const legends = [ + { layerId: 'layer1', items: [{ color: '#fff', label: 'test' }] }, + { layerId: 'layer2', items: [{ color: '#000' }] } + ]; + + instance.setLegends(legends); + + expect(instance._legendList).toEqual(legends); + }); + + it('should set _legendList to empty array when null is passed', () => { + instance.setLegends(null); + + expect(instance._legendList).toEqual([]); + }); + + it('should set _legendList to empty array when undefined is passed', () => { + instance.setLegends(undefined); + + expect(instance._legendList).toEqual([]); + }); + + it('should set _legendList to empty array when no argument is passed', () => { + instance.setLegends(); + + expect(instance._legendList).toEqual([]); + }); + + it('should overwrite existing legends', () => { + instance._legendList = [{ layerId: 'old' }]; + + instance.setLegends([{ layerId: 'new' }]); + + expect(instance._legendList).toEqual([{ layerId: 'new' }]); + }); + }); + + describe('getLegends', () => { + it('should return _legendList', () => { + const legends = [{ layerId: 'layer1' }]; + instance._legendList = legends; + + expect(instance.getLegends()).toEqual(legends); + }); + + it('should return empty array when _legendList is not set', () => { + expect(instance.getLegends()).toEqual([]); + }); + }); + + describe('getLayerCatalog', () => { + it('should return _sourceListModel.getLayerCatalog() when _sourceListModel exists', () => { + const catalogs = [{ id: 'cat1' }]; + instance._sourceListModel = jasmine.createSpyObj('sourceListModel', ['getLayerCatalog']); + instance._sourceListModel.getLayerCatalog.and.returnValue(catalogs); + + expect(instance.getLayerCatalog()).toEqual(catalogs); + }); + + it('should return empty array when _sourceListModel is null', () => { + instance._sourceListModel = null; + + expect(instance.getLayerCatalog()).toEqual([]); + }); + }); + + describe('getLayers', () => { + it('should return _sourceListModel.getLayers() when _sourceListModel exists', () => { + const layers = [{ id: 'layer1' }]; + instance._sourceListModel = jasmine.createSpyObj('sourceListModel', ['getLayers']); + instance._sourceListModel.getLayers.and.returnValue(layers); + + expect(instance.getLayers()).toEqual(layers); + }); + + it('should return empty array when _sourceListModel is null', () => { + instance._sourceListModel = null; + + expect(instance.getLayers()).toEqual([]); + }); + }); +}); diff --git a/test/common/mapping/WebMapBaseSpec.js b/test/common/mapping/WebMapBaseSpec.js new file mode 100644 index 000000000..23c55bf1b --- /dev/null +++ b/test/common/mapping/WebMapBaseSpec.js @@ -0,0 +1,81 @@ +import { createMapClassExtending } from '../../../src/common/mapping/MapBase'; + +describe('WebMapBase - MapBase Methods', () => { + let MapBase; + let instance; + + beforeEach(() => { + MapBase = createMapClassExtending(); + instance = new MapBase(); + }); + + describe('setLegends', () => { + it('should set _legendList with provided array', () => { + const legends = [ + { layerId: 'layer1', items: [{ color: '#fff', label: 'test' }] }, + { layerId: 'layer2', items: [{ color: '#000' }] } + ]; + + instance.setLegends(legends); + + expect(instance._legendList).toEqual(legends); + }); + + it('should set _legendList to empty array when null is passed', () => { + instance.setLegends(null); + + expect(instance._legendList).toEqual([]); + }); + + it('should set _legendList to empty array when undefined is passed', () => { + instance.setLegends(undefined); + + expect(instance._legendList).toEqual([]); + }); + }); + + describe('getLegends', () => { + it('should return _legendList', () => { + const legends = [{ layerId: 'layer1' }]; + instance._legendList = legends; + + expect(instance.getLegends()).toEqual(legends); + }); + + it('should return empty array when _legendList is not set', () => { + expect(instance.getLegends()).toEqual([]); + }); + }); + + describe('getLayerCatalog', () => { + it('should return _sourceListModel.getLayerCatalog() when _sourceListModel exists', () => { + const catalogs = [{ id: 'cat1' }]; + instance._sourceListModel = jasmine.createSpyObj('sourceListModel', ['getLayerCatalog']); + instance._sourceListModel.getLayerCatalog.and.returnValue(catalogs); + + expect(instance.getLayerCatalog()).toEqual(catalogs); + }); + + it('should return empty array when _sourceListModel is null', () => { + instance._sourceListModel = null; + + expect(instance.getLayerCatalog()).toEqual([]); + }); + }); + + describe('getLayers', () => { + it('should return _sourceListModel.getLayers() when _sourceListModel exists', () => { + const layers = [{ id: 'layer1' }]; + instance._sourceListModel = jasmine.createSpyObj('sourceListModel', ['getLayers']); + instance._sourceListModel.getLayers.and.returnValue(layers); + + expect(instance.getLayers()).toEqual(layers); + }); + + it('should return empty array when _sourceListModel is null', () => { + instance._sourceListModel = null; + + expect(instance.getLayers()).toEqual([]); + }); + }); +}); diff --git a/test/test-main-common.js b/test/test-main-common.js index f455d2a0e..1c464236e 100644 --- a/test/test-main-common.js +++ b/test/test-main-common.js @@ -237,10 +237,12 @@ import './common/util/GeometryAnalysisSpec.js'; import './common/mapping/utils/AppreciableLayerBaseSpec.js' import './common/mapping/utils/L7LayerUtilSpec'; +import './common/mapping/MapBaseSpec.js' import './common/mapping/utils/ColorUtilSpec.js'; import './common/mapping/utils/SourceListModelV2Spec.js'; import './common/mapping/utils/SourceListModelV3Spec.js'; import './common/mapping/utils/epsgDefineSpec.js'; import './common/mapping/utils/UtilSpec.js'; +import './common/mapping/WebMapBaseSpec.js'; import './common/mapping/WebMapServiceSpec'; import './common/mapping/WebMapV2BaseSpec'; From 4d20faad9eb2bd00f2c0370c0b53dced571a5196 Mon Sep 17 00:00:00 2001 From: songyumeng Date: Tue, 30 Jun 2026 18:04:27 +0800 Subject: [PATCH 06/24] =?UTF-8?q?=E3=80=90fix=E3=80=91bound=20=E4=B8=8D?= =?UTF-8?q?=E5=90=88=E6=B3=95=E4=B8=8D=E8=A6=81=E8=AE=BE=E7=BD=AEbounds=20?= =?UTF-8?q?=E5=87=8F=E5=B0=91=E4=B8=8D=E5=87=BA=E5=9B=BE=E7=9A=84=E5=87=A0?= =?UTF-8?q?=E7=8E=87=20AI-GEN:=2060%=20Cursor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/mapping/WebMapV2.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/common/mapping/WebMapV2.js b/src/common/mapping/WebMapV2.js index 9e328f613..4d2a30037 100644 --- a/src/common/mapping/WebMapV2.js +++ b/src/common/mapping/WebMapV2.js @@ -916,6 +916,9 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo, crsMa } } } + if (bounds && !this._isValidBounds(bounds)) { + bounds = null; + } this._addBaselayer({ url: [requestUrl], layerID: layerId, @@ -2869,6 +2872,28 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo, crsMa return coor; } + // 校验 bounds 是否为合法的经纬度范围(EPSG:4326) + // 不合法返回 false:值非数字/无穷、左>=右、下>=上、四个坐标都在 ±0.5 度内(认为退化为原点附近)、超出经纬度范围 + _isValidBounds(bounds) { + if (!Array.isArray(bounds) || bounds.length !== 4) { + return false; + } + const [left, bottom, right, top] = bounds; + if (![left, bottom, right, top].every((v) => typeof v === 'number' && Number.isFinite(v))) { + return false; + } + if (left >= right || bottom >= top) { + return false; + } + if (Math.abs(left) > 180 || Math.abs(right) > 180 || Math.abs(bottom) > 90 || Math.abs(top) > 90) { + return false; + } + if (Math.abs(left) < 0.5 && Math.abs(right) < 0.5 && Math.abs(bottom) < 0.5 && Math.abs(top) < 0.5) { + return false; + } + return true; + } + _getMapCenter(mapInfo) { // center let center = mapInfo.center && [mapInfo.center.x, mapInfo.center.y]; From 4585a5fd665442b9153b55aae1c88a9965850fea Mon Sep 17 00:00:00 2001 From: luoxiao Date: Wed, 1 Jul 2026 17:38:13 +0800 Subject: [PATCH 07/24] =?UTF-8?q?[fix]webmap=E6=96=B0=E5=A2=9E=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=8E=9F=E5=9C=B0=E5=9B=BE=E7=9A=84=E5=9B=BE=E4=BE=8B?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=20AI-GEN:=2070%=20MiniMax-M2.7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/mapping/MapBase.js | 4 +- src/common/mapping/WebMapBase.js | 10 + src/common/mapping/WebMapV2.js | 12 ++ src/common/mapping/WebMapV3.js | 25 +++ test/common/mapping/MapBaseSpec.js | 107 +++++++++- test/common/mapping/WebMapBaseSpec.js | 150 +++++++++++++- test/common/mapping/WebMapV3Spec.js | 286 ++++++++++++++++++++++++++ test/test-main-common.js | 1 + 8 files changed, 592 insertions(+), 3 deletions(-) create mode 100644 test/common/mapping/WebMapV3Spec.js diff --git a/src/common/mapping/MapBase.js b/src/common/mapping/MapBase.js index e9b561ae6..9fa338d01 100644 --- a/src/common/mapping/MapBase.js +++ b/src/common/mapping/MapBase.js @@ -88,7 +88,9 @@ export function createMapClassExtending(SuperClass = class {}) { } } Array.from(new Set(sourceList)).forEach((sourceId) => { - this.map.removeSource(sourceId); + if (this.map.getSource(sourceId)) { + this.map.removeSource(sourceId); + } }); } }; diff --git a/src/common/mapping/WebMapBase.js b/src/common/mapping/WebMapBase.js index e4eb2856b..515b40f2b 100644 --- a/src/common/mapping/WebMapBase.js +++ b/src/common/mapping/WebMapBase.js @@ -368,6 +368,16 @@ export function createWebMapBaseExtending(SuperClass, { mapRepo }) { return (this._handler && this._handler._getPopupInfos()) || []; } + /** + * @version 11.3.0 + * @function WebMapBase.prototype.getLegendInfos + * @description 获取地图本身所有图层的legend状态。 + * @returns {Array} 图例信息数组,包含 showLegend、id、title 三个属性。 + */ + getLegendInfos() { + return (this._handler && this._handler._getLegendInfos()) || []; + } + /** * @version 11.2.1 * @function WebMapBase.prototype.getLayers diff --git a/src/common/mapping/WebMapV2.js b/src/common/mapping/WebMapV2.js index 4d2a30037..48ced5d33 100644 --- a/src/common/mapping/WebMapV2.js +++ b/src/common/mapping/WebMapV2.js @@ -210,6 +210,18 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo, crsMa }).filter(item => item !== null); } + _getLegendInfos() { + const { layers = [] } = this._mapInfo; + return layers.map((layer) => { + const { legendSetting, name, layerID: layerId } = layer; + return { + showLegend: legendSetting ? legendSetting?.isShow !== false : false, + id: layerId, + title: name + }; + }); + } + _handleLayerInfo(mapInfo, _taskID) { mapInfo = this._setLayerID(mapInfo); this._mapInfo = mapInfo; diff --git a/src/common/mapping/WebMapV3.js b/src/common/mapping/WebMapV3.js index 72041b76e..63ff3a369 100644 --- a/src/common/mapping/WebMapV3.js +++ b/src/common/mapping/WebMapV3.js @@ -389,6 +389,31 @@ export function createWebMapV3Extending(SuperClass, { MapManager, mapRepo, crsMa return res; } + _getLegendInfoByCatalog(catalog, res = []) { + const { catalogType, children, showLegend, title, id } = catalog; + if (catalogType === 'group' && children) { + children.forEach(child => { + this._getLegendInfoByCatalog(child, res); + }); + } + if (catalogType === 'layer') { + res.push({ + showLegend: showLegend !== false, + id: id, + title: title + }); + } + } + + _getLegendInfos(_mapResourceInfo = this._mapResourceInfo) { + const { catalogs = [] } = _mapResourceInfo; + const res = []; + catalogs.forEach((item) => { + this._getLegendInfoByCatalog(item, res); + }); + return res; + } + /** * @private * @function WebMapV3.prototype._initLayers diff --git a/test/common/mapping/MapBaseSpec.js b/test/common/mapping/MapBaseSpec.js index ac42e1baf..5b75576f1 100644 --- a/test/common/mapping/MapBaseSpec.js +++ b/test/common/mapping/MapBaseSpec.js @@ -88,8 +88,113 @@ describe('MapBase', () => { it('should return empty array when _sourceListModel is null', () => { instance._sourceListModel = null; - + expect(instance.getLayers()).toEqual([]); }); }); + + describe('cleanLayers', () => { + beforeEach(() => { + instance.map = jasmine.createSpyObj('map', [ + 'getLayer', + 'removeLayer', + 'getSource', + 'removeSource' + ]); + }); + + it('should remove layers from map', () => { + const layers = [ + { + renderLayers: ['layer1', 'layer2'], + renderSource: { id: 'source1' }, + l7Layer: false + } + ]; + instance.map.getLayer.and.callFake((layerId) => { + if (layerId === 'layer1' || layerId === 'layer2') { + return { source: 'source1' }; + } + return undefined; + }); + instance.map.getSource.and.returnValue(true); + + instance.cleanLayers(layers); + + expect(instance.map.removeLayer).toHaveBeenCalledWith('layer1'); + expect(instance.map.removeLayer).toHaveBeenCalledWith('layer2'); + }); + + it('should remove sources from map when layers are removed', () => { + const layers = [ + { + renderLayers: ['layer1'], + renderSource: { id: 'source1' }, + l7Layer: false + } + ]; + instance.map.getLayer.and.returnValue({ source: 'source1' }); + instance.map.getSource.and.returnValue(true); + + instance.cleanLayers(layers); + + expect(instance.map.removeSource).toHaveBeenCalledWith('source1'); + }); + + it('should not remove source when renderSource.id is falsy', () => { + const layers = [ + { + renderLayers: ['layer1'], + renderSource: { id: null }, + l7Layer: false + } + ]; + instance.map.getLayer.and.returnValue({ source: null }); + // getSource(null) returns falsy, so source won't be added to list + instance.map.getSource.and.returnValue(false); + + instance.cleanLayers(layers); + + expect(instance.map.removeSource).not.toHaveBeenCalled(); + }); + + it('should not remove source when layer is l7Layer', () => { + const layers = [ + { + renderLayers: ['layer1'], + renderSource: { id: 'source1' }, + l7Layer: true + } + ]; + instance.map.getLayer.and.returnValue({ source: 'source1' }); + instance.map.getSource.and.returnValue(true); + + instance.cleanLayers(layers); + + expect(instance.map.removeSource).not.toHaveBeenCalled(); + }); + + it('should deduplicate sources before removal', () => { + const layers = [ + { + renderLayers: ['layer1'], + renderSource: { id: 'source1' }, + l7Layer: false + }, + { + renderLayers: ['layer2'], + renderSource: { id: 'source1' }, + l7Layer: false + } + ]; + instance.map.getLayer.and.returnValue({ source: 'source1' }); + instance.map.getSource.and.returnValue(true); + + instance.cleanLayers(layers); + + // Should only call removeSource once due to deduplication + expect(instance.map.removeSource).toHaveBeenCalledTimes(1); + expect(instance.map.removeSource).toHaveBeenCalledWith('source1'); + }); + }); }); diff --git a/test/common/mapping/WebMapBaseSpec.js b/test/common/mapping/WebMapBaseSpec.js index 23c55bf1b..f40098b9f 100644 --- a/test/common/mapping/WebMapBaseSpec.js +++ b/test/common/mapping/WebMapBaseSpec.js @@ -74,8 +74,156 @@ describe('WebMapBase - MapBase Methods', () => { it('should return empty array when _sourceListModel is null', () => { instance._sourceListModel = null; - + expect(instance.getLayers()).toEqual([]); }); }); }); + +describe('WebMapBase - Handler Methods', () => { + let instance; + let mockHandler; + + beforeEach(() => { + const MapBase = createMapClassExtending(); + instance = new MapBase(); + instance.getLegendInfos = function() { + return (this._handler && this._handler._getLegendInfos()) || []; + }; + // Mock WebMapV2 handler + mockHandler = { + _getLegendInfos: jasmine.createSpy('_getLegendInfos').and.callFake(() => { + return [ + { showLegend: true, id: 'layer1', title: 'Layer 1' }, + { showLegend: false, id: 'layer2', title: 'Layer 2' } + ]; + }) + }; + instance._handler = mockHandler; + }); + + describe('getLegendInfos', () => { + it('should call handler._getLegendInfos and return result', () => { + const result = instance.getLegendInfos(); + + expect(mockHandler._getLegendInfos).toHaveBeenCalled(); + expect(result).toEqual([ + { showLegend: true, id: 'layer1', title: 'Layer 1' }, + { showLegend: false, id: 'layer2', title: 'Layer 2' } + ]); + }); + + it('should return empty array when handler._getLegendInfos returns null', () => { + mockHandler._getLegendInfos.and.returnValue(null); + + const result = instance.getLegendInfos(); + + expect(result).toEqual([]); + }); + + it('should return empty array when handler._getLegendInfos returns undefined', () => { + mockHandler._getLegendInfos.and.returnValue(undefined); + + const result = instance.getLegendInfos(); + + expect(result).toEqual([]); + }); + + it('should return empty array when handler is null', () => { + instance._handler = null; + + const result = instance.getLegendInfos(); + + expect(result).toEqual([]); + }); + }); + + describe('getLegendInfos with WebMapV2-like handler', () => { + it('should return legend info from _mapInfo.layers (WebMapV2)', () => { + const webMapV2Handler = { + _getLegendInfos: jasmine.createSpy('_getLegendInfos').and.callFake(function() { + const { layers = [] } = this._mapInfo || {}; + return layers.map((layer) => { + const { legendSetting, name, layerID: layerId } = layer; + return { + showLegend: legendSetting?.isShow !== false, + id: layerId, + title: name + }; + }); + }), + _mapInfo: { + layers: [ + { name: 'Layer1', layerID: 'layer1', legendSetting: { isShow: true } }, + { name: 'Layer2', layerID: 'layer2', legendSetting: { isShow: false } } + ] + } + }; + instance._handler = webMapV2Handler; + + const result = instance.getLegendInfos(); + + expect(webMapV2Handler._getLegendInfos).toHaveBeenCalled(); + expect(result).toEqual([ + { showLegend: true, id: 'layer1', title: 'Layer1' }, + { showLegend: false, id: 'layer2', title: 'Layer2' } + ]); + }); + }); + + describe('getLegendInfos with WebMapV3-like handler', () => { + it('should return legend info from catalogs (WebMapV3)', () => { + const webMapV3Handler = { + _getLegendInfos: jasmine.createSpy('_getLegendInfos').and.callFake(function() { + const { catalogs = [] } = this._mapResourceInfo || {}; + const res = []; + const processCatalog = (catalog) => { + const { catalogType, children, showLegend, title, layersContent, id } = catalog; + if (catalogType === 'group' && children) { + children.forEach(child => processCatalog(child)); + } + if (catalogType === 'layer') { + res.push({ + showLegend: showLegend !== false, + id: layersContent || id, + title: title + }); + } + }; + catalogs.forEach(item => processCatalog(item)); + return res; + }), + _mapResourceInfo: { + catalogs: [ + { + catalogType: 'layer', + title: 'Layer1', + showLegend: true, + layersContent: 'layer1' + }, + { + catalogType: 'group', + children: [ + { + catalogType: 'layer', + title: 'Layer2', + showLegend: false, + layersContent: 'layer2' + } + ] + } + ] + } + }; + instance._handler = webMapV3Handler; + + const result = instance.getLegendInfos(); + + expect(webMapV3Handler._getLegendInfos).toHaveBeenCalled(); + expect(result).toEqual([ + { showLegend: true, id: 'layer1', title: 'Layer1' }, + { showLegend: false, id: 'layer2', title: 'Layer2' } + ]); + }); + }); +}); diff --git a/test/common/mapping/WebMapV3Spec.js b/test/common/mapping/WebMapV3Spec.js new file mode 100644 index 000000000..0b50cee8e --- /dev/null +++ b/test/common/mapping/WebMapV3Spec.js @@ -0,0 +1,286 @@ +describe('WebMapV3 - _getLegendInfos', () => { + let instance; + + beforeEach(() => { + // Create a minimal mock instance with the method + instance = { + _mapResourceInfo: {}, + _getLegendInfoByCatalog: function(catalog, res = []) { + const { catalogType, children, showLegend, title, layersContent, id } = catalog; + if (catalogType === 'group' && children) { + children.forEach(child => { + this._getLegendInfoByCatalog(child, res); + }); + } + if (catalogType === 'layer') { + res.push({ + showLegend: showLegend !== false, + id: layersContent || id, + title: title + }); + } + }, + _getLegendInfos: function(_mapResourceInfo) { + const mapResourceInfo = _mapResourceInfo || this._mapResourceInfo; + const { catalogs = [] } = mapResourceInfo; + const res = []; + catalogs.forEach((item) => { + this._getLegendInfoByCatalog(item, res); + }); + return res; + } + }; + }); + + describe('_getLegendInfos', () => { + it('should return legend info from catalogs with catalogType layer', () => { + instance._mapResourceInfo = { + catalogs: [ + { + catalogType: 'layer', + title: 'Layer1', + showLegend: true, + layersContent: 'layer1' + }, + { + catalogType: 'layer', + title: 'Layer2', + showLegend: false, + layersContent: 'layer2' + } + ] + }; + + const result = instance._getLegendInfos(); + + expect(result).toEqual([ + { showLegend: true, id: 'layer1', title: 'Layer1' }, + { showLegend: false, id: 'layer2', title: 'Layer2' } + ]); + }); + + it('should recursively process group catalogs', () => { + instance._mapResourceInfo = { + catalogs: [ + { + catalogType: 'group', + children: [ + { + catalogType: 'layer', + title: 'ChildLayer', + showLegend: true, + layersContent: 'childLayer' + } + ] + } + ] + }; + + const result = instance._getLegendInfos(); + + expect(result).toEqual([ + { showLegend: true, id: 'childLayer', title: 'ChildLayer' } + ]); + }); + + it('should default showLegend to true when undefined', () => { + instance._mapResourceInfo = { + catalogs: [ + { + catalogType: 'layer', + title: 'Layer1', + layersContent: 'layer1' + } + ] + }; + + const result = instance._getLegendInfos(); + + expect(result).toEqual([ + { showLegend: true, id: 'layer1', title: 'Layer1' } + ]); + }); + + it('should use id when layersContent is not available', () => { + instance._mapResourceInfo = { + catalogs: [ + { + catalogType: 'layer', + title: 'Layer1', + id: 'layer1' + } + ] + }; + + const result = instance._getLegendInfos(); + + expect(result).toEqual([ + { showLegend: true, id: 'layer1', title: 'Layer1' } + ]); + }); + + it('should return empty array when no catalogs', () => { + instance._mapResourceInfo = { catalogs: [] }; + + const result = instance._getLegendInfos(); + + expect(result).toEqual([]); + }); + + it('should handle nested group catalogs', () => { + instance._mapResourceInfo = { + catalogs: [ + { + catalogType: 'group', + children: [ + { + catalogType: 'group', + children: [ + { + catalogType: 'layer', + title: 'NestedLayer', + showLegend: true, + layersContent: 'nestedLayer' + } + ] + } + ] + } + ] + }; + + const result = instance._getLegendInfos(); + + expect(result).toEqual([ + { showLegend: true, id: 'nestedLayer', title: 'NestedLayer' } + ]); + }); + + it('should handle multiple nested groups', () => { + instance._mapResourceInfo = { + catalogs: [ + { + catalogType: 'group', + title: 'Group1', + children: [ + { + catalogType: 'group', + title: 'Group2', + children: [ + { + catalogType: 'layer', + title: 'DeepLayer', + showLegend: false, + layersContent: 'deepLayer' + } + ] + } + ] + } + ] + }; + + const result = instance._getLegendInfos(); + + expect(result).toEqual([ + { showLegend: false, id: 'deepLayer', title: 'DeepLayer' } + ]); + }); + }); + + describe('_getLegendInfoByCatalog', () => { + it('should skip non-layer and non-group catalogTypes', () => { + const res = []; + const catalog = { + catalogType: 'other', + title: 'Other', + showLegend: true, + layersContent: 'other' + }; + + instance._getLegendInfoByCatalog(catalog, res); + + expect(res).toEqual([]); + }); + + it('should process layer catalog correctly', () => { + const res = []; + const catalog = { + catalogType: 'layer', + title: 'TestLayer', + showLegend: true, + layersContent: 'testLayer' + }; + + instance._getLegendInfoByCatalog(catalog, res); + + expect(res).toEqual([ + { showLegend: true, id: 'testLayer', title: 'TestLayer' } + ]); + }); + + it('should default showLegend to true when not specified', () => { + const res = []; + const catalog = { + catalogType: 'layer', + title: 'TestLayer', + layersContent: 'testLayer' + }; + + instance._getLegendInfoByCatalog(catalog, res); + + expect(res).toEqual([ + { showLegend: true, id: 'testLayer', title: 'TestLayer' } + ]); + }); + + it('should handle group with no children', () => { + const res = []; + const catalog = { + catalogType: 'group', + title: 'EmptyGroup', + children: [] + }; + + instance._getLegendInfoByCatalog(catalog, res); + + expect(res).toEqual([]); + }); + }); + + describe('getLegendInfos (WebMapV3)', () => { + it('should call _handler._getLegendInfos through WebMapBase', () => { + const webMapBase = { + _handler: null, + getLegendInfos: function() { + return (this._handler && this._handler._getLegendInfos()) || []; + } + }; + + const mockLegendInfos = [ + { showLegend: true, id: 'layer1', title: 'Layer1' } + ]; + webMapBase._handler = { + _getLegendInfos: jasmine.createSpy('_getLegendInfos').and.returnValue(mockLegendInfos) + }; + + const result = webMapBase.getLegendInfos(); + + expect(webMapBase._handler._getLegendInfos).toHaveBeenCalled(); + expect(result).toEqual(mockLegendInfos); + }); + + it('should return empty array when _handler is null', () => { + const webMapBase = { + _handler: null, + getLegendInfos: function() { + return (this._handler && this._handler._getLegendInfos()) || []; + } + }; + + const result = webMapBase.getLegendInfos(); + + expect(result).toEqual([]); + }); + }); +}); diff --git a/test/test-main-common.js b/test/test-main-common.js index 1c464236e..026eb9c8d 100644 --- a/test/test-main-common.js +++ b/test/test-main-common.js @@ -246,3 +246,4 @@ import './common/mapping/utils/UtilSpec.js'; import './common/mapping/WebMapBaseSpec.js'; import './common/mapping/WebMapServiceSpec'; import './common/mapping/WebMapV2BaseSpec'; +import './common/mapping/WebMapV3Spec.js'; From 4d46d57659799cfd07a9016dab0d5ba6f718f33d Mon Sep 17 00:00:00 2001 From: luoxiao Date: Thu, 2 Jul 2026 10:08:56 +0800 Subject: [PATCH 08/24] [fix]UT AI-GEN: 0% MiniMax-M2.7 --- test/mapboxgl/mapping/WebMapV2Spec.js | 2 +- test/maplibregl/mapping/WebMapV2Spec.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/mapboxgl/mapping/WebMapV2Spec.js b/test/mapboxgl/mapping/WebMapV2Spec.js index ba66a0ce9..767e2064e 100644 --- a/test/mapboxgl/mapping/WebMapV2Spec.js +++ b/test/mapboxgl/mapping/WebMapV2Spec.js @@ -1402,7 +1402,7 @@ it('add rangeLayer last end === fieldValue', (done) => { } ]; datavizWebmap.cleanLayers(); - expect(getSourceSpy).toHaveBeenCalledTimes(2); + expect(getSourceSpy).toHaveBeenCalledTimes(3); expect(removeSourceSpy).toHaveBeenCalledTimes(1); expect(datavizWebmap._cacheCleanLayers.length).toBe(0); done(); diff --git a/test/maplibregl/mapping/WebMapV2Spec.js b/test/maplibregl/mapping/WebMapV2Spec.js index 78e89354a..36842c808 100644 --- a/test/maplibregl/mapping/WebMapV2Spec.js +++ b/test/maplibregl/mapping/WebMapV2Spec.js @@ -1356,7 +1356,7 @@ describe('maplibregl_WebMapV2', () => { } ]; datavizWebmap.cleanLayers(); - expect(getSourceSpy).toHaveBeenCalledTimes(2); + expect(getSourceSpy).toHaveBeenCalledTimes(3); expect(removeSourceSpy).toHaveBeenCalledTimes(1); expect(datavizWebmap._cacheCleanLayers.length).toBe(0); done(); From d15929e3ca3ab638ed1f763b773ad625574049a0 Mon Sep 17 00:00:00 2001 From: xiongjj Date: Thu, 2 Jul 2026 11:10:51 +0800 Subject: [PATCH 09/24] fix: ut AI-GEN: 0 % --- .../mapping/utils/SourceListModelV3Spec.js | 89 ++++++++++--------- 1 file changed, 49 insertions(+), 40 deletions(-) diff --git a/test/common/mapping/utils/SourceListModelV3Spec.js b/test/common/mapping/utils/SourceListModelV3Spec.js index b31040344..870929be4 100644 --- a/test/common/mapping/utils/SourceListModelV3Spec.js +++ b/test/common/mapping/utils/SourceListModelV3Spec.js @@ -2004,7 +2004,7 @@ describe('SourceListV3', () => { { msDatasetId: 'ms_test_dataset_123', datasetId: 'test_dataset', - datasetName: 'test:test_dataset' + datasetName: 'test_dataset' } ] } @@ -2023,9 +2023,9 @@ describe('SourceListV3', () => { const layers = sourceListModel.getLayers(); const restDataLayer = layers.find(layer => layer.id === 'rest-data-layer'); expect(restDataLayer).toBeTruthy(); - expect(restDataLayer.layerInfo.dataSource.type).toBe('REST_DATA'); - expect(restDataLayer.layerInfo.dataSource.url).toBe('http://localhost:8090/iserver/services/data-test/rest/data'); - expect(restDataLayer.layerInfo.dataSource.dataSourceName).toBe('test:test_dataset'); + expect(restDataLayer.dataSource.type).toBe('REST_DATA'); + expect(restDataLayer.dataSource.url).toBe('http://localhost:8090/iserver/services/data-test/rest/data'); + expect(restDataLayer.dataSource.dataSourceName).toBe('test:test_dataset'); done(); }); @@ -2057,6 +2057,7 @@ describe('SourceListV3', () => { ], version: '3.0.0' }; + map.addSource('rest-map-source', mapInfo.sources['rest-map-source']); const sourceListModel = new SourceListModelV3({ map, mapInfo, @@ -2070,9 +2071,9 @@ describe('SourceListV3', () => { const layers = sourceListModel.getLayers(); const restMapLayer = layers.find(layer => layer.id === 'rest-map-layer'); expect(restMapLayer).toBeTruthy(); - expect(restMapLayer.layerInfo.dataSource.type).toBe('REST_MAP'); - expect(restMapLayer.layerInfo.dataSource.url).toBe('http://localhost:8090/iserver/services/map-test/rest/maps'); - expect(restMapLayer.layerInfo.dataSource.mapName).toBe('test_map'); + expect(restMapLayer.dataSource.type).toBe('REST_MAP'); + expect(restMapLayer.dataSource.url).toBe('http://localhost:8090/iserver/services/map-test/rest/maps'); + expect(restMapLayer.dataSource.mapName).toBe('test_map'); done(); }); @@ -2091,7 +2092,7 @@ describe('SourceListV3', () => { sources: { 'restjsr-source': { type: 'vector', - tiles: ['http://localhost:8090/restjsr/v1/maps/test_map/tiles/{z}/{x}/{y}.mvt'] + tiles: ['http://localhost:8090/restjsr/v1/test_map/tiles/{z}/{x}/{y}.mvt'] } }, layers: [ @@ -2104,6 +2105,7 @@ describe('SourceListV3', () => { ], version: '3.0.0' }; + map.addSource('restjsr-source', mapInfo.sources['restjsr-source']); const sourceListModel = new SourceListModelV3({ map, mapInfo, @@ -2117,9 +2119,9 @@ describe('SourceListV3', () => { const layers = sourceListModel.getLayers(); const restjsrLayer = layers.find(layer => layer.id === 'restjsr-layer'); expect(restjsrLayer).toBeTruthy(); - expect(restjsrLayer.layerInfo.dataSource.type).toBe('RESTJSR'); - expect(restjsrLayer.layerInfo.dataSource.url).toBe('http://localhost:8090/restjsr/v1/vectortile/maps'); - expect(restjsrLayer.layerInfo.dataSource.mapName).toBe('test_map'); + expect(restjsrLayer.dataSource.type).toBe('RESTJSR'); + expect(restjsrLayer.dataSource.url).toBe('http://localhost:8090/restjsr/v1/vectortile/maps'); + expect(restjsrLayer.dataSource.mapName).toBe('test_map'); done(); }); @@ -2151,6 +2153,7 @@ describe('SourceListV3', () => { ], version: '3.0.0' }; + map.addSource('other-vector-source', mapInfo.sources['other-vector-source']); const sourceListModel = new SourceListModelV3({ map, mapInfo, @@ -2164,8 +2167,8 @@ describe('SourceListV3', () => { const layers = sourceListModel.getLayers(); const otherLayer = layers.find(layer => layer.id === 'other-vector-layer'); expect(otherLayer).toBeTruthy(); - expect(otherLayer.layerInfo.dataSource.type).toBe('VECTOR_OTHER'); - expect(otherLayer.layerInfo.dataSource.url).toBe('http://localhost:8080/tiles/{z}/{x}/{y}.mvt'); + expect(otherLayer.dataSource.type).toBe('VECTOR_OTHER'); + expect(otherLayer.dataSource.url).toBe('http://localhost:8080/tiles/{z}/{x}/{y}.mvt'); done(); }); @@ -2213,7 +2216,7 @@ describe('SourceListV3', () => { { msDatasetId: 'ms_test_dataset_123', datasetId: 'test_dataset', - datasetName: 'test:test_dataset' + datasetName: 'test_dataset' } ] } @@ -2232,10 +2235,10 @@ describe('SourceListV3', () => { const layers = sourceListModel.getLayers(); const serviceLayer = layers.find(layer => layer.id === 'service-layer'); expect(serviceLayer).toBeTruthy(); - expect(serviceLayer.layerInfo.dataSource.serviceLayerId).toBe('1.2'); - expect(serviceLayer.layerInfo.dataSource.type).toBe('REST_DATA'); - expect(serviceLayer.layerInfo.dataSource.url).toBe('http://localhost:8090/iserver/services/data-test/rest/data'); - expect(serviceLayer.layerInfo.dataSource.dataSourceName).toBe('test:test_dataset'); + expect(serviceLayer.dataSource.serviceLayerId).toBe('1.2'); + expect(serviceLayer.dataSource.type).toBe('REST_DATA'); + expect(serviceLayer.dataSource.url).toBe('http://localhost:8090/iserver/services/data-test/rest/data'); + expect(serviceLayer.dataSource.dataSourceName).toBe('test:test_dataset'); done(); }); @@ -2282,7 +2285,7 @@ describe('SourceListV3', () => { { msDatasetId: 'ms_test_dataset_123', datasetId: 'test_dataset', - datasetName: 'test:test_dataset' + datasetName: 'test_dataset' } ] } @@ -2301,10 +2304,10 @@ describe('SourceListV3', () => { const layers = sourceListModel.getLayers(); const noServiceLayer = layers.find(layer => layer.id === 'no-service-layer'); expect(noServiceLayer).toBeTruthy(); - expect(noServiceLayer.layerInfo.dataSource.serviceLayerId).toBeUndefined(); - expect(noServiceLayer.layerInfo.dataSource.type).toBe('REST_DATA'); - expect(noServiceLayer.layerInfo.dataSource.url).toBe('http://localhost:8090/iserver/services/data-test/rest/data'); - expect(noServiceLayer.layerInfo.dataSource.dataSourceName).toBe('test:test_dataset'); + expect(noServiceLayer.dataSource.serviceLayerId).toBeUndefined(); + expect(noServiceLayer.dataSource.type).toBe('REST_DATA'); + expect(noServiceLayer.dataSource.url).toBe('http://localhost:8090/iserver/services/data-test/rest/data'); + expect(noServiceLayer.dataSource.dataSourceName).toBe('test:test_dataset'); done(); }); @@ -2352,7 +2355,7 @@ describe('SourceListV3', () => { { msDatasetId: 'ms_test_dataset_123', datasetId: 'test_dataset', - datasetName: 'test:test_dataset' + datasetName: 'test_dataset' } ] } @@ -2371,8 +2374,8 @@ describe('SourceListV3', () => { const layers = sourceListModel.getLayers(); const emptyServiceLayer = layers.find(layer => layer.id === 'empty-service-layer'); expect(emptyServiceLayer).toBeTruthy(); - expect(emptyServiceLayer.layerInfo.dataSource.serviceLayerId).toBe(''); - expect(emptyServiceLayer.layerInfo.dataSource.type).toBe('REST_DATA'); + expect(emptyServiceLayer.dataSource.serviceLayerId).toBe(''); + expect(emptyServiceLayer.dataSource.type).toBe('REST_DATA'); done(); }); @@ -2413,6 +2416,7 @@ describe('SourceListV3', () => { ], datas: [] }; + map.addSource('rest-map-service-source', mapInfo.sources['rest-map-service-source']); const sourceListModel = new SourceListModelV3({ map, mapInfo, @@ -2426,10 +2430,10 @@ describe('SourceListV3', () => { const layers = sourceListModel.getLayers(); const restMapLayer = layers.find(layer => layer.id === 'rest-map-service-layer'); expect(restMapLayer).toBeTruthy(); - expect(restMapLayer.layerInfo.dataSource.type).toBe('REST_MAP'); - expect(restMapLayer.layerInfo.dataSource.url).toBe('http://localhost:8090/iserver/services/map-test/rest/maps'); - expect(restMapLayer.layerInfo.dataSource.mapName).toBe('test_map'); - expect(restMapLayer.layerInfo.dataSource.serviceLayerId).toBe('2'); + expect(restMapLayer.dataSource.type).toBe('REST_MAP'); + expect(restMapLayer.dataSource.url).toBe('http://localhost:8090/iserver/services/map-test/rest/maps'); + expect(restMapLayer.dataSource.mapName).toBe('test_map'); + expect(restMapLayer.dataSource.serviceLayerId).toBe('2'); done(); }); @@ -2448,7 +2452,7 @@ describe('SourceListV3', () => { sources: { 'restjsr-service-source': { type: 'vector', - tiles: ['http://localhost:8090/restjsr/v1/maps/test_map/tiles/{z}/{x}/{y}.mvt'] + tiles: ['http://localhost:8090/restjsr/v1/test_map/tiles/{z}/{x}/{y}.mvt'] } }, layers: [ @@ -2470,6 +2474,7 @@ describe('SourceListV3', () => { ], datas: [] }; + map.addSource('restjsr-service-source', mapInfo.sources['restjsr-service-source']); const sourceListModel = new SourceListModelV3({ map, mapInfo, @@ -2483,10 +2488,10 @@ describe('SourceListV3', () => { const layers = sourceListModel.getLayers(); const restjsrLayer = layers.find(layer => layer.id === 'restjsr-service-layer'); expect(restjsrLayer).toBeTruthy(); - expect(restjsrLayer.layerInfo.dataSource.type).toBe('RESTJSR'); - expect(restjsrLayer.layerInfo.dataSource.url).toBe('http://localhost:8090/restjsr/v1/vectortile/maps'); - expect(restjsrLayer.layerInfo.dataSource.mapName).toBe('test_map'); - expect(restjsrLayer.layerInfo.dataSource.serviceLayerId).toBe('3'); + expect(restjsrLayer.dataSource.type).toBe('RESTJSR'); + expect(restjsrLayer.dataSource.url).toBe('http://localhost:8090/restjsr/v1/vectortile/maps'); + expect(restjsrLayer.dataSource.mapName).toBe('test_map'); + expect(restjsrLayer.dataSource.serviceLayerId).toBe('3'); done(); }); @@ -2527,6 +2532,7 @@ describe('SourceListV3', () => { ], datas: [] }; + map.addSource('other-service-source', mapInfo.sources['other-service-source']); const sourceListModel = new SourceListModelV3({ map, mapInfo, @@ -2540,9 +2546,9 @@ describe('SourceListV3', () => { const layers = sourceListModel.getLayers(); const otherLayer = layers.find(layer => layer.id === 'other-service-layer'); expect(otherLayer).toBeTruthy(); - expect(otherLayer.layerInfo.dataSource.type).toBe('VECTOR_OTHER'); - expect(otherLayer.layerInfo.dataSource.url).toBe('http://localhost:8080/tiles/{z}/{x}/{y}.mvt'); - expect(otherLayer.layerInfo.dataSource.serviceLayerId).toBe('4'); + expect(otherLayer.dataSource.type).toBe('VECTOR_OTHER'); + expect(otherLayer.dataSource.url).toBe('http://localhost:8080/tiles/{z}/{x}/{y}.mvt'); + expect(otherLayer.dataSource.serviceLayerId).toBe('4'); done(); }); @@ -2586,10 +2592,11 @@ describe('SourceListV3', () => { getL7MarkerLayers: () => ({}) } }); - const layers = sourceListModel.getLayers(); + const layers = sourceListModel.getLayers(false); const chartLayer = layers.find(layer => layer.id === 'chart-layer'); expect(chartLayer).toBeTruthy(); - expect(chartLayer.layerInfo.metadata.SM_Layer_Order).toBe('top'); + expect(chartLayer.metadata).toBeTruthy(); + expect(chartLayer.metadata.SM_Layer_Order).toBe('top'); done(); }); @@ -2689,6 +2696,8 @@ describe('SourceListV3', () => { ], version: '3.0.0' }; + map.addSource('overlay-layer', mapInfo.sources['overlay-layer']); + map.addSource('base-layer', mapInfo.sources['base-layer']); const sourceListModel = new SourceListModelV3({ map, mapInfo, From 7417439afcf9776ffba9179709e025807f04896f Mon Sep 17 00:00:00 2001 From: xiongjj Date: Fri, 3 Jul 2026 10:19:16 +0800 Subject: [PATCH 10/24] =?UTF-8?q?fix=EF=BC=9A=20ut=20AI-GEN:=20=200%=20#?= =?UTF-8?q?=20Please=20enter=20the=20commit=20message=20for=20your=20chang?= =?UTF-8?q?es.=20Lines=20starting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/mapboxgl/mapping/WebMapV3Spec.js | 2 +- test/maplibregl/mapping/WebMapV3Spec.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/mapboxgl/mapping/WebMapV3Spec.js b/test/mapboxgl/mapping/WebMapV3Spec.js index 132e04c0b..6dd00b55f 100644 --- a/test/mapboxgl/mapping/WebMapV3Spec.js +++ b/test/mapboxgl/mapping/WebMapV3Spec.js @@ -790,7 +790,7 @@ describe('mapboxgl-webmap3.0', () => { ) ).toBeTruthy(); expect( - appreciableLayers.some((item) => item.id === 'CHINA_DARK' && !Object.keys(item.dataSource).length) + appreciableLayers.some((item) => item.id === 'CHINA_DARK' && !item.dataSource.type) ).toBeTruthy(); spyTest.calls.reset(); done(); diff --git a/test/maplibregl/mapping/WebMapV3Spec.js b/test/maplibregl/mapping/WebMapV3Spec.js index 9628841fb..38be7f8b7 100644 --- a/test/maplibregl/mapping/WebMapV3Spec.js +++ b/test/maplibregl/mapping/WebMapV3Spec.js @@ -716,7 +716,7 @@ describe('maplibregl-webmap3.0', () => { ) ).toBeTruthy(); expect( - appreciableLayers.some((item) => item.id === 'CHINA_DARK' && !Object.keys(item.dataSource).length) + appreciableLayers.some((item) => item.id === 'CHINA_DARK' && !item.dataSource.type) ).toBeTruthy(); spyTest.calls.reset(); done(); From 2fee29505b7b59c0c8959d12bb6f2416522cfca5 Mon Sep 17 00:00:00 2001 From: songyumeng Date: Fri, 3 Jul 2026 14:44:50 +0800 Subject: [PATCH 11/24] =?UTF-8?q?=E3=80=90fix=E3=80=91=E5=B0=BD=E9=87=8F?= =?UTF-8?q?=E4=BF=9D=E6=8C=81=E5=8E=9F=E6=9C=89=E9=80=BB=E8=BE=91=E4=B8=8D?= =?UTF-8?q?=E5=BD=B1=E5=93=8D=EF=BC=8C=E7=9B=B8=E5=85=B3=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E8=A7=81overlay=20is=20TILE=20which=20carried=20credential=20t?= =?UTF-8?q?oken?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AI-GEN: 80% Claude --- src/common/mapping/WebMapV2.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/common/mapping/WebMapV2.js b/src/common/mapping/WebMapV2.js index 48ced5d33..7604afe5a 100644 --- a/src/common/mapping/WebMapV2.js +++ b/src/common/mapping/WebMapV2.js @@ -2897,7 +2897,14 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo, crsMa if (left >= right || bottom >= top) { return false; } - if (Math.abs(left) > 180 || Math.abs(right) > 180 || Math.abs(bottom) > 90 || Math.abs(top) > 90) { + // 容差,吸收浮点计算误差(如 180.00000000000006) + const tolerance = 1e-6; + if ( + Math.abs(left) > 180 + tolerance || + Math.abs(right) > 180 + tolerance || + Math.abs(bottom) > 90 + tolerance || + Math.abs(top) > 90 + tolerance + ) { return false; } if (Math.abs(left) < 0.5 && Math.abs(right) < 0.5 && Math.abs(bottom) < 0.5 && Math.abs(top) < 0.5) { From f6271736a312dfdedb6fc627907d39948c048f2f Mon Sep 17 00:00:00 2001 From: luoxiao Date: Mon, 6 Jul 2026 16:46:25 +0800 Subject: [PATCH 12/24] [feature] mapbox-enhance addLocalIdeographFontFamily AI-GEN: 30% MiniMax-M2.7 --- src/common/mapping/WebMapV2.js | 4 + src/common/mapping/WebMapV3.js | 8 +- src/common/util/MapExtend.js | 6 +- test/common/mapping/WebMapV2Spec.js | 142 ++++++++++++++++++++++++++ test/common/mapping/WebMapV3Spec.js | 128 +++++++++++++++++++++++ test/mapboxgl/mapping/WebMapV2Spec.js | 31 ++++++ test/mapboxgl/mapping/WebMapV3Spec.js | 30 ++++++ test/test-main-common.js | 1 + 8 files changed, 346 insertions(+), 4 deletions(-) create mode 100644 test/common/mapping/WebMapV2Spec.js diff --git a/src/common/mapping/WebMapV2.js b/src/common/mapping/WebMapV2.js index 7604afe5a..e2d9cb4da 100644 --- a/src/common/mapping/WebMapV2.js +++ b/src/common/mapping/WebMapV2.js @@ -60,6 +60,10 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo, crsMa } this._appendLayers = true; this.map = map; + if (this.map.addLocalIdeographFontFamily) { + const fontFamilys = this._getLabelFontFamily(mapInfo); + this.map.addLocalIdeographFontFamily(fontFamilys); + } } this._mapInfo = mapInfo; this._loadLayers(mapInfo, this._taskID); diff --git a/src/common/mapping/WebMapV3.js b/src/common/mapping/WebMapV3.js index 63ff3a369..af8f94b2e 100644 --- a/src/common/mapping/WebMapV3.js +++ b/src/common/mapping/WebMapV3.js @@ -193,6 +193,10 @@ export function createWebMapV3Extending(SuperClass, { MapManager, mapRepo, crsMa sprite }); } + if (this.map.addLocalIdeographFontFamily) { + const fontFamilys = this._getLabelFontFamily(mapInfo); + this.map.addLocalIdeographFontFamily(fontFamilys); + } this._initLayers(); return; } @@ -750,9 +754,9 @@ export function createWebMapV3Extending(SuperClass, { MapManager, mapRepo, crsMa * @function WebMapV3.prototype._getLabelFontFamily * @description 获取图层字体类型。 */ - _getLabelFontFamily() { + _getLabelFontFamily(mapInfo = this._mapInfo) { const fonts = ['sans-serif']; - const layers = this._mapInfo.layers; + const layers = mapInfo.layers; if (layers && layers.length > 0) { layers.forEach((layer) => { const textFont = (layer.layout && layer.layout['text-font']) || []; diff --git a/src/common/util/MapExtend.js b/src/common/util/MapExtend.js index 552f8ec7f..326247013 100644 --- a/src/common/util/MapExtend.js +++ b/src/common/util/MapExtend.js @@ -101,8 +101,10 @@ export function createMapExtendExtending(product) { } return this; } - this.style.setLayoutProperty(layerID, name, value); - this._update(true); + if (this.getLayer(layerID)) { + this.style.setLayoutProperty(layerID, name, value); + this._update(true); + } return this; } diff --git a/test/common/mapping/WebMapV2Spec.js b/test/common/mapping/WebMapV2Spec.js new file mode 100644 index 000000000..8755abc48 --- /dev/null +++ b/test/common/mapping/WebMapV2Spec.js @@ -0,0 +1,142 @@ +import { createWebMapV2Extending } from '../../../src/common/mapping/WebMapV2'; +import { createWebMapV2BaseExtending } from '../../../src/common/mapping/WebMapV2Base'; +import { Events } from '../../../src/common/commontypes'; + +const mockCrsManager = { + isSameProjection: () => true, + registerCRS: () => {}, + getCRS: () => ({}), + getProj4: () => ({ defs: () => null }) +}; + +function createWebMapV2Instance() { + const WebMapV2 = createWebMapV2Extending( + createWebMapV2BaseExtending(Events, 'fire'), + { + MapManager: function (options) { + this.options = options; + }, + mapRepo: { + LngLat: function (lng, lat) { + return { lng, lat }; + }, + CRS: { + get: () => ({ + getExtent: () => [0, 0, 1, 1] + }) + } + }, + crsManager: mockCrsManager, + DataFlowService: function () {}, + GraticuleLayer: {} + } + ); + return new WebMapV2({}, { target: 'map' }); +} + +describe('WebMapV2 - addLocalIdeographFontFamily', () => { + let instance; + + beforeEach(() => { + instance = createWebMapV2Instance(); + }); + + describe('_getLabelFontFamily', () => { + it('should collect fontFamily from labelStyle and append supermapol-icons', () => { + const mapInfo = { + layers: [ + { labelStyle: { fontFamily: 'Arial' } }, + { labelStyle: { fontFamily: 'Microsoft YaHei' } } + ] + }; + + expect(instance._getLabelFontFamily(mapInfo)).toBe('sans-serif,Arial,Microsoft YaHei,supermapol-icons'); + }); + + it('should return default fonts when no layers', () => { + expect(instance._getLabelFontFamily({})).toBe('sans-serif,supermapol-icons'); + }); + + it('should skip layers without labelStyle', () => { + const mapInfo = { + layers: [{ labelStyle: { fontFamily: '黑体' } }, {}] + }; + + expect(instance._getLabelFontFamily(mapInfo)).toBe('sans-serif,黑体,supermapol-icons'); + }); + }); + + describe('initializeMap', () => { + it('should call addLocalIdeographFontFamily when map is provided', async () => { + spyOn(instance, '_registerMapCRS').and.returnValue(Promise.resolve('EPSG:3857')); + spyOn(instance, '_loadLayers'); + const mapInfo = { + layers: [{ labelStyle: { fontFamily: '微软雅黑' } }] + }; + const map = { + getCRS: () => ({ epsgCode: 'EPSG:3857' }), + addLocalIdeographFontFamily: jasmine.createSpy('addLocalIdeographFontFamily') + }; + + await instance.initializeMap(mapInfo, map); + + expect(instance._appendLayers).toBe(true); + expect(instance.map).toBe(map); + expect(map.addLocalIdeographFontFamily).toHaveBeenCalledWith('sans-serif,微软雅黑,supermapol-icons'); + expect(instance._loadLayers).toHaveBeenCalledWith(mapInfo, instance._taskID); + }); + + it('should not call addLocalIdeographFontFamily when map does not support it', async () => { + spyOn(instance, '_registerMapCRS').and.returnValue(Promise.resolve('EPSG:3857')); + spyOn(instance, '_loadLayers'); + const mapInfo = { + layers: [{ labelStyle: { fontFamily: '微软雅黑' } }] + }; + const map = { + getCRS: () => ({ epsgCode: 'EPSG:3857' }) + }; + + await expectAsync(instance.initializeMap(mapInfo, map)).toBeResolved(); + expect(instance._appendLayers).toBe(true); + expect(instance._loadLayers).toHaveBeenCalledWith(mapInfo, instance._taskID); + }); + }); + + describe('_createMap', () => { + it('should pass localIdeographFontFamily to MapManager', () => { + let capturedOptions; + const WebMapV2WithCapture = createWebMapV2Extending( + createWebMapV2BaseExtending(Events, 'fire'), + { + MapManager: function (options) { + capturedOptions = options; + this.on = jasmine.createSpy('on'); + }, + mapRepo: { + LngLat: function (lng, lat) { + return { lng, lat }; + }, + CRS: { + get: () => ({ + getExtent: () => [0, 0, 1, 1] + }) + } + }, + DataFlowService: function () {}, + GraticuleLayer: {}, + crsManager: mockCrsManager + } + ); + const inst = new WebMapV2WithCapture({}, { target: 'map' }); + const mapInfo = { + projection: 'EPSG:3857', + extent: { leftBottom: { x: 0, y: 0 }, rightTop: { x: 1, y: 1 } }, + layers: [{ labelStyle: { fontFamily: '微软雅黑' } }] + }; + inst.baseProjection = 'EPSG:3857'; + inst.fire = jasmine.createSpy('fire'); + inst._createMap(mapInfo); + expect(capturedOptions.localIdeographFontFamily).toBe('sans-serif,微软雅黑,supermapol-icons'); + }); + }); +}); diff --git a/test/common/mapping/WebMapV3Spec.js b/test/common/mapping/WebMapV3Spec.js index 0b50cee8e..8b4b3b943 100644 --- a/test/common/mapping/WebMapV3Spec.js +++ b/test/common/mapping/WebMapV3Spec.js @@ -1,3 +1,131 @@ +import { createWebMapV3Extending } from '../../../src/common/mapping/WebMapV3'; +import { Events } from '../../../src/common/commontypes'; + +const mockCrsManager = { + isSameProjection: () => true, + registerCRS: () => {}, + getCRS: () => ({}), + getProj4: () => ({ defs: () => null }) +}; + +function createWebMapV3Instance() { + const WebMapV3 = createWebMapV3Extending(Events, { + MapManager: function () {}, + mapRepo: { + LngLat: function (lng, lat) { + return { lng, lat }; + }, + CRS: null + }, + crsManager: mockCrsManager, + mapRepoName: 'mapbox-gl', + l7LayerUtil: { + getL7MarkerLayers: () => ({}) + } + }); + return new WebMapV3({}, { target: 'map' }); +} + +describe('WebMapV3 - addLocalIdeographFontFamily', () => { + let instance; + + beforeEach(() => { + instance = createWebMapV3Instance(); + }); + + describe('_getLabelFontFamily', () => { + it('should collect text-font from layer layout', () => { + const mapInfo = { + layers: [ + { layout: { 'text-font': ['Arial Unicode MS Regular'] } }, + { layout: { 'text-font': ['Microsoft YaHei Regular', 'Arial Unicode MS Regular'] } } + ] + }; + + expect(instance._getLabelFontFamily(mapInfo)).toBe( + 'sans-serif,Arial Unicode MS Regular,Microsoft YaHei Regular,Arial Unicode MS Regular' + ); + }); + + it('should return sans-serif when no layers', () => { + expect(instance._getLabelFontFamily({})).toBe('sans-serif'); + }); + + it('should skip layers without text-font', () => { + const mapInfo = { + layers: [{ layout: { 'text-font': ['PingFang SC Regular'] } }, {}] + }; + + expect(instance._getLabelFontFamily(mapInfo)).toBe('sans-serif,PingFang SC Regular'); + }); + }); + + describe('initializeMap', () => { + it('should call addLocalIdeographFontFamily when map is provided', () => { + spyOn(instance, '_initLayers'); + const mapInfo = { + crs: 'EPSG:3857', + layers: [{ layout: { 'text-font': ['PingFang SC Regular'] } }] + }; + const map = { + addLocalIdeographFontFamily: jasmine.createSpy('addLocalIdeographFontFamily') + }; + + instance.initializeMap(mapInfo, map); + + expect(instance._appendLayers).toBe(true); + expect(instance.map).toBe(map); + expect(map.addLocalIdeographFontFamily).toHaveBeenCalledWith('sans-serif,PingFang SC Regular'); + expect(instance._initLayers).toHaveBeenCalled(); + }); + + it('should not call addLocalIdeographFontFamily when map does not support it', () => { + spyOn(instance, '_initLayers'); + const mapInfo = { + crs: 'EPSG:3857', + layers: [{ layout: { 'text-font': ['PingFang SC Regular'] } }] + }; + const map = {}; + + expect(() => instance.initializeMap(mapInfo, map)).not.toThrow(); + expect(instance._appendLayers).toBe(true); + expect(instance._initLayers).toHaveBeenCalled(); + }); + }); + + describe('_createMap', () => { + it('should pass localIdeographFontFamily to MapManager', () => { + let capturedOptions; + const WebMapV3WithCapture = createWebMapV3Extending(Events, { + MapManager: function (options) { + capturedOptions = options; + this.on = jasmine.createSpy('on'); + }, + mapRepo: { + LngLat: function (lng, lat) { + return { lng, lat }; + }, + CRS: null + }, + mapRepoName: 'mapbox-gl', + l7LayerUtil: { + getL7MarkerLayers: () => ({}) + }, + crsManager: mockCrsManager + }); + const inst = new WebMapV3WithCapture({}, { target: 'map' }); + inst._mapInfo = { + crs: 'EPSG:3857', + layers: [{ layout: { 'text-font': ['PingFang SC Regular'] } }] + }; + inst._baseProjection = 'EPSG:3857'; + inst.fire = jasmine.createSpy('fire'); + inst._createMap(); + expect(capturedOptions.localIdeographFontFamily).toBe('sans-serif,PingFang SC Regular'); + }); + }); +}); + describe('WebMapV3 - _getLegendInfos', () => { let instance; diff --git a/test/mapboxgl/mapping/WebMapV2Spec.js b/test/mapboxgl/mapping/WebMapV2Spec.js index 767e2064e..e485c1878 100644 --- a/test/mapboxgl/mapping/WebMapV2Spec.js +++ b/test/mapboxgl/mapping/WebMapV2Spec.js @@ -4617,4 +4617,35 @@ it('add rangeLayer last end === fieldValue', (done) => { done(); }); }); + + it('_getLabelFontFamily should collect labelStyle fontFamily', () => { + datavizWebmap = new WebMap('', { ...commonOption }); + const WebMapV2 = datavizWebmap._createWebMapFactory('WebMap2'); + const webMapV2 = new WebMapV2('', commonOption, { crs: 'EPSG:3857' }); + const mapInfo = { + layers: [ + { labelStyle: { fontFamily: 'Arial' } }, + { labelStyle: { fontFamily: 'Microsoft YaHei' } } + ] + }; + expect(webMapV2._getLabelFontFamily(mapInfo)).toBe('sans-serif,Arial,Microsoft YaHei,supermapol-icons'); + }); + + it('initializeMap should call addLocalIdeographFontFamily when appending to existing map', async () => { + datavizWebmap = new WebMap('', { ...commonOption }); + const WebMapV2 = datavizWebmap._createWebMapFactory('WebMap2'); + const webMapV2 = new WebMapV2('', commonOption, { crs: 'EPSG:3857' }); + spyOn(webMapV2, '_registerMapCRS').and.returnValue(Promise.resolve('EPSG:3857')); + spyOn(webMapV2, '_loadLayers'); + const mapInfo = { + layers: [{ labelStyle: { fontFamily: '微软雅黑' } }] + }; + const map = { + getCRS: () => ({ epsgCode: 'EPSG:3857' }), + addLocalIdeographFontFamily: jasmine.createSpy('addLocalIdeographFontFamily') + }; + await webMapV2.initializeMap(mapInfo, map); + expect(webMapV2._appendLayers).toBe(true); + expect(map.addLocalIdeographFontFamily).toHaveBeenCalledWith('sans-serif,微软雅黑,supermapol-icons'); + }); }); diff --git a/test/mapboxgl/mapping/WebMapV3Spec.js b/test/mapboxgl/mapping/WebMapV3Spec.js index 6dd00b55f..8fd0eefb8 100644 --- a/test/mapboxgl/mapping/WebMapV3Spec.js +++ b/test/mapboxgl/mapping/WebMapV3Spec.js @@ -8427,4 +8427,34 @@ describe('mapboxgl-webmap3.0', () => { done(); }); }); + + it('_getLabelFontFamily should collect text-font from layer layout', () => { + mapstudioWebmap = new WebMapV3({}, { server, target: 'map' }); + const mapInfo = { + layers: [ + { layout: { 'text-font': ['Arial Unicode MS Regular'] } }, + { layout: { 'text-font': ['Microsoft YaHei Regular'] } } + ] + }; + expect(mapstudioWebmap._getLabelFontFamily(mapInfo)).toBe( + 'sans-serif,Arial Unicode MS Regular,Microsoft YaHei Regular' + ); + }); + + it('initializeMap should call addLocalIdeographFontFamily when appending to existing map', () => { + mapstudioWebmap = new WebMapV3({}, { server, target: 'map' }); + spyOn(mapstudioWebmap, '_initLayers'); + const mapInfo = { + crs: 'EPSG:3857', + layers: [{ layout: { 'text-font': ['PingFang SC Regular'] } }] + }; + const map = { + getCRS: () => ({ epsgCode: 'EPSG:3857' }), + addLocalIdeographFontFamily: jasmine.createSpy('addLocalIdeographFontFamily'), + remove: jasmine.createSpy('remove') + }; + mapstudioWebmap.initializeMap(mapInfo, map); + expect(mapstudioWebmap._appendLayers).toBe(true); + expect(map.addLocalIdeographFontFamily).toHaveBeenCalledWith('sans-serif,PingFang SC Regular'); + }); }); diff --git a/test/test-main-common.js b/test/test-main-common.js index 026eb9c8d..07769f327 100644 --- a/test/test-main-common.js +++ b/test/test-main-common.js @@ -247,3 +247,4 @@ import './common/mapping/WebMapBaseSpec.js'; import './common/mapping/WebMapServiceSpec'; import './common/mapping/WebMapV2BaseSpec'; import './common/mapping/WebMapV3Spec.js'; +import './common/mapping/WebMapV2Spec.js'; From 1e99ff5b3508bb18978239ce7ea0446c3973c9f1 Mon Sep 17 00:00:00 2001 From: luoxiao Date: Wed, 8 Jul 2026 18:58:02 +0800 Subject: [PATCH 13/24] [fix]UT AI-GEN: 100% Cursor --- test/common/mapping/WebMapV2Spec.js | 12 ++++++++---- test/common/mapping/WebMapV3Spec.js | 2 ++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/test/common/mapping/WebMapV2Spec.js b/test/common/mapping/WebMapV2Spec.js index 8755abc48..6eb903167 100644 --- a/test/common/mapping/WebMapV2Spec.js +++ b/test/common/mapping/WebMapV2Spec.js @@ -103,7 +103,7 @@ describe('WebMapV2 - addLocalIdeographFontFamily', () => { }); describe('_createMap', () => { - it('should pass localIdeographFontFamily to MapManager', () => { + it('should pass localIdeographFontFamily to MapManager', async () => { let capturedOptions; const WebMapV2WithCapture = createWebMapV2Extending( createWebMapV2BaseExtending(Events, 'fire'), @@ -118,7 +118,8 @@ describe('WebMapV2 - addLocalIdeographFontFamily', () => { }, CRS: { get: () => ({ - getExtent: () => [0, 0, 1, 1] + getExtent: () => [0, 0, 1, 1], + unit: 'degree' }) } }, @@ -127,15 +128,18 @@ describe('WebMapV2 - addLocalIdeographFontFamily', () => { crsManager: mockCrsManager } ); - const inst = new WebMapV2WithCapture({}, { target: 'map' }); + const inst = new WebMapV2WithCapture({}, { target: 'map' }, { bounds: [[0, 0], [1, 1]], minZoom: 0, maxZoom: 22 }); const mapInfo = { projection: 'EPSG:3857', extent: { leftBottom: { x: 0, y: 0 }, rightTop: { x: 1, y: 1 } }, + baseLayer: { tileSize: 256 }, layers: [{ labelStyle: { fontFamily: '微软雅黑' } }] }; inst.baseProjection = 'EPSG:3857'; inst.fire = jasmine.createSpy('fire'); - inst._createMap(mapInfo); + spyOn(inst, '_getMapCenter').and.returnValue({ lng: 0, lat: 0 }); + await inst._createMap(mapInfo); + expect(capturedOptions).toBeDefined(); expect(capturedOptions.localIdeographFontFamily).toBe('sans-serif,微软雅黑,supermapol-icons'); }); }); diff --git a/test/common/mapping/WebMapV3Spec.js b/test/common/mapping/WebMapV3Spec.js index 8b4b3b943..9e55a565a 100644 --- a/test/common/mapping/WebMapV3Spec.js +++ b/test/common/mapping/WebMapV3Spec.js @@ -116,11 +116,13 @@ describe('WebMapV3 - addLocalIdeographFontFamily', () => { const inst = new WebMapV3WithCapture({}, { target: 'map' }); inst._mapInfo = { crs: 'EPSG:3857', + center: { lng: 0, lat: 0 }, layers: [{ layout: { 'text-font': ['PingFang SC Regular'] } }] }; inst._baseProjection = 'EPSG:3857'; inst.fire = jasmine.createSpy('fire'); inst._createMap(); + expect(capturedOptions).toBeDefined(); expect(capturedOptions.localIdeographFontFamily).toBe('sans-serif,PingFang SC Regular'); }); }); From 51f88da38fd595de4dbc166dd087a0227cf68a77 Mon Sep 17 00:00:00 2001 From: luoxiao Date: Thu, 9 Jul 2026 10:04:41 +0800 Subject: [PATCH 14/24] [fix]UT AI-GEN: 100% Cursor --- test/common/mapping/WebMapV2Spec.js | 1 + test/mapboxgl/mapping/WebMapV2Spec.js | 37 +++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/test/common/mapping/WebMapV2Spec.js b/test/common/mapping/WebMapV2Spec.js index 6eb903167..dddc37ad5 100644 --- a/test/common/mapping/WebMapV2Spec.js +++ b/test/common/mapping/WebMapV2Spec.js @@ -141,6 +141,7 @@ describe('WebMapV2 - addLocalIdeographFontFamily', () => { await inst._createMap(mapInfo); expect(capturedOptions).toBeDefined(); expect(capturedOptions.localIdeographFontFamily).toBe('sans-serif,微软雅黑,supermapol-icons'); + await inst.clean(false); }); }); }); diff --git a/test/mapboxgl/mapping/WebMapV2Spec.js b/test/mapboxgl/mapping/WebMapV2Spec.js index e485c1878..48cec2d89 100644 --- a/test/mapboxgl/mapping/WebMapV2Spec.js +++ b/test/mapboxgl/mapping/WebMapV2Spec.js @@ -1,6 +1,11 @@ import mapboxgl from 'mapbox-gl'; import mbglmap, { CRS, proj4, revertCRS } from '../../tool/mock_mapboxgl_map'; import { WebMap } from '../../../src/mapboxgl/mapping/WebMap'; +import { createWebMapV2Extending } from '../../../src/common/mapping/WebMapV2'; +import { createWebMapV2BaseExtending } from '../../../src/common/mapping/WebMapV2Base'; +import { createMapClassExtending } from '../../../src/common/mapping/MapBase'; +import { CRSManager } from '../../../src/mapboxgl/mapping/webmap/CRSManager'; +import { GraticuleLayer } from '../../../src/mapboxgl/overlay/GraticuleLayer'; import * as MapManagerUtil from '../../../src/mapboxgl/mapping/webmap/MapManager'; import { ArrayStatistic } from '../../../src/common/util/ArrayStatistic'; import { FetchRequest } from '../../../src/common/util/FetchRequest'; @@ -141,6 +146,20 @@ function DataFlowService(serviceUrl) { }; } +function createMapboxWebMapV2Factory() { + const crsManager = new CRSManager(); + return createWebMapV2Extending( + createWebMapV2BaseExtending(createMapClassExtending(mapboxgl.Evented), 'fire'), + { + MapManager: MapManagerUtil.default, + mapRepo: mapboxgl, + crsManager, + DataFlowService: DataFlowServiceUtil.DataFlowService, + GraticuleLayer + } + ); +} + describe('mapboxgl_WebMapV2', () => { var originalTimeout, testDiv; var server = 'http://fack:8190/iportal/'; @@ -336,7 +355,16 @@ describe('mapboxgl_WebMapV2', () => { }); afterEach(() => { if (datavizWebmap) { - datavizWebmap.clean(); + if (datavizWebmap._handler) { + if (datavizWebmap._handler._sendMapToUser) { + spyOn(datavizWebmap._handler, '_sendMapToUser').and.stub(); + } + datavizWebmap._handler.clean(false); + datavizWebmap._handler = null; + } + if (datavizWebmap.map) { + datavizWebmap.clean(); + } datavizWebmap.map = null; datavizWebmap = null; } @@ -4619,8 +4647,7 @@ it('add rangeLayer last end === fieldValue', (done) => { }); it('_getLabelFontFamily should collect labelStyle fontFamily', () => { - datavizWebmap = new WebMap('', { ...commonOption }); - const WebMapV2 = datavizWebmap._createWebMapFactory('WebMap2'); + const WebMapV2 = createMapboxWebMapV2Factory(); const webMapV2 = new WebMapV2('', commonOption, { crs: 'EPSG:3857' }); const mapInfo = { layers: [ @@ -4632,8 +4659,7 @@ it('add rangeLayer last end === fieldValue', (done) => { }); it('initializeMap should call addLocalIdeographFontFamily when appending to existing map', async () => { - datavizWebmap = new WebMap('', { ...commonOption }); - const WebMapV2 = datavizWebmap._createWebMapFactory('WebMap2'); + const WebMapV2 = createMapboxWebMapV2Factory(); const webMapV2 = new WebMapV2('', commonOption, { crs: 'EPSG:3857' }); spyOn(webMapV2, '_registerMapCRS').and.returnValue(Promise.resolve('EPSG:3857')); spyOn(webMapV2, '_loadLayers'); @@ -4647,5 +4673,6 @@ it('add rangeLayer last end === fieldValue', (done) => { await webMapV2.initializeMap(mapInfo, map); expect(webMapV2._appendLayers).toBe(true); expect(map.addLocalIdeographFontFamily).toHaveBeenCalledWith('sans-serif,微软雅黑,supermapol-icons'); + webMapV2.clean(false); }); }); From e105d6e51909f8b3bb4581a14583b975ff591c62 Mon Sep 17 00:00:00 2001 From: luoxiao Date: Thu, 9 Jul 2026 16:53:45 +0800 Subject: [PATCH 15/24] =?UTF-8?q?[fix]=20=3F.=E8=AF=AD=E6=B3=95=E5=AF=BC?= =?UTF-8?q?=E8=87=B4es6=E6=89=93=E5=8C=85=E4=B8=8D=E5=AF=B9=20AI-GEN:=2070?= =?UTF-8?q?%=20Cursor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/mapping/WebMapV2.js | 2 +- test/common/mapping/WebMapBaseSpec.js | 2 +- test/common/mapping/WebMapV2Spec.js | 49 +++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/common/mapping/WebMapV2.js b/src/common/mapping/WebMapV2.js index e2d9cb4da..95f6973f7 100644 --- a/src/common/mapping/WebMapV2.js +++ b/src/common/mapping/WebMapV2.js @@ -219,7 +219,7 @@ export function createWebMapV2Extending(SuperClass, { MapManager, mapRepo, crsMa return layers.map((layer) => { const { legendSetting, name, layerID: layerId } = layer; return { - showLegend: legendSetting ? legendSetting?.isShow !== false : false, + showLegend: legendSetting ? legendSetting.isShow : false, id: layerId, title: name }; diff --git a/test/common/mapping/WebMapBaseSpec.js b/test/common/mapping/WebMapBaseSpec.js index f40098b9f..26a0aab3a 100644 --- a/test/common/mapping/WebMapBaseSpec.js +++ b/test/common/mapping/WebMapBaseSpec.js @@ -146,7 +146,7 @@ describe('WebMapBase - Handler Methods', () => { return layers.map((layer) => { const { legendSetting, name, layerID: layerId } = layer; return { - showLegend: legendSetting?.isShow !== false, + showLegend: legendSetting ? legendSetting.isShow : false, id: layerId, title: name }; diff --git a/test/common/mapping/WebMapV2Spec.js b/test/common/mapping/WebMapV2Spec.js index dddc37ad5..9e21bd05d 100644 --- a/test/common/mapping/WebMapV2Spec.js +++ b/test/common/mapping/WebMapV2Spec.js @@ -145,3 +145,52 @@ describe('WebMapV2 - addLocalIdeographFontFamily', () => { }); }); }); + +describe('WebMapV2 - _getLegendInfos', () => { + let instance; + + beforeEach(() => { + instance = createWebMapV2Instance(); + }); + + it('should return showLegend true when isShow is true', () => { + instance._mapInfo = { + layers: [{ name: 'Layer1', layerID: 'layer1', legendSetting: { isShow: true } }] + }; + expect(instance._getLegendInfos()).toEqual([ + { showLegend: true, id: 'layer1', title: 'Layer1' } + ]); + }); + + it('should return showLegend false when isShow is false', () => { + instance._mapInfo = { + layers: [{ name: 'Layer2', layerID: 'layer2', legendSetting: { isShow: false } }] + }; + expect(instance._getLegendInfos()).toEqual([ + { showLegend: false, id: 'layer2', title: 'Layer2' } + ]); + }); + + it('should return showLegend false when legendSetting exists without isShow', () => { + instance._mapInfo = { + layers: [{ name: 'Layer3', layerID: 'layer3', legendSetting: {} }] + }; + expect(instance._getLegendInfos()).toEqual([ + { showLegend: false, id: 'layer3', title: 'Layer3' } + ]); + }); + + it('should return showLegend false when legendSetting is absent', () => { + instance._mapInfo = { + layers: [{ name: 'Layer4', layerID: 'layer4' }] + }; + expect(instance._getLegendInfos()).toEqual([ + { showLegend: false, id: 'layer4', title: 'Layer4' } + ]); + }); + + it('should return empty array when no layers', () => { + instance._mapInfo = {}; + expect(instance._getLegendInfos()).toEqual([]); + }); +}); From b14806f0db9d437e056011dd420ebf4384885297 Mon Sep 17 00:00:00 2001 From: luoxiao Date: Thu, 9 Jul 2026 17:13:25 +0800 Subject: [PATCH 16/24] [fix]UT AI-GEN: 0% Cursor --- test/common/mapping/WebMapV2Spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/common/mapping/WebMapV2Spec.js b/test/common/mapping/WebMapV2Spec.js index 9e21bd05d..52047083f 100644 --- a/test/common/mapping/WebMapV2Spec.js +++ b/test/common/mapping/WebMapV2Spec.js @@ -176,7 +176,7 @@ describe('WebMapV2 - _getLegendInfos', () => { layers: [{ name: 'Layer3', layerID: 'layer3', legendSetting: {} }] }; expect(instance._getLegendInfos()).toEqual([ - { showLegend: false, id: 'layer3', title: 'Layer3' } + { showLegend: undefined, id: 'layer3', title: 'Layer3' } ]); }); From b5cba67d82c84d33ae87190fc7db59b8377eac1c Mon Sep 17 00:00:00 2001 From: luoxiao Date: Fri, 10 Jul 2026 10:02:39 +0800 Subject: [PATCH 17/24] [fix]UT SONAR AI-GEN: 70% Cursor --- test/common/mapping/WebMapBaseSpec.js | 242 +++++++++++++------------- test/common/mapping/WebMapV2Spec.js | 17 +- test/common/mapping/WebMapV3Spec.js | 116 +++++------- 3 files changed, 178 insertions(+), 197 deletions(-) diff --git a/test/common/mapping/WebMapBaseSpec.js b/test/common/mapping/WebMapBaseSpec.js index 26a0aab3a..729c475f8 100644 --- a/test/common/mapping/WebMapBaseSpec.js +++ b/test/common/mapping/WebMapBaseSpec.js @@ -1,4 +1,11 @@ import { createMapClassExtending } from '../../../src/common/mapping/MapBase'; +import { createWebMapBaseExtending } from '../../../src/common/mapping/WebMapBase'; +import { Events } from '../../../src/common/commontypes'; + +function createWebMapBaseInstance() { + const WebMapBase = createWebMapBaseExtending(Events, { mapRepo: {} }); + return new WebMapBase('', { target: 'map' }); +} describe('WebMapBase - MapBase Methods', () => { let MapBase; @@ -80,150 +87,141 @@ describe('WebMapBase - MapBase Methods', () => { }); }); -describe('WebMapBase - Handler Methods', () => { +describe('WebMapBase - getLegendInfos', () => { let instance; let mockHandler; beforeEach(() => { - const MapBase = createMapClassExtending(); - instance = new MapBase(); - instance.getLegendInfos = function() { - return (this._handler && this._handler._getLegendInfos()) || []; - }; - // Mock WebMapV2 handler + instance = createWebMapBaseInstance(); mockHandler = { - _getLegendInfos: jasmine.createSpy('_getLegendInfos').and.callFake(() => { - return [ - { showLegend: true, id: 'layer1', title: 'Layer 1' }, - { showLegend: false, id: 'layer2', title: 'Layer 2' } - ]; - }) + _getLegendInfos: jasmine.createSpy('_getLegendInfos').and.returnValue([ + { showLegend: true, id: 'layer1', title: 'Layer 1' }, + { showLegend: false, id: 'layer2', title: 'Layer 2' } + ]) }; instance._handler = mockHandler; }); - describe('getLegendInfos', () => { - it('should call handler._getLegendInfos and return result', () => { - const result = instance.getLegendInfos(); - - expect(mockHandler._getLegendInfos).toHaveBeenCalled(); - expect(result).toEqual([ - { showLegend: true, id: 'layer1', title: 'Layer 1' }, - { showLegend: false, id: 'layer2', title: 'Layer 2' } - ]); - }); + it('should call handler._getLegendInfos and return result', () => { + const result = instance.getLegendInfos(); - it('should return empty array when handler._getLegendInfos returns null', () => { - mockHandler._getLegendInfos.and.returnValue(null); + expect(mockHandler._getLegendInfos).toHaveBeenCalled(); + expect(result).toEqual([ + { showLegend: true, id: 'layer1', title: 'Layer 1' }, + { showLegend: false, id: 'layer2', title: 'Layer 2' } + ]); + }); - const result = instance.getLegendInfos(); + it('should return empty array when handler._getLegendInfos returns empty array', () => { + mockHandler._getLegendInfos.and.returnValue([]); - expect(result).toEqual([]); - }); + expect(instance.getLegendInfos()).toEqual([]); + }); - it('should return empty array when handler._getLegendInfos returns undefined', () => { - mockHandler._getLegendInfos.and.returnValue(undefined); + it('should return empty array when handler._getLegendInfos returns null', () => { + mockHandler._getLegendInfos.and.returnValue(null); - const result = instance.getLegendInfos(); + expect(instance.getLegendInfos()).toEqual([]); + }); - expect(result).toEqual([]); - }); + it('should return empty array when handler._getLegendInfos returns undefined', () => { + mockHandler._getLegendInfos.and.returnValue(undefined); - it('should return empty array when handler is null', () => { - instance._handler = null; + expect(instance.getLegendInfos()).toEqual([]); + }); - const result = instance.getLegendInfos(); + it('should return empty array when handler is null', () => { + instance._handler = null; - expect(result).toEqual([]); - }); + expect(instance.getLegendInfos()).toEqual([]); }); - describe('getLegendInfos with WebMapV2-like handler', () => { - it('should return legend info from _mapInfo.layers (WebMapV2)', () => { - const webMapV2Handler = { - _getLegendInfos: jasmine.createSpy('_getLegendInfos').and.callFake(function() { - const { layers = [] } = this._mapInfo || {}; - return layers.map((layer) => { - const { legendSetting, name, layerID: layerId } = layer; - return { - showLegend: legendSetting ? legendSetting.isShow : false, - id: layerId, - title: name - }; - }); - }), - _mapInfo: { - layers: [ - { name: 'Layer1', layerID: 'layer1', legendSetting: { isShow: true } }, - { name: 'Layer2', layerID: 'layer2', legendSetting: { isShow: false } } - ] - } - }; - instance._handler = webMapV2Handler; - - const result = instance.getLegendInfos(); - - expect(webMapV2Handler._getLegendInfos).toHaveBeenCalled(); - expect(result).toEqual([ - { showLegend: true, id: 'layer1', title: 'Layer1' }, - { showLegend: false, id: 'layer2', title: 'Layer2' } - ]); - }); + it('should return empty array when handler is undefined', () => { + instance._handler = undefined; + + expect(instance.getLegendInfos()).toEqual([]); }); - describe('getLegendInfos with WebMapV3-like handler', () => { - it('should return legend info from catalogs (WebMapV3)', () => { - const webMapV3Handler = { - _getLegendInfos: jasmine.createSpy('_getLegendInfos').and.callFake(function() { - const { catalogs = [] } = this._mapResourceInfo || {}; - const res = []; - const processCatalog = (catalog) => { - const { catalogType, children, showLegend, title, layersContent, id } = catalog; - if (catalogType === 'group' && children) { - children.forEach(child => processCatalog(child)); - } - if (catalogType === 'layer') { - res.push({ - showLegend: showLegend !== false, - id: layersContent || id, - title: title - }); - } + it('should return legend info from WebMapV2-like handler', () => { + const webMapV2Handler = { + _getLegendInfos: jasmine.createSpy('_getLegendInfos').and.callFake(function() { + const { layers = [] } = this._mapInfo || {}; + return layers.map((layer) => { + const { legendSetting, name, layerID: layerId } = layer; + return { + showLegend: legendSetting ? legendSetting.isShow : false, + id: layerId, + title: name }; - catalogs.forEach(item => processCatalog(item)); - return res; - }), - _mapResourceInfo: { - catalogs: [ - { - catalogType: 'layer', - title: 'Layer1', - showLegend: true, - layersContent: 'layer1' - }, - { - catalogType: 'group', - children: [ - { - catalogType: 'layer', - title: 'Layer2', - showLegend: false, - layersContent: 'layer2' - } - ] - } - ] - } - }; - instance._handler = webMapV3Handler; - - const result = instance.getLegendInfos(); - - expect(webMapV3Handler._getLegendInfos).toHaveBeenCalled(); - expect(result).toEqual([ - { showLegend: true, id: 'layer1', title: 'Layer1' }, - { showLegend: false, id: 'layer2', title: 'Layer2' } - ]); - }); + }); + }), + _mapInfo: { + layers: [ + { name: 'Layer1', layerID: 'layer1', legendSetting: { isShow: true } }, + { name: 'Layer2', layerID: 'layer2', legendSetting: { isShow: false } }, + { name: 'Layer3', layerID: 'layer3', legendSetting: {} } + ] + } + }; + instance._handler = webMapV2Handler; + + expect(instance.getLegendInfos()).toEqual([ + { showLegend: true, id: 'layer1', title: 'Layer1' }, + { showLegend: false, id: 'layer2', title: 'Layer2' }, + { showLegend: undefined, id: 'layer3', title: 'Layer3' } + ]); + expect(webMapV2Handler._getLegendInfos).toHaveBeenCalled(); + }); + + it('should return legend info from WebMapV3-like handler', () => { + const webMapV3Handler = { + _getLegendInfos: jasmine.createSpy('_getLegendInfos').and.callFake(function() { + const { catalogs = [] } = this._mapResourceInfo || {}; + const res = []; + const processCatalog = (catalog) => { + const { catalogType, children, showLegend, title, id } = catalog; + if (catalogType === 'group' && children) { + children.forEach(child => processCatalog(child)); + } + if (catalogType === 'layer') { + res.push({ + showLegend: showLegend !== false, + id: id, + title: title + }); + } + }; + catalogs.forEach(item => processCatalog(item)); + return res; + }), + _mapResourceInfo: { + catalogs: [ + { + catalogType: 'layer', + title: 'Layer1', + showLegend: true, + id: 'layer1' + }, + { + catalogType: 'group', + children: [ + { + catalogType: 'layer', + title: 'Layer2', + showLegend: false, + id: 'layer2' + } + ] + } + ] + } + }; + instance._handler = webMapV3Handler; + + expect(instance.getLegendInfos()).toEqual([ + { showLegend: true, id: 'layer1', title: 'Layer1' }, + { showLegend: false, id: 'layer2', title: 'Layer2' } + ]); + expect(webMapV3Handler._getLegendInfos).toHaveBeenCalled(); }); }); diff --git a/test/common/mapping/WebMapV2Spec.js b/test/common/mapping/WebMapV2Spec.js index 52047083f..5e4f839e5 100644 --- a/test/common/mapping/WebMapV2Spec.js +++ b/test/common/mapping/WebMapV2Spec.js @@ -171,7 +171,7 @@ describe('WebMapV2 - _getLegendInfos', () => { ]); }); - it('should return showLegend false when legendSetting exists without isShow', () => { + it('should return showLegend undefined when legendSetting exists without isShow', () => { instance._mapInfo = { layers: [{ name: 'Layer3', layerID: 'layer3', legendSetting: {} }] }; @@ -193,4 +193,19 @@ describe('WebMapV2 - _getLegendInfos', () => { instance._mapInfo = {}; expect(instance._getLegendInfos()).toEqual([]); }); + + it('should return legend info for multiple layers', () => { + instance._mapInfo = { + layers: [ + { name: 'Layer1', layerID: 'layer1', legendSetting: { isShow: true } }, + { name: 'Layer2', layerID: 'layer2' }, + { name: 'Layer3', layerID: 'layer3', legendSetting: { isShow: false } } + ] + }; + expect(instance._getLegendInfos()).toEqual([ + { showLegend: true, id: 'layer1', title: 'Layer1' }, + { showLegend: false, id: 'layer2', title: 'Layer2' }, + { showLegend: false, id: 'layer3', title: 'Layer3' } + ]); + }); }); diff --git a/test/common/mapping/WebMapV3Spec.js b/test/common/mapping/WebMapV3Spec.js index 9e55a565a..d5d19586d 100644 --- a/test/common/mapping/WebMapV3Spec.js +++ b/test/common/mapping/WebMapV3Spec.js @@ -132,34 +132,7 @@ describe('WebMapV3 - _getLegendInfos', () => { let instance; beforeEach(() => { - // Create a minimal mock instance with the method - instance = { - _mapResourceInfo: {}, - _getLegendInfoByCatalog: function(catalog, res = []) { - const { catalogType, children, showLegend, title, layersContent, id } = catalog; - if (catalogType === 'group' && children) { - children.forEach(child => { - this._getLegendInfoByCatalog(child, res); - }); - } - if (catalogType === 'layer') { - res.push({ - showLegend: showLegend !== false, - id: layersContent || id, - title: title - }); - } - }, - _getLegendInfos: function(_mapResourceInfo) { - const mapResourceInfo = _mapResourceInfo || this._mapResourceInfo; - const { catalogs = [] } = mapResourceInfo; - const res = []; - catalogs.forEach((item) => { - this._getLegendInfoByCatalog(item, res); - }); - return res; - } - }; + instance = createWebMapV3Instance(); }); describe('_getLegendInfos', () => { @@ -170,20 +143,18 @@ describe('WebMapV3 - _getLegendInfos', () => { catalogType: 'layer', title: 'Layer1', showLegend: true, - layersContent: 'layer1' + id: 'layer1' }, { catalogType: 'layer', title: 'Layer2', showLegend: false, - layersContent: 'layer2' + id: 'layer2' } ] }; - const result = instance._getLegendInfos(); - - expect(result).toEqual([ + expect(instance._getLegendInfos()).toEqual([ { showLegend: true, id: 'layer1', title: 'Layer1' }, { showLegend: false, id: 'layer2', title: 'Layer2' } ]); @@ -199,16 +170,14 @@ describe('WebMapV3 - _getLegendInfos', () => { catalogType: 'layer', title: 'ChildLayer', showLegend: true, - layersContent: 'childLayer' + id: 'childLayer' } ] } ] }; - const result = instance._getLegendInfos(); - - expect(result).toEqual([ + expect(instance._getLegendInfos()).toEqual([ { showLegend: true, id: 'childLayer', title: 'ChildLayer' } ]); }); @@ -219,19 +188,17 @@ describe('WebMapV3 - _getLegendInfos', () => { { catalogType: 'layer', title: 'Layer1', - layersContent: 'layer1' + id: 'layer1' } ] }; - const result = instance._getLegendInfos(); - - expect(result).toEqual([ + expect(instance._getLegendInfos()).toEqual([ { showLegend: true, id: 'layer1', title: 'Layer1' } ]); }); - it('should use id when layersContent is not available', () => { + it('should use id from catalog', () => { instance._mapResourceInfo = { catalogs: [ { @@ -242,9 +209,7 @@ describe('WebMapV3 - _getLegendInfos', () => { ] }; - const result = instance._getLegendInfos(); - - expect(result).toEqual([ + expect(instance._getLegendInfos()).toEqual([ { showLegend: true, id: 'layer1', title: 'Layer1' } ]); }); @@ -252,9 +217,24 @@ describe('WebMapV3 - _getLegendInfos', () => { it('should return empty array when no catalogs', () => { instance._mapResourceInfo = { catalogs: [] }; - const result = instance._getLegendInfos(); + expect(instance._getLegendInfos()).toEqual([]); + }); - expect(result).toEqual([]); + it('should accept custom mapResourceInfo argument', () => { + instance._mapResourceInfo = { catalogs: [] }; + const customResourceInfo = { + catalogs: [ + { + catalogType: 'layer', + title: 'CustomLayer', + id: 'customLayer' + } + ] + }; + + expect(instance._getLegendInfos(customResourceInfo)).toEqual([ + { showLegend: true, id: 'customLayer', title: 'CustomLayer' } + ]); }); it('should handle nested group catalogs', () => { @@ -270,7 +250,7 @@ describe('WebMapV3 - _getLegendInfos', () => { catalogType: 'layer', title: 'NestedLayer', showLegend: true, - layersContent: 'nestedLayer' + id: 'nestedLayer' } ] } @@ -279,9 +259,7 @@ describe('WebMapV3 - _getLegendInfos', () => { ] }; - const result = instance._getLegendInfos(); - - expect(result).toEqual([ + expect(instance._getLegendInfos()).toEqual([ { showLegend: true, id: 'nestedLayer', title: 'NestedLayer' } ]); }); @@ -301,7 +279,7 @@ describe('WebMapV3 - _getLegendInfos', () => { catalogType: 'layer', title: 'DeepLayer', showLegend: false, - layersContent: 'deepLayer' + id: 'deepLayer' } ] } @@ -310,9 +288,7 @@ describe('WebMapV3 - _getLegendInfos', () => { ] }; - const result = instance._getLegendInfos(); - - expect(result).toEqual([ + expect(instance._getLegendInfos()).toEqual([ { showLegend: false, id: 'deepLayer', title: 'DeepLayer' } ]); }); @@ -321,28 +297,24 @@ describe('WebMapV3 - _getLegendInfos', () => { describe('_getLegendInfoByCatalog', () => { it('should skip non-layer and non-group catalogTypes', () => { const res = []; - const catalog = { + instance._getLegendInfoByCatalog({ catalogType: 'other', title: 'Other', showLegend: true, - layersContent: 'other' - }; - - instance._getLegendInfoByCatalog(catalog, res); + id: 'other' + }, res); expect(res).toEqual([]); }); it('should process layer catalog correctly', () => { const res = []; - const catalog = { + instance._getLegendInfoByCatalog({ catalogType: 'layer', title: 'TestLayer', showLegend: true, - layersContent: 'testLayer' - }; - - instance._getLegendInfoByCatalog(catalog, res); + id: 'testLayer' + }, res); expect(res).toEqual([ { showLegend: true, id: 'testLayer', title: 'TestLayer' } @@ -351,13 +323,11 @@ describe('WebMapV3 - _getLegendInfos', () => { it('should default showLegend to true when not specified', () => { const res = []; - const catalog = { + instance._getLegendInfoByCatalog({ catalogType: 'layer', title: 'TestLayer', - layersContent: 'testLayer' - }; - - instance._getLegendInfoByCatalog(catalog, res); + id: 'testLayer' + }, res); expect(res).toEqual([ { showLegend: true, id: 'testLayer', title: 'TestLayer' } @@ -366,13 +336,11 @@ describe('WebMapV3 - _getLegendInfos', () => { it('should handle group with no children', () => { const res = []; - const catalog = { + instance._getLegendInfoByCatalog({ catalogType: 'group', title: 'EmptyGroup', children: [] - }; - - instance._getLegendInfoByCatalog(catalog, res); + }, res); expect(res).toEqual([]); }); From 60c335f6e10d17ea70ff599019f3d570d75d51b4 Mon Sep 17 00:00:00 2001 From: luoxiao Date: Mon, 13 Jul 2026 15:23:50 +0800 Subject: [PATCH 18/24] =?UTF-8?q?[feature]=E6=8F=90=E4=BE=9Bvue-iclient?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=89=93=E5=8C=85=E5=91=BD=E4=BB=A4=20AI-GEN?= =?UTF-8?q?:=2070%=20Cursor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- build/custom/common-webmapv2base.js | 1 + build/custom/common.js | 33 +++++++++++++ build/custom/externals.js | 33 +++++++++++++ .../webpack.config.common-webmapv2base.js | 48 +++++++++++++++++++ build/custom/webpack.config.common.js | 31 ++++++++++++ build/custom/webpack.config.mapboxgl.js | 13 +++++ package.json | 4 ++ 8 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 build/custom/common-webmapv2base.js create mode 100644 build/custom/common.js create mode 100644 build/custom/externals.js create mode 100644 build/custom/webpack.config.common-webmapv2base.js create mode 100644 build/custom/webpack.config.common.js create mode 100644 build/custom/webpack.config.mapboxgl.js diff --git a/.gitignore b/.gitignore index b9e8d4a18..7066053bc 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ /package-lock.json .npmrc /dist/mapboxgl/resources/ -/dist/maplibregl/resources/ \ No newline at end of file +/dist/maplibregl/resources/ +/custom-dist/ \ No newline at end of file diff --git a/build/custom/common-webmapv2base.js b/build/custom/common-webmapv2base.js new file mode 100644 index 000000000..3c6e13ecd --- /dev/null +++ b/build/custom/common-webmapv2base.js @@ -0,0 +1 @@ +export * from '../../src/common/mapping/WebMapV2Base'; \ No newline at end of file diff --git a/build/custom/common.js b/build/custom/common.js new file mode 100644 index 000000000..0c733c284 --- /dev/null +++ b/build/custom/common.js @@ -0,0 +1,33 @@ +import { QueryBySQLParameters } from '../../src/common/iServer/QueryBySQLParameters'; +import { QueryByGeometryParameters } from '../../src/common/iServer/QueryByGeometryParameters'; +import { FilterParameter } from '../../src/common/iServer/FilterParameter'; +import { QueryBySQLService } from '../../src/common/iServer/QueryBySQLService'; +import { QueryService } from '../../src/common/iServer/QueryService'; +import { FetchRequest } from '../../src/common/util/FetchRequest'; +import { GetFeaturesBySQLParameters } from '../../src/common/iServer/GetFeaturesBySQLParameters'; +import { GetFeaturesBySQLService } from '../../src/common/iServer/GetFeaturesBySQLService'; +import { GetFeaturesByBoundsParameters } from '../../src/common/iServer/GetFeaturesByBoundsParameters'; +import { FeatureService } from '../../src/common/iServer/FeatureService'; +import { Util } from '../../src/common/commontypes/Util'; +import { ColorsPickerUtil } from '../../src/common/util/ColorsPickerUtil'; +import { GeometryPolygon, GeometryLinearRing, GeometryPoint } from '../../src/common/commontypes'; +import { mapboxFilterToQueryFilter } from '../../src/common/util/FilterCondition'; + +export { + QueryBySQLParameters, + QueryByGeometryParameters, + FilterParameter, + QueryBySQLService, + QueryService, + FetchRequest, + GetFeaturesBySQLParameters, + GetFeaturesBySQLService, + GetFeaturesByBoundsParameters, + FeatureService, + Util, + ColorsPickerUtil, + GeometryPolygon, + GeometryLinearRing, + GeometryPoint, + mapboxFilterToQueryFilter +}; diff --git a/build/custom/externals.js b/build/custom/externals.js new file mode 100644 index 000000000..fc8ca2a11 --- /dev/null +++ b/build/custom/externals.js @@ -0,0 +1,33 @@ +/** + * Remove specified keys from externals so those dependencies are bundled. + * @param {Object} externals + * @param {string[]} omitList + * @returns {Object} + */ +function omitExternals(externals, omitList = []) { + const result = Object.assign({}, externals); + omitList.forEach((key) => { + delete result[key]; + }); + return result; +} + +/** + * Parse omit list from env: VUE_ICLIENT_OMIT_EXTERNALS="@antv/g6,@antv/g2" + * @param {string[]} defaultOmit + * @returns {string[]} + */ +function parseOmitList(defaultOmit) { + const env = process.env.VUE_ICLIENT_OMIT_EXTERNALS; + if (!env) { + return defaultOmit; + } + return env.split(',').map((item) => item.trim()).filter(Boolean); +} + +module.exports = { + omitExternals, + parseOmitList, + COMMON_OMIT: ['@antv/g6'], + MAPBOXGL_OMIT: ['./L7/l7-render', '@antv/g2'] +}; diff --git a/build/custom/webpack.config.common-webmapv2base.js b/build/custom/webpack.config.common-webmapv2base.js new file mode 100644 index 000000000..93939078f --- /dev/null +++ b/build/custom/webpack.config.common-webmapv2base.js @@ -0,0 +1,48 @@ +// "deploy-common": "webpack --config ./build/webpack.config.common.js --color", + +// const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; + +module.exports = { + target: ['es6'], + mode: 'production', + //页面入口文件配置 + entry: [`${__dirname}/common-webmapv2base.js`], + + output: { + clean: true, + path: `${__dirname}/../../custom-dist/iclient-common/`, + filename: 'iclient-common-webmapv2base.js', + chunkFormat: 'commonjs', + libraryTarget: 'umd' + }, + + //是否启用压缩 + optimization: { + minimize: true, + emitOnErrors: false + }, + //不显示打包文件大小相关警告 + performance: { + hints: false + }, + + //其它解决方案配置 + resolve: { + extensions: ['.js'] + }, + + module: { + rules: [ + { + test: [/\.js$/], + exclude: /node_modules[\/\\]proj4/, + loader: 'babel-loader', + options: { + presets: ['@babel/preset-env'] + } + } + ] + }, + + plugins: [] +}; diff --git a/build/custom/webpack.config.common.js b/build/custom/webpack.config.common.js new file mode 100644 index 000000000..d1b59bd41 --- /dev/null +++ b/build/custom/webpack.config.common.js @@ -0,0 +1,31 @@ +// "deploy-common": "webpack --config ./build/webpack.config.common.js --color", +module.exports = { + target: ['es5'], + mode: 'production', + //页面入口文件配置 + entry: [`${__dirname}/common.js`], + + output: { + path: `${__dirname}/../../custom-dist/iclient-common/`, + filename: `iclient-common.js`, + chunkFormat:'commonjs', + libraryTarget: 'umd' + }, + + //是否启用压缩 + optimization: { + minimize: true, + emitOnErrors: false + }, + //不显示打包文件大小相关警告 + performance: { + hints: false + }, + + //其它解决方案配置 + resolve: { + extensions: ['.js'] + }, + + plugins: [] +}; diff --git a/build/custom/webpack.config.mapboxgl.js b/build/custom/webpack.config.mapboxgl.js new file mode 100644 index 000000000..ed4f6ebb4 --- /dev/null +++ b/build/custom/webpack.config.mapboxgl.js @@ -0,0 +1,13 @@ +const mapboxglConfig = require('../webpack.config.mapboxgl'); +const { omitExternals, parseOmitList, MAPBOXGL_OMIT, COMMON_OMIT } = require('./externals'); +const configBase = require('../webpack.config.base'); + +// mapboxglConfig.externals[0] = Object.assign({}, configBase.externals, mapboxglExternals) +const [mapboxglExternals] = mapboxglConfig.externals; + +module.exports = Object.assign({}, mapboxglConfig, { + externals: [omitExternals(mapboxglExternals, parseOmitList(MAPBOXGL_OMIT.concat(COMMON_OMIT)))], + output: Object.assign({}, configBase.output('iclient-mapboxgl', 'iclient-mapboxgl'), { + path: `${__dirname}/../../custom-dist/iclient-mapboxgl/`, + }), +}); diff --git a/package.json b/package.json index e4b3c45a6..1fdbb52b3 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,10 @@ "build-docs-maplibregl": "rimraf ./docs/maplibregl && jsdoc -c ./build/jsdocs/maplibregl/docs.json -R ./build/jsdocs/maplibregl/index.md", "build-docs-classic": "rimraf ./docs/classic && jsdoc -c ./build/jsdocs/classic/docs.json -R ./build/jsdocs/classic/index.md", "pre-publish": "node ./build/publish.js --leaflet && node ./build/publish.js --openlayers && node ./build/publish.js --mapboxgl && node ./build/publish.js --maplibregl && node ./build/publish.js --classic", + "deploy-custom-webmapv2base": "webpack --config ./build/custom/webpack.config.common-webmapv2base.js --color && rimraf ./custom-dist/iclient-common/iclient-common-webmapv2base.js.LICENSE.txt", + "deploy-custom-common": "webpack --config ./build/custom/webpack.config.common.js --color && rimraf ./custom-dist/iclient-common/iclient-common.js.LICENSE.txt", + "deploy-custom-mapboxgl-es5": "cross-env moduleVersion=es5 webpack --config ./build/custom/webpack.config.mapboxgl.js --color && uglifyjs ./custom-dist/iclient-mapboxgl/iclient-mapboxgl.js --ecma 5 --comments /iclient-/i -c -m -o ./custom-dist/iclient-mapboxgl/iclient-mapboxgl.min.js && cleancss -o ./custom-dist/iclient-mapboxgl/iclient-mapboxgl.min.css ./custom-dist/iclient-mapboxgl/iclient-mapboxgl.css && rimraf ./custom-dist/iclient-mapboxgl/iclient-mapboxgl.js ./custom-dist/iclient-mapboxgl/iclient-mapboxgl.css", + "deploy-custom-mapboxgl": "npm run deploy-custom-webmapv2base && npm run deploy-custom-common && npm run deploy-custom-mapboxgl-es5", "publish": "npm run pre-publish && cd ./src/common && npm publish && cd ../leaflet && npm publish && cd ../openlayers && npm publish && cd ../mapboxgl && npm publish && cd ../maplibregl && npm publish && cd ../classic && npm publish" }, "keywords": [ From 494b5b7f173f755b90b1ffa1fd462fff1c2fe6ca Mon Sep 17 00:00:00 2001 From: songyumeng Date: Wed, 12 Aug 2026 16:51:39 +0800 Subject: [PATCH 19/24] =?UTF-8?q?=E3=80=90fix=E3=80=91=E4=BF=AE=E5=A4=8Dwe?= =?UTF-8?q?bmap=20=E9=9B=AA=E7=A2=A7=E5=9B=BE=20l7layer=E4=B8=ADoptions.wi?= =?UTF-8?q?thCredentials=E7=9A=84=E5=80=BC=E7=9A=84=E9=97=AE=E9=A2=98=20AI?= =?UTF-8?q?-GEN:=2010%=20Claude?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/mapping/WebMapService.js | 6 ++++ src/common/mapping/WebMapV3.js | 6 ++-- src/common/mapping/utils/L7LayerUtil.js | 15 ++++----- src/mapboxgl/mapping/WebMap.js | 6 ++-- src/maplibregl/mapping/WebMap.js | 6 ++-- test/common/mapping/utils/L7LayerUtilSpec.js | 15 ++++++--- test/mapboxgl/mapping/WebMapV3Spec.js | 33 +++++++++++++++++--- test/maplibregl/mapping/WebMapV3Spec.js | 26 ++++++++++++++- test/resources/WebMapV3.js | 4 +-- 9 files changed, 91 insertions(+), 26 deletions(-) diff --git a/src/common/mapping/WebMapService.js b/src/common/mapping/WebMapService.js index a283d20e0..cb6bca900 100644 --- a/src/common/mapping/WebMapService.js +++ b/src/common/mapping/WebMapService.js @@ -1006,6 +1006,12 @@ export class WebMapService { return defaultValue; } + handleUrlWithCredentials(serviceUrl) { + if (serviceUrl && this.iportalServiceProxyUrl && serviceUrl.indexOf(this.iportalServiceProxyUrl) >= 0) { + return true; + } + return null; + } isIportalResourceUrl(serviceUrl) { return ( diff --git a/src/common/mapping/WebMapV3.js b/src/common/mapping/WebMapV3.js index af8f94b2e..5e3a2bfe6 100644 --- a/src/common/mapping/WebMapV3.js +++ b/src/common/mapping/WebMapV3.js @@ -160,7 +160,7 @@ export const LEGEND_STYLE_TYPES = { IMAGE: 'image', STYLE: 'style' }; -export function createWebMapV3Extending(SuperClass, { MapManager, mapRepo, crsManager, l7LayerUtil }) { +export function createWebMapV3Extending(SuperClass, { MapManager, mapRepo, crsManager, l7LayerUtil, webMapService }) { return class WebMapV3 extends SuperClass { constructor(mapId, options, mapOptions = {}) { super(); @@ -495,7 +495,7 @@ export function createWebMapV3Extending(SuperClass, { MapManager, mapRepo, crsMa const mapResourceUrl = transformUrl( Object.assign({ url: `${this.options.server}web/maps/${this.mapId}` }, this.options) ); - return FetchRequest.get(mapResourceUrl, null, { withCredentials: this.options.withCredentials }).then((response) => + return FetchRequest.get(mapResourceUrl, null, { withCredentials: webMapService.handleUrlWithCredentials(mapResourceUrl) }).then((response) => response.json() ); } @@ -797,7 +797,7 @@ export function createWebMapV3Extending(SuperClass, { MapManager, mapRepo, crsMa _getSpriteData(sprite) { const url = sprite.replace(/.+(web\/maps\/.+)/, `${this.options.server}$1`); - return FetchRequest.get(url, null, { withCredentials: this.options.withCredentials }) + return FetchRequest.get(url, null, { withCredentials: webMapService.handleUrlWithCredentials(url) }) .then((response) => { return response.json(); }); diff --git a/src/common/mapping/utils/L7LayerUtil.js b/src/common/mapping/utils/L7LayerUtil.js index a1d6087d2..456f4acd4 100644 --- a/src/common/mapping/utils/L7LayerUtil.js +++ b/src/common/mapping/utils/L7LayerUtil.js @@ -220,7 +220,7 @@ export function getL7Filter(filter, featureFilter) { } export function L7LayerUtil(config) { - const { featureFilter, expression, spec, L7Layer, L7, proj4 } = config; + const { featureFilter, expression, spec, L7Layer, L7, proj4, webMapService } = config; /** * @param {string} url @@ -244,7 +244,7 @@ export function L7LayerUtil(config) { */ function getRestDataFields(datasetUrl, credential, options) { const url = addCredentialToUrl(`${datasetUrl}/fields.json?returnAll=true`, credential); - return FetchRequest.get(url, null, options) + return FetchRequest.get(url, null, { ...options, withCredentials: webMapService.handleUrlWithCredentials(url) }) .then((res) => res.json()) .then((result) => { return result.map((item) => { @@ -270,7 +270,7 @@ export function L7LayerUtil(config) { */ function getRestDataDomains(datasetUrl, credential, options) { const url = addCredentialToUrl(`${datasetUrl}/domain.json`, credential); - return FetchRequest.get(url, null, options).then((result) => { + return FetchRequest.get(url, null, { ...options, withCredentials: webMapService.handleUrlWithCredentials(url) }).then((result) => { return result.json(); }); } @@ -453,7 +453,7 @@ export function L7LayerUtil(config) { const nextOptions = handleWithRequestOptions(datasetUrl, options); const { fieldNames, fieldTypes } = await getRestDataFieldInfo(datasetUrl, credential, nextOptions); const nextUrl = addCredentialToUrl(url, credential); - const attrDataInfo = await FetchRequest.post(nextUrl, JSON.stringify(SQLParams), nextOptions); + const attrDataInfo = await FetchRequest.post(nextUrl, JSON.stringify(SQLParams), { ...nextOptions, withCredentials: webMapService.handleUrlWithCredentials(nextUrl) }); const featuresRes = await attrDataInfo.json(); return { @@ -468,7 +468,7 @@ export function L7LayerUtil(config) { * @param option */ function getStructDataItemJson(href, option) { - return FetchRequest.get(href, null, option) + return FetchRequest.get(href, null, { ...option, withCredentials: webMapService.handleUrlWithCredentials(href) }) .then((res) => res.json()) .then((data) => { if (data.succeed === false) { @@ -616,10 +616,11 @@ export function L7LayerUtil(config) { */ async function getStructuredDataGeojsonByWebMap(data, options) { const allFeature = await getStructDataGeojson(data.dataId, options); + const url = `${options.server}web/datas/${data.dataId}/structureddata.json` const resultRes = await FetchRequest.get( - `${options.server}web/datas/${data.dataId}/structureddata.json`, + url, null, - options + { ...options, withCredentials: webMapService.handleUrlWithCredentials(url) } ); const result = await resultRes.json(); const projection = `EPSG:${result.epsgCode}`; diff --git a/src/mapboxgl/mapping/WebMap.js b/src/mapboxgl/mapping/WebMap.js index 283fa43fc..fd340786d 100644 --- a/src/mapboxgl/mapping/WebMap.js +++ b/src/mapboxgl/mapping/WebMap.js @@ -122,7 +122,8 @@ export class WebMap extends createWebMapBaseExtending(mapboxgl.Evented, { mapRep spec, L7Layer, L7, - proj4: this._crsManager.getProj4() + proj4: this._crsManager.getProj4(), + webMapService: this.webMapService }); switch (type) { case 'MapStyle': @@ -130,7 +131,8 @@ export class WebMap extends createWebMapBaseExtending(mapboxgl.Evented, { mapRep case 'WebMap3': return createWebMapV3Extending(createMapClassExtending(mapboxgl.Evented), { ...commonFactoryOptions, - l7LayerUtil + l7LayerUtil, + webMapService: this.webMapService }); default: return createWebMapV2Extending( diff --git a/src/maplibregl/mapping/WebMap.js b/src/maplibregl/mapping/WebMap.js index d18db2b18..4c622f0e1 100644 --- a/src/maplibregl/mapping/WebMap.js +++ b/src/maplibregl/mapping/WebMap.js @@ -121,7 +121,8 @@ export class WebMap extends createWebMapBaseExtending(maplibregl.Evented, { mapR spec, L7Layer, L7, - proj4: this._crsManager.getProj4() + proj4: this._crsManager.getProj4(), + webMapService: this.webMapService }); switch (type) { case 'MapStyle': @@ -129,7 +130,8 @@ export class WebMap extends createWebMapBaseExtending(maplibregl.Evented, { mapR case 'WebMap3': return createWebMapV3Extending(createMapClassExtending(maplibregl.Evented), { ...commonFactoryOptions, - l7LayerUtil + l7LayerUtil, + webMapService: this.webMapService }); default: return createWebMapV2Extending( diff --git a/test/common/mapping/utils/L7LayerUtilSpec.js b/test/common/mapping/utils/L7LayerUtilSpec.js index 8dcd86e34..11cbe5e01 100644 --- a/test/common/mapping/utils/L7LayerUtilSpec.js +++ b/test/common/mapping/utils/L7LayerUtilSpec.js @@ -35,7 +35,10 @@ describe('L7LayerUtil', () => { reRender() {} }; - const l7LayerUtil = L7LayerUtil({ featureFilter, expression, spec, L7Layer, L7 }); + const mockWebMapService = { + handleUrlWithCredentials: jasmine.createSpy('handleUrlWithCredentials').and.returnValue(true) + }; + const l7LayerUtil = L7LayerUtil({ featureFilter, expression, spec, L7Layer, L7 ,webMapService: mockWebMapService}); const mapstudioWebMap_L7LayersRes = JSON.parse(mapstudioWebMap_L7Layers); const scene = new mockL7.Scene(); @@ -185,7 +188,7 @@ describe('L7LayerUtil', () => { it('animate line layer', (done) => { spyOn(FetchRequest, 'get').and.callFake((url, _, options) => { - expect(options.withCredentials).toBeUndefined(); + expect(options.withCredentials).toBeTruthy(); expect(options.withoutFormatSuffix).toBeTruthy(); if (url.indexOf('/data-Building/rest/data/datasources/newBuilding/datasets/New_LINE/fields.json') > -1) { return Promise.resolve(new Response(RESTDATA_FIELDS_RES)); @@ -196,7 +199,7 @@ describe('L7LayerUtil', () => { return Promise.resolve(); }); spyOn(FetchRequest, 'post').and.callFake((url, _, options) => { - expect(options.withCredentials).toBeUndefined(); + expect(options.withCredentials).toBeTruthy(); expect(options.withoutFormatSuffix).toBeTruthy(); if (url.indexOf('/data-Building/rest/data/featureResults.geojson') > -1) { return Promise.resolve(new Response(RESTDATA_FEATURES_RES)); @@ -286,7 +289,8 @@ describe('L7LayerUtil', () => { it('add layer one error, one success', (done) => { spyOn(FetchRequest, 'get').and.callFake((url, _, options) => { - expect(options.withCredentials).toBeUndefined(); + console.log('get', url, options.withCredentials); + expect(options.withCredentials).toBeTruthy(); expect(options.withoutFormatSuffix).toBeTruthy(); if (url.indexOf('/data-Building/rest/data/datasources/newBuilding/datasets/New_LINE/fields.json') > -1) { return Promise.resolve(new Response(RESTDATA_FIELDS_RES)); @@ -297,7 +301,8 @@ describe('L7LayerUtil', () => { return Promise.resolve(); }); spyOn(FetchRequest, 'post').and.callFake((url, _, options) => { - expect(options.withCredentials).toBeUndefined(); + console.log('post', url, options.withCredentials); + expect(options.withCredentials).toBeTruthy(); expect(options.withoutFormatSuffix).toBeTruthy(); if (url.indexOf('/data-Building/rest/data/featureResults.geojson') > -1) { return Promise.reject('error test'); diff --git a/test/mapboxgl/mapping/WebMapV3Spec.js b/test/mapboxgl/mapping/WebMapV3Spec.js index 8fd0eefb8..ffc910c7d 100644 --- a/test/mapboxgl/mapping/WebMapV3Spec.js +++ b/test/mapboxgl/mapping/WebMapV3Spec.js @@ -19,11 +19,15 @@ describe('mapboxgl-webmap3.0', () => { var id = 617580084; var mapstudioWebmap; const l7LayerUtil = L7LayerUtil({ featureFilter, expression, spec, L7Layer, L7 }); + const mockWebMapService = { + handleUrlWithCredentials: jasmine.createSpy('handleUrlWithCredentials').and.returnValue(true) + }; const extendOptions = { MapManager: MapManagerUtil.default, mapRepo: mapboxgl, crsManager: new CRSManager(), - l7LayerUtil + l7LayerUtil, + webMapService: mockWebMapService }; const WebMapV3 = createWebMapV3Extending(createMapClassExtending(mapboxgl.Evented), extendOptions); beforeEach(() => { @@ -36,7 +40,7 @@ describe('mapboxgl-webmap3.0', () => { testDiv.style.height = '500px'; window.document.body.appendChild(testDiv); originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; - jasmine.DEFAULT_TIMEOUT_INTERVAL = 50000; + jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; mapboxgl.Map.prototype.overlayLayersManager = {}; mbglmap.prototype.getL7Scene = mapboxgl.Map.prototype.getL7Scene; mapboxgl.CRS = CRS; @@ -172,7 +176,7 @@ describe('mapboxgl-webmap3.0', () => { if (url.indexOf('932266699.json') > -1) { return Promise.resolve(new Response(msProjectINfo_filters)); } - if (url.indexOf('/sprites') > -1) { + if (url.indexOf('/sprite') > -1) { return Promise.resolve(new Response(spriteJson)); } return Promise.resolve(); @@ -204,7 +208,7 @@ describe('mapboxgl-webmap3.0', () => { }); it('filters mapId is JSON', (done) => { spyOn(FetchRequest, 'get').and.callFake((url) => { - if (url.indexOf('/sprites') > -1) { + if (url.indexOf('/sprite') > -1) { return Promise.resolve(new Response(msSpriteInfo)); } return Promise.resolve(); @@ -8457,4 +8461,25 @@ describe('mapboxgl-webmap3.0', () => { expect(mapstudioWebmap._appendLayers).toBe(true); expect(map.addLocalIdeographFontFamily).toHaveBeenCalledWith('sans-serif,PingFang SC Regular'); }); + + it('_getSpriteData should use webMapService.handleWithCredentials for withCredentials', (done) => { + + const spriteUrl = 'http://example.com/web/maps/123/sprite.json'; + spyOn(FetchRequest, 'get').and.callFake((url, params, options) => { + if (url.indexOf('sprite.json') > -1) { + expect(mockWebMapService.handleUrlWithCredentials).toHaveBeenCalledWith(url); + expect(options.withCredentials).toBe(true); + return Promise.resolve(new Response(JSON.stringify({}))); + } + return Promise.resolve(new Response(JSON.stringify({}))); + }); + + mapstudioWebmap = new WebMapV3(id, { server, target: 'map' }); + mapstudioWebmap._getSpriteData(spriteUrl).then(() => { + expect(mockWebMapService.handleUrlWithCredentials).toHaveBeenCalled(); + done(); + }).catch((e) => { + done.fail(e); + }); + }); }); diff --git a/test/maplibregl/mapping/WebMapV3Spec.js b/test/maplibregl/mapping/WebMapV3Spec.js index 38be7f8b7..27b6f580c 100644 --- a/test/maplibregl/mapping/WebMapV3Spec.js +++ b/test/maplibregl/mapping/WebMapV3Spec.js @@ -20,11 +20,15 @@ describe('maplibregl-webmap3.0', () => { var id = 617580084; var mapstudioWebmap; const l7LayerUtil = L7LayerUtil({ featureFilter, expression, spec, L7Layer, L7 }); + const mockWebMapService = { + handleUrlWithCredentials: jasmine.createSpy('handleUrlWithCredentials').and.returnValue(true) + }; const extendOptions = { MapManager: MapManagerUtil.default, mapRepo: maplibregl, crsManager: new CRSManager(), - l7LayerUtil + l7LayerUtil, + webMapService: mockWebMapService }; const WebMapV3 = createWebMapV3Extending(createMapClassExtending(maplibregl.Evented), extendOptions); beforeEach(() => { @@ -1619,4 +1623,24 @@ describe('maplibregl-webmap3.0', () => { }); }); }); + it('_getSpriteData should use webMapService.handleWithCredentials for withCredentials', (done) => { + + const spriteUrl = 'http://example.com/web/maps/123/sprite.json'; + spyOn(FetchRequest, 'get').and.callFake((url, params, options) => { + if (url.indexOf('sprite.json') > -1) { + expect(mockWebMapService.handleUrlWithCredentials).toHaveBeenCalledWith(url); + expect(options.withCredentials).toBe(true); + return Promise.resolve(new Response(JSON.stringify({}))); + } + return Promise.resolve(new Response(JSON.stringify({}))); + }); + + mapstudioWebmap = new WebMapV3(id, { server, target: 'map' }); + mapstudioWebmap._getSpriteData(spriteUrl).then(() => { + expect(mockWebMapService.handleUrlWithCredentials).toHaveBeenCalled(); + done(); + }).catch((e) => { + done.fail(e); + }); + }); }); diff --git a/test/resources/WebMapV3.js b/test/resources/WebMapV3.js index 0ea09aa35..9a94a28fc 100644 --- a/test/resources/WebMapV3.js +++ b/test/resources/WebMapV3.js @@ -5714,7 +5714,7 @@ var mapstudioWebMap_filters = JSON.stringify({ "minzoom": 0 } ], - "sprite": "http://fake:8190/iportal/web/maps/932266699/sprites/sprite", + "sprite": "http://localhost:9876/base/resources/data/sprite", "pitch": 0, "minzoom": 0 }); @@ -5743,7 +5743,7 @@ var msProjectINfo_filters = JSON.stringify({ "title": "郑州POI", "resolution": 0, "checkStatus": "SUCCESSFUL", - "projectInfo": "{\"images\":\"http://fake:8190/iportal/web/maps/932266699/sprites/sprite\",\"catalogs\":[{\"filter\":[\"all\",[\"==\",\"Ctype\",\"\"],[\"!=\",\"smpid\",\"\"]],\"visualization\":{\"renderer\":[{\"rotate\":{\"type\":\"simple\",\"value\":0},\"textLetterSpacing\":{\"type\":\"simple\",\"value\":0},\"textTranslate\":{\"type\":\"simple\",\"value\":[0,0]},\"color\":{\"type\":\"simple\",\"value\":\"#EE4D5A\"},\"symbolPlacement\":{\"type\":\"simple\",\"value\":\"point\"},\"textAnchor\":{\"type\":\"simple\",\"value\":\"center\"},\"translate\":{\"type\":\"simple\",\"value\":[0,0]},\"textRotate\":{\"type\":\"simple\",\"value\":0},\"textField\":{\"type\":\"simple\",\"value\":\"\"},\"textHaloBlur\":{\"type\":\"simple\",\"value\":2},\"transform\":{\"type\":\"simple\",\"value\":\"none\"},\"symbolsContent\":{\"field\":[\"smpid\"],\"defaultValue\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"values\":[{\"value\":{\"symbolId\":\"shape2\",\"style\":{\"layout\":{\"icon-image\":\"shape2\"}}},\"key\":1},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":10},{\"value\":{\"symbolId\":\"shape6\",\"style\":{\"layout\":{\"icon-image\":\"shape6\"}}},\"key\":100},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":101},{\"value\":{\"symbolId\":\"shape9\",\"style\":{\"layout\":{\"icon-image\":\"shape9\"}}},\"key\":102},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":103},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":104},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":105},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":106},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":107},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":108},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":109},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":11},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":110},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":111},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":112},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":113},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":114},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":115},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":116},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":117},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":118},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":119},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":12},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":120},{\"value\":{\"symbolId\":\"point-83030560\",\"style\":{\"layout\":{\"icon-image\":\"point-83030560\"}}},\"key\":121},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":122},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":123},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":124},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":125},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":126},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":127},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":128},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":129},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":13},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":130},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":131},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":132},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":133},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":134},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":135},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":136},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":137},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":138},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":139},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":14},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":140},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":141},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":142},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":143},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":144},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":145},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":146},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":147},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":148},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":149},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":15},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":150},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":151},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":152},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":153},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":154},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":155},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":156},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":157},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":158},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":159},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":16},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":160},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":161},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":162},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":163},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":164},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":165},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":166},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":167},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":168},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":169},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":17},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":170},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":171},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":172},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":173},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":174},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":175},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":176},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":177},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":178},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":179},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":18},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":180},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":181},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":182},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":183},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":184},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":185},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":186},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":187},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":188},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":189},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":19},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":190},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":191},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":192},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":193},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":194},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":195},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":196},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":197},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":198},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":199},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":2},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":20},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":200},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":201},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":202},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":203},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":204},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":205},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":206},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":207},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":208},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":209},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":21},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":210},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":211},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":212},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":213},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":214},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":215},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":216},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":217},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":218},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":219},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":22},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":220},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":221},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":222},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":223},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":224},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":225},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":226},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":227},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":228},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":229},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":23},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":230},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":231},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":232},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":233},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":234},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":235},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":236},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":237},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":238},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":239},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":24},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":240},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":241},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":242},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":243},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":244},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":245},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":246},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":247},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":248},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":249},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":25},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":250},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":251},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":252},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":253},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":254},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":255},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":256},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":257},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":258},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":259},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":26},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":260},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":261},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":262},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":263},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":264},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":265},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":266},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":267},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":268},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":269},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":27},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":270},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":271},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":272},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":273},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":274},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":275},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":276},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":277},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":278},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":279},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":28},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":280},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":281},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":282},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":283},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":284},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":285},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":286},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":287},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":288},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":289},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":29},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":290},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":291},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":292},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":293},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":294},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":295},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":296},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":297},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":298},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":299},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":3},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":30},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":300},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":301},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":302},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":303},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":304},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":305},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":306},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":307},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":308},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":309},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":31},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":310},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":311},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":312},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":313},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":314},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":315},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":316},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":317},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":318},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":319},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":32},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":320},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":321},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":322},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":323},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":324},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":325},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":326},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":327},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":328},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":329},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":33},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":330},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":331},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":332},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":333},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":334},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":335},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":336},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":337},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":338},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":339},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":34},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":340},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":341},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":342},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":343},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":344},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":345},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":346},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":347},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":348},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":349},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":35},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":350},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":351},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":352},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":353},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":354},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":355},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":356},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":357},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":358},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":359},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":36},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":360},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":361},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":362},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":363},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":364},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":365},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":366},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":367},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":368},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":369},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":37},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":370},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":371},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":372},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":373},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":374},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":375},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":376},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":377},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":378},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":379},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":38},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":380},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":381},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":382},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":383},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":384},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":385},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":386},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":387},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":388},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":389},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":39},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":390},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":391},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":392},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":393},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":394},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":395},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":396},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":397},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":398},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":399},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":4},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":40},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":400},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":401},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":402},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":403},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":404},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":405},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":406},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":407},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":408},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":409},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":41},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":410},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":411},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":412},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":413},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":414},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":415},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":416},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":417},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":418},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":419},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":42},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":420},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":421},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":422},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":423},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":424},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":425},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":426},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":427},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":428},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":429},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":43},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":430},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":431},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":432},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":433},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":434},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":435},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":436},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":437},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":438},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":439},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":44},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":440},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":441},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":442},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":443},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":444},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":445},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":446},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":447},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":448},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":449},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":45},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":450},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":451},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":452},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":453},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":454},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":455},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":456},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":457},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":458},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":459},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":46},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":460},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":461},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":462},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":463},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":464},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":465},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":466},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":467},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":468},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":469},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":47},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":470},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":471},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":472},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":473},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":474},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":475},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":476},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":477},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":478},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":479},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":48},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":480},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":481},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":482},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":483},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":484},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":485},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":486},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":487},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":488},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":489},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":49},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":490},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":491},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":492},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":493},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":494},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":495},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":496},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":497},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":498},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":499},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":5},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":50},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":500},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":501},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":502},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":503},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":504},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":505},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":506},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":507},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":508},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":509},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":51},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":510},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":511},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":512},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":513},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":514},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":515},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":516},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":517},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":518},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":519},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":52},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":520},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":521},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":522},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":523},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":524},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":525},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":526},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":527},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":528},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":529},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":53},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":530},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":531},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":532},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":533},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":534},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":535},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":536},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":537},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":538},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":539},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":54},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":540},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":541},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":542},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":543},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":544},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":545},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":546},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":547},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":548},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":549},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":55},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":550},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":551},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":552},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":553},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":554},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":555},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":556},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":557},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":558},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":559},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":56},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":560},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":561},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":562},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":563},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":564},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":565},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":566},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":567},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":568},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":569},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":57},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":570},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":571},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":572},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":573},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":574},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":575},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":576},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":577},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":578},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":579},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":58},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":580},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":581},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":582},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":583},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":584},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":585},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":586},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":587},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":588},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":589},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":59},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":590},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":591},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":592},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":593},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":594},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":595},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":596},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":597},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":598},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":599},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":6},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":60},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":600},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":601},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":602},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":603},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":604},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":605},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":606},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":607},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":608},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":609},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":61},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":610},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":611},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":612},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":613},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":614},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":615},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":616},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":617},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":618},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":619},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":62},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":620},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":621},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":622},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":623},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":624},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":625},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":626},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":627},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":628},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":629},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":63},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":630},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":631},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":632},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":633},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":634},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":635},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":636},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":637},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":638},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":639},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":64},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":640},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":641},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":642},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":643},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":644},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":645},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":646},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":647},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":648},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":649},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":65},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":650},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":651},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":652},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":653},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":654},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":655},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":656},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":657},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":658},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":659},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":66},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":660},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":661},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":662},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":663},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":664},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":665},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":666},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":667},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":668},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":669},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":67},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":670},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":671},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":672},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":673},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":674},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":675},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":676},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":677},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":678},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":679},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":68},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":680},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":681},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":682},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":683},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":684},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":685},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":686},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":687},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":688},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":689},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":69},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":690},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":691},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":692},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":693},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":694},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":695},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":696},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":697},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":698},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":699},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":7},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":70},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":700},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":701},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":702},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":703},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":704},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":705},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":706},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":707},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":708},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":709},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":71},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":710},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":711},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":712},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":713},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":714},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":715},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":716},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":717},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":718},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":719},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":72},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":720},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":721},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":722},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":723},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":724},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":725},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":726},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":727},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":728},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":729},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":73},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":730},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":731},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":732},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":733},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":734},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":735},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":736},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":737},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":738},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":739},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":74},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":740},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":741},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":742},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":743},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":744},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":745},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":746},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":75},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":76},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":77},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":78},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":79},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":8},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":80},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":81},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":82},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":83},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":84},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":85},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":86},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":87},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":88},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":89},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":9},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":90},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":91},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":92},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":93},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":94},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":95},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":96},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":97},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":98},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":99}],\"interpolateInfo\":{\"type\":\"custom\"},\"type\":\"unique\"},\"textTranslateAnchor\":{\"type\":\"simple\",\"value\":\"map\"},\"justify\":{\"type\":\"simple\",\"value\":\"center\"},\"ignorePlacement\":{\"type\":\"simple\",\"value\":false},\"textAllowOverlap\":{\"type\":\"simple\",\"value\":true},\"maxWidth\":{\"type\":\"simple\",\"value\":10},\"textSize\":{\"type\":\"simple\",\"value\":16},\"textHaloColor\":{\"type\":\"simple\",\"value\":\"#242424\"},\"textColor\":{\"type\":\"simple\",\"value\":\"#FFFFFF\"},\"size\":{\"type\":\"simple\",\"value\":8},\"allowOverlap\":{\"type\":\"simple\",\"value\":true},\"translateAnchor\":{\"type\":\"simple\",\"value\":\"map\"},\"anchor\":{\"type\":\"simple\",\"value\":\"center\"},\"textOpacity\":{\"type\":\"simple\",\"value\":1},\"textHaloWidth\":{\"type\":\"simple\",\"value\":1},\"lineHeight\":{\"type\":\"simple\",\"value\":1.2},\"textFont\":{\"type\":\"simple\",\"value\":[\"Open Sans Regular\",\"Arial Unicode MS Regular\"]},\"textIgnorePlacement\":{\"type\":\"simple\",\"value\":false},\"opacity\":{\"type\":\"simple\",\"value\":0.9}}]},\"visible\":true,\"catalogType\":\"layer\",\"msDatasetId\":\"ms_datasetId_1774244993624_23\",\"bounds\":[113.482306,34.635322,113.827295,34.91074],\"id\":\"layer_郑州POI_GBK_1774245011909_26\",\"popupInfo\":{\"elements\":[{\"fieldName\":\"smpid\",\"type\":\"FIELD\"},{\"fieldName\":\"EntityHandle\",\"type\":\"FIELD\"},{\"fieldName\":\"EntityType\",\"type\":\"FIELD\"},{\"fieldName\":\"Layer\",\"type\":\"FIELD\"},{\"fieldName\":\"LayerFroze\",\"type\":\"FIELD\"},{\"fieldName\":\"LayerLocked\",\"type\":\"FIELD\"},{\"fieldName\":\"LayerOn\",\"type\":\"FIELD\"},{\"fieldName\":\"Elevation\",\"type\":\"FIELD\"},{\"fieldName\":\"Thickness\",\"type\":\"FIELD\"},{\"fieldName\":\"ColorIndex\",\"type\":\"FIELD\"},{\"fieldName\":\"LineStyle\",\"type\":\"FIELD\"},{\"fieldName\":\"BlockName\",\"type\":\"FIELD\"},{\"fieldName\":\"BlockRotation\",\"type\":\"FIELD\"},{\"fieldName\":\"LineWidth\",\"type\":\"FIELD\"},{\"fieldName\":\"UserID\",\"type\":\"FIELD\"},{\"fieldName\":\"Name\",\"type\":\"FIELD\"},{\"fieldName\":\"Name_PY\",\"type\":\"FIELD\"},{\"fieldName\":\"Ctype\",\"type\":\"FIELD\"},{\"fieldName\":\"Ntype\",\"type\":\"FIELD\"},{\"fieldName\":\"Code\",\"type\":\"FIELD\"},{\"fieldName\":\"Address\",\"type\":\"FIELD\"},{\"fieldName\":\"Telephone\",\"type\":\"FIELD\"},{\"fieldName\":\"Picture\",\"type\":\"FIELD\"},{\"fieldName\":\"URL\",\"type\":\"FIELD\"},{\"fieldName\":\"Link\",\"type\":\"FIELD\"},{\"fieldName\":\"消防局名称\",\"type\":\"FIELD\"},{\"fieldName\":\"XZQ\",\"type\":\"FIELD\"},{\"fieldName\":\"X\",\"type\":\"FIELD\"},{\"fieldName\":\"Y\",\"type\":\"FIELD\"},{\"fieldName\":\"msgeometry\",\"type\":\"FIELD\"}],\"title\":\"郑州POI_GBK\"},\"title\":\"郑州POI_GBK\",\"layerSourceType\":\"Data\",\"zoomRange\":[0,24],\"layersContent\":[\"ms_郑州POI_GBK_1774245016129_27\",\"ms_郑州POI_GBK_1774245104313_105\"]}],\"datas\":[{\"sourceType\":\"STRUCTURE_DATA\",\"datasets\":[{\"datasetTitle\":\"郑州POI_GBK\",\"msDatasetId\":\"ms_datasetId_1774244993624_23\",\"datasetId\":\"6977061\",\"geometryField\":\"msgeometry\",\"projection\":\"EPSG:4326\"}],\"title\":\"郑州POI_GBK\"}],\"baseLayer\":{\"internetMapName\":\"OSM\",\"type\":\"INTERNET_MAP\"},\"version\":\"3.1.4\"}", + "projectInfo": "{\"images\":\"http://localhost:9876/base/resources/data/sprite\",\"catalogs\":[{\"filter\":[\"all\",[\"==\",\"Ctype\",\"\"],[\"!=\",\"smpid\",\"\"]],\"visualization\":{\"renderer\":[{\"rotate\":{\"type\":\"simple\",\"value\":0},\"textLetterSpacing\":{\"type\":\"simple\",\"value\":0},\"textTranslate\":{\"type\":\"simple\",\"value\":[0,0]},\"color\":{\"type\":\"simple\",\"value\":\"#EE4D5A\"},\"symbolPlacement\":{\"type\":\"simple\",\"value\":\"point\"},\"textAnchor\":{\"type\":\"simple\",\"value\":\"center\"},\"translate\":{\"type\":\"simple\",\"value\":[0,0]},\"textRotate\":{\"type\":\"simple\",\"value\":0},\"textField\":{\"type\":\"simple\",\"value\":\"\"},\"textHaloBlur\":{\"type\":\"simple\",\"value\":2},\"transform\":{\"type\":\"simple\",\"value\":\"none\"},\"symbolsContent\":{\"field\":[\"smpid\"],\"defaultValue\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"values\":[{\"value\":{\"symbolId\":\"shape2\",\"style\":{\"layout\":{\"icon-image\":\"shape2\"}}},\"key\":1},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":10},{\"value\":{\"symbolId\":\"shape6\",\"style\":{\"layout\":{\"icon-image\":\"shape6\"}}},\"key\":100},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":101},{\"value\":{\"symbolId\":\"shape9\",\"style\":{\"layout\":{\"icon-image\":\"shape9\"}}},\"key\":102},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":103},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":104},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":105},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":106},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":107},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":108},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":109},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":11},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":110},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":111},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":112},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":113},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":114},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":115},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":116},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":117},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":118},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":119},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":12},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":120},{\"value\":{\"symbolId\":\"point-83030560\",\"style\":{\"layout\":{\"icon-image\":\"point-83030560\"}}},\"key\":121},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":122},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":123},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":124},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":125},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":126},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":127},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":128},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":129},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":13},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":130},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":131},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":132},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":133},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":134},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":135},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":136},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":137},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":138},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":139},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":14},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":140},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":141},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":142},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":143},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":144},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":145},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":146},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":147},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":148},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":149},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":15},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":150},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":151},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":152},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":153},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":154},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":155},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":156},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":157},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":158},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":159},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":16},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":160},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":161},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":162},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":163},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":164},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":165},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":166},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":167},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":168},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":169},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":17},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":170},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":171},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":172},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":173},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":174},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":175},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":176},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":177},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":178},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":179},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":18},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":180},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":181},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":182},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":183},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":184},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":185},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":186},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":187},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":188},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":189},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":19},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":190},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":191},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":192},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":193},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":194},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":195},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":196},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":197},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":198},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":199},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":2},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":20},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":200},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":201},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":202},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":203},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":204},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":205},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":206},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":207},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":208},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":209},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":21},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":210},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":211},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":212},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":213},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":214},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":215},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":216},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":217},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":218},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":219},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":22},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":220},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":221},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":222},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":223},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":224},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":225},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":226},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":227},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":228},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":229},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":23},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":230},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":231},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":232},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":233},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":234},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":235},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":236},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":237},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":238},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":239},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":24},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":240},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":241},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":242},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":243},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":244},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":245},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":246},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":247},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":248},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":249},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":25},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":250},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":251},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":252},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":253},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":254},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":255},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":256},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":257},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":258},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":259},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":26},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":260},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":261},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":262},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":263},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":264},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":265},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":266},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":267},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":268},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":269},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":27},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":270},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":271},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":272},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":273},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":274},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":275},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":276},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":277},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":278},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":279},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":28},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":280},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":281},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":282},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":283},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":284},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":285},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":286},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":287},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":288},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":289},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":29},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":290},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":291},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":292},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":293},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":294},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":295},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":296},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":297},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":298},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":299},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":3},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":30},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":300},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":301},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":302},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":303},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":304},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":305},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":306},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":307},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":308},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":309},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":31},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":310},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":311},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":312},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":313},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":314},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":315},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":316},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":317},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":318},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":319},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":32},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":320},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":321},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":322},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":323},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":324},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":325},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":326},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":327},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":328},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":329},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":33},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":330},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":331},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":332},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":333},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":334},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":335},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":336},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":337},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":338},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":339},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":34},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":340},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":341},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":342},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":343},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":344},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":345},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":346},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":347},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":348},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":349},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":35},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":350},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":351},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":352},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":353},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":354},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":355},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":356},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":357},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":358},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":359},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":36},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":360},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":361},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":362},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":363},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":364},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":365},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":366},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":367},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":368},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":369},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":37},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":370},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":371},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":372},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":373},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":374},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":375},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":376},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":377},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":378},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":379},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":38},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":380},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":381},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":382},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":383},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":384},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":385},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":386},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":387},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":388},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":389},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":39},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":390},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":391},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":392},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":393},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":394},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":395},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":396},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":397},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":398},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":399},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":4},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":40},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":400},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":401},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":402},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":403},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":404},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":405},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":406},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":407},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":408},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":409},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":41},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":410},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":411},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":412},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":413},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":414},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":415},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":416},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":417},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":418},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":419},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":42},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":420},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":421},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":422},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":423},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":424},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":425},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":426},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":427},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":428},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":429},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":43},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":430},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":431},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":432},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":433},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":434},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":435},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":436},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":437},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":438},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":439},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":44},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":440},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":441},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":442},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":443},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":444},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":445},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":446},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":447},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":448},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":449},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":45},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":450},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":451},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":452},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":453},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":454},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":455},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":456},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":457},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":458},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":459},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":46},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":460},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":461},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":462},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":463},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":464},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":465},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":466},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":467},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":468},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":469},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":47},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":470},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":471},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":472},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":473},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":474},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":475},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":476},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":477},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":478},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":479},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":48},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":480},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":481},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":482},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":483},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":484},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":485},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":486},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":487},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":488},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":489},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":49},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":490},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":491},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":492},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":493},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":494},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":495},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":496},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":497},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":498},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":499},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":5},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":50},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":500},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":501},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":502},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":503},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":504},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":505},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":506},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":507},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":508},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":509},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":51},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":510},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":511},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":512},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":513},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":514},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":515},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":516},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":517},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":518},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":519},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":52},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":520},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":521},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":522},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":523},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":524},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":525},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":526},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":527},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":528},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":529},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":53},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":530},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":531},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":532},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":533},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":534},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":535},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":536},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":537},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":538},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":539},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":54},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":540},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":541},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":542},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":543},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":544},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":545},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":546},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":547},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":548},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":549},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":55},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":550},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":551},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":552},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":553},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":554},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":555},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":556},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":557},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":558},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":559},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":56},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":560},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":561},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":562},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":563},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":564},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":565},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":566},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":567},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":568},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":569},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":57},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":570},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":571},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":572},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":573},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":574},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":575},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":576},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":577},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":578},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":579},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":58},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":580},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":581},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":582},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":583},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":584},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":585},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":586},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":587},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":588},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":589},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":59},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":590},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":591},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":592},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":593},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":594},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":595},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":596},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":597},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":598},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":599},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":6},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":60},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":600},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":601},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":602},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":603},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":604},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":605},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":606},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":607},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":608},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":609},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":61},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":610},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":611},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":612},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":613},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":614},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":615},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":616},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":617},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":618},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":619},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":62},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":620},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":621},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":622},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":623},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":624},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":625},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":626},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":627},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":628},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":629},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":63},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":630},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":631},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":632},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":633},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":634},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":635},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":636},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":637},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":638},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":639},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":64},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":640},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":641},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":642},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":643},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":644},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":645},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":646},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":647},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":648},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":649},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":65},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":650},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":651},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":652},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":653},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":654},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":655},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":656},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":657},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":658},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":659},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":66},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":660},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":661},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":662},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":663},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":664},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":665},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":666},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":667},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":668},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":669},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":67},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":670},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":671},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":672},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":673},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":674},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":675},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":676},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":677},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":678},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":679},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":68},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":680},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":681},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":682},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":683},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":684},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":685},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":686},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":687},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":688},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":689},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":69},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":690},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":691},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":692},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":693},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":694},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":695},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":696},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":697},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":698},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":699},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":7},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":70},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":700},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":701},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":702},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":703},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":704},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":705},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":706},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":707},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":708},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":709},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":71},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":710},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":711},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":712},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":713},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":714},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":715},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":716},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":717},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":718},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":719},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":72},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":720},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":721},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":722},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":723},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":724},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":725},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":726},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":727},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":728},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":729},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":73},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":730},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":731},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":732},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":733},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":734},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":735},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":736},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":737},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":738},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":739},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":74},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":740},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":741},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":742},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":743},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":744},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":745},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":746},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":75},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":76},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":77},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":78},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":79},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":8},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":80},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":81},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":82},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":83},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":84},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":85},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":86},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":87},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":88},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":89},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":9},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":90},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":91},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":92},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":93},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":94},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":95},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":96},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":97},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":98},{\"value\":{\"symbolId\":\"circle\",\"style\":{\"layout\":{\"icon-image\":\"circle\"}}},\"key\":99}],\"interpolateInfo\":{\"type\":\"custom\"},\"type\":\"unique\"},\"textTranslateAnchor\":{\"type\":\"simple\",\"value\":\"map\"},\"justify\":{\"type\":\"simple\",\"value\":\"center\"},\"ignorePlacement\":{\"type\":\"simple\",\"value\":false},\"textAllowOverlap\":{\"type\":\"simple\",\"value\":true},\"maxWidth\":{\"type\":\"simple\",\"value\":10},\"textSize\":{\"type\":\"simple\",\"value\":16},\"textHaloColor\":{\"type\":\"simple\",\"value\":\"#242424\"},\"textColor\":{\"type\":\"simple\",\"value\":\"#FFFFFF\"},\"size\":{\"type\":\"simple\",\"value\":8},\"allowOverlap\":{\"type\":\"simple\",\"value\":true},\"translateAnchor\":{\"type\":\"simple\",\"value\":\"map\"},\"anchor\":{\"type\":\"simple\",\"value\":\"center\"},\"textOpacity\":{\"type\":\"simple\",\"value\":1},\"textHaloWidth\":{\"type\":\"simple\",\"value\":1},\"lineHeight\":{\"type\":\"simple\",\"value\":1.2},\"textFont\":{\"type\":\"simple\",\"value\":[\"Open Sans Regular\",\"Arial Unicode MS Regular\"]},\"textIgnorePlacement\":{\"type\":\"simple\",\"value\":false},\"opacity\":{\"type\":\"simple\",\"value\":0.9}}]},\"visible\":true,\"catalogType\":\"layer\",\"msDatasetId\":\"ms_datasetId_1774244993624_23\",\"bounds\":[113.482306,34.635322,113.827295,34.91074],\"id\":\"layer_郑州POI_GBK_1774245011909_26\",\"popupInfo\":{\"elements\":[{\"fieldName\":\"smpid\",\"type\":\"FIELD\"},{\"fieldName\":\"EntityHandle\",\"type\":\"FIELD\"},{\"fieldName\":\"EntityType\",\"type\":\"FIELD\"},{\"fieldName\":\"Layer\",\"type\":\"FIELD\"},{\"fieldName\":\"LayerFroze\",\"type\":\"FIELD\"},{\"fieldName\":\"LayerLocked\",\"type\":\"FIELD\"},{\"fieldName\":\"LayerOn\",\"type\":\"FIELD\"},{\"fieldName\":\"Elevation\",\"type\":\"FIELD\"},{\"fieldName\":\"Thickness\",\"type\":\"FIELD\"},{\"fieldName\":\"ColorIndex\",\"type\":\"FIELD\"},{\"fieldName\":\"LineStyle\",\"type\":\"FIELD\"},{\"fieldName\":\"BlockName\",\"type\":\"FIELD\"},{\"fieldName\":\"BlockRotation\",\"type\":\"FIELD\"},{\"fieldName\":\"LineWidth\",\"type\":\"FIELD\"},{\"fieldName\":\"UserID\",\"type\":\"FIELD\"},{\"fieldName\":\"Name\",\"type\":\"FIELD\"},{\"fieldName\":\"Name_PY\",\"type\":\"FIELD\"},{\"fieldName\":\"Ctype\",\"type\":\"FIELD\"},{\"fieldName\":\"Ntype\",\"type\":\"FIELD\"},{\"fieldName\":\"Code\",\"type\":\"FIELD\"},{\"fieldName\":\"Address\",\"type\":\"FIELD\"},{\"fieldName\":\"Telephone\",\"type\":\"FIELD\"},{\"fieldName\":\"Picture\",\"type\":\"FIELD\"},{\"fieldName\":\"URL\",\"type\":\"FIELD\"},{\"fieldName\":\"Link\",\"type\":\"FIELD\"},{\"fieldName\":\"消防局名称\",\"type\":\"FIELD\"},{\"fieldName\":\"XZQ\",\"type\":\"FIELD\"},{\"fieldName\":\"X\",\"type\":\"FIELD\"},{\"fieldName\":\"Y\",\"type\":\"FIELD\"},{\"fieldName\":\"msgeometry\",\"type\":\"FIELD\"}],\"title\":\"郑州POI_GBK\"},\"title\":\"郑州POI_GBK\",\"layerSourceType\":\"Data\",\"zoomRange\":[0,24],\"layersContent\":[\"ms_郑州POI_GBK_1774245016129_27\",\"ms_郑州POI_GBK_1774245104313_105\"]}],\"datas\":[{\"sourceType\":\"STRUCTURE_DATA\",\"datasets\":[{\"datasetTitle\":\"郑州POI_GBK\",\"msDatasetId\":\"ms_datasetId_1774244993624_23\",\"datasetId\":\"6977061\",\"geometryField\":\"msgeometry\",\"projection\":\"EPSG:4326\"}],\"title\":\"郑州POI_GBK\"}],\"baseLayer\":{\"internetMapName\":\"OSM\",\"type\":\"INTERNET_MAP\"},\"version\":\"3.1.4\"}", "visitCount": 73, "centerString": "{\"x\":113.5945719887909,\"y\":34.77314590347322,\"m\":null}", "epsgCode": 3857, From 997f27883ca29e01eb5397a569b187c2d285693e Mon Sep 17 00:00:00 2001 From: zhaoq Date: Thu, 13 Aug 2026 14:45:27 +0800 Subject: [PATCH 20/24] AI-GEN: 100% ARK-CODE-LATEST fix: ut (reviewed by sym) --- test/mapboxgl/mapping/WebMapV3Spec.js | 2 +- test/maplibregl/mapping/WebMapV3Spec.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/mapboxgl/mapping/WebMapV3Spec.js b/test/mapboxgl/mapping/WebMapV3Spec.js index ffc910c7d..9b26b11cd 100644 --- a/test/mapboxgl/mapping/WebMapV3Spec.js +++ b/test/mapboxgl/mapping/WebMapV3Spec.js @@ -18,10 +18,10 @@ describe('mapboxgl-webmap3.0', () => { var originalTimeout, testDiv; var id = 617580084; var mapstudioWebmap; - const l7LayerUtil = L7LayerUtil({ featureFilter, expression, spec, L7Layer, L7 }); const mockWebMapService = { handleUrlWithCredentials: jasmine.createSpy('handleUrlWithCredentials').and.returnValue(true) }; + const l7LayerUtil = L7LayerUtil({ featureFilter, expression, spec, L7Layer, L7, webMapService: mockWebMapService }); const extendOptions = { MapManager: MapManagerUtil.default, mapRepo: mapboxgl, diff --git a/test/maplibregl/mapping/WebMapV3Spec.js b/test/maplibregl/mapping/WebMapV3Spec.js index 27b6f580c..73cc37d2d 100644 --- a/test/maplibregl/mapping/WebMapV3Spec.js +++ b/test/maplibregl/mapping/WebMapV3Spec.js @@ -19,10 +19,10 @@ describe('maplibregl-webmap3.0', () => { var server = 'http://localhost:8190/iportal/'; var id = 617580084; var mapstudioWebmap; - const l7LayerUtil = L7LayerUtil({ featureFilter, expression, spec, L7Layer, L7 }); const mockWebMapService = { handleUrlWithCredentials: jasmine.createSpy('handleUrlWithCredentials').and.returnValue(true) }; + const l7LayerUtil = L7LayerUtil({ featureFilter, expression, spec, L7Layer, L7, webMapService: mockWebMapService }); const extendOptions = { MapManager: MapManagerUtil.default, mapRepo: maplibregl, From af367e35974805f2dd0f2cb2f7b5158e49fbaff1 Mon Sep 17 00:00:00 2001 From: songyumeng Date: Thu, 13 Aug 2026 16:10:47 +0800 Subject: [PATCH 21/24] Update package.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 固定@mapbox/mapbox-gl-style-spec版本 避免??的问题 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1fdbb52b3..fa055d358 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,7 @@ "dependencies": { "@antv/g2": "^4.2.11", "@antv/g6": "^4.8.14", - "@mapbox/mapbox-gl-style-spec": "^14.3.0", + "@mapbox/mapbox-gl-style-spec": "14.27.0", "@mapbox/vector-tile": "1.3.1", "@maplibre/maplibre-gl-style-spec": "^23.3.0", "@supermapgis/iclient-common": "file:src/common", From 42138798ba5b32fe8a6f6147ef051160306eb554 Mon Sep 17 00:00:00 2001 From: songyumeng Date: Thu, 13 Aug 2026 16:11:40 +0800 Subject: [PATCH 22/24] Update package.json --- src/mapboxgl/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mapboxgl/package.json b/src/mapboxgl/package.json index 4aa669599..abb9bdfcb 100644 --- a/src/mapboxgl/package.json +++ b/src/mapboxgl/package.json @@ -15,7 +15,7 @@ "author": "SuperMap", "license": "Apache-2.0", "dependencies": { - "@mapbox/mapbox-gl-style-spec": "^14.3.0", + "@mapbox/mapbox-gl-style-spec": "14.27.0", "@turf/turf": "7.2.0", "@turf/meta": "^7.2.0", "mapv": "2.0.62", From 093b90ad8c1d5ada2d28e9cbb59d3c74ac8045f8 Mon Sep 17 00:00:00 2001 From: songyumeng Date: Thu, 13 Aug 2026 17:30:52 +0800 Subject: [PATCH 23/24] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fa055d358..47d90ad6a 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,7 @@ "dependencies": { "@antv/g2": "^4.2.11", "@antv/g6": "^4.8.14", - "@mapbox/mapbox-gl-style-spec": "14.27.0", + "@mapbox/mapbox-gl-style-spec": "14.23.0", "@mapbox/vector-tile": "1.3.1", "@maplibre/maplibre-gl-style-spec": "^23.3.0", "@supermapgis/iclient-common": "file:src/common", From be70e2e484e830633f39215e395d948a00ea419c Mon Sep 17 00:00:00 2001 From: songyumeng Date: Fri, 14 Aug 2026 11:14:12 +0800 Subject: [PATCH 24/24] Update package.json --- src/mapboxgl/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mapboxgl/package.json b/src/mapboxgl/package.json index abb9bdfcb..71eea8eaa 100644 --- a/src/mapboxgl/package.json +++ b/src/mapboxgl/package.json @@ -15,7 +15,7 @@ "author": "SuperMap", "license": "Apache-2.0", "dependencies": { - "@mapbox/mapbox-gl-style-spec": "14.27.0", + "@mapbox/mapbox-gl-style-spec": "14.23.0", "@turf/turf": "7.2.0", "@turf/meta": "^7.2.0", "mapv": "2.0.62",