|
@@ -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
|