Jelajahi Sumber

补充时空算子库前四个接口

DESKTOP-6LTVLN7\Liumouren 1 bulan lalu
induk
melakukan
e7600dc1f1
2 mengubah file dengan 529 tambahan dan 75 penghapusan
  1. 528 74
      src/components/wgn/controlPanel.vue
  2. 1 1
      src/views/Wgn.vue

+ 528 - 74
src/components/wgn/controlPanel.vue

@@ -406,7 +406,7 @@ export default {
             },
             {
               value: "1.2.5.3",
-              label: "点线面体的相互状态",
+              label: "判断点线面体的相互状态(待测试)",
             },
             {
               value: "1.2.5.4",
@@ -423,73 +423,527 @@ export default {
           ],
         },
       ],
-      dmsServerItem: {},
-      selectOptions: {
-        // 单位
-        unit: [
-          {
-            value: "METER",
-            label: "米",
-          },
-          {
-            value: "KILOMETER",
-            label: "千米",
-          },
-        ],
-        inPrj: [
-          {
-            value: "WGS84",
-            label: "WGS84",
-          },
-          {
-            value: "SH2000",
-            label: "SH2000",
-          },
-          {
-            value: "UTM",
-            label: "UTM",
-          },
-          {
-            value: "WEB_Mercator",
-            label: "WEB_Mercator",
-          },
-        ],
-        outPrj: [
-          {
-            value: "WGS84",
-            label: "WGS84",
-          },
-          {
-            value: "SH2000",
-            label: "SH2000",
-          },
-          {
-            value: "UTM",
-            label: "UTM",
-          },
-          {
-            value: "WEB_Mercator",
-            label: "WEB_Mercator",
-          },
-        ],
-        outFileType: [
-          {
-            value: "geoJson",
-            label: "geoJson",
-          },
-          {
-            value: "shp",
-            label: "shp",
-          },
-          {
-            value: "csv",
-            label: "csv",
-          },
-          {
-            value: "xlsx",
-            label: "xlsx",
-          },
-        ],
+      // 场景规则
+      SceneRule: {
+        "1.5.1.1": {
+          // 功能描述
+          functionalDefinition:
+            "拓扑计算功能聚焦于深度解析大批量数据的点、线、面之间的拓扑关系,能够精准判断点与线、面的位置关系,以及线、面之间的相交、平行、邻接、包含等复杂状态。借助四叉树、R 树等精心设计的数据结构,结合 Douglas - Peucker 等高效算法,确保在处理海量空间数据时,也能快速且准确地输出分析结果。",
+          // 元素类型
+          elementTypes: ["point", "polyline", "polygon"],
+          // 元素个数
+          numberOf: 2,
+          // 后台接口路径
+          apiUrl: "/topology/geoJsonToGeoJson",
+        },
+        "1.5.2.1": {
+          // 功能描述
+          functionalDefinition:
+            "计算两个点要素之间的最短空间距离,单位支持米、千米。操作逻辑为:用户通过接口输入两点经纬度坐标,或在系统内部地图上点击选择两点,系统基于坐标系参数计算欧氏距离。例如:计算青浦区某学校与社区卫生服务中心的直线距离,用于公共服务覆盖半径评估;计算两个监测点位的直线距离,用于监测设备信号覆盖范围判断。",
+          // 元素类型
+          elementTypes: ["point", "point", "unit"],
+          // 单位
+          unit: [
+            {
+              value: "METER",
+              label: "米",
+            },
+            {
+              value: "KILOMETER",
+              label: "千米",
+            },
+          ],
+          // 元素个数
+          numberOf: 2,
+          // 后台接口路径
+          apiUrl: "/spatialMeasure/pointToPoint",
+        },
+        "1.5.2.2": {
+          // 功能描述
+          functionalDefinition: "计算点和线要素之间的最短空间距离,单位支持米、千米",
+          // 元素类型
+          elementTypes: ["point", "polyline", "unit"],
+          // 单位
+          unit: [
+            {
+              value: "METER",
+              label: "米",
+            },
+            {
+              value: "KILOMETER",
+              label: "千米",
+            },
+          ],
+          // 元素个数
+          numberOf: 2,
+          // 后台接口路径
+          apiUrl: "/spatialMeasure/pointToLine",
+        },
+        "1.5.2.3": {
+          // 功能描述
+          functionalDefinition: "计算点和面要素之间的最短空间距离,单位支持米、千米",
+          // 元素类型
+          elementTypes: ["point", "polygon", "unit"],
+          // 单位
+          unit: [
+            {
+              value: "METER",
+              label: "米",
+            },
+            {
+              value: "KILOMETER",
+              label: "千米",
+            },
+          ],
+          // 元素个数
+          numberOf: 2,
+          // 后台接口路径
+          apiUrl: "/spatialMeasure/pointToPolygon",
+        },
+        "1.5.2.4": {
+          // 功能描述
+          functionalDefinition: "计算两个面要素之间的最短空间距离,单位支持米、千米",
+          // 元素类型
+          elementTypes: ["polygon", "polygon", "unit"],
+          // 单位
+          unit: [
+            {
+              value: "METER",
+              label: "米",
+            },
+            {
+              value: "KILOMETER",
+              label: "千米",
+            },
+          ],
+          // 元素个数
+          numberOf: 2,
+          // 后台接口路径
+          apiUrl: "/spatialMeasure/PolygonToPolygon",
+        },
+        "1.5.2.5": {
+          // 功能描述
+          functionalDefinition: "计算多条线段组成的折线总长度,单位支持米、千米",
+          // 元素类型
+          elementTypes: ["polyline", "unit"],
+          // 单位
+          unit: [
+            {
+              value: "METER",
+              label: "米",
+            },
+            {
+              value: "KILOMETER",
+              label: "千米",
+            },
+          ],
+          // 元素个数
+          numberOf: 1,
+          // 后台接口路径
+          apiUrl: "/spatialMeasure/calculatePolylineDistance",
+        },
+        "1.5.2.6": {
+          // 功能描述
+          functionalDefinition:
+            "计算面要素在二维平面上的投影面积,单位支持平方米、公顷、平方千米切换",
+          // 元素类型
+          elementTypes: ["polygon", "unit"],
+          // 单位
+          unit: [
+            {
+              value: "SQUARE_METER",
+              label: "平方米",
+            },
+            {
+              value: "HECTARE",
+              label: "公顷",
+            },
+            {
+              value: "SQUARE_KILOMETER",
+              label: "平方千米",
+            },
+          ],
+          // 元素个数
+          numberOf: 1,
+          // 后台接口路径
+          apiUrl: "/spatialMeasure/calculatePlaneAreaInGeometry",
+        },
+        "1.5.2.7": {
+          // 功能描述
+          functionalDefinition:
+            "结合 DEM 高程数据,计算面要素在三维地形上的实际曲面面积(考虑地形起伏),精度依赖 DEM 数据分辨率。,单位支持平方米、公顷、平方千米切换",
+          // 元素类型
+          elementTypes: ["polygon", "unit"],
+          // 单位
+          unit: [
+            {
+              value: "SQUARE_METER",
+              label: "平方米",
+            },
+            {
+              value: "HECTARE",
+              label: "公顷",
+            },
+            {
+              value: "SQUARE_KILOMETER",
+              label: "平方千米",
+            },
+          ],
+          // 元素个数
+          numberOf: 1,
+          // 后台接口路径
+          apiUrl: "/spatialMeasure/calculateSurfaceAreaInGeometry",
+        },
+        "1.5.2.8": {
+          // 功能描述
+          functionalDefinition:
+            "查询单个点要素的海拔高度(基于 CGCS2000 大地高程基准),单位为米",
+          // 元素类型
+          elementTypes: ["point"],
+          // 元素个数
+          numberOf: 1,
+          // 后台接口路径
+          apiUrl: "/spatialMeasure/getPointElevationInGeometry",
+        },
+        "1.5.2.9": {
+          // 功能描述
+          functionalDefinition:
+            "计算两个点要素之间的高程差值,支持正负值显示(正值表示前者高于后者,负值相反)",
+          // 元素类型
+          elementTypes: ["point", "point"],
+          // 元素个数
+          numberOf: 2,
+          // 后台接口路径
+          apiUrl: "/spatialMeasure/calculateElevationDiffInGeometry",
+        },
+        "1.5.2.10": {
+          // 功能描述
+          functionalDefinition:
+            "查询单个面要素的海拔高度(基于 CGCS2000 大地高程基准),单位为米",
+          // 元素类型
+          elementTypes: ["polygon"],
+          // 元素个数
+          numberOf: 1,
+          // 后台接口路径
+          apiUrl: "/spatialMeasure/calculateAreaElevationStatsInGeometry",
+        },
+        "1.5.3.1": {
+          // 功能描述
+          functionalDefinition:
+            "将两个或多个不重叠 / 部分重叠的面要素,合并为一个连续的新面要素(消除重叠部分,保留所有要素的覆盖范围)",
+          // 元素类型
+          elementTypes: ["polygon"],
+          // 元素个数
+          minNumberOf: 2,
+          // 后台接口路径
+          apiUrl: "/geometry/union",
+        },
+        "1.5.3.2": {
+          // 功能描述
+          functionalDefinition:
+            "提取两个或多个面要素之间的重叠区域,生成新的面要素(仅保留所有要素共同覆盖的范围)",
+          // 元素类型
+          elementTypes: ["polygon"],
+          // 元素个数
+          minNumberOf: 2,
+          // 后台接口路径
+          apiUrl: "/geometry/intersection",
+        },
+        "1.5.3.3": {
+          // 功能描述
+          functionalDefinition:
+            "以一个面要素(称为 “源面”)为基础,减去与另一个面要素(称为 “裁剪面”)的重叠区域,生成新的面要素(保留源面中未被裁剪面覆盖的部分)",
+          // 元素类型
+          elementTypes: ["polygon"],
+          // 元素个数
+          minNumberOf: 2,
+          // 后台接口路径
+          apiUrl: "/geometry/difference",
+        },
+        "1.5.3.4": {
+          // 功能描述
+          functionalDefinition:
+            "计算面要素的参数(面积、周长、中心坐标、最小外接矩形等)",
+          // 元素类型
+          elementTypes: ["point", "polyline", "polygon"],
+          // 元素个数
+          numberOf: 1,
+          // 后台接口路径
+          apiUrl: "/geometry/parameters",
+        },
+        "1.5.4.1": {
+          // 功能描述
+          functionalDefinition:
+            "判断两个面要素是否 “边界接触但不重叠”,且距离小于等于自定义阈值(默认 1 米,可通过接口参数调整),核心用于 “相邻区域联动” 场景",
+          // 元素类型
+          elementTypes: ["polygon", "polygon", "EPSILON"],
+          // 元素个数
+          numberOf: 2,
+          // 后台接口路径
+          apiUrl: "/relationAnalys/adjacent",
+        },
+        "1.5.4.2": {
+          // 功能描述
+          functionalDefinition:
+            "判断一个要素(含点、线、面)是否完全位于另一个面要素内部,且无任何部分超出,核心用于 “归属界定” 场景",
+          // 元素类型
+          elementTypes: ["point", "polyline", "polygon", "EPSILON"],
+          // 元素个数
+          numberOf: 2,
+          // 后台接口路径
+          apiUrl: "/relationAnalys/include",
+        },
+        "1.5.4.3": {
+          // 功能描述
+          functionalDefinition:
+            "判断两个要素(点与线、点与面、线与线、线与面、面与面)是否存在空间重叠(含部分重叠),核心用于 “交叉影响” 场景",
+          // 元素类型
+          elementTypes: ["point", "polyline", "polygon", "EPSILON"],
+          // 元素个数
+          numberOf: 2,
+          // 后台接口路径
+          apiUrl: "/relationAnalys/intersect",
+        },
+        "1.5.4.4": {
+          // 功能描述
+          functionalDefinition:
+            "判断两个要素(点、线、面)之间无任何空间接触(含边界接触),且最小距离大于自定义阈值(默认 10 米,可通过接口参数调整),核心用于 “无关联排除” 场景",
+          // 元素类型
+          elementTypes: ["point", "polyline", "polygon", "EPSILON"],
+          // 元素个数
+          numberOf: 2,
+          // 后台接口路径
+          apiUrl: "/relationAnalys/parting",
+        },
+        "1.5.5.1": {
+          // 功能描述
+          functionalDefinition:
+            "非空间数据转空间数据功能支持常见格式的非空间数据转换,如 CSV、Excel 表格数据等。通过与地理编码服务紧密结合,关联空间参考信息(如地址、行政区域、关联 ID),转换为带坐标的空间要素(点、线、面),将表格中的地址、坐标等信息转换为具有空间位置的矢量数据的功能,并依据用户设定规则赋予属性信息。核心解决 “业务数据与地图引擎关联” 的问题,实现 “数据可视化” 与 “空间分析” 的联动。在智慧城市建设中,整合人口、环境、交通等多源非空间数据,实现数据融合分析,为城市精细化管理提供数据支持;在地理大数据分析中,拓展非空间数据的应用维度,挖掘数据潜在价值。",
+          // 元素类型
+          elementTypes: ["file"],
+          // 元素个数
+          numberOf: 0,
+          // 后台接口路径
+          apiUrl: "/nonStandardToStandard/importFile",
+        },
+        "1.5.6.1": {
+          // 功能描述
+          functionalDefinition:
+            "坐标转换是基于青浦区三维数字底板的坐标系统(SH2000投影坐标系),将空间要素的坐标在不同坐标系之间进行转换的功能,包括地理坐标系(如 WGS84、上海 2000 等)和投影坐标系(如高斯 - 克吕格投影、UTM 投影等)",
+          // 元素类型
+          elementTypes: ["lon", "lat", "inPrj", "outPrj"],
+          inPrj: [
+            {
+              value: "WGS84",
+              label: "WGS84",
+            },
+            {
+              value: "SH2000",
+              label: "SH2000",
+            },
+            {
+              value: "UTM",
+              label: "UTM",
+            },
+            {
+              value: "WEB_Mercator",
+              label: "WEB_Mercator",
+            },
+          ],
+          outPrj: [
+            {
+              value: "WGS84",
+              label: "WGS84",
+            },
+            {
+              value: "SH2000",
+              label: "SH2000",
+            },
+            {
+              value: "UTM",
+              label: "UTM",
+            },
+            {
+              value: "WEB_Mercator",
+              label: "WEB_Mercator",
+            },
+          ],
+          // 元素个数
+          numberOf: 0,
+          // 后台接口路径
+          apiUrl: "/coordinateSystemTransformation/pointTransformation",
+        },
+        "1.5.6.2": {
+          // 功能描述
+          functionalDefinition:
+            "传入geoJsonPolygons(geojson)并解析成JSONArray,然后转坐标并返回geojson",
+          // 元素类型
+          elementTypes: ["point", "polyline", "polygon", "inPrj", "outPrj"],
+          inPrj: [
+            {
+              value: "WGS84",
+              label: "WGS84",
+            },
+            {
+              value: "SH2000",
+              label: "SH2000",
+            },
+            {
+              value: "UTM",
+              label: "UTM",
+            },
+            {
+              value: "WEB_Mercator",
+              label: "WEB_Mercator",
+            },
+          ],
+          outPrj: [
+            {
+              value: "WGS84",
+              label: "WGS84",
+            },
+            {
+              value: "SH2000",
+              label: "SH2000",
+            },
+            {
+              value: "UTM",
+              label: "UTM",
+            },
+            {
+              value: "WEB_Mercator",
+              label: "WEB_Mercator",
+            },
+          ],
+          // 元素个数
+          numberOf: 1,
+          // 后台接口路径
+          apiUrl: "/coordinateSystemTransformation/transformation",
+        },
+        "1.5.7.1": {
+          // 功能描述
+          functionalDefinition:
+            "时空数据格式转换是将青浦区三维数字底板中的时空数据(含空间坐标与时间属性的数据,如轨迹数据、时序监测数据),在不同标准数据格式之间进行转换的功能,如 Shapefile、GeoJSON、KML、NetCDF 等。核心支持 “矢量数据格式转换”“栅格数据格式转换”“时空轨迹数据格式转换” 三类转换,确保数据能在不同 GIS 软件、不同应用系统之间兼容流转,不同部门、不同系统之间顺利读取和处理时空数据;在大数据存储和管理时,根据不同应用场景和存储需求,选择合适的数据格式。提高数据存储和访问效率,满足数据共享、分析、展示的多场景需求。",
+          // 元素类型
+          elementTypes: ["file", "outFileType", "lonKey", "latKey"],
+          outFileType: [
+            {
+              value: "geoJson",
+              label: "geoJson",
+            },
+            {
+              value: "shp",
+              label: "shp",
+            },
+            {
+              value: "csv",
+              label: "csv",
+            },
+            {
+              value: "xlsx",
+              label: "xlsx",
+            },
+          ],
+          // 元素个数
+          numberOf: 0,
+          // 后台接口路径
+          apiUrl: "/spatiotemporal_data_format_conversion/fileFormatConversion",
+        },
+        "1.5.7.2": {
+          // 功能描述
+          functionalDefinition: "转换文件下载",
+          // 元素类型
+          elementTypes: ["filePath"],
+          // 元素个数
+          numberOf: 0,
+          // 后台接口路径
+          apiUrl: "/spatiotemporal_data_format_conversion/downloadFile",
+        },
+        // 这就都是时空算子库了
+        "1.2.5.1": {
+          // 功能描述
+          functionalDefinition:
+            "墨卡托投影是一种等角正圆柱投影,经纬线相互垂直,纬线间隔随纬度升高而增大 。计算距离时,利用投影后的坐标,根据勾股定理计算两点间的直线距离,再通过特定的比例尺换算公式,将投影距离转换为实际地面距离。计算面积时,先将多边形分割成多个三角形,利用三角形面积公式计算各三角形面积,再求和得到多边形面积,过程中同样要考虑投影带来的变形和比例尺差异。",
+          // 元素类型
+          elementTypes: ["polyline", "polygon", "unit", "inPrj"],
+          // 单位
+          unit: [
+            {
+              value: "METER",
+              label: "米",
+            },
+            {
+              value: "KILOMETER",
+              label: "千米",
+            },
+          ],
+          inPrj: [
+            {
+              value: "WGS84",
+              label: "WGS84",
+            },
+            {
+              value: "SH2000",
+              label: "SH2000",
+            },
+            {
+              value: "UTM",
+              label: "UTM",
+            },
+            {
+              value: "WEB_Mercator",
+              label: "WEB_Mercator",
+            },
+          ],
+          // 元素个数
+          numberOf: 1,
+          // 后台接口路径
+          apiUrl: "/spaceTimeOperatorLibrary/adjacent",
+        },
+
+        "1.2.5.2": {
+          // 功能描述:(必须要有两个点和一个障碍面?)
+          functionalDefinition:
+            "基于图论的思想,将地图抽象为一个图,其中节点表示位置,边表示可通行路径,设置障碍的区域则视为不可通行的边或节点。通过搜索算法,如 Dijkstra 算法、A * 算法等,在考虑障碍的情况下,寻找从起点到终点的最优路径。这些算法会根据节点间的距离、代价等因素,不断探索和评估路径,直到找到满足条件的最佳路径。",
+          // 元素类型
+          elementTypes: ["point", "point", "polygon"],
+          // 元素个数
+          numberOf: 3,
+          // 后台接口路径
+          apiUrl: "/spaceTimeOperatorLibrary/pathCalculation",
+        },
+        "1.2.5.3": {
+          // 功能描述:(由于使用了jts的工具,这个工具类必须要有高程数据,暂时测试不了)
+          functionalDefinition:
+            "对于点与线的关系,通过计算点到线的垂直距离,若距离为 0,则点在线上;对于点与面的关系,可通过射线法,从点出发作一条射线,统计射线与多边形边界的交点个数,若为奇数则点在面内,偶数则在面外。线与线的关系可通过判断两条线段是否相交来确定;线与面的关系则是判断线与面的边界是否相交以及交点个数等。对于体与点、线、面的关系,类似地通过计算几何的方法,判断点是否在体内,线是否贯穿体,面是否与体相交等。",
+          // 元素类型
+          elementTypes: ["pointZ", "polylineZ", "polygonZ"],
+          // 元素个数
+          numberOf: 2,
+          // 后台接口路径
+          apiUrl: "/spaceTimeOperatorLibrary/topologyPlus",
+        },
+        "1.2.5.4": {
+          // 功能描述
+          functionalDefinition:
+            "以点、线、面等几何对象为基础,按照给定的距离生成围绕这些对象的缓冲区。对于点,缓冲区是一个以点为圆心,给定距离为半径的圆;对于线,缓冲区是沿着线的两侧扩展一定距离形成的带状区域;对于面,缓冲区是在面的边界向外或向内扩展一定距离得到的新面。计算过程中需要考虑几何对象的形状、方向以及缓冲区的平滑度等因素。",
+          // 元素类型
+          elementTypes: ["point", "polyline", "polygon", "EPSILON"],
+          // 元素个数
+          numberOf: 2,
+          // 后台接口路径
+          apiUrl: "/relationAnalys/neighbor",
+        },
+        // children: [
+        //   {
+        //     value: "1.2.5.5",
+        //     label: "线面体分割",
+        //   },
+        //   {
+        //     value: "1.2.5.6",
+        //     label: "时空差异分析(两个面计算不相交的面)",
+        //   },
+        // ],
       },
       currentTool: null,
       drawingMode: null,
@@ -1438,18 +1892,18 @@ export default {
       }
       if (
         this.SceneValue &&
-        this.dmsServerItem &&
-        this.dmsServerItem.elementTypes &&
-        this.ifHasType("inPrj") &&
+        this.SceneRule[this.SceneValue] &&
+        this.SceneRule[this.SceneValue].elementTypes &&
+        this.SceneRule[this.SceneValue].elementTypes.includes("inPrj") &&
         this.params.inPrj
       ) {
         requestData.inPrj = this.params.inPrj;
       }
       if (
         this.SceneValue &&
-        this.dmsServerItem &&
-        this.dmsServerItem.elementTypes &&
-        this.ifHasType("outPrj") &&
+        this.SceneRule[this.SceneValue] &&
+        this.SceneRule[this.SceneValue].elementTypes &&
+        this.SceneRule[this.SceneValue].elementTypes.includes("outPrj") &&
         this.params.outPrj
       ) {
         requestData.outPrj = this.params.outPrj;

+ 1 - 1
src/views/Wgn.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="wgn_box">
-    <el-backtop target="#scrollbar" :right="20" :bottom="70" />
+    <el-backtop target=".wgn_box" :right="20" :bottom="70" />
     <div class="server_title">
       <el-image
         style="width: 824px; height: calc(100vh - 70px)"