- WKT
WKT转XY点数组
/**
* 将wkt转换为 X,Y,X,Y结构的数组
* @param {string} wkt 多边形的wkt
* @returns
*/
WktToXY(wkt) {
const coors = [];
const xyzs = wkt.substring(wkt.indexOf("((") + 2, wkt.indexOf("))"));
xyzs.split(",").forEach((e) => {
const xyz = e.split(" ");
coors.push(parseFloat(xyz[0]));
coors.push(parseFloat(xyz[1]));
});
return coors;
}
获取范围
GetWktsBound(wkts) {
let xmin = 999;
let ymin = 999;
let xmax = -999;
let ymax = -999;
wkts.forEach((wkt) => {
let ps = TransformUnit.WktToXY(wkt);
for (let i = 0; i < ps.length / 2; i++) {
let x = ps[i * 2];
let y = ps[i * 2 + 1];
if (x < xmin) xmin = x;
if (y < ymin) ymin = y;
if (x > xmax) xmax = x;
if (y > ymax) ymax = y;
}
});
if (xmin == 999 || ymin == 999 || xmax == -999 || ymax == -999) {
return null;
}
let dx = xmax - xmin;
let dy = ymax - ymin;
let scale = 0.6;
let bound = [
xmin - dy * scale,
ymin - dx * scale,
xmax + dx * scale,
ymax + dy * scale,
];
return bound;
}
- XYS
GetXYSBound(xys) {
let xmin = 999;
let ymin = 999;
let xmax = -999;
let ymax = -999;
xys.forEach((xy) => {
let x = xy[0];
let y = xy[1];
if (x < xmin) xmin = x;
if (y < ymin) ymin = y;
if (x > xmax) xmax = x;
if (y > ymax) ymax = y;
});
if (xmin == 999 || ymin == 999 || xmax == -999 || ymax == -999) {
return null;
}
let dx = xmax - xmin;
let dy = ymax - ymin;
let scale = 0.6;
let bound = [
xmin - dy * scale,
ymin - dx * scale,
xmax + dx * scale,
ymax + dy * scale,
];
return bound;
}
- 获取当前视角范围
通过面板的左上角和右下角坐标获取得到
/**
* 获取当前视角范围
* @returns 返回 [xmin,xmax,ymin,ymax]
*/
GetCurrentExtent() {
let mapdiv = window.viewer.canvas;
var pt1 = new Cesium.Cartesian2(0, 0);
var pt2 = new Cesium.Cartesian2(mapdiv.width, mapdiv.height);
var pick1 = viewer.scene.globe.pick(
viewer.camera.getPickRay(pt1),
viewer.scene,
);
var pick2 = viewer.scene.globe.pick(
viewer.camera.getPickRay(pt2),
viewer.scene,
);
//将三维坐标转成地理坐标
var geoPt1 = viewer.scene.globe.ellipsoid.cartesianToCartographic(pick1);
var geoPt2 = viewer.scene.globe.ellipsoid.cartesianToCartographic(pick2);
//地理坐标转换为经纬度坐标
var point1 = [
(geoPt1.longitude / Math.PI) * 180,
(geoPt1.latitude / Math.PI) * 180,
];
var point2 = [
(geoPt2.longitude / Math.PI) * 180,
(geoPt2.latitude / Math.PI) * 180,
];
let xmin = point1[0] > point2[0] ? point2[0] : point1[0];
let xmax = point1[0] > point2[0] ? point1[0] : point2[0];
let ymin = point1[1] > point2[1] ? point2[1] : point1[1];
let ymax = point1[1] > point2[1] ? point1[1] : point2[1];
return [xmin, xmax, ymin, ymax];
}