SuperMap iClient for Silverlight 載入天地圖

來源:互聯網
上載者:User

 

如下:

上代碼:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.