getCoverageRateData(seletObj){
//seletObj为选中的落图数据
let selectData = [];
let unionData = [];
let intersectionData = [];
if(seletObj.length > 0){
seletObj.map((item)=>{
selectData.push(JSON.parse(item.geom).coordinates)
})
if(selectData && (selectData.length == 1)){
unionData = selectData;
}else if(selectData.length == 2){
unionData = martinez.union(selectData[0],selectData[1]);
}else if(selectData.length >2){
unionData = selectData[0];
selectData.map((item)=>{
unionData = martinez.union(item,unionData);
})
}
//this.queryParams.geom为目标位置数据
intersectionData = martinez.intersection(unionData[0],JSON.parse(this.queryParams.geom).coordinates);
//dropPlotArea -- 落图与目标位置交集的面积
let dropPlotArea= this.calculateArea(JSON.parse(this.queryParams.geom).coordinates,this.computeAnArray(JSON.parse(this.queryParams.geom).coordinates));
//targetLocationArea -- 目标位置面积
let targetLocationArea = this.calculateArea(intersectionData,this.computeAnArray(intersectionData));
//覆盖率
let coverageRate = ((targetLocationArea/dropPlotArea)*100).toFixed(2);
}
},
//判断是几维数组
computeAnArray(arr) {
var list = [];
var num = 0;
for (var i = 0; i < arr.length; i++) {
if (arr[i] instanceof Array) {
for (var j = 0; j < arr[i].length; j++) {
list.push(arr[i][j]);
}
}
}
if (list.length) {
num = 1
num += this.computeAnArray(list)
}
return num;
},
//计算面积(此方法待优化)
calculateArea(list,type){
let that = this;
let area = 0;
if(type == 2){
list.map((item)=>{
let zhuanhuanData1 = [];
item.map((list)=>{
that.$set(list,'lng',list[0]);
that.$set(list,'lat',list[1]);
that.$set(list,'alt',0);
zhuanhuanData1.push(list);
})
area = area + Number(that.getPositionsArea(zhuanhuanData1));
})
}else{
list.map((item)=>{
let zhuanhuanData1 = [];
item.map((list)=>{
list.map((value)=>{
that.$set(value,'lng',value[0]);
that.$set(value,'lat',value[1]);
that.$set(value,'alt',0);
zhuanhuanData1.push(value);
})
})
area = area + Number(that.getPositionsArea(zhuanhuanData1));
})
}
return area
},
getPositionsArea:(positions) {
let result = 0
if (positions) {
let h = 0
let ellipsoid = Cesium.Ellipsoid.WGS84
for (let i = 1; i < positions.length; i++) {
let oel = ellipsoid.cartographicToCartesian(
this.transformWGS84ToCartographic(positions[i - 1])
)
let el = ellipsoid.cartographicToCartesian(
this.transformWGS84ToCartographic(positions[i])
)
h += oel.x * el.y - el.x * oel.y
}
result = Math.abs(h).toFixed(2)
}
return result
},
//wgs84坐标转换成Cartographic 弧度坐标
transformWGS84ToCartographic: function (position) {
return position ?
Cesium.Cartographic.fromDegrees(
position.lng || position.lon,
position.lat,
position.alt
) :
Cesium.Cartographic.ZERO
},