Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
// 添加图形
var shapes_m = chart_m.shapes;
for (var n = 0, slen_n = shapes_m.length; n < slen_n; n++) {
shapes_m[n].refOriginalPosition = shapeROP_m;
this.renderer.addShape(shapes_m[n]);
}
}
} else {
// 压盖判断所需 chartsBounds 集合
var chartsBounds = [];
var extent = this.map.getView().calculateExtent();
var mapBounds = new Bounds(extent[0], extent[1], extent[2], extent[3]);
// 获取地图像素 bounds
var mapPxLT = this.getLocalXY(new LonLat(mapBounds.left, mapBounds.top));
var mapPxRB = this.getLocalXY(new LonLat(mapBounds.right, mapBounds.bottom));
var mBounds = new Bounds(mapPxLT[0], mapPxRB[1], mapPxRB[0], mapPxLT[1]);
// 压盖处理 & 添加图形
for (var i = 0, len = charts.length; i < len; i++) {
var chart = charts[i];
// 图形参考位置 (reSetLocation 会更新 chartBounds)
var shapeROP = chart.resetLocation();
// 图表框
var cbs = chart.chartBounds;
var cBounds = [{
"x": cbs.left,
"y": cbs.top
}, {
"x": cbs.left,
"y": cbs.bottom
}, {
"x": cbs.right,
"y": cbs.bottom
redrawThematicFeatures(extent) {
//清除当前所有可视元素
this.renderer.clearAll();
var features = this.features;
for (var i = 0, len = features.length; i < len; i++) {
var feature = features[i];
// 要素范围判断
var feaBounds = feature.geometry.getBounds();
//剔除当前视图(地理)范围以外的数据
if (extent) {
var bounds = new Bounds(extent[0], extent[1], extent[2], extent[3]);
if (!bounds.intersectsBounds(feaBounds)) {
continue;
}
}
var cache = this.cache;
// 用 feature id 做缓存标识
var cacheField = feature.id;
// 数据对应的图表是否已缓存,没缓存则重新创建图表
if (cache[cacheField]) {
continue;
}
cache[cacheField] = cacheField;
var chart = this.createThematicFeature(feature);
// 压盖处理权重值
if (chart && this.overlayWeightField) {
if (feature.attributes[this.overlayWeightField] && !isNaN(feature.attributes[this.overlayWeightField])) {
default:
break;
}
}
left = locationPx.x - labelSize.w / 2;
bottom = locationPx.y + labelSize.h / 2;
//处理斜体字
if (style.fontStyle && style.fontStyle === "italic") {
right = locationPx.x + labelSize.w / 2 + parseInt(parseFloat(style.fontSize) / 2);
} else {
right = locationPx.x + labelSize.w / 2;
}
top = locationPx.y - labelSize.h / 2;
labB = new Bounds(left, bottom, right, top);
//旋转Bounds
var boundsQuad = [];
if ((style.labelRotation % 180) == 0) {
boundsQuad = [{
"x": labB.left,
"y": labB.top
},
{
"x": labB.right,
"y": labB.top
},
{
"x": labB.right,
"y": labB.bottom
},
},
{
"x": labB.left,
"y": labB.bottom
},
{
"x": labB.left,
"y": labB.top
}
];
} else {
boundsQuad = this.rotationBounds(labB, loc, feature.style.labelRotation);
}
//重置GeoText的bounds
geoText.bounds = new Bounds(boundsQuad[1].x, boundsQuad[3].y, boundsQuad[2].x, boundsQuad[4].y);
return boundsQuad;
}
_processParams(params) {
if (!params) {
return {};
}
params.returnContent = params.returnContent == null ? true : params.returnContent;
if (params.queryParams && !Util.isArray(params.queryParams)) {
params.queryParams = [params.queryParams];
}
if (params.bounds) {
if (params.bounds instanceof Array) {
params.bounds = new Bounds(params.bounds[0], params.bounds[1], params.bounds[2], params.bounds[3]);
}
if (params.bounds instanceof mapboxgl.LngLatBounds) {
params.bounds = new Bounds(
params.bounds.getSouthWest().lng,
params.bounds.getSouthWest().lat,
params.bounds.getNorthEast().lng,
params.bounds.getNorthEast().lat
);
}
}
if (params.geometry) {
if (params.geometry instanceof mapboxgl.LngLat) {
params.geometry = new GeometryPoint(params.geometry.lng, params.geometry.lat);
}
if (isOL) {
continue;
} else {
labelsB.push(boundsQuad);
}
}
//压盖处理 -end
//将标签像素范围转为地理范围
var geoBs = [];
for (let j = 0; j < quadlen - 1; j++) {
geoBs.push(map.getCoordinateFromPixel([boundsQuad[j].x, boundsQuad[j].y]));
}
//屏蔽有偏移性质的style属性,偏移量在算bounds时已经加入计算
var bounds = new Bounds(geoBs[3][0], geoBs[3][1], geoBs[1][0], [geoBs[1][1]]);
var center = bounds.getCenterLonLat();
var label = new GeoText(center.lon, center.lat, fi.attributes[this.themeField]);
label.calculateBounds();
styTmp = CommonUtil.cloneObject(fi.style);
feaSty = CommonUtil.cloneObject(CommonUtil.copyAttributes(styTmp, styleTemp));
fea = new FeatureVector(label, fi.attributes, feaSty);
//赋予id
fea.id = fi.id;
fea.fid = fi.fid;
feas.push(fea);
}
}
//返回最终要绘制的标签要素
return feas;
}
params.returnContent = (params.returnContent == null) ? true : params.returnContent;
if (params.filter) {
params.chartQueryFilterParameters = Util.isArray(params.filter) ? params.filter : [params.filter];
}
if (params.bounds) {
if (params.bounds instanceof Array) {
params.bounds = new Bounds(
params.bounds[0],
params.bounds[1],
params.bounds[2],
params.bounds[3]
);
}
if (params.bounds instanceof mapboxgl.LngLatBounds) {
params.bounds = new Bounds(
params.bounds.getSouthWest().lng,
params.bounds.getSouthWest().lat,
params.bounds.getNorthEast().lng,
params.bounds.getNorthEast().lat
);
}
}
}
default:
break;
}
}
left = locationPx.x - labelSize.w / 2;
bottom = locationPx.y + labelSize.h / 2;
//处理斜体字
if (style.fontStyle && style.fontStyle === "italic") {
right = locationPx.x + labelSize.w / 2 + parseInt(parseFloat(style.fontSize) / 2);
} else {
right = locationPx.x + labelSize.w / 2;
}
top = locationPx.y - labelSize.h / 2;
labB = new Bounds(left, bottom, right, top);
//旋转Bounds
var boundsQuad = [];
if ((style.labelRotation % 180) == 0) {
boundsQuad = [{
"x": labB.left,
"y": labB.top
},
{
"x": labB.right,
"y": labB.top
},
{
"x": labB.right,
"y": labB.bottom
},
}
}
//压盖处理 -end
//背景(事件)-start
//将标签像素范围转为地理范围
var geoBs = [];
for (let j = 0; j < quadlen - 1; j++) {
geoBs.push(map.containerPointToLatLng(boundsQuad[j]));
}
//屏蔽有偏移性质的style属性,偏移量在算bounds时已经加入计算
var leftBottom = geoBs[3];
var rightTop = geoBs[1];
var bounds = new Bounds(leftBottom.lng, leftBottom.lat, rightTop.lng, rightTop.lat);
var center = bounds.getCenterLonLat();
var label = new GeoText(center.lon, center.lat, fi.attributes[this.themeField]);
label.calculateBounds();
styTmp = Util.cloneObject(fi.style);
feaSty = Util.cloneObject(Util.copyAttributes(styTmp, styleTemp));
fea = new GeometryVector(label, fi.attributes, feaSty);
//赋予id
fea.id = fi.id;
fea.fid = fi.fid;
feas.push(fea);
}
}
//返回最终要绘制的标签要素
return feas;
},
static toSuperMapBounds(bounds) {
if (bounds && ["FeatureCollection", "Feature"].indexOf(bounds.type) !== -1) {
bounds = L.geoJSON(bounds).getBounds();
}
if (bounds instanceof L.LatLngBounds) {
return new Bounds(
bounds.getSouthWest().lng,
bounds.getSouthWest().lat,
bounds.getNorthEast().lng,
bounds.getNorthEast().lat
);
}
if (bounds instanceof L.Bounds) {
return new Bounds(
bounds.min.x,
bounds.min.y,
bounds.max.x,
bounds.max.y
);
}
if (this.isArray(bounds)) {
return new Bounds(
bounds[0],
bounds[1],
bounds[2],
bounds[3]
);
}
return new Bounds();