zoulei 1 жил өмнө
parent
commit
5aac3fcfab

+ 46 - 28
XdCxRhDW.App/ExtensionsDev/MapControlEx.cs

@@ -60,7 +60,7 @@ public enum GoogleMapType
 
 /// <summary>
 /// MapControl扩展类,封装了常用的非业务基础功能.
-/// 内置了4个图层,ImageTileLayer、DrawLayer、FixedDrawLayer、PosLayer.
+/// 内置了3个图层DrawLayer、FixedDrawLayer、PosLayer.
 /// 必须首先调用UseDefalutOptions函数
 /// </summary>
 public static class MapControlEx
@@ -319,11 +319,6 @@ public static class MapControlEx
         ctrl.NavigationPanelOptions.CoordinatesStyle.Font = new Font("微软雅黑", 10F);
         ctrl.NavigationPanelOptions.ScaleStyle.Font = new Font("微软雅黑", 10F);
 
-        // Create ImageTileLayer
-        ImageLayer layer = new ImageLayer() { Name = "ImageTileLayer" };
-
-        ctrl.Layers.Add(layer);
-
         //地图绘制加载(标点、测距、框选等元素载体图层).用来绘制可擦除的元素
         var layerDraw = new VectorItemsLayer() { Name = "DrawLayer" };
         var drawDataStorage = new MapItemStorage();
@@ -839,12 +834,23 @@ public static class MapControlEx
         }
         if (localGmdbDataEnable)
         {
+            RemoveWmtsLyaer(ctrl);
+            ImageLayer layer = new ImageLayer() { Name = "WMTS:Local" };
+            ctrl.Layers.Add(layer);
             var provider = new ImageTileDataProvider();//地图瓦片提供者
             provider.TileSource = new ImageTileSource();//地图瓦片数据源接口实现
-            ctrl.GetImageLayer().DataProvider = provider;
+            layer.DataProvider = provider;
         }
         return ctrl;
     }
+    private static void RemoveWmtsLyaer(MapControl ctrl)
+    {
+        var layers = ctrl.Layers.Where(p => p.Name.StartsWith("WMTS:"));
+        foreach (var item in layers)
+        {
+            ctrl.Layers.Remove(item);
+        }
+    }
     /// <summary>
     /// 使用WMTS图源
     /// </summary>
@@ -855,12 +861,7 @@ public static class MapControlEx
     /// <returns></returns>
     public static MapControl UseWMTS(this MapControl ctrl, string url, EnumWmtsSource source, EnumMapLayerType layerType)
     {
-        //var provider = new HttpMapDataProvider();
-        //var tileSource = provider.TileSource as HttpTileSource;
-        //tileSource.HttpServerAddr = url;
-        //tileSource.WmtsSource = source;
-        //tileSource.LayerType = layerType;
-        //ctrl.GetImageLayer().DataProvider = provider;
+        RemoveWmtsLyaer(ctrl);
         if (source == EnumWmtsSource.SJZX)
         {
             if (layerType.HasFlag(EnumMapLayerType.SatMap))
@@ -871,10 +872,12 @@ public static class MapControlEx
                 tileSource.WmtsSource = source;
                 tileSource.LayerType = layerType;
                 tileSource.LayerName = "satellite";
-                ImageLayer satelliteImageLayer = new ImageLayer();
+                ImageLayer satelliteImageLayer = new ImageLayer()
+                {
+                     Name="WMTS:SJZX-SatMap"
+                };
                 ctrl.Layers.Add(satelliteImageLayer);
                 satelliteImageLayer.DataProvider = provider;
-                //ctrl.GetImageLayer().DataProvider = provider;
             }
             if (layerType.HasFlag(EnumMapLayerType.RoadMap) || layerType.HasFlag(EnumMapLayerType.XZQH_Map))
             {
@@ -884,7 +887,10 @@ public static class MapControlEx
                 tileSource.WmtsSource = source;
                 tileSource.LayerType = layerType;
                 tileSource.LayerName = "electron";
-                ImageLayer electronImageLayer = new ImageLayer();
+                ImageLayer electronImageLayer = new ImageLayer()
+                {
+                    Name="WMTS:SJZX-Electron"
+                };
                 ctrl.Layers.Add(electronImageLayer);
                 electronImageLayer.DataProvider = provider;
             }
@@ -899,10 +905,12 @@ public static class MapControlEx
                 tileSource.WmtsSource = source;
                 tileSource.LayerType = layerType;
                 tileSource.LayerName = "NaturalEarthII";
-                ImageLayer naturalEarthIIImageLayer = new ImageLayer();
+                ImageLayer naturalEarthIIImageLayer = new ImageLayer()
+                {
+                    Name = "WMTS:ZCJ-NaturalEarthII"
+                };
                 ctrl.Layers.Add(naturalEarthIIImageLayer);
                 naturalEarthIIImageLayer.DataProvider = provider;
-                //ctrl.GetImageLayer().DataProvider = provider;
             }
             if (layerType.HasFlag(EnumMapLayerType.RoadMap))
             {
@@ -912,7 +920,10 @@ public static class MapControlEx
                 tileSource.WmtsSource = source;
                 tileSource.LayerType = layerType;
                 tileSource.LayerName = "roadmap-final";
-                ImageLayer roadmapIImageLayer = new ImageLayer();
+                ImageLayer roadmapIImageLayer = new ImageLayer()
+                {
+                    Name = "WMTS:ZCJ-Roadmap"
+                };
                 ctrl.Layers.Add(roadmapIImageLayer);
                 roadmapIImageLayer.DataProvider = provider;
             }
