From 2fd93008d2ce0052353e5016f2c15d1890ffd2e6 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期一, 23 十月 2023 13:42:37 +0800
Subject: [PATCH] 解决影像图层覆盖了矢量图层

---
 MoonExp/Sources/MoonExp.py              |   59 +++++++++++---
 .gitignore                              |    1 
 ExportMap/cs/TBUtils.cs                 |    2 
 ExportMap/cs/Tools.cs                   |   49 ++++++++++++
 ExportMap/Sources/MoonExp.py            |   59 +++++++++++---
 MoonExp/Controllers/ExportController.cs |    4 +
 MoonExp/cs/ExportUtil.cs                |    3 
 ExportMap/Sources/Moon.qpt              |    6 
 ExportMap/Web.config                    |    2 
 9 files changed, 150 insertions(+), 35 deletions(-)

diff --git a/.gitignore b/.gitignore
index 27b6cc1..5c400ce 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,3 +28,4 @@
 /CutTiles
 /MoonExp/Sources/Test.png
 /MoonExp/Sources/log.txt
+/ExportMap/Sources/bak/*.qpt
diff --git a/ExportMap/Sources/Moon.qpt b/ExportMap/Sources/Moon.qpt
index 9634dea..5f47c15 100644
--- a/ExportMap/Sources/Moon.qpt
+++ b/ExportMap/Sources/Moon.qpt
@@ -163,7 +163,7 @@
    </dataDefinedProperties>
    <customproperties/>
   </LayoutObject>
-  <Extent ymax="64.40696224962117356" ymin="9.87192880480477086" xmin="64.38422237834893735" xmax="152.1417474619615291"/>
+  <Extent ymax="-15.777073" ymin="31.089563" xmin="-11.9472810" xmax="3.365208"/>
   <crs>
    <spatialrefsys>
     <wkt>GEOGCRS["WGS 84",DATUM["World Geodetic System 1984",ELLIPSOID["WGS 84",6378137,298.257223563,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],CS[ellipsoidal,2],AXIS["geodetic latitude (Lat)",north,ORDER[1],ANGLEUNIT["degree",0.0174532925199433]],AXIS["geodetic longitude (Lon)",east,ORDER[2],ANGLEUNIT["degree",0.0174532925199433]],USAGE[SCOPE["unknown"],AREA["World"],BBOX[-90,-180,90,180]],ID["EPSG",4326]]</wkt>
@@ -467,9 +467,9 @@
   <property value="0" key="imageCropMarginTop"/>
   <property value="false" key="imageCropToContents"/>
   <property value="true" key="singleFile"/>
-  <property key="layers" value="geo_albedo_feature_point,geo_alkaline_rock_suite,geo_cliff_annotation,geo_construction_unit_boundary,copernican_craters_180,geo_age_not_determined,moon"/>
+  <property key="layers" value="geo_magnesian_rock_suite,geo_kreep_basalt,geo_alkaline_rock_suite,lunar_place_name"/>
   <property key="imgPath" value="E:\terrait\TianJin\ExportMap\MoonExp\Sources\Test.png"/>
-  <property key="wmsUrl" value="http://172.16.2.10:50005/sj_raster/v6/wmts/service/system/10000201/5?ak=mf72ff9295c740ec0f37e61433e8a3ad8d,http://219.153.49.10:7511/sj_raster/v6/wmts/service/system/10000201/1?ak=mf72ff9295c740ec0f37e61433e8a3ad8d"/>
+  <property key="wmsUrl" value="http://219.153.49.10:7511/sj_raster/v6/wmts/service/system/10000201/1?ak=mf72ff9295c740ec0f37e61433e8a3ad8d"/>
  </customproperties>
  <Atlas filenamePattern="'output_'||@atlas_featurenumber" filterFeatures="0" enabled="0" coverageLayer="" sortFeatures="0" hideCoverage="0" pageNameExpression=""/>
 </Layout>
diff --git a/ExportMap/Sources/MoonExp.py b/ExportMap/Sources/MoonExp.py
index 181fddf..9e19c50 100644
--- a/ExportMap/Sources/MoonExp.py
+++ b/ExportMap/Sources/MoonExp.py
@@ -4,12 +4,12 @@
 import sys
 import math
 import argparse
-from qgis.core import *
 from qgis.gui import *
+from qgis.core import *
 from qgis.PyQt.QtGui import *
+from qgis.PyQt.QtXml import *
 from qgis.PyQt.QtCore import *
 from qgis.PyQt.QtWidgets import *
-from qgis.PyQt.QtXml import *
 
 
 # 鑾峰彇瀹屾暣璺緞
@@ -39,12 +39,15 @@
 
 
 # 璁剧疆鍥惧眰鍙鎬�
-def set_item_visibility(root_node, show_layers):
+def set_item_visibility(root_node, layout, show_layers):
     print(root_node.name() + ': Group')
     for node in root_node.children():
         # QgsLayerTreeLayer
         if isinstance(node, QgsLayerTreeGroup):
-            set_item_visibility(node, show_layers)
+            if node.name() == "搴曞浘":
+                add_raster_layer(node, layout)
+            else:
+                set_item_visibility(node, layout, show_layers)
         # QgsRasterLayer, QgsVectorLayer
         else:
             name = node.layer().name()
@@ -56,8 +59,32 @@
             node.setItemVisibilityChecked(flag)
 
 
+# 娣诲姞Raster鍥惧眰锛歈gsLayerTreeGroup
+def add_raster_layer(node, layout):
+    wmsUrl = layout.customProperty("wmsUrl")
+    if wmsUrl is None:
+        print("wmsUrl 涓虹┖锛�")
+        return
+    uris = wmsUrl.split(',')
+    # uris = uris[::-1]
+
+    i = 0
+    for uri in uris:
+        i = i + 1
+        if uri is None:
+            continue
+        url = "crs=ESRI:104903&dpiMode=7&format=image/png&layers=Default&styles=default&tileMatrixSet=GoogleCRS84Quad01&url=" + uri
+        print("WMTS鍦板潃锛�" + url)
+
+        layer = QgsRasterLayer(url, "WmsLayer_" + str(i), "wms")
+        if layer.isValid():
+            ls = project.layerStore()
+            ls.addMapLayer(layer)
+            node.addLayer(layer)
+
+
 # 娣诲姞搴曞浘锛歭ayer.isValid()锛宭ayer.metadataUri()锛宭ayer.providerType()
-def add_map_layer(prj, layout, args):
+def add_map_layer(prj, layout):
     uris = layout.customProperty("wmsUrl").split(',')
     for uri in uris:
         if uri is None:
@@ -66,6 +93,7 @@
         print("WMS鍦板潃锛�" + url)
 
         layer = QgsRasterLayer(url, "WmsLayer", "wms")
+        # if layer.isValid():
         prj.addMapLayer(layer)
 
 
@@ -76,13 +104,13 @@
 
 # 鍔犺浇宸ョ▼
 args = get_args()
-prj = QgsProject.instance()
-# prj.read(r'Test.qgz')
-prj.read(os.path.join(args.src, args.qgz))
-print("FileName: " + prj.fileName())
+project = QgsProject.instance()
+# project.read(r'Test.qgz')
+project.read(os.path.join(args.src, args.qgz))
+print("FileName: " + project.fileName())
 
-# layout = QgsPrintLayout(prj)
-layout = QgsLayout(prj)
+# layout = QgsPrintLayout(project)
+layout = QgsLayout(project)
 # layout.initializeDefaults()
 
 # 鍔犺浇妯℃澘
@@ -115,11 +143,11 @@
 # "闃�瀹�", "绔欏満", "绠¢亾涓績绾�", "鐭㈤噺娉ㄨ", "鐭㈤噺鍥�", "楂樺痉褰卞儚娉ㄨ", "楂樺痉褰卞儚", "褰卞儚娉ㄨ", "褰卞儚鍥�"
 # showLayers = ["闃�瀹�", "绠¢亾涓績绾�", "鐭㈤噺娉ㄨ", "鐭㈤噺鍥�"]
 showLayers = layout.customProperty("layers").split(',')
-root = prj.layerTreeRoot()
+root = project.layerTreeRoot()
 
-# set_layers_valid(prj, showLayers)
-set_item_visibility(root, showLayers)
-add_map_layer(prj, layout, args)
+# set_layers_valid(project, showLayers)
+set_item_visibility(root, layout, showLayers)
+# add_map_layer(project, layout)
 
 # sm = layout.itemById(r'璇存槑')
 '''table = layout.multiFrames()[0]
@@ -137,6 +165,7 @@
 # layout.updateBounds()
 layout.renderContext()
 layout.refresh()
+# project.write("C:/360/a.qgz")
 
 # 瀵煎嚭
 exporter = QgsLayoutExporter(layout)
diff --git a/ExportMap/Web.config b/ExportMap/Web.config
index d8ad8c7..6bfca73 100644
--- a/ExportMap/Web.config
+++ b/ExportMap/Web.config
@@ -44,6 +44,8 @@
   <connectionStrings/>
   <system.web>
     <compilation debug="true" targetFramework="4.5.2"/>
+    <!-- 浼氳瘽瓒呮椂鏃堕棿(榛樿20,鍒嗛挓) -->
+    <sessionState mode="InProc" timeout="10080"></sessionState>
     <!-- maxRequestLength鏄笂浼犳枃浠舵椂鏈�澶ize(鍗曚綅鏄疜B,榛樿鍊兼槸4096kb)锛宔xecutionTimeout鏄姹俿ession(鍗曚綅鏄,榛樿鍊兼槸110s) -->
     <httpRuntime maxRequestLength="2147483647" executionTimeout="8640000"/>
     <pages controlRenderingCompatibilityVersion="4.0"/>
diff --git a/ExportMap/cs/TBUtils.cs b/ExportMap/cs/TBUtils.cs
index 08bfc42..604bb37 100644
--- a/ExportMap/cs/TBUtils.cs
+++ b/ExportMap/cs/TBUtils.cs
@@ -64,7 +64,7 @@
 
                 string cmd = string.Format("\"C:\\Program Files\\Skyline\\TerraBuilder\\TerraBuilder.exe\" -script \"{0}\"", js); // -DisablePrint
                 ReloadTB();
-                err = Tools.ExecCmd(new List<string> { cmd });
+                err = Tools.ExecCmdForWin(new List<string> { cmd });
                 isBusy = false;
 
                 return File.Exists(MptPath) ? MoveMpt(MptPath, sourcePath) : null;
diff --git a/ExportMap/cs/Tools.cs b/ExportMap/cs/Tools.cs
index 6517612..4b7dc85 100644
--- a/ExportMap/cs/Tools.cs
+++ b/ExportMap/cs/Tools.cs
@@ -374,6 +374,55 @@
         }
 
         /// <summary>
+        /// 鎵ц鍛戒护
+        /// </summary>
+        /// <param name="list">鍛戒护闆嗗悎</param>
+        public static string ExecCmdForWin(List<string> list, bool noWin = false)
+        {
+            string str = null;
+            Process p = null;
+            try
+            {
+                p = new Process();
+                p.StartInfo.FileName = "cmd.exe";
+                p.StartInfo.UseShellExecute = false;
+                p.StartInfo.CreateNoWindow = noWin;
+                p.StartInfo.RedirectStandardInput = true;
+                p.StartInfo.RedirectStandardOutput = true;
+                p.StartInfo.RedirectStandardError = true;
+                p.Start();
+
+                StreamWriter si = p.StandardInput;
+                StreamReader se = p.StandardError;
+
+                LogOut.Info("cmd = " + string.Join("锛�", list));
+                si.AutoFlush = true;
+                foreach (string cmd in list)
+                {
+                    si.WriteLine(cmd);
+                }
+                si.WriteLine("exit");
+
+                str = se.ReadToEnd();
+                se.Close();
+                si.Close();
+            }
+            catch (Exception ex)
+            {
+                LogOut.Error(ex.Message + "\r\n" + ex.StackTrace);
+                str = ex.Message;
+            }
+            finally
+            {
+                if (p != null)
+                {
+                    p.Close();
+                }
+            }
+            return str;
+        }
+
+        /// <summary>
         /// 鍒涘缓鏁版嵁鍙戝竷绫�
         /// </summary>
         public static SysPublish NewPublish(SysMeta meta, XYZArgs args, string url, string path)
diff --git a/MoonExp/Controllers/ExportController.cs b/MoonExp/Controllers/ExportController.cs
index 502503a..1a369d9 100644
--- a/MoonExp/Controllers/ExportController.cs
+++ b/MoonExp/Controllers/ExportController.cs
@@ -5,6 +5,7 @@
 using System.Linq;
 using System.Net;
 using System.Net.Http;
+using System.Security;
 using System.Web.Http;
 
 namespace MoonExp.Controllers
@@ -14,6 +15,9 @@
         [HttpGet]
         public string Test()
         {
+            string str = "http://219.153.49.10:7511/sj_raster/v6/wmts/service/system/10000201/1?ak=mf72ff9295c740ec0f37e61433e8a3ad8d&a=1";
+            string escapeStr = SecurityElement.Escape(str);
+
             return DateTime.Now.ToString("yyyyy-MM-dd HH:mm:ss");
         }
 
diff --git a/MoonExp/Sources/MoonExp.py b/MoonExp/Sources/MoonExp.py
index 181fddf..9e19c50 100644
--- a/MoonExp/Sources/MoonExp.py
+++ b/MoonExp/Sources/MoonExp.py
@@ -4,12 +4,12 @@
 import sys
 import math
 import argparse
-from qgis.core import *
 from qgis.gui import *
+from qgis.core import *
 from qgis.PyQt.QtGui import *
+from qgis.PyQt.QtXml import *
 from qgis.PyQt.QtCore import *
 from qgis.PyQt.QtWidgets import *
-from qgis.PyQt.QtXml import *
 
 
 # 鑾峰彇瀹屾暣璺緞
@@ -39,12 +39,15 @@
 
 
 # 璁剧疆鍥惧眰鍙鎬�
-def set_item_visibility(root_node, show_layers):
+def set_item_visibility(root_node, layout, show_layers):
     print(root_node.name() + ': Group')
     for node in root_node.children():
         # QgsLayerTreeLayer
         if isinstance(node, QgsLayerTreeGroup):
-            set_item_visibility(node, show_layers)
+            if node.name() == "搴曞浘":
+                add_raster_layer(node, layout)
+            else:
+                set_item_visibility(node, layout, show_layers)
         # QgsRasterLayer, QgsVectorLayer
         else:
             name = node.layer().name()
@@ -56,8 +59,32 @@
             node.setItemVisibilityChecked(flag)
 
 
+# 娣诲姞Raster鍥惧眰锛歈gsLayerTreeGroup
+def add_raster_layer(node, layout):
+    wmsUrl = layout.customProperty("wmsUrl")
+    if wmsUrl is None:
+        print("wmsUrl 涓虹┖锛�")
+        return
+    uris = wmsUrl.split(',')
+    # uris = uris[::-1]
+
+    i = 0
+    for uri in uris:
+        i = i + 1
+        if uri is None:
+            continue
+        url = "crs=ESRI:104903&dpiMode=7&format=image/png&layers=Default&styles=default&tileMatrixSet=GoogleCRS84Quad01&url=" + uri
+        print("WMTS鍦板潃锛�" + url)
+
+        layer = QgsRasterLayer(url, "WmsLayer_" + str(i), "wms")
+        if layer.isValid():
+            ls = project.layerStore()
+            ls.addMapLayer(layer)
+            node.addLayer(layer)
+
+
 # 娣诲姞搴曞浘锛歭ayer.isValid()锛宭ayer.metadataUri()锛宭ayer.providerType()
-def add_map_layer(prj, layout, args):
+def add_map_layer(prj, layout):
     uris = layout.customProperty("wmsUrl").split(',')
     for uri in uris:
         if uri is None:
@@ -66,6 +93,7 @@
         print("WMS鍦板潃锛�" + url)
 
         layer = QgsRasterLayer(url, "WmsLayer", "wms")
+        # if layer.isValid():
         prj.addMapLayer(layer)
 
 
@@ -76,13 +104,13 @@
 
 # 鍔犺浇宸ョ▼
 args = get_args()
-prj = QgsProject.instance()
-# prj.read(r'Test.qgz')
-prj.read(os.path.join(args.src, args.qgz))
-print("FileName: " + prj.fileName())
+project = QgsProject.instance()
+# project.read(r'Test.qgz')
+project.read(os.path.join(args.src, args.qgz))
+print("FileName: " + project.fileName())
 
-# layout = QgsPrintLayout(prj)
-layout = QgsLayout(prj)
+# layout = QgsPrintLayout(project)
+layout = QgsLayout(project)
 # layout.initializeDefaults()
 
 # 鍔犺浇妯℃澘
@@ -115,11 +143,11 @@
 # "闃�瀹�", "绔欏満", "绠¢亾涓績绾�", "鐭㈤噺娉ㄨ", "鐭㈤噺鍥�", "楂樺痉褰卞儚娉ㄨ", "楂樺痉褰卞儚", "褰卞儚娉ㄨ", "褰卞儚鍥�"
 # showLayers = ["闃�瀹�", "绠¢亾涓績绾�", "鐭㈤噺娉ㄨ", "鐭㈤噺鍥�"]
 showLayers = layout.customProperty("layers").split(',')
-root = prj.layerTreeRoot()
+root = project.layerTreeRoot()
 
-# set_layers_valid(prj, showLayers)
-set_item_visibility(root, showLayers)
-add_map_layer(prj, layout, args)
+# set_layers_valid(project, showLayers)
+set_item_visibility(root, layout, showLayers)
+# add_map_layer(project, layout)
 
 # sm = layout.itemById(r'璇存槑')
 '''table = layout.multiFrames()[0]
@@ -137,6 +165,7 @@
 # layout.updateBounds()
 layout.renderContext()
 layout.refresh()
+# project.write("C:/360/a.qgz")
 
 # 瀵煎嚭
 exporter = QgsLayoutExporter(layout)
diff --git a/MoonExp/cs/ExportUtil.cs b/MoonExp/cs/ExportUtil.cs
index 41173e7..b115aaf 100644
--- a/MoonExp/cs/ExportUtil.cs
+++ b/MoonExp/cs/ExportUtil.cs
@@ -8,6 +8,7 @@
 using System.IO;
 using System.Linq;
 using System.Net;
+using System.Security;
 using System.Text;
 using System.Web;
 
@@ -274,7 +275,7 @@
 
             string wmtsUrl = string.Join(",", list);
 
-            return wmtsUrl;
+            return SecurityElement.Escape(wmtsUrl);
         }
 
         /// <summary>

--
Gitblit v1.9.3