SuperMap iClient for Silverlight 載入天地圖
效果圖如下:
上程式碼:
<UserControl x:Class="SYIT.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:ic="http://schemas.supermap.com/iclient/2010"
xmlns:is="http://schemas.supermap.com/isdotnet/2010"
xmlns:local="clr-namespace:SYIT.CommonClass"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White">
<ic:Map x:Name="myMap" ViewBoundsChanged="myMap_ViewBoundsChanged">
<local:TiledTDTMapsLayer ID="layer1" IsMarks="False" Mode="Vector"></local:TiledTDTMapsLayer>
<local:TiledTDTMapsLayer ID="layer2" IsMarks="True" Mode="Vector" ></local:TiledTDTMapsLayer>
</ic:Map>
<Border Height="30" Width="150" VerticalAlignment="Top" HorizontalAlignment="Right">
<StackPanel Orientation="Horizontal">
<RadioButton Content="向量地圖" Height="20" IsChecked="True" HorizontalAlignment="Left" Name="Vectorradio" GroupName="layertype" VerticalAlignment="Top" Width="68" Checked="Vectorradio_Checked" />
<RadioButton Content="影像地圖" Height="20" HorizontalAlignment="Left" Name="aerialradio" GroupName="layertype" VerticalAlignment="Top" Width="68" Checked="aerialradio_Checked" />
</StackPanel>
</Border>
<TextBlock x:Name="tblCoordinator" HorizontalAlignment="Left" Margin="10,0,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Bottom" Height="19"/>
</Grid>
</UserControl>
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Net;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using SuperMap.Web.Actions;
using SuperMap.Web.Core;
using SuperMap.Web.ISDotNET6;
using SuperMap.Web.Mapping;
using SuperMap.Web.Service;
using SYIT.CommonClass;
using SYIT.YLZ_ServiceReference;
namespace SYIT
{
public partial class MainPage : UserControl
{
private double oldScale = new double();
TiledTDTMapsLayer layer_1 = new TiledTDTMapsLayer();
TiledTDTMapsLayer layer_2 = new TiledTDTMapsLayer();
public MainPage()
{
InitializeComponent();
this.myMap.ViewBounds = new Rectangle2D(new Point2D(117.112306799734, 29.3397854999518), new Point2D(118.981519200236, 30.5753385000023));
layer_1 = myMap.Layers["layer1"] as TiledTDTMapsLayer;
layer_2 = myMap.Layers["layer2"] as TiledTDTMapsLayer;
myMap.MouseMove += new System.Windows.Input.MouseEventHandler(myMap_MouseMove);
}
private void Vectorradio_Checked(object sender, RoutedEventArgs e)
{
layer_1.Mode = TiledTDTMapsLayer.LayerType.Vector;
layer_2.Mode = TiledTDTMapsLayer.LayerType.Vector;
}
private void aerialradio_Checked(object sender, RoutedEventArgs e)
{
layer_1.Mode = TiledTDTMapsLayer.LayerType.Aerial;
layer_2.Mode = TiledTDTMapsLayer.LayerType.Aerial;
}
private void myMap_ViewBoundsChanged(object sender, ViewBoundsEventArgs e)
{
if (oldScale == 0)
{
oldScale = Math.Round(myMap.Resolution, 10);
}
else if (oldScale != Math.Round(myMap.Resolution, 10))
{
layer_2.Refresh();
oldScale = Math.Round(myMap.Resolution, 10);
}
}
void myMap_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
this.tblCoordinator.Text = myMap.ScreenToMap(e.GetPosition(myMap)).ToString();
}
}
}
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using SuperMap.Web.Core;
using SuperMap.Web.Mapping;
namespace SYIT.CommonClass
{
public class TiledTDTMapsLayer : TiledCachedLayer
{
//定義基本URL
private string[] subDomains = { "0", "1", "2", "3", "4", "5" };
//道路圖層縮放級別2-10的URL
private const string VectorGroup1 = "http://tile{0}.tianditu.com/DataServer?T=A0512_EMap&X={1}&Y={2}&L={3}";
//道路圖層縮放級別11-13的URL
private const string VectorGroup2 = "http://tile{0}.tianditu.com/DataServer?T=B0627_EMap1112&X={1}&Y={2}&L={3}";
//道路圖層縮放級別13以上的URL
private const string VectorGroup3 = "http://tile{0}.tianditu.com/DataServer?T=siwei0608&X={1}&Y={2}&L={3}";
//影像圖層縮放級別2-10的URL
private const string AerialGroup1 = "http://tile{0}.tianditu.com/DataServer?T=sbsm0210&X={1}&Y={2}&L={3}";
//影像圖層縮放級別11的URL
private const string AerialGroupLeve11 = "http://tile{0}.tianditu.com/DataServer?T=e11&X={1}&Y={2}&L={3}";
//影像圖層縮放級別12的URL
private const string AerialGroupLeve12 = "http://tile{0}.tianditu.com/DataServer?T=e12&X={1}&Y={2}&L={3}";
//影像圖層縮放級別13的URL
private const string AerialGroupLeve13 = "http://tile{0}.tianditu.com/DataServer?T=e13&X={1}&Y={2}&L={3}";
//影像圖層縮放級別14的URL
private const string AerialGroupLeve14 = "http://tile{0}.tianditu.com/DataServer?T=eastdawnall&X={1}&Y={2}&L={3}";
//影像圖層縮放級別15以上的URL
private const string AerialGroupLeve15 = "http://tile{0}.tianditu.com/DataServer?T=sbsm1518&X={1}&Y={2}&L={3}";
//影像圖層縮放級別2-10地圖示記文字的URL
private const string AerialMarksGroup1 = "http://tile{0}.tianditu.com/DataServer?T=A0610_ImgAnno&X={1}&Y={2}&L={3}";
//影像圖層縮放級別11-13地圖示記文字的URL
private const string AerialMarksGroup2 = "http://tile{0}.tianditu.com/DataServer?T=B0530_eImgAnno&X={1}&Y={2}&L={3}";
//影像圖層縮放級別13以上地圖示記文字的URL
private const string AerialMarksGroup3 = "http://tile{0}.tianditu.com/DataServer?T=siweiAnno68&X={1}&Y={2}&L={3}";
//道路圖層縮放級別2-10地圖示記文字的URL
private const string VectorMarks = "http://tile{0}.tianditu.com/DataServer?T=AB0512_Anno&X={1}&Y={2}&L={3}";
//定義是否顯示地圖示記文字,ture時為文字圖層,false為地圖圖層
public bool IsMarks { get; set; }
private double[] scales = null;
//定義地圖型別的依賴屬性
public LayerType Mode
{
get { return (LayerType)GetValue(MapTypeProperty); }
set { SetValue(MapTypeProperty, value); }
}
public static readonly DependencyProperty MapTypeProperty =
DependencyProperty.Register("Mode", typeof(LayerType), typeof(TiledTDTMapsLayer),
new PropertyMetadata(new PropertyChangedCallback(new PropertyChangedCallback(OnMapTypePropertyChanged))));
private static void OnMapTypePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
TiledTDTMapsLayer layer = d as TiledTDTMapsLayer;
if (layer.IsInitialized)
{
layer.ChangeTileSource();
}
}
//改變地圖型別出發重新整理
private void ChangeTileSource()
{
if (!base.IsInitialized)
{
base.Initialize();
}
else
{
base.Refresh();
}
}
public TiledTDTMapsLayer()
{ }
public override void Initialize()
{
this.Url = VectorGroup1;
this.Bounds = new Rectangle2D(-179.99999999999997, -90.0, 180.00000000000023, 89.99999999999994);
this.Resolutions = new double[] { 0.35156249999999994,0.17578124999999997,0.08789062500000014,0.04394531250000007,
0.021972656250000007,0.01098632812500002,0.00549316406250001,0.0027465820312500017,
0.0013732910156250009,0.000686645507812499,0.0003433227539062495,0.00017166137695312503,
0.00008583068847656251,0.000042915344238281406,0.000021457672119140645,0.000010728836059570307,
0.000005364418029785169 };
base.Initialize();
}
//重寫返回Url函式
public override string GetTileUrl(int indexX, int indexY, int level)
{
level += 2;
switch (this.Mode)
{
case LayerType.Vector:
if (level >= 13 && level <= 18)
{
this.Url = VectorGroup3;
}
if (level >= 11 && level <= 12)
{
this.Url = VectorGroup2;
}
if (level >= 2 && level <= 10)
{
if (this.IsMarks)
{
this.Url = VectorMarks;
}
else
{
this.Url = VectorGroup1;
}
break;
}
break;
case LayerType.Aerial:
if (level >= 2 && level <= 10)
{
if (IsMarks)
{
this.Url = AerialMarksGroup1;
}
else
{
this.Url = AerialGroup1;
}
}
if (level == 11)
{
if (IsMarks)
{
this.Url = AerialMarksGroup2;
}
else
{
this.Url = AerialGroupLeve11;
}
}
if (level == 12)
{
if (IsMarks)
{
this.Url = AerialMarksGroup2;
}
else
{
this.Url = AerialGroupLeve12;
}
}
if (level == 13)
{
if (IsMarks)
{
this.Url = AerialMarksGroup2;
}
else
{
this.Url = AerialGroupLeve13;
}
}
if (level == 14)
{
if (IsMarks)
{
this.Url = AerialMarksGroup2;
}
else
{
this.Url = AerialGroupLeve14;
}
}
if (level >= 15)
{
if (IsMarks)
{
this.Url = AerialMarksGroup3;
}
else
{
this.Url = AerialGroupLeve15;
}
}
break;
}
return String.Format(this.Url, 1, indexX, indexY, level);
}
public enum LayerType
{
Vector,
Aerial
}
}
}
相關文章
- SuperMap iClient for Silverlight開發準備client
- SuperMap iClient for Silverlight開發筆記(不斷補充中)client筆記
- 不偏移的天地圖地圖服務-SuperMap版地圖
- 超圖js版 iclient 基本開發 - 載入基本圖層(以天地圖示例)和基本地圖控制元件JSclient地圖控制元件
- 如何載入使用天地圖地圖
- ArcGIS API for Silverlight 載入google地圖APIGo地圖
- ArcGIS API for Silverlight中載入Google地形圖(瓦片圖)APIGo
- ArcMap10.7載入天地圖不顯示圖層,空白怎麼辦地圖
- ArcGIS API for Silverlight載入google地圖(後續篇)APIGo地圖
- ArcGIS API for Silverlight載入BingMap遙感地圖API地圖
- ArcGIS API for Silverlight 呼叫GP服務載入等值線圖層API
- ArcGIS API for Silverlight 地圖載入進度條類之MapProgressBarAPI地圖APP
- ArcGIS讀取天地圖2.0地圖
- Silverlight動態載入呼叫XAML資源
- 解決ArcGIS API for Silverlight 載入地圖的內外網訪問問題API地圖
- Silverlight 系統初始載入進度條美化
- 初步瞭解超圖兩種3D客戶端 - iClient3D for_WebGL 和 iClient3D for_Plugin3D客戶端clientWebPlugin
- 圖片預載入和懶載入
- ArcGIS API for Silverlight地圖載入眾多點時,使用Clusterer解決重疊問題API地圖
- ArcGIS pro2.3中新增天地圖底圖地圖
- 不偏移的天地圖地圖服務-ArcGIS版地圖
- Flutter 圖片載入Flutter
- 圖片懶載入
- 預載入圖片
- 圖片載入事件事件
- 載入圖片方式
- 影像延遲載入 && 列表圖順序載入
- Openlayers2切換supermap WMS服務底圖,已解決
- 進入程式設計師的自由天地程式設計師
- 滾動載入圖片(懶載入)實現原理
- 頁面圖片預載入與懶載入策略
- 圖片懶載入 與 下拉載入更新資料
- javascript圖片懶載入與預載入的分析JavaScript
- 圖片懶載入(IntersectionObserver)Server
- 圖片懶載入原理
- 委託載入圖片
- 載入遠端圖片
- TestFlight下載App,載入圖片失效。Xcode安裝App,圖片載入正常。APPXCode