@@ -924,7 +935,10 @@ public static class MapControlEx
                 tileSource.WmtsSource = source;
                 tileSource.LayerType = layerType;
                 tileSource.LayerName = "overlay-final";
-                ImageLayer overlayImageLayer = new ImageLayer();
+                ImageLayer overlayImageLayer = new ImageLayer()
+                { 
+                    Name = "WMTS:ZCJ-Overlay"
+                };
                 ctrl.Layers.Add(overlayImageLayer);
                 overlayImageLayer.DataProvider = provider;
             }
@@ -955,6 +969,7 @@ public static class MapControlEx
         {
             throw new ArgumentNullException(nameof(layerName));
         }
+        RemoveWmtsLyaer(ctrl);
         var provider = new WmsDataProvider();//地图瓦片提供者
         provider.ServerUri = url;
         if (!string.IsNullOrWhiteSpace(layerName))
@@ -968,7 +983,9 @@ public static class MapControlEx
         //    if (string.IsNullOrWhiteSpace(layerName))
         //        provider.ActiveLayerName = e.Layers[0].Name;
         //};
-        ctrl.GetImageLayer().DataProvider = provider;
+        ImageLayer layer = new ImageLayer() { Name="WMTS:Wms"};
+        layer.DataProvider = provider;
+        ctrl.Layers.Add(layer);
         return ctrl;
     }
 
@@ -1842,10 +1859,10 @@ public static class MapControlEx
     /// </summary>
     /// <param name="ctrl"></param>
     /// <returns></returns>
-    public static ImageLayer GetImageLayer(this MapControl ctrl)
+    public static List<ImageLayer> GetImageLayer(this MapControl ctrl)
     {
         if (ctrl.Layers == null) return null;
-        return (ImageLayer)ctrl.Layers["ImageTileLayer"];
+        return ctrl.Layers.Where(p => p.Name.StartsWith("WMTS:")).Select(p => (ImageLayer)p).ToList();
     }
 
     /// <summary>
@@ -1880,17 +1897,18 @@ public static class MapControlEx
     }
 
     /// <summary>
-    /// 设置地图类型.默认为Normal
+    /// 设置本地地图类型.默认为Normal
     /// 该方法为所有MapControl实例设置地图类型
     /// </summary>
     /// <param name="mapType"></param>
-    public static void SetMapType(GoogleMapType mapType)
+    public static void SetLocalMapType(GoogleMapType mapType)
     {
         mMapType = mapType;
         listMapCtrl.ForEach(t =>
         {
-            if (t.GetImageLayer() == null) return;
-            var provider = t.GetImageLayer().DataProvider as MapTileDataProviderBase;
+            var localLayer =t.GetImageLayer()?.FirstOrDefault(p=>p.Name=="WMTS:Local");
+            if (localLayer == null) return;
+            var provider = localLayer.DataProvider as MapTileDataProviderBase;
             provider?.ClearCache();
             t.Refresh();
         });
@@ -2659,7 +2677,7 @@ public static class MapControlEx
                     string imgUrl = string.Empty;
                     if (WmtsSource == EnumWmtsSource.SJZX)
                     {
-                      
+
                         imgUrl = $"{HttpServerAddr}?lyr={LayerName}&x={tilePositionX}&y={tilePositionY}&z={zoomLevel}";
                     }
                     else

+ 1 - 1
XdCxRhDW.App/UserControl/CtrlHome.cs

@@ -64,7 +64,7 @@ namespace XdCxRhDW.App.UserControl
         private async void CtrlHome_Load(object sender, EventArgs e)
         {
             Messenger.Defalut.Sub<ModelPosRes>("新增定位点", OnPosAdd);
-            Messenger.Defalut.Sub<SysSetings>("系统配置改变", OnSysSetingsChanged);
+            Messenger.Defalut.Sub<SysSetings>("地图类型改变", OnSysSetingsChanged);
             Messenger.Defalut.Sub<int>("任务状态改变", async id =>
             {
 

+ 12 - 17
XdCxRhDW.App/UserControl/CtrlSysSettings.cs

@@ -42,6 +42,7 @@ namespace XdCxRhDW.App.UserControl
             {
                 txtWmtsSource.Properties.Items.AddEnum<EnumWmtsSource>();
                 txtLayer.Items.AddEnum<EnumMapLayerType>();
+                txtLayer.Items.RemoveAt(0);
                 txtWmtsSource.SelectedIndex = 0;
                 txtLayer.SelectedIndex = 0;
                 using (RHDWContext db = new RHDWContext())
@@ -77,9 +78,9 @@ namespace XdCxRhDW.App.UserControl
                                     this.txtLayer.Items[EnumMapLayerType.XZQH_Map].CheckState = CheckState.Checked;
                                 }
                             }
-                               
+
                         }
-                       
+
                     }
                 }
 
