Create and save KML file

View inWPFUWPFormsiOSAndroid
View on GitHub

Construct a KML document and save it as a KMZ file.

Image of create and save KML file

Use case

If you need to create and save data on the fly, you can use KML to create points, lines, and polygons by sketching on the map, customizing the style, and serializing them as KML nodes in a KML Document. Once complete, you can share the KML data with others that are using a KML reading application, such as ArcGIS Earth.

How to use the sample

Click on one of the buttons in the middle row to start adding a geometry. Click on the map view to place vertices. Click the "Complete Sketch" button to add the geometry to the KML document as a new KML placemark. Use the style interface to edit the style of the placemark. If you do not wish to set a style, click the "Don't Apply Style" button. When you are finished adding KML nodes, click on the "Save KMZ file" button to save the active KML document as a .kmz file on your system. Use the "Reset" button to clear the current KML document and start a new one.

How it works

  1. Create a KmlDocument
  2. Create a KmlDataset using the KmlDocument.
  3. Create a KmlLayer using the KmlDataset and add it to Map.OperationalLayers.
  4. Create Geometry using SketchEditor.
  5. Project that Geometry to WGS84 using GeometryEngine.Project.
  6. Create a KmlGeometry object using that projected Geometry.
  7. Create a KmlPlacemark using the KmlGeometry.
  8. Add the KmlPlacemark to the KmlDocument.
  9. Set the KmlStyle for the KmlPlacemark.
  10. When finished with adding KmlPlacemark nodes to the KmlDocument, save the KmlDocument to a file using the SaveAsAsync method.

Relevant API

  • GeometryEngine.Project
  • KmlDataset
  • KmlDocument
  • KmlGeometry
  • KmlLayer
  • KmlNode.SaveAsASync
  • KmlPlacemark
  • KmlStyle
  • SketchEditor

Tags

Keyhole, KML, KMZ, OGC

Sample Code

CreateAndSaveKmlFile.xamlCreateAndSaveKmlFile.xaml.cs
                                                                                                                                                     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<UserControl
    x:Class="ArcGISRuntime.UWP.Samples.CreateAndSaveKmlFile.CreateAndSaveKmlFile"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:esri="using:Esri.ArcGISRuntime"
    xmlns:esriUI="using:Esri.ArcGISRuntime.UI.Controls"
    xmlns:local="using:ArcGISRuntime.UWP.Samples.CreateAndSaveKmlFile">
    <Grid>
        <esriUI:MapView x:Name="MyMapView" />
        <Border Name="MainUI" Style="{StaticResource BorderStyle}">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="auto" />
                    <RowDefinition Height="auto" />
                    <RowDefinition Height="auto" />
                </Grid.RowDefinitions>
                <TextBlock
                    Name="InstructionsText"
                    Margin="5"
                    HorizontalAlignment="Center"
                    VerticalAlignment="Center"
                    Text="Select the type of feature you would like to add." />
                <Grid Grid.Row="1">
                    <Grid Name="ShapesPanel">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                        <Button
                            x:Name="PointButton"
                            Grid.Column="0"
                            Margin="5"
                            HorizontalAlignment="Stretch"
                            Click="Edit_Click"
                            Content="Point" />
                        <Button
                            x:Name="PolylineButton"
                            Grid.Column="1"
                            Margin="5"
                            HorizontalAlignment="Stretch"
                            Click="Edit_Click"
                            Content="Polyline" />
                        <Button
                            x:Name="PolygonButton"
                            Grid.Column="2"
                            Margin="5"
                            HorizontalAlignment="Stretch"
                            Click="Edit_Click"
                            Content="Polygon" />
                    </Grid>
                </Grid>
                <Grid x:Name="SaveResetGrid" Grid.Row="2">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <Button
                        Grid.Column="0"
                        Margin="5"
                        HorizontalAlignment="Stretch"
                        Click="Save_Click"
                        Content="Save KMZ file" />
                    <Button
                        Grid.Column="1"
                        Margin="5"
                        HorizontalAlignment="Stretch"
                        Click="Reset_Click"
                        Content="Reset" />
                </Grid>
                <Button
                    x:Name="CompleteButton"
                    Grid.Row="1"
                    Margin="5"
                    HorizontalAlignment="Stretch"
                    Click="Complete_Click"
                    Content="Complete Sketch"
                    Visibility="Collapsed" />
            </Grid>
        </Border>
        <Border
            x:Name="StyleBorder"
            Width="auto"
            HorizontalAlignment="Right"
            VerticalAlignment="Center"
            Style="{StaticResource BorderStyle}"
            Visibility="Collapsed">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition />
                    <RowDefinition Height="auto" />
                    <RowDefinition />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
                <TextBlock
                    x:Name="StyleText"
                    Grid.Row="0"
                    Grid.ColumnSpan="2"
                    Margin="5"
                    Text="" />
                <ComboBox
                    x:Name="IconPicker"
                    Grid.Row="1"
                    Grid.ColumnSpan="2"
                    Height="40"
                    Margin="5"
                    HorizontalAlignment="Center"
                    ItemsSource="{Binding}">
                    <ComboBox.ItemTemplate>
                        <DataTemplate>
                            <BitmapIcon
                                Width="30"
                                Height="30"
                                ShowAsMonochrome="False"
                                UriSource="{Binding}" />
                        </DataTemplate>
                    </ComboBox.ItemTemplate>
                </ComboBox>
                <ColorPicker
                    x:Name="ColorSelector"
                    Grid.Row="1"
                    Grid.ColumnSpan="2"
                    ColorSpectrumShape="Box"
                    IsAlphaSliderVisible="False"
                    IsColorChannelTextInputVisible="False"
                    IsColorPreviewVisible="False"
                    IsColorSliderVisible="False"
                    IsHexInputVisible="False" />
                <Button
                    Grid.Row="2"
                    Grid.Column="0"
                    Margin="5"
                    HorizontalAlignment="Stretch"
                    Click="Apply_Style_Click"
                    Content="Apply Style" />
                <Button
                    Grid.Row="2"
                    Grid.Column="1"
                    Margin="5"
                    HorizontalAlignment="Stretch"
                    Click="No_Style_Click"
                    Content="Don't Apply Style" />
            </Grid>
        </Border>
    </Grid>
</UserControl>

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.