/*
|
* 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];
|
|
if (__DEV__) {
|
assert(parse, 'Illegal map type: ' + 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);
|
}
|
|
};
|