|
@@ -164,6 +164,12 @@ export default {
|
|
|
case "ThreeGrid":
|
|
|
threeGrid(params);
|
|
|
break;
|
|
|
+ case "ShowThreeCube":
|
|
|
+ showThreeCube(params);
|
|
|
+ break;
|
|
|
+ case "ShowThreeNet":
|
|
|
+ showThreeNet(params);
|
|
|
+ break;
|
|
|
case "RealPositionGrid":
|
|
|
realPositionGrid(params);
|
|
|
break;
|
|
@@ -449,131 +455,58 @@ export default {
|
|
|
m_handles.add(addScaleEvent.scaleHandle,scale_handle_id);
|
|
|
}
|
|
|
}
|
|
|
- function getEyeExtent() {
|
|
|
- const screenWidth = m_view.width;
|
|
|
- const screenHeight = m_view.height;
|
|
|
-
|
|
|
- // 四个角的像素坐标
|
|
|
- const screenCorners = [
|
|
|
- { x: 0, y: 0 }, // 左上角
|
|
|
- { x: screenWidth, y: 0 }, // 右上角
|
|
|
- { x: screenWidth, y: screenHeight }, // 右下角
|
|
|
- { x: 0, y: screenHeight }, // 左下角
|
|
|
- ];
|
|
|
-
|
|
|
- // 将屏幕角坐标转为地图坐标
|
|
|
- const mapPoints = screenCorners.map((screenPoint) => m_view.toMap(screenPoint)).filter(p => p);
|
|
|
-
|
|
|
- // 添加 camera.position 到 mapPoints
|
|
|
- const cameraPoint = m_view.camera.position;
|
|
|
-
|
|
|
- if (mapPoints.length < 4) {
|
|
|
- if (cameraPoint) {
|
|
|
- const bufferDistance = 2000; // 2公里
|
|
|
- const spatialReference = m_view.spatialReference;
|
|
|
-
|
|
|
- const screenExtent = {
|
|
|
- xmin: cameraPoint.x - bufferDistance,
|
|
|
- ymin: cameraPoint.y - bufferDistance,
|
|
|
- xmax: cameraPoint.x + bufferDistance,
|
|
|
- ymax: cameraPoint.y + bufferDistance,
|
|
|
- spatialReference: spatialReference,
|
|
|
- };
|
|
|
- console.warn("视图范围不足4个有效点,使用摄像机位置生成的2公里范围。");
|
|
|
- console.log(screenExtent);
|
|
|
- return screenExtent;
|
|
|
- } else {
|
|
|
- console.warn("无法获取摄像机位置,请检查视图状态。");
|
|
|
- return null;
|
|
|
- }
|
|
|
- } else {
|
|
|
- try {
|
|
|
- // 获取最小和最大坐标值
|
|
|
- const xmin = Math.min(...mapPoints.map((p) => p.x));
|
|
|
- const ymin = Math.min(...mapPoints.map((p) => p.y));
|
|
|
- const xmax = Math.max(...mapPoints.map((p) => p.x));
|
|
|
- const ymax = Math.max(...mapPoints.map((p) => p.y));
|
|
|
|
|
|
- const screenExtent = {
|
|
|
- xmin: xmin,
|
|
|
- ymin: ymin,
|
|
|
- xmax: xmax,
|
|
|
- ymax: ymax,
|
|
|
- spatialReference: m_view.spatialReference,
|
|
|
- };
|
|
|
- console.log(screenExtent);
|
|
|
- return screenExtent;
|
|
|
- } catch (e) {
|
|
|
- console.error("获取地图范围时出错:", e);
|
|
|
- return null;
|
|
|
+ function showThreeCube(params){
|
|
|
+ let status = params.status;
|
|
|
+ if(status == "hide"){
|
|
|
+ if(addThreeCubeEvent){
|
|
|
+ addThreeCubeEvent.clear();
|
|
|
+ addThreeCubeEvent = null;
|
|
|
}
|
|
|
+ return
|
|
|
}
|
|
|
+ // 初始化 AddThreeCubeEvent,暂时不启动
|
|
|
+ addThreeCubeEvent = new AddThreeCubeEvent({
|
|
|
+ view: m_view,
|
|
|
+ });
|
|
|
+ addThreeCubeEvent.start();
|
|
|
+ // 获取所有建筑点数据
|
|
|
+ getAllBuildingPoints();
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- async function showLayersWithScaleEventsReturn(scaleValue) {
|
|
|
- try {
|
|
|
- // 初始化 AddThreeCubeEvent,暂时不启动
|
|
|
- const addThreeCubeEvent = new AddThreeCubeEvent({
|
|
|
- view: m_view,
|
|
|
- });
|
|
|
-
|
|
|
- // 获取所有建筑点数据
|
|
|
- const allPoints = await getAllBuildingPoints();
|
|
|
-
|
|
|
- // 将获取到的点数据赋值给 addThreeCubeEvent 的 points 属性
|
|
|
- addThreeCubeEvent.points = allPoints;
|
|
|
-
|
|
|
- // 确保所有点数据已加载后再启动事件
|
|
|
- addThreeCubeEvent.start();
|
|
|
-
|
|
|
- console.log('AddThreeCubeEvent started with points:', allPoints);
|
|
|
- } catch (error) {
|
|
|
- console.error('Error in showLayersWithScaleEventsReturn:', error);
|
|
|
+ function showThreeNet(params){
|
|
|
+ let status = params.status;
|
|
|
+ if(status == "hide"){
|
|
|
+ if(addThreeNetEvent){
|
|
|
+ addThreeNetEvent.clear();
|
|
|
+ addThreeNetEvent = null;
|
|
|
+ }
|
|
|
+ return
|
|
|
}
|
|
|
+ //另一类是网加载(网只根据范围变化)
|
|
|
+ addThreeNetEvent = new AddThreeNetEvent({
|
|
|
+ view: m_view,
|
|
|
+ center: {x:8086.699067146538,y:2421.512992248397,z:20},
|
|
|
+ radius:1000,
|
|
|
+ });
|
|
|
+ addThreeNetEvent.start();
|
|
|
}
|
|
|
|
|
|
// 递归获取所有建筑点的辅助函数
|
|
|
- async function getAllBuildingPoints(initialScrollId = null) {
|
|
|
- let allPoints = []; // 用于存储所有点的数组
|
|
|
- let currentScrollId = initialScrollId; // 当前的 scrollId
|
|
|
-
|
|
|
- while (true) {
|
|
|
- try {
|
|
|
- // 发起获取建筑点的请求
|
|
|
- const res = await getBuildingPoint({
|
|
|
- x: m_view.camera.position.x,
|
|
|
- y: m_view.camera.position.y,
|
|
|
- scrollId: currentScrollId,
|
|
|
- });
|
|
|
-
|
|
|
- // 检查响应码
|
|
|
- if (res.data.code !== 200) {
|
|
|
- throw new Error(`API返回错误代码: ${res.data.code}`);
|
|
|
- }
|
|
|
-
|
|
|
- const data = res.data.data;
|
|
|
-
|
|
|
- // 假设 data.list 是当前请求返回的点数组
|
|
|
- if (Array.isArray(data.list)) {
|
|
|
- allPoints = allPoints.concat(data.list);
|
|
|
- } else {
|
|
|
- console.warn('data.list 不是数组:', data.list);
|
|
|
- }
|
|
|
-
|
|
|
- // 判断是否还有更多数据需要获取
|
|
|
- if (data.list?.length >= 10000 && data.scrollId) {
|
|
|
- currentScrollId = data.scrollId; // 更新 scrollId 以获取下一批数据
|
|
|
- } else {
|
|
|
- break; // 没有更多数据,退出循环
|
|
|
- }
|
|
|
- } catch (error) {
|
|
|
- console.error('Error in getAllBuildingPoints:', error);
|
|
|
- throw error; // 将错误抛出,以便上层捕获
|
|
|
+ function getAllBuildingPoints(scrollId = null) {
|
|
|
+ getBuildingPoint({
|
|
|
+ x: m_view.camera.position.x,
|
|
|
+ y: m_view.camera.position.y,
|
|
|
+ scrollId: scrollId,
|
|
|
+ }).then(res =>{
|
|
|
+ debugger
|
|
|
+ if(res.data.data.list?.length >= 10000 && res.data.data.scrollId){
|
|
|
+ addThreeCubeEvent.addPoints(res.data.data.list);
|
|
|
+ getAllBuildingPoints(res.data.data.scrollId);
|
|
|
+ }else{
|
|
|
+ addThreeCubeEvent.addPoints(res.data.data.list);
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- return allPoints; // 返回累积的所有点
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
|
|
@@ -670,21 +603,82 @@ export default {
|
|
|
// console.log("params",params)
|
|
|
// }
|
|
|
// }
|
|
|
-
|
|
|
-
|
|
|
- //不同比例尺加载白膜
|
|
|
- // function showLayersWithScaleEventsReturn(scaleValue){
|
|
|
- // let layer = m_map.layers.find(item => item.id === "WhiteMold");
|
|
|
- // if(scaleValue > 50000){
|
|
|
- // if(layer){
|
|
|
- // layer.visible = false;
|
|
|
+ // function getEyeExtent() {
|
|
|
+ // const screenWidth = m_view.width;
|
|
|
+ // const screenHeight = m_view.height;
|
|
|
+ //
|
|
|
+ // // 四个角的像素坐标
|
|
|
+ // const screenCorners = [
|
|
|
+ // { x: 0, y: 0 }, // 左上角
|
|
|
+ // { x: screenWidth, y: 0 }, // 右上角
|
|
|
+ // { x: screenWidth, y: screenHeight }, // 右下角
|
|
|
+ // { x: 0, y: screenHeight }, // 左下角
|
|
|
+ // ];
|
|
|
+ //
|
|
|
+ // // 将屏幕角坐标转为地图坐标
|
|
|
+ // const mapPoints = screenCorners.map((screenPoint) => m_view.toMap(screenPoint)).filter(p => p);
|
|
|
+ //
|
|
|
+ // // 添加 camera.position 到 mapPoints
|
|
|
+ // const cameraPoint = m_view.camera.position;
|
|
|
+ //
|
|
|
+ // if (mapPoints.length < 4) {
|
|
|
+ // if (cameraPoint) {
|
|
|
+ // const bufferDistance = 2000; // 2公里
|
|
|
+ // const spatialReference = m_view.spatialReference;
|
|
|
+ //
|
|
|
+ // const screenExtent = {
|
|
|
+ // xmin: cameraPoint.x - bufferDistance,
|
|
|
+ // ymin: cameraPoint.y - bufferDistance,
|
|
|
+ // xmax: cameraPoint.x + bufferDistance,
|
|
|
+ // ymax: cameraPoint.y + bufferDistance,
|
|
|
+ // spatialReference: spatialReference,
|
|
|
+ // };
|
|
|
+ // console.warn("视图范围不足4个有效点,使用摄像机位置生成的2公里范围。");
|
|
|
+ // console.log(screenExtent);
|
|
|
+ // return screenExtent;
|
|
|
+ // } else {
|
|
|
+ // console.warn("无法获取摄像机位置,请检查视图状态。");
|
|
|
+ // return null;
|
|
|
// }
|
|
|
- // }else{
|
|
|
- // if(layer){
|
|
|
- // layer.visible = true;
|
|
|
+ // } else {
|
|
|
+ // try {
|
|
|
+ // // 获取最小和最大坐标值
|
|
|
+ // const xmin = Math.min(...mapPoints.map((p) => p.x));
|
|
|
+ // const ymin = Math.min(...mapPoints.map((p) => p.y));
|
|
|
+ // const xmax = Math.max(...mapPoints.map((p) => p.x));
|
|
|
+ // const ymax = Math.max(...mapPoints.map((p) => p.y));
|
|
|
+ //
|
|
|
+ // const screenExtent = {
|
|
|
+ // xmin: xmin,
|
|
|
+ // ymin: ymin,
|
|
|
+ // xmax: xmax,
|
|
|
+ // ymax: ymax,
|
|
|
+ // spatialReference: m_view.spatialReference,
|
|
|
+ // };
|
|
|
+ // console.log(screenExtent);
|
|
|
+ // return screenExtent;
|
|
|
+ // } catch (e) {
|
|
|
+ // console.error("获取地图范围时出错:", e);
|
|
|
+ // return null;
|
|
|
// }
|
|
|
// }
|
|
|
// }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //不同比例尺加载白膜
|
|
|
+ function showLayersWithScaleEventsReturn(scaleValue){
|
|
|
+ let layer = m_map.layers.find(item => item.id === "WhiteMold");
|
|
|
+ if(scaleValue > 50000){
|
|
|
+ if(layer){
|
|
|
+ layer.visible = false;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if(layer){
|
|
|
+ layer.visible = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
function viewshedAnalysis(params){
|
|
|
let status = params.status;
|
|
|
if(status === "hide"){
|