KML in Layer (Conversion)

Zusammenfassung

Konvertiert eine .kml- oder .kmz-Datei in Feature-Classes und eine Layer-Datei. Die Layer-Datei übernimmt die Symbolisierung aus der .kml- oder .kmz-Eingabe-Datei.

Weitere Informationen zur KML-Unterstützung in ArcGIS

Verwendung

  • Dieses Werkzeug erstellt eine File-Geodatabase, die eine Feature-Class innerhalb eines Feature-Datasets enthält. Der Name der Feature-Class lautet point, line, polygon oder multipatches, je nach den ursprünglichen Features der Eingabe-Datei. Auf der gleichen Ordnerebene wie die File-Geodatabase befindet sich eine Layer-Datei, die zu einer Karte hinzugefügt werden kann, um die Features zu zeichnen. Diese Layer-Datei zeichnet Features basierend auf ihrem Schema (Punkt, Linie oder Polygon), wobei die ursprüngliche KML-Symbolisierung beibehalten wird.

    Jede erstellte Feature-Class weist Attribute auf, die Informationen zur Eingabe-Datei enthalten. Die ursprüngliche Ordnerstruktur, Name und Pop-up-Informationen sowie Felder, die definieren, wie sich Features auf einer Oberfläche befinden, bilden die Attribute eines Features.

  • Raster oder Bodenüberlagerungen werden in der File-Geodatabase in ein Mosaik-Dataset konvertiert. Das Quell-Raster in seinem systemeigenen Format ist im Ordner "GroundOverlays" auf derselben Ebene wie die Ausgabe-File-Geodatabase verfügbar. Bodenüberlagerungen werden nicht standardmäßig konvertiert. Verwenden Sie den Parameter Bodenüberlagerung einbeziehen, um Raster zu erstellen.

    Lizenz:

    Verwenden Sie den Parameter Bodenüberlagerung einbeziehen, um ein Mosaik-Dataset zu erstellen, das eine Desktop Standard-Lizenz erfordert.

    Hinweis:

    Das Konvertieren von Überlagerungen mit dem Werkzeug KML in Layer kann je nach Quelldaten einige Zeit in Anspruch nehmen. Alle verfügbaren Raster und Überlagerungen in der KML-Datei werden konvertiert. Falls eine KML-Datei auf einen Service verweist, der Bilddaten bereitstellt, werden die gesamten Bilddaten konvertiert. Das Konvertieren von hochauflösenden Bilddaten kann aufgrund der Dateigröße länger dauern.

  • Die Ausgabe wird im WGS84-Koordinatensystem generiert. Die Ausgabe-Features können mit dem Werkzeug Projizieren in ein anderes Koordinatensystem neu projiziert werden.

  • Eingaben bis zu KMZ-Version 2.2 des OGC KML-Standards werden weitgehend unterstützt. Punktpositionen, die den Adress-Tag verwenden (durch Geokodierung), werden nicht unterstützt. Im Quell-KML ist eine gültige Längen- und Breitengradposition erforderlich.

  • ArcGIS Pro 1.3 bietet native Unterstützung für KML- und KMZ-Dateien als Datenquellen. Um Geoverarbeitungsvorgänge für einen KML-Layer durchzuführen, muss dieser innerhalb einer File-Geodatabase in Features konvertiert werden. Wählen Sie mit dem Werkzeug KML in Layer den KML-Layer aus dem Menü Inhalt aus, und ziehen Sie ihn in den Parameter Eingabe-KML-Datei des Werkzeugs. Nachdem er konvertiert wurde, führen Sie den Geoverarbeitungsvorgang für die neue Ausgabe aus.

Parameter

BeschriftungErläuterungDatentyp
Eingabe-KML-Datei

Die zu konvertierende .kml- oder .kmz-Datei.

File; KML Layer
Ausgabeverzeichnis

Der Zielordner für die File-Geodatabase und die Layer-Datei (.lyrx).

Folder
Ausgabe-Datenname
(optional)

Der Name der Ausgabe-File-Geodatabase und der Layer-Datei. Standardmäßig wird der Name der Eingabedatei verwendet.

String
Bodenüberlagerung einbeziehen
(optional)

Gibt an, ob KML-Bodenüberlagerungen (Raster, Luftaufnahmen usw.) in die Ausgabe einbezogen werden.