@@ -94,6 +95,7 @@ namespace XdCxRhDW.App.UserControl
         private async void btnSave_Click(object sender, EventArgs e)
         {
             bool needStartHttpSvr = false;
+            bool mapChanged = false;
             try
             {
                 if (!int.TryParse(txtHttpPort.Text, out int port))
@@ -101,29 +103,20 @@ namespace XdCxRhDW.App.UserControl
                     DxHelper.MsgBoxHelper.ShowError("Http端口错误!");
                     return;
                 }
-                //if (txtMapType.SelectedIndex != 0 && txtWmtsSource.EditValue == null)
-                //{
-                //    DxHelper.MsgBoxHelper.ShowError("请选择!");
-                //    return;
-                //}
-                if (txtMapType.SelectedIndex != 0 && txtLayer.CheckedItemsCount<=0)
-                {
-                    DxHelper.MsgBoxHelper.ShowError("请选择图层类型!");
-                    return;
-                }
                 using (RHDWContext db = new RHDWContext())
                 {
                     var res = await db.SysSetings.FirstOrDefaultAsync();
                     if (res == null) res = new SysSetings();
+                    needStartHttpSvr = res.HttpPort != port;
                     res.HttpPort = port;
                     res.XLDirectory = txtXLDirectory.Text;
                     res.YDPZThreshold = string.IsNullOrWhiteSpace(txtYDPZThreshold.Text) ? 0 : Convert.ToInt32(txtYDPZThreshold.Text);
+                    mapChanged = res.MapType != txtMapType.SelectedIndex;
                     res.MapType = txtMapType.SelectedIndex;
                     if (txtMapType.SelectedIndex != 0)
                     {
                         res.WmtsSource = (EnumWmtsSource)txtWmtsSource.EditValue;
-
-                        EnumMapLayerType layerType = EnumMapLayerType.SatMap;
+                        EnumMapLayerType layerType = EnumMapLayerType.None;
                         for (int i = 0; i < txtLayer.Items.Count; i++)
                         {
                             if (txtLayer.GetItemChecked(i))
@@ -131,15 +124,17 @@ namespace XdCxRhDW.App.UserControl
                                 layerType |= (EnumMapLayerType)txtLayer.Items[i].Value;
                             }
                         }
-                        layerType = layerType & ~EnumMapLayerType.SatMap;//移除
+                        layerType = layerType & ~EnumMapLayerType.None;//移除
+                        if (!mapChanged)
+                            mapChanged = res.MapLayerType != layerType;
                         res.MapLayerType = layerType;
 
                     }
                     db.SysSetings.AddOrUpdate(res);
-                    needStartHttpSvr = true;
                     await db.SaveChangesAsync();
+                    if (mapChanged)
+                        Messenger.Defalut.Pub("地图类型改变", await db.SysSetings.FirstOrDefaultAsync());
                     DxHelper.MsgBoxHelper.ShowInfo("配置信息保存成功!");
-                    Messenger.Defalut.Pub("系统配置改变", await db.SysSetings.FirstOrDefaultAsync());
                 }
             }
             catch (Exception ex)

+ 8 - 3
XdCxRhDW.Entity/EntityEnum.cs

@@ -139,23 +139,28 @@ namespace XdCxRhDW.Entity
     [Flags]
     public enum EnumMapLayerType
     {
+        /// <summary>
+        /// 未选中任何图层
+        /// </summary>
+        None = 0,
+
         /// <summary>
         /// 卫星图
         /// </summary>
         [Display(Name = "卫星图")]
-        SatMap=1,
+        SatMap=2,
 
         /// <summary>
         /// 道路图
         /// </summary>
         [Display(Name = "道路图")]
-        RoadMap=2,
+        RoadMap=4,
 
         /// <summary>
         /// 行政区划图
         /// </summary>
         [Display(Name = "行政区划图")]
-        XZQH_Map=4
+        XZQH_Map=8
 
     }
 

+ 2 - 3
XdCxRhDW.Repostory/EFContext/RHDWContext.cs

@@ -91,11 +91,10 @@ namespace XdCxRhDW.Repostory
             this.Database.Log = msg =>
             {
             };
-
+            
             modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
             modelBuilder.Configurations.AddFromAssembly(typeof(RHDWPartContext).Assembly);
-
-            var sqliteConnectionInitializer = new SqliteCreateDatabaseIfNotExists<RHDWPartContext>(modelBuilder);
+            var sqliteConnectionInitializer = new SqliteDropCreateDatabaseAlways<RHDWPartContext>(modelBuilder);
             Database.SetInitializer(sqliteConnectionInitializer);
             DbInterception.Add(new SqliteInterceptor());//拦截器
             base.OnModelCreating(modelBuilder);