List the contents of a KML file.
Use case
KML files can contain a hierarchy of features, including network links to other KML content. A user may wish to traverse through the contents of KML nodes to know what data is contained within each node and, recursively, their children.
How to use the sample
The contents of the KML file are shown in a tree. Select a node to zoom to that node. Not all nodes can be zoomed to (e.g. screen overlays).
How it works
- Add the KML file to the scene as a layer.
- Explore the root nodes of the
KmlDataset
recursively explored to create a view model.
- Each node is enabled for display at this step. KML files may include nodes that are turned off by default.
- When a node is selected, use the node's
Extent
to determine a viewpoint and set theSceneView
object's viewpoint do it.
Relevant API
- KmlContainer
- KmlDataset
- KmlDocument
- KmlFolder
- KmlGroundOverlay
- KmlLayer
- KmlNetworkLink
- KmlNode
- KmlPlacemark
- KmlScreenOverlay
About the data
This is an example KML file meant to demonstrate how Runtime supports several common features.
Tags
Keyhole, KML, KMZ, layers, OGC
Sample Code
<UserControl x:Class="ArcGISRuntime.WPF.Samples.ListKmlContents.ListKmlContents"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:esri="http://schemas.esri.com/arcgis/runtime/2013"
xmlns:listKmlContents="clr-namespace:ArcGISRuntime.WPF.Samples.ListKmlContents">
<Grid>
<esri:SceneView x:Name="MySceneView" />
<Border Style="{StaticResource BorderStyle}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0"
Margin="5"
FontWeight="Bold"
Foreground="Black"
Text="Tap to zoom to KML content."
TextAlignment="Center" />
<TreeView Name="LayerTreeView"
Grid.Row="1"
SelectedItemChanged="LayerTreeView_OnSelectedItemChanged">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type listKmlContents:LayerDisplayVM}" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
</Border>
</Grid>
</UserControl>