| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| import { __DEV__ } from '../../config'; |
| import { createHashMap, isString, isArray, each, assert } from 'zrender/src/core/util'; |
| import { parseXML } from 'zrender/src/tool/parseSVG'; |
| var storage = createHashMap(); // For minimize the code size of common echarts package, |
| // do not put too much logic in this module. |
| |
| export default { |
| // The format of record: see `echarts.registerMap`. |
| // Compatible with previous `echarts.registerMap`. |
| registerMap: function (mapName, rawGeoJson, rawSpecialAreas) { |
| var records; |
| |
| if (isArray(rawGeoJson)) { |
| records = rawGeoJson; |
| } else if (rawGeoJson.svg) { |
| records = [{ |
| type: 'svg', |
| source: rawGeoJson.svg, |
| specialAreas: rawGeoJson.specialAreas |
| }]; |
| } else { |
| // Backward compatibility. |
| if (rawGeoJson.geoJson && !rawGeoJson.features) { |
| rawSpecialAreas = rawGeoJson.specialAreas; |
| rawGeoJson = rawGeoJson.geoJson; |
| } |
| |
| records = [{ |
| type: 'geoJSON', |
| source: rawGeoJson, |
| specialAreas: rawSpecialAreas |
| }]; |
| } |
| |
| each(records, function (record) { |
| var type = record.type; |
| type === 'geoJson' && (type = record.type = 'geoJSON'); |
| var parse = parsers[type]; |
| parse(record); |
| }); |
| return storage.set(mapName, records); |
| }, |
| retrieveMap: function (mapName) { |
| return storage.get(mapName); |
| } |
| }; |
| var parsers = { |
| geoJSON: function (record) { |
| var source = record.source; |
| record.geoJSON = !isString(source) ? source : typeof JSON !== 'undefined' && JSON.parse ? JSON.parse(source) : new Function('return (' + source + ');')(); |
| }, |
| // Only perform parse to XML object here, which might be time |
| // consiming for large SVG. |
| // Although convert XML to zrender element is also time consiming, |
| // if we do it here, the clone of zrender elements has to be |
| // required. So we do it once for each geo instance, util real |
| // performance issues call for optimizing it. |
| svg: function (record) { |
| record.svgXML = parseXML(record.source); |
| } |
| }; |