Seien Sie vorsichtig, wenn die KMZ-Datei auf einen Service verweist, der Raster-Bilddaten bereitstellt. Das Werkzeug versucht, die Raster-Bilddaten in alle verfügbaren Maßstäbe zu konvertieren. Dieser Prozess kann lange dauern und den Service möglicherweise überlasten.

  • Aktiviert: Bodenüberlagerung ist in der Ausgabe enthalten.
  • Deaktiviert: Boden-Overlays sind nicht in der Ausgabe enthalten. Dies ist die Standardeinstellung.
Boolean

Abgeleitete Ausgabe

BeschriftungErläuterungDatentyp
Ausgabe-Layer-Datei

Die Ausgabe-Layer-Datei.

Group Layer
Ausgabe-File-Geodatabase

Die Ausgabe-Geodatabase, die eine Feature-Class innerhalb eines Feature-Datasets enthält.

Workspace

arcpy.conversion.KMLToLayer(in_kml_file, output_folder, {output_data}, {include_groundoverlay})
NameErläuterungDatentyp
in_kml_file

Die zu konvertierende .kml- oder .kmz-Datei.

File; KML Layer
output_folder

Der Zielordner für die File-Geodatabase und die Layer-Datei (.lyrx).

Folder
output_data
(optional)

Der Name der Ausgabe-File-Geodatabase und der Layer-Datei. Standardmäßig wird der Name der Eingabedatei verwendet.

String
include_groundoverlay
(optional)

Gibt an, ob Bodenüberlagerungen (Raster, Luftaufnahmen usw.) verwendet werden.

Seien Sie vorsichtig, wenn die KMZ-Datei auf einen Service verweist, der Raster-Bilddaten bereitstellt. Das Werkzeug versucht, die Raster-Bilddaten in alle verfügbaren Maßstäbe zu konvertieren. Dieser Prozess kann lange dauern und den Service möglicherweise überlasten.

  • GROUNDOVERLAYBoden-Overlays sind in der Ausgabe enthalten.
  • NO_GROUNDOVERLAYBoden-Overlays sind nicht in der Ausgabe enthalten. Dies ist die Standardeinstellung.
Boolean

Abgeleitete Ausgabe

NameErläuterungDatentyp
output_layer

Die Ausgabe-Layer-Datei.

Group Layer
out_geodatabase

Die Ausgabe-Geodatabase, die eine Feature-Class innerhalb eines Feature-Datasets enthält.

Workspace

Codebeispiel

KMLToLayer: Beispiel 1 (Python-Fenster)

Konvertiert eine KMZ-Datei in eine File-Geodatabase über das Python-Fenster.

import arcpy

arcpy.KMLToLayer_conversion(r'C:\kmls\earthquakes.kml',r'C:\gisdata\fromkmls','earthquake_09')
KMLToLayer: Beispiel 2 (eigenständiges Skript)

Mit dem folgenden Skript wird ein Ordner mit .kmz- und .kml-Dateien in die entsprechende File-Geodatabase konvertiert. Die Feature-Classes in diesen File-Geodatabases werden dann zu einer einzigen File-Geodatabase konsolidiert.

Hinweis:
Dieses Skript behält die Layer-Dateien aus der Funktion KMLToLayer nicht bei.

# Name: BatchKML_to_GDB.py
# Description: Convert a directory of KMLs and copies the output into a single 
#              fGDB. A 2-step process: first convert the KML files; then 
#              copy the feature classes.

# Import system modules
import arcpy
import os

# Set workspace (where all the KMLs are)
arcpy.env.workspace = "C:/VancouverData/KML"

# Set local variables and location for the consolidated file geodatabase
out_location = "C:/WorkingData/fGDBs"
gdb = 'AllKMLLayers.gdb'
gdb_location = os.path.join(out_location, gdb)

# Create the primary file geodatabase
arcpy.management.CreateFileGDB(out_location, gdb)

# Convert all KMZ and KML files found in the current workspace
for kmz in arcpy.ListFiles('*.KM*'):
    print("CONVERTING: {0}".format(os.path.join(arcpy.env.workspace, kmz)))
    arcpy.conversion.KMLToLayer(kmz, out_location)

# Change the workspace to fGDB location
arcpy.env.workspace = out_location

# Loop through all the file geodatabases in the workspace
wks = arcpy.ListWorkspaces('*', 'FileGDB')
# Skip the primary GDB
wks.remove(gdb_location)

