Visual Basic (Declaration) | |
---|---|
Public Class WmtsLayer Inherits ESRI.ArcGIS.Client.TiledMapServiceLayer |
C# | |
---|---|
public class WmtsLayer : ESRI.ArcGIS.Client.TiledMapServiceLayer |
How to use:
Select a layer name in the ListBox and click the 'Get WMTSLayer information' button to display various WMTSLayer and WMTSLayer.LayerInfo Property information. The Map will automatically zoom to the Extent of the layer. Properties with the words '[Count]' gives the count of the number of items in an IEnumerable; more coding could be done in the code-behind to dig deeper into the collection.
The XAML code in this example is used in conjunction with the code-behind (C# or VB.NET) to demonstrate the functionality.
The following screen shot corresponds to the code example in this page.
XAML | Copy Code |
---|---|
<Grid x:Name="LayoutRoot" Background="White"> <!-- Add a Map Control. --> <esri:Map Background="White" HorizontalAlignment="Left" Name="Map1" VerticalAlignment="Top" WrapAround="True" Height="400" Width="775" Margin="12,80,0,0"> <esri:Map.Layers> <esri:LayerCollection> <!-- Add a sample WmtsLayer. Setting the 'ID' Property is good if you want to access the WmtsLayer in code-behind. It is mandatory that you set the correct 'ServiceMode' Property. Setting the 'InitializationFailed' Event is useful to troubleshoot if the WmtsLayer fails to load. A 'ProxyUrl' is needed to test this particular service; it is not always necessary depending on your configuration (i.e. local web service internal to your network). Use the 'Initialized' Method to gain access to various Properties/Methods of the WmtsLayer. --> <esri:WmtsLayer ID="WMTS1" Url="http://v2.suite.opengeo.org/geoserver/gwc/service/wmts" Initialized="WmtsLayer_Initialized" ProxyUrl="http://serverapps.esri.com/SilverlightDemos/ProxyPage/proxy.ashx" InitializationFailed="WmtsLayer_InitializationFailed" ServiceMode="KVP" /> </esri:LayerCollection> </esri:Map.Layers> </esri:Map> <!-- Add a Button to allow the user to change the sub-Layer that is displaying in the Map along with information about the WmtsLayer service. --> <Button Content="Get WMTSLayer information" Height="23" HorizontalAlignment="Left" Margin="518,484,0,0" Name="Button1" VerticalAlignment="Top" Width="269" Click="Button1_Click"/> <ListBox Height="103" HorizontalAlignment="Left" Margin="519,513,0,0" Name="ListBox1" VerticalAlignment="Top" Width="269" /> <!-- Display various WMTSLayer Property information. --> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="170,479,0,0" Name="Label_WMTSLayerProperties" VerticalAlignment="Top" Width="199" Content="WMTSLayer Properties" FontSize="14" FontWeight="Bold"/> <!-- FullExtent--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="7,508,0,0" Name="Label_FullExtent" VerticalAlignment="Top" Width="120" Content="FullExtent:" /> <TextBox Height="23" HorizontalAlignment="Left" Margin="101,508,0,0" Name="TextBox_FullExtent" VerticalAlignment="Top" Width="400" /> <!--Description--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="7,540,0,0" Name="Label_Description" VerticalAlignment="Top" Width="88" Content="Description:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="101,536,0,0" Name="TextBox_Description" VerticalAlignment="Top" Width="400" /> <!--ImageFormat--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="7,569,0,0" Name="Label_ImageFormat" VerticalAlignment="Top" Width="88" Content="ImageFormat:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="101,565,0,0" Name="TextBox_ImageFormat" VerticalAlignment="Top" Width="161" /> <!--Layer--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="268,565,0,0" Name="Label_Layer" VerticalAlignment="Top" Width="88" Content="Layer:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="309,565,0,0" Name="TextBox_Layer" VerticalAlignment="Top" Width="192" /> <!--LayerInfos--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="7,596,0,0" Name="Label_LayerInfos" VerticalAlignment="Top" Width="140" Content="LayerInfos [Count]:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="119,593,0,0" Name="TextBox_LayerInfos" VerticalAlignment="Top" Width="89" /> <!--ProxyUrl--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="7,625,0,0" Name="Label_ProxyUrl" VerticalAlignment="Top" Width="88" Content="ProxyUrl:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="101,622,0,0" Name="TextBox_ProxyUrl" VerticalAlignment="Top" Width="400" /> <!-- ServiceMode--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="225,597,0,0" Name="Label_ServiceMode" VerticalAlignment="Top" Width="88" Content="ServiceMode:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="309,593,0,0" Name="TextBox_ServiceMode" VerticalAlignment="Top" Width="192" /> <!--Style--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="7,650,0,0" Name="Label_Style" VerticalAlignment="Top" Width="88" Content="Style:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="101,650,0,0" Name="TextBox_Style" VerticalAlignment="Top" Width="161" /> <!--TileMatrixSet--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="268,654,0,0" Name="Label_TileMatrixSet" VerticalAlignment="Top" Width="88" Content="TileMatrixSet:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="352,654,0,0" Name="TextBox_TileMatrixSet" VerticalAlignment="Top" Width="149" /> <!--Title--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="7,688,0,0" Name="Label_Title" VerticalAlignment="Top" Width="120" Content="Title:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="101,684,0,0" Name="TextBox_Title" VerticalAlignment="Top" Width="400" /> <!--Token--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="7,717,0,0" Name="Label_Token" VerticalAlignment="Top" Width="120" Content="Token:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="101,713,0,0" Name="TextBox_Token" VerticalAlignment="Top" Width="400" /> <!--Url--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="7,746,0,0" Name="Label_Url" VerticalAlignment="Top" Width="120" Content="Url:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="101,742,0,0" Name="TextBox_Url" VerticalAlignment="Top" Width="400" /> <!--Version--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="7,775,0,0" Name="Label_Version" VerticalAlignment="Top" Width="120" Content="Version:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="101,771,0,0" Name="TextBox_Version" VerticalAlignment="Top" Width="400" /> <!--Display detailed WMTSLayer.LayerInfo about the specific sub-Layer that is being displayed. --> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="543,622,0,0" Name="Label_WMTSLayerLayerInfo" VerticalAlignment="Top" Width="187" Content="WMTSLayer.LayerInfo" FontSize="14" FontWeight="Bold" /> <!--Abstract--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="511,656,0,0" Name="Label_Abstract" VerticalAlignment="Top" Width="50" Content="Abstract:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="569,652,0,0" Name="TextBox_Abstract" VerticalAlignment="Top" Width="67" /> <!--Formats--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="642,654,0,0" Name="Label_Formats" VerticalAlignment="Top" Width="97" Content="Formats [Count]:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="743,652,0,0" Name="TextBox_Formats" VerticalAlignment="Top" Width="44" /> <!--Identifier--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="508,683,0,0" Name="Label_Identifier" VerticalAlignment="Top" Width="60" Content="Identifier:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="571,684,0,0" Name="TextBox_Identifier" VerticalAlignment="Top" Width="216" /> <!--Styles--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="511,713,0,0" Name="Label_Styles" VerticalAlignment="Top" Width="86" Content="Styles [Count]:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="603,713,0,0" Name="TextBox_Styles" VerticalAlignment="Top" Width="184" /> <!--TileMatrixSets--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="507,742,0,0" Name="Label_TileMatrixSets" VerticalAlignment="Top" Width="129" Content="TileMatrixSets [Count]:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="642,740,0,0" Name="TextBox_TileMatrixSets" VerticalAlignment="Top" Width="145" /> <!--Title--> <sdk:Label Height="28" HorizontalAlignment="Left" Margin="513,768,0,0" Name="Label_Title2" VerticalAlignment="Top" Width="48" Content="Title:"/> <TextBox Height="23" HorizontalAlignment="Left" Margin="554,769,0,0" Name="TextBox_Title2" VerticalAlignment="Top" Width="236" /> <!-- Provide the instructions on how to use the sample code. --> <TextBlock Height="74" HorizontalAlignment="Left" Name="TextBlock1" VerticalAlignment="Top" Width="756" TextWrapping="Wrap" Margin="12,12,0,0" Text="Select a layer name in the ListBox and click the 'Get WMTSLayer information' button to display various WMTSLayer and WMTSLayer.LayerInfo Property information. The Map will automatically zoom to the Extent of the layer. Properties with the words '[Count]' gives the count of the number of items in an IEnumerable; more coding could be done in the code-behind to dig deeper into the collection." /> </Grid> |
C# | Copy Code |
---|---|
private void Button1_Click(object sender, System.Windows.RoutedEventArgs e) { // This function takes the user choice for a specific WmtsLayer.Layer from a ListBox and refreshes // the Map using that layer. // Get the user choice for the name of the WmtsLayer.Layer. string theTitle = ListBox1.SelectedItem.ToString(); // Get the WmtsLayer that was defined in XAML. ESRI.ArcGIS.Client.Toolkit.DataSources.WmtsLayer theWMTSLayer = (ESRI.ArcGIS.Client.Toolkit.DataSources.WmtsLayer)Map1.Layers["WMTS1"]; // Set the specific layer to display in the WmtsLayer. This will internally cause a WmtsLayer.Refresh // which in turn causes the WmtsLayer.Initialized Method to execute. theWMTSLayer.Layer = theTitle; } private void WmtsLayer_Initialized(object sender, System.EventArgs e) { // This function loops through all of the sub-Layers in a WmtsLayer service and displays information // about the WmtsLayer service in general and details about a particular WmtsLayer.Layer specified // by the user choice. This function initiates whenever the WmtsLayer first initializes or as a result // of specifying a different WmtsLayer.Layer. // Clear out all of the sub-Layer names of the WmtsLayer service. ListBox1.Items.Clear(); // Get the WmtsLayer that was defined in XAML. ESRI.ArcGIS.Client.Toolkit.DataSources.WmtsLayer theWMTSLayer = (ESRI.ArcGIS.Client.Toolkit.DataSources.WmtsLayer)Map1.Layers["WMTS1"]; // Get all of the sub-Layer information from the WmtsLayer. IEnumerable<ESRI.ArcGIS.Client.Toolkit.DataSources.WmtsLayer.WmtsLayerInfo> theLayers = theWMTSLayer.LayerInfos; if (theLayers != null) { foreach (ESRI.ArcGIS.Client.Toolkit.DataSources.WmtsLayer.WmtsLayerInfo oneWMTSLayerInfo in theLayers) { //Display the name of the WmtsLayer sub-Layer's in the ListBox. ListBox1.Items.Add(oneWMTSLayerInfo.Title); } } // Set the Map.Extent to the WmtsLayer sub-Layer and display the numerical extent in a TextBox. if (theWMTSLayer.FullExtent != null) { Map1.Extent = theWMTSLayer.FullExtent; TextBox_FullExtent.Text = theWMTSLayer.FullExtent.ToString(); } // Display the Description of the WmtsLayer service. if (theWMTSLayer.Description != null) { TextBox_Description.Text = theWMTSLayer.Description; } // Display the ImageFormat of the WmtsLayer service. if (theWMTSLayer.ImageFormat != null) { TextBox_ImageFormat.Text = theWMTSLayer.ImageFormat; } // Display the currently displaying sub-Layer name of the WmtsLayer service. if (theWMTSLayer.Layer != null) { TextBox_Layer.Text = theWMTSLayer.Layer; } // Display the LayerInfos.Count of the WmtsLayer service. More information is available if you // care to loop through the IEnumerable<WmtsLayer.WmtsLayerInfo> objects. if (theWMTSLayer.LayerInfos != null) { TextBox_LayerInfos.Text = theWMTSLayer.LayerInfos.Count.ToString(); } // Display the ProxyUrl of the WmtsLayer service. if (theWMTSLayer.ProxyUrl != null) { TextBox_ProxyUrl.Text = theWMTSLayer.ProxyUrl; } // Display the ServiceMode Enumeration of the WmtsLayer service. TextBox_ServiceMode.Text = theWMTSLayer.ServiceMode.ToString(); //An Enumeration. // Display the Style of the WmtsLayer service. if (theWMTSLayer.Style != null) { TextBox_Style.Text = theWMTSLayer.Style; } // Display the TileMatrix of the WmtsLayer service. if (theWMTSLayer.TileMatrixSet != null) { TextBox_TileMatrixSet.Text = theWMTSLayer.TileMatrixSet; } // Display the Title of the WmtsLayer service. Select the name of the Title in the ListBox to // show which sub-Layer is currently being displayed in the Map. if (theWMTSLayer.Title != null) { TextBox_Title.Text = theWMTSLayer.Title; ListBox1.SelectedItem = theWMTSLayer.Title; } // Display the Token of the WmtsLayer service. if (theWMTSLayer.Token != null) { TextBox_Token.Text = theWMTSLayer.Token; } // Display the Url of the WmtsLayer service. if (theWMTSLayer.Url != null) { TextBox_Url.Text = theWMTSLayer.Url; } // Display the Version of the WmtsLayer service. if (theWMTSLayer.Version != null) { TextBox_Version.Text = theWMTSLayer.Version; } // Get the WmtsLayer.Title from the user choice in the ListBox. This will be used to display detailed // information (WmtsLayer.WmtsLayerInfo) about the specific WmtsLayer.Layer currently being shown in the map. string theTitle = null; if (ListBox1.SelectedItem != null) { theTitle = ListBox1.SelectedItem.ToString(); } // Loop through all of the sub-Layers of the WmtsLayer and display WmtsLayer.WmtsLayerInfo Property // information that match the user choice in the ListBox. if (theLayers != null) { foreach (ESRI.ArcGIS.Client.Toolkit.DataSources.WmtsLayer.WmtsLayerInfo oneWMTSLayerInfo in theLayers) { if (oneWMTSLayerInfo.Title == theTitle) { // Display the Abstract of the WmtsLayer.WmtsLayerInfo sub-Layer. if (oneWMTSLayerInfo.Abstract != null) { TextBox_Abstract.Text = oneWMTSLayerInfo.Abstract; } // Display the Formats of the WmtsLayer.WmtsLayerInfo sub-Layer. More information is available if you // care to loop through the IEnumerable<String> objects. if (oneWMTSLayerInfo.Formats != null) { TextBox_Formats.Text = oneWMTSLayerInfo.Formats.Count.ToString(); } // Display the Identifier of the WmtsLayer.WmtsLayerInfo sub-Layer. if (oneWMTSLayerInfo.Identifier != null) { TextBox_Identifier.Text = oneWMTSLayerInfo.Identifier; } // Display the Styles of the WmtsLayer.WmtsLayerInfo sub-Layer. More information is available if you // care to loop through the IEnumerable<String> objects. if (oneWMTSLayerInfo.Styles != null) { TextBox_Styles.Text = oneWMTSLayerInfo.Styles.Count.ToString(); } // Display the TileMatrixSets of the WmtsLayer.WmtsLayerInfo sub-Layer. More information is available if you // care to loop through the IEnumerable<String> objects. if (oneWMTSLayerInfo.TileMatrixSets != null) { TextBox_TileMatrixSets.Text = oneWMTSLayerInfo.TileMatrixSets.Count.ToString(); } // Display the Title of the WmtsLayer.WmtsLayerInfo sub-Layer. if (oneWMTSLayerInfo.Title != null) { TextBox_Title2.Text = oneWMTSLayerInfo.Title; } } } } } private void WmtsLayer_InitializationFailed(object sender, System.EventArgs e) { // This function displays any error information of the WmtsLayer fails to load. ESRI.ArcGIS.Client.Layer aLayer = (ESRI.ArcGIS.Client.Layer)sender; MessageBox.Show(aLayer.InitializationFailure.Message); } |
VB.NET | Copy Code |
---|---|
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) ' This function takes the user choice for a specific WmtsLayer.Layer from a ListBox and refreshes ' the Map using that layer. ' Get the user choice for the name of the WmtsLayer.Layer. Dim theTitle As String = ListBox1.SelectedItem.ToString ' Get the WmtsLayer that was defined in XAML. Dim theWMTSLayer As ESRI.ArcGIS.Client.Toolkit.DataSources.WmtsLayer = Map1.Layers("WMTS1") ' Set the specific layer to display in the WmtsLayer. This will internally cause a WmtsLayer.Refresh ' which in turn causes the WmtsLayer.Initialized Method to execute. theWMTSLayer.Layer = theTitle End Sub Private Sub WmtsLayer_Initialized(ByVal sender As System.Object, ByVal e As System.EventArgs) ' This function loops through all of the sub-Layers in a WmtsLayer service and displays information ' about the WmtsLayer service in general and details about a particular WmtsLayer.Layer specified ' by the user choice. This function initiates whenever the WmtsLayer first initializes or as a result ' of specifying a different WmtsLayer.Layer. ' Clear out all of the sub-Layer names of the WmtsLayer service. ListBox1.Items.Clear() ' Get the WmtsLayer that was defined in XAML. Dim theWMTSLayer As ESRI.ArcGIS.Client.Toolkit.DataSources.WmtsLayer = Map1.Layers("WMTS1") ' Get all of the sub-Layer information from the WmtsLayer. Dim theLayers As IEnumerable(Of ESRI.ArcGIS.Client.Toolkit.DataSources.WmtsLayer.WmtsLayerInfo) = theWMTSLayer.LayerInfos If theLayers IsNot Nothing Then For Each oneWMTSLayerInfo As ESRI.ArcGIS.Client.Toolkit.DataSources.WmtsLayer.WmtsLayerInfo In theLayers 'Display the name of the WmtsLayer sub-Layer's in the ListBox. ListBox1.Items.Add(oneWMTSLayerInfo.Title) Next End If ' Set the Map.Extent to the WmtsLayer sub-Layer and display the numerical extent in a TextBox. If theWMTSLayer.FullExtent IsNot Nothing Then Map1.Extent = theWMTSLayer.FullExtent TextBox_FullExtent.Text = theWMTSLayer.FullExtent.ToString End If ' Display the Description of the WmtsLayer service. If theWMTSLayer.Description IsNot Nothing Then TextBox_Description.Text = theWMTSLayer.Description End If ' Display the ImageFormat of the WmtsLayer service. If theWMTSLayer.ImageFormat IsNot Nothing Then TextBox_ImageFormat.Text = theWMTSLayer.ImageFormat End If ' Display the currently displaying sub-Layer name of the WmtsLayer service. If theWMTSLayer.Layer IsNot Nothing Then TextBox_Layer.Text = theWMTSLayer.Layer End If ' Display the LayerInfos.Count of the WmtsLayer service. More information is available if you ' care to loop through the IEnumerable(Of WmtsLayer.WmtsLayerInfo) objects. If theWMTSLayer.LayerInfos IsNot Nothing Then TextBox_LayerInfos.Text = theWMTSLayer.LayerInfos.Count.ToString End If ' Display the ProxyUrl of the WmtsLayer service. If theWMTSLayer.ProxyUrl IsNot Nothing Then TextBox_ProxyUrl.Text = theWMTSLayer.ProxyUrl End If ' Display the ServiceMode Enumeration of the WmtsLayer service. TextBox_ServiceMode.Text = theWMTSLayer.ServiceMode.ToString 'An Enumeration. ' Display the Style of the WmtsLayer service. If theWMTSLayer.Style IsNot Nothing Then TextBox_Style.Text = theWMTSLayer.Style End If ' Display the TileMatrix of the WmtsLayer service. If theWMTSLayer.TileMatrixSet IsNot Nothing Then TextBox_TileMatrixSet.Text = theWMTSLayer.TileMatrixSet End If ' Display the Title of the WmtsLayer service. Select the name of the Title in the ListBox to ' show which sub-Layer is currently being displayed in the Map. If theWMTSLayer.Title IsNot Nothing Then TextBox_Title.Text = theWMTSLayer.Title ListBox1.SelectedItem = theWMTSLayer.Title End If ' Display the Token of the WmtsLayer service. If theWMTSLayer.Token IsNot Nothing Then TextBox_Token.Text = theWMTSLayer.Token End If ' Display the Url of the WmtsLayer service. If theWMTSLayer.Url IsNot Nothing Then TextBox_Url.Text = theWMTSLayer.Url End If ' Display the Version of the WmtsLayer service. If theWMTSLayer.Version IsNot Nothing Then TextBox_Version.Text = theWMTSLayer.Version End If ' Get the WmtsLayer.Title from the user choice in the ListBox. This will be used to display detailed ' information (WmtsLayer.WmtsLayerInfo) about the specific WmtsLayer.Layer currently being shown in the map. Dim theTitle As String = Nothing If ListBox1.SelectedItem IsNot Nothing Then theTitle = ListBox1.SelectedItem.ToString End If ' Loop through all of the sub-Layers of the WmtsLayer and display WmtsLayer.WmtsLayerInfo Property ' information that match the user choice in the ListBox. If theLayers IsNot Nothing Then For Each oneWMTSLayerInfo As ESRI.ArcGIS.Client.Toolkit.DataSources.WmtsLayer.WmtsLayerInfo In theLayers If oneWMTSLayerInfo.Title = theTitle Then ' Display the Abstract of the WmtsLayer.WmtsLayerInfo sub-Layer. If oneWMTSLayerInfo.Abstract IsNot Nothing Then TextBox_Abstract.Text = oneWMTSLayerInfo.Abstract End If ' Display the Formats of the WmtsLayer.WmtsLayerInfo sub-Layer. More information is available if you ' care to loop through the IEnumerable(Of String) objects. If oneWMTSLayerInfo.Formats IsNot Nothing Then TextBox_Formats.Text = oneWMTSLayerInfo.Formats.Count.ToString End If ' Display the Identifier of the WmtsLayer.WmtsLayerInfo sub-Layer. If oneWMTSLayerInfo.Identifier IsNot Nothing Then TextBox_Identifier.Text = oneWMTSLayerInfo.Identifier End If ' Display the Styles of the WmtsLayer.WmtsLayerInfo sub-Layer. More information is available if you ' care to loop through the IEnumerable(Of String) objects. If oneWMTSLayerInfo.Styles IsNot Nothing Then TextBox_Styles.Text = oneWMTSLayerInfo.Styles.Count.ToString End If ' Display the TileMatrixSets of the WmtsLayer.WmtsLayerInfo sub-Layer. More information is available if you ' care to loop through the IEnumerable(Of String) objects. If oneWMTSLayerInfo.TileMatrixSets IsNot Nothing Then TextBox_TileMatrixSets.Text = oneWMTSLayerInfo.TileMatrixSets.Count.ToString End If ' Display the Title of the WmtsLayer.WmtsLayerInfo sub-Layer. If oneWMTSLayerInfo.Title IsNot Nothing Then TextBox_Title2.Text = oneWMTSLayerInfo.Title End If End If Next End If End Sub Private Sub WmtsLayer_InitializationFailed(ByVal sender As System.Object, ByVal e As System.EventArgs) ' This function displays any error information of the WmtsLayer fails to load. Dim aLayer As ESRI.ArcGIS.Client.Layer = sender MessageBox.Show(aLayer.InitializationFailure.Message) End Sub |
The full WMTS standard can be found on the OpenGIS Web Map Tile Service Implementation Standard web page. As of ArcGIS Server version 10.1 serving WMTS layers as a native REST service is supported.
In order to consume a WmtsLayer successfully the following Properties must be set:
- Url (The WMTS service endpoint.)
- ServiceMode (The WMTS service communication protocol.)
There are however several other optional Properties/Methods/Events that should also be set in order to avoid problems consuming a WmtsLayer, they are:
- Initialized Method (Method raised when WmtsLayer is being created on the client; useful to get or change information about the layer.)
- InitializationFailed Event (Method raised if the WmtsLayer has a problem being created.)
- ProxyUrl Property (A proxy service to broker web requests between the WMTS service and the web client.)
- Layer Property (Name of a single layer in a WMTS service; there can be multiple layers per service.)
- ID Property (The unique ID of the layer in the Map control.)
A single WMTS service can have multiple layers. For each WmtsLayer instance, only one layer is drawn at a time. In order to discover what layers are available in a WMTS service, append the string '?request=GetCapabilities&service=WMTS&version=1.0.0' to what would be supplied for the WmtsLayer.Url Property in the address bar of a web browser and the full details will be provided in an XML document. A few example strings of obtaining the capabilities of a WMTS service are:
- http://v2.suite.opengeo.org/geoserver/gwc/service/wmts?request=GetCapabilities&service=WMTS&version=1.0.0
- http://MyTestServer:6080/arcgis/rest/services/cachedservices/MyTestWMTSService/MapServer/WMTS?request=GetCapabilities&service=WMTS&version=1.0.0
By default if the WmtsLayer.Layer Property is not specified, the first layer respecting the WmtsLayer.TileMatrixSet will be used. When specifying the WmtsLayer.Layer Property at runtime in the code-behind, the WmtsLayer’s Refresh Method fires which in turn invokes the WmtsLayer’s Initialized Event which will cause a re-draw of the layer in the Map Control.
It is important to specify the correct WmtsLayer.WmtsServiceMode Enumeration in the WmtsLayer.ServiceMode Property or the WmtsLayer may not be created properly. The two available WmtsLayer.WmtsServiceMode Enumeration options available are KVP and RESTful. WMTS services provided by ArcGIS Server produce RESTful WmtsLayer.WmtsServiceMode services. The KVP WmtsLayer.WmtsServiceMode means HTTP 'Key/Value Pair' encoding; details on this OGC specification can found by downloading the WCS Extension -- KVP Protocol document.
A call to the WmtsLayer is Asynchronous. As a result, this means that you cannot obtain valid Read (VB.NET) or get (C#) Property values until information has been returned from a WMTS server to the Client application. You can safely obtain valid Read/get Property information in the Initialized, PropertyChanged, TileLoaded, and TileLoading Events or from a function/sub/method that occurs after these Events fire. If you try to obtain Read/get Property information before these Events fire you will obtain invalid or null/Nothing information for the particular Property in question.
System.Object
System.Windows.Threading.DispatcherObject
System.Windows.DependencyObject
ESRI.ArcGIS.Client.Layer
ESRI.ArcGIS.Client.TiledLayer
ESRI.ArcGIS.Client.TiledMapServiceLayer
ESRI.ArcGIS.Client.Toolkit.DataSources.WmtsLayer
Target Platforms: Windows XP Professional, Windows Server 2003 family, Windows Vista, Windows Server 2008 family