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