cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
85 lines (84 loc) • 3.02 kB
JavaScript
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 };