/* * 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. */ /** * AUTO-GENERATED FILE. DO NOT MODIFY. */ /* * 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 { each, isString, createHashMap, hasOwn } from 'zrender/lib/core/util.js'; import parseGeoJson from './parseGeoJson.js'; // Built-in GEO fixer. import fixNanhai from './fix/nanhai.js'; import fixTextCoord from './fix/textCoord.js'; import fixDiaoyuIsland from './fix/diaoyuIsland.js'; import BoundingRect from 'zrender/lib/core/BoundingRect.js'; var DEFAULT_NAME_PROPERTY = 'name'; var GeoJSONResource = /** @class */function () { function GeoJSONResource(mapName, geoJSON, specialAreas) { this.type = 'geoJSON'; this._parsedMap = createHashMap(); this._mapName = mapName; this._specialAreas = specialAreas; // PENDING: delay the parse to the first usage to rapid up the FMP? this._geoJSON = parseInput(geoJSON); } /** * @param nameMap can be null/undefined * @param nameProperty can be null/undefined */ GeoJSONResource.prototype.load = function (nameMap, nameProperty) { nameProperty = nameProperty || DEFAULT_NAME_PROPERTY; var parsed = this._parsedMap.get(nameProperty); if (!parsed) { var rawRegions = this._parseToRegions(nameProperty); parsed = this._parsedMap.set(nameProperty, { regions: rawRegions, boundingRect: calculateBoundingRect(rawRegions) }); } var regionsMap = createHashMap(); var finalRegions = []; each(parsed.regions, function (region) { var regionName = region.name; // Try use the alias in geoNameMap if (nameMap && hasOwn(nameMap, regionName)) { region = region.cloneShallow(regionName = nameMap[regionName]); } finalRegions.push(region); regionsMap.set(regionName, region); }); return { regions: finalRegions, boundingRect: parsed.boundingRect || new BoundingRect(0, 0, 0, 0), regionsMap: regionsMap }; }; GeoJSONResource.prototype._parseToRegions = function (nameProperty) { var mapName = this._mapName; var geoJSON = this._geoJSON; var rawRegions; // https://jsperf.com/try-catch-performance-overhead try { rawRegions = geoJSON ? parseGeoJson(geoJSON, nameProperty) : []; } catch (e) { throw new Error('Invalid geoJson format\n' + e.message); } fixNanhai(mapName, rawRegions); each(rawRegions, function (region) { var regionName = region.name; fixTextCoord(mapName, region); fixDiaoyuIsland(mapName, region); // Some area like Alaska in USA map needs to be tansformed // to look better var specialArea = this._specialAreas && this._specialAreas[regionName]; if (specialArea) { region.transformTo(specialArea.left, specialArea.top, specialArea.width, specialArea.height); } }, this); return rawRegions; }; /** * Only for exporting to users. * **MUST NOT** used internally. */ GeoJSONResource.prototype.getMapForUser = function () { return { // For backward compatibility, use geoJson // PENDING: it has been returning them without clone. // do we need to avoid outsite modification? geoJson: this._geoJSON, geoJSON: this._geoJSON, specialAreas: this._specialAreas }; }; return GeoJSONResource; }(); export { GeoJSONResource }; function calculateBoundingRect(regions) { var rect; for (var i = 0; i < regions.length; i++) { var regionRect = regions[i].getBoundingRect(); rect = rect || regionRect.clone(); rect.union(regionRect); } return rect; } function parseInput(source) { return !isString(source) ? source : typeof JSON !== 'undefined' && JSON.parse ? JSON.parse(source) : new Function('return (' + source + ');')(); }