for fgdb in wks:
    # Change the workspace to the current file geodatabase
    arcpy.env.workspace = fgdb

    # For every feature class inside, copy it to the primary and use the name 
    # from the original fGDB  
    feature_classes = arcpy.ListFeatureClasses('*', '', 'Placemarks')
    for fc in feature_classes:
        print("COPYING: {} FROM: {}".format(fc, fgdb))
        fcCopy = os.path.join(fgdb, 'Placemarks', fc)
        arcpy.conversion.FeatureClassToFeatureClass(
            fcCopy, gdb_location, fgdb[fgdb.rfind(os.sep) + 1:-4])
KMLToLayer: Beispiel 3 (eigenständiges Skript)

Mit dem folgenden Skript wird eine .kmz-Datei konvertiert und werden die HTML-Pop-up-Daten in Feldattribute extrahiert.

Hinweis:
Dieses Skript behält die Layer-Dateien aus der Funktion KMLToLayer nicht bei.

# Name: Extract_KML_popup_table.py
# Description: Convert a .kmz file and transfer a 2-column table from the pop-up 
#              to the field attributes.

# Import system modules
import arcpy
import os

# Set local variables and location for the consolidated file geodatabase
out_location = "C:/WorkingData/fGDBs"
gdb = 'SCP BoardDistricts.gdb'
gdb_location = os.path.join(out_location, gdb)

# Set kmz path
kmz = os.path.join(out_location, "SCP BoardDistricts.kmz")

# Convert all KMZ files to feature in the current workspace
arcpy.conversion.KMLToLayer(kmz, out_location)
    
# Change the workspace to fGDB location
arcpy.env.workspace = gdb_location

# Loop through all the file geodatabases in the workspace
feature_classes = arcpy.ListFeatureClasses('*', '', 'Placemarks')
for fc in feature_classes:
    popup_info_field_name = 'PopupInfo'
    field_names = [['gs_guid', 'TEXT', '#', 255, None, ''], 
                   ['gs_vc_revision', 'TEXT', '#', 255, None, ''], 
                   ['gs_vc_modified_sw', 'TEXT', '#', 255, None, ''], 
                   ['gs_old_objectid', 'TEXT', '#', 255, None, ''], 
                   ['gs_date_created', 'TEXT', '#', 255, None, ''], 
                   ['gs_date_modified', 'TEXT', '#', 255, None, ''], 
                   ['gs_code', 'TEXT', '#', 255, None, ''], 
                   ['gs_reference_scale', 'TEXT', '#', 255, None, ''], 
                   ['gs_description', 'TEXT', '#', 255, None, ''], 
                   ['gs_plot_scale', 'TEXT', '#', 255, None, ''], 
                   ['gs_nisc_guid', 'TEXT', '#', 255, None, ''], 
                   ['gs_mapped_by', 'TEXT', '#', 255, None, ''], 
                   ['gs_district', 'TEXT', 'Name', 255, None, ''], 
                   ['gs_boardmember', 'TEXT', '#', 255, None, ''], 
                   ['gs_servicetype', 'TEXT', 'Name', 255, None, ''], 
                   ['gs_legacy_futuraguid', 'TEXT', '#', 255, None, ''], 
                   ['gs_last_modified_by', 'TEXT', '#', 255, None, ''], 
                   ['gs_shape_from_gps_sw', 'TEXT', '#', 255, None, ''], 
                   ['gs_district_code', 'TEXT', '#', 255, None, ''], 
                   ['gs_district_name', 'TEXT', '#', 255, None, '']]
    arcpy.management.AddFields(fc, field_names, None)
    field_calculation = [[calc[0], f"extract_field(!{popup_info_field_name}!, '{calc[0]}')"] for calc in field_names]
    arcpy.management.CalculateFields(
        fc, "PYTHON3", field_calculation, 
"""from lxml import etree as _etree
def extract_field(s, field):
    ''' Extract fields from pop-up from each record within the calculate field tool '''
    html = _etree.HTML(s)

    # Get all 'td'
    rows = html.xpath('//table/tr/td')
    next_value = False
    for row in rows:
        c = row.text
        if next_value:
            return c
        if c == field:
            next_value = True
    return None""", 
        "NO_ENFORCE_DOMAINS")

Lizenzinformationen

  • Basic: Begrenzt
  • Standard: Ja
  • Advanced: Ja

Verwandte Themen