cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
87 lines (86 loc) • 2.85 kB
JavaScript
import GeoModel from "../../coord/geo/GeoModel.mjs";
import geoCreator from "../../coord/geo/geoCreator.mjs";
import { each } from "../../../../zrender/lib/core/util.mjs";
import { updateCenterAndZoom } from "../../action/roamHelper.mjs";
import GeoView from "./GeoView.mjs";
import geoSourceManager from "../../coord/geo/geoSourceManager.mjs";
function registerMap(mapName, geoJson, specialAreas) {
geoSourceManager.registerMap(mapName, geoJson, specialAreas);
}
function install(registers) {
registers.registerCoordinateSystem("geo", geoCreator);
registers.registerComponentModel(GeoModel);
registers.registerComponentView(GeoView);
registers.registerImpl("registerMap", registerMap);
registers.registerImpl("getMap", function(mapName) {
return geoSourceManager.getMapForUser(mapName);
});
function makeAction(method, actionInfo) {
actionInfo.update = "geo:updateSelectStatus";
registers.registerAction(actionInfo, function(payload, ecModel) {
var selected = {};
var allSelected = [];
ecModel.eachComponent({
mainType: "geo",
query: payload
}, function(geoModel) {
geoModel[method](payload.name);
var geo = geoModel.coordinateSystem;
each(geo.regions, function(region) {
selected[region.name] = geoModel.isSelected(region.name) || false;
});
var names = [];
each(selected, function(v, name) {
selected[name] && names.push(name);
});
allSelected.push({
geoIndex: geoModel.componentIndex,
name: names
});
});
return {
selected,
allSelected,
name: payload.name
};
});
}
makeAction("toggleSelected", {
type: "geoToggleSelect",
event: "geoselectchanged"
});
makeAction("select", {
type: "geoSelect",
event: "geoselected"
});
makeAction("unSelect", {
type: "geoUnSelect",
event: "geounselected"
});
registers.registerAction({
type: "geoRoam",
event: "geoRoam",
update: "updateTransform"
}, function(payload, ecModel, api) {
var componentType = payload.componentType || "series";
ecModel.eachComponent({
mainType: componentType,
query: payload
}, function(componentModel) {
var geo = componentModel.coordinateSystem;
if (geo.type !== "geo") {
return;
}
var res = updateCenterAndZoom(geo, payload, componentModel.get("scaleLimit"), api);
componentModel.setCenter && componentModel.setCenter(res.center);
componentModel.setZoom && componentModel.setZoom(res.zoom);
if (componentType === "series") {
each(componentModel.seriesGroup, function(seriesModel) {
seriesModel.setCenter(res.center);
seriesModel.setZoom(res.zoom);
});
}
});
});
}
export { install };