123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- /*
- * 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 + ');')();
- }
|