UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

85 lines (84 loc) 3.02 kB
import { createHashMap, each, hasOwn, isString } from "../../../../zrender/lib/core/util.mjs"; import parseGeoJSON from "./parseGeoJson.mjs"; import fixNanhai from "./fix/nanhai.mjs"; import fixTextCoords from "./fix/textCoord.mjs"; import fixDiaoyuIsland from "./fix/diaoyuIsland.mjs"; import BoundingRect from "../../../../zrender/lib/core/BoundingRect.mjs"; var DEFAULT_NAME_PROPERTY = "name"; var GeoJSONResource = function() { function GeoJSONResource2(mapName, geoJSON, specialAreas) { this.type = "geoJSON"; this._parsedMap = createHashMap(); this._mapName = mapName; this._specialAreas = specialAreas; this._geoJSON = parseInput(geoJSON); } GeoJSONResource2.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; 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 }; }; GeoJSONResource2.prototype._parseToRegions = function(nameProperty) { var mapName = this._mapName; var geoJSON = this._geoJSON; var rawRegions; 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; fixTextCoords(mapName, region); fixDiaoyuIsland(mapName, region); var specialArea = this._specialAreas && this._specialAreas[regionName]; if (specialArea) { region.transformTo(specialArea.left, specialArea.top, specialArea.width, specialArea.height); } }, this); return rawRegions; }; GeoJSONResource2.prototype.getMapForUser = function() { return { geoJson: this._geoJSON, geoJSON: this._geoJSON, specialAreas: this._specialAreas }; }; return GeoJSONResource2; }(); 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 + ");")(); } export { GeoJSONResource };