From 055dea04bd641e8d1216073c6be5dbb68750c858 Mon Sep 17 00:00:00 2001 From: alex2wong Date: Sun, 16 Feb 2020 16:48:50 +0800 Subject: [PATCH] fix 11799 add new option 'nameProperty' in map series option to denote key in geoJSON --- src/chart/map/MapSeries.js | 5 +- src/coord/geo/geoJSONLoader.js | 5 +- src/coord/geo/geoSourceManager.js | 5 +- src/coord/geo/parseGeoJson.js | 5 +- test/map-nameProperty.html | 252 ++++++++++++++++++++++++++++++ 5 files changed, 264 insertions(+), 8 deletions(-) create mode 100644 test/map-nameProperty.html diff --git a/src/chart/map/MapSeries.js b/src/chart/map/MapSeries.js index 606928b6f5..f0a0a6c848 100644 --- a/src/chart/map/MapSeries.js +++ b/src/chart/map/MapSeries.js @@ -66,7 +66,7 @@ var MapSeries = SeriesModel.extend({ }); } - var geoSource = geoSourceManager.load(this.getMapType(), this.option.nameMap); + var geoSource = geoSourceManager.load(this.getMapType(), this.option.nameMap, this.option.nameProperty); zrUtil.each(geoSource.regions, function (region) { var name = region.name; if (!dataNameMap.get(name)) { @@ -256,7 +256,8 @@ var MapSeries = SeriesModel.extend({ itemStyle: { areaColor: 'rgba(255,215,0,0.8)' } - } + }, + nameProperty: 'name' } }); diff --git a/src/coord/geo/geoJSONLoader.js b/src/coord/geo/geoJSONLoader.js index 381c1f9934..5caaa91d2c 100644 --- a/src/coord/geo/geoJSONLoader.js +++ b/src/coord/geo/geoJSONLoader.js @@ -34,9 +34,10 @@ export default { /** * @param {string} mapName * @param {Object} mapRecord {specialAreas, geoJSON} + * @param {string} nameProperty * @return {Object} {regions, boundingRect} */ - load: function (mapName, mapRecord) { + load: function (mapName, mapRecord, nameProperty) { var parsed = inner(mapRecord).parsed; @@ -50,7 +51,7 @@ export default { // https://jsperf.com/try-catch-performance-overhead try { - regions = geoJSON ? parseGeoJson(geoJSON) : []; + regions = geoJSON ? parseGeoJson(geoJSON, nameProperty) : []; } catch (e) { throw new Error('Invalid geoJson format\n' + e.message); diff --git a/src/coord/geo/geoSourceManager.js b/src/coord/geo/geoSourceManager.js index 0de59c13bc..4fadc4ffdd 100644 --- a/src/coord/geo/geoSourceManager.js +++ b/src/coord/geo/geoSourceManager.js @@ -34,9 +34,10 @@ export default { /** * @param {string} mapName * @param {Object} nameMap + * @param {string} nameProperty * @return {Object} source {regions, regionsMap, nameCoordMap, boundingRect} */ - load: function (mapName, nameMap) { + load: function (mapName, nameMap, nameProperty) { var regions = []; var regionsMap = createHashMap(); var nameCoordMap = createHashMap(); @@ -44,7 +45,7 @@ export default { var mapRecords = retrieveMap(mapName); each(mapRecords, function (record) { - var singleSource = loaders[record.type].load(mapName, record); + var singleSource = loaders[record.type].load(mapName, record, nameProperty); each(singleSource.regions, function (region) { var regionName = region.name; diff --git a/src/coord/geo/parseGeoJson.js b/src/coord/geo/parseGeoJson.js index 3f91a2708f..f2348f8e62 100644 --- a/src/coord/geo/parseGeoJson.js +++ b/src/coord/geo/parseGeoJson.js @@ -96,9 +96,10 @@ function decodePolygon(coordinate, encodeOffsets, encodeScale) { /** * @alias module:echarts/coord/geo/parseGeoJson * @param {Object} geoJson + * @param {string} nameProperty * @return {module:zrender/container/Group} */ -export default function (geoJson) { +export default function (geoJson, nameProperty) { decode(geoJson); @@ -136,7 +137,7 @@ export default function (geoJson) { } var region = new Region( - properties.name, + properties[nameProperty], geometries, properties.cp ); diff --git a/test/map-nameProperty.html b/test/map-nameProperty.html new file mode 100644 index 0000000000..8951fc2529 --- /dev/null +++ b/test/map-nameProperty.html @@ -0,0 +1,252 @@ + + + + + + + + + + + + +
+ + + \ No newline at end of file