KML in Layer (Conversion)

Zusammenfassung

Konvertiert eine .kml- oder .kmz-Datei in Datasets in einer Geodatabase und einer Layer-Datei. Die Layer-Datei übernimmt die Symbolisierung aus der .kml- oder .kmz-Eingabe-Datei.

Weitere Informationen zur KML-Unterstützung in ArcGIS

Verwendung

  • Die Namen der Ausgabe-Datasets lauten Points, Lines, Polygons oder Multipatches, je nach den Feature-Typen in der Eingabedatei.

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

  • Die Ausgabe-Layer-Datei, die die Symbolisierung aus der ursprünglichen KML-Datei übernimmt, wird im Zielordner erstellt.

  • Raster oder Boden-Overlays werden in der Ausgabe-Geodatabase in ein Mosaik-Dataset konvertiert. Das Quell-Raster in seinem systemeigenen Format wird in den Ordner GroundOverlays des Zielordners kopiert. Bode-Overlays werden nicht standardmäßig konvertiert. Verwenden Sie den Parameter Boden-Overlay einbeziehen, um Raster zu erstellen.

    Lizenz:

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

    Hinweis:

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

  • Die Ausgabe der Datasets erfolgt im WGS84-Koordinatensystem. Die Feature-Classes 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 AllSource unterstützt das Hinzufügen von KML- und KMZ-Zeit-Layern zur Karte in ihrem ursprünglichen Format ohne Konvertierung. Zum Bearbeiten oder Ändern der Layer muss der Layer jedoch mit diesem Werkzeug konvertiert werden. Sie können den KML-Layer als Eingabe für dieses Werkzeug auswählen.

Parameter

BeschriftungErläuterungDatentyp
Eingabedatei (KML oder KMZ)

Die .kml- oder .kmz-Datei, die in Geodatabase-Datasets konvertiert wird.

File; KML Layer
Zielordner

Der Zielordner, in dem die Ausgabe-Geodatabase und die Layer-Datei (.lyrx) für die Ausgabe erstellt werden.

Folder
Ausgabename
(optional)

Der Name, der für die Ausgabe-Geodatabase und die Layer-Datei verwendet wird (.lyrx). Standardmäßig wird der Name der Eingabedatei verwendet.

Sie können den Namen einer vorhandenen Geodatabase im Zielordner angeben, und bei der Konvertierung werden neue Datasets in die vorhandene Geodatabase geschrieben. Wenn keine Geodatabase mit dem angegebenen Namen vorhanden ist, wird sie im Zielordner erstellt.

String
Boden-Overlay einbeziehen
(optional)

Gibt an, ob KML-Boden-Overlays in die Ausgabe einbezogen werden.

Gehen Sie mit Bedacht vor, wenn die KMZ-Datei auf einen Service verweist, der Bilddaten bereitstellt. Das Werkzeug versucht, die Raster-Bilddaten in alle verfügbaren Maßstäbe zu konvertieren. Dieser Prozess kann lange dauern und möglicherweise den Server überlasten oder zu einem Timeout führen.

  • Aktiviert: Boden-Overlays sind in der Ausgabe enthalten.
  • Deaktiviert: Boden-Overlays sind nicht in der Ausgabe enthalten. Dies ist die Standardeinstellung.
Boolean
Suffix für Ausgabe
(optional)

Das Suffix, das an die Namen aller Ausgabe-Feature-Datasets, Feature-Classes, Mosaik-Datasets und Layer-Dateien angehängt wird. Wenn kein Suffix angegeben wird, lautet der Name des Feature-Datasets in der Ausgabe-Geodatabase "Placemarks".

String

Abgeleitete Ausgabe

BeschriftungErläuterungDatentyp
Ausgabe-Layer-Datei

Die Ausgabe-Layer-Datei.

Group Layer
Ausgabe-Geodatabase

Die Ausgabe-Geodatabase enthält Feature-Classes in einem Feature-Dataset und ein Mosaik-Dataset, sofern Boden-Overlays einbezogen wurden.

Workspace

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

Die .kml- oder .kmz-Datei, die in Geodatabase-Datasets konvertiert wird.

File; KML Layer
output_folder

Der Zielordner, in dem die Ausgabe-Geodatabase und die Layer-Datei (.lyrx) für die Ausgabe erstellt werden.

Folder
output_data
(optional)

Der Name, der für die Ausgabe-Geodatabase und die Layer-Datei verwendet wird (.lyrx). Standardmäßig wird der Name der Eingabedatei verwendet.

Sie können den Namen einer vorhandenen Geodatabase im Zielordner angeben, und bei der Konvertierung werden neue Datasets in die vorhandene Geodatabase geschrieben. Wenn keine Geodatabase mit dem angegebenen Namen vorhanden ist, wird sie im Zielordner erstellt.

String
include_groundoverlay
(optional)

Gibt an, ob KML-Boden-Overlays in die Ausgabe einbezogen werden.

Gehen Sie mit Bedacht vor, wenn die KMZ-Datei auf einen Service verweist, der Bilddaten bereitstellt. Das Werkzeug versucht, die Raster-Bilddaten in alle verfügbaren Maßstäbe zu konvertieren. Dieser Prozess kann lange dauern und möglicherweise den Server überlasten oder zu einem Timeout führen.

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

Das Suffix, das an die Namen aller Ausgabe-Feature-Datasets, Feature-Classes, Mosaik-Datasets und Layer-Dateien angehängt wird. Wenn kein Suffix angegeben wird, lautet der Name des Feature-Datasets in der Ausgabe-Geodatabase "Placemarks".

String

Abgeleitete Ausgabe

NameErläuterungDatentyp
output_layer

Die Ausgabe-Layer-Datei.

Group Layer
out_geodatabase

Die Ausgabe-Geodatabase enthält Feature-Classes in einem Feature-Dataset und ein Mosaik-Dataset, sofern Boden-Overlays einbezogen wurden.

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 den 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 copy the output to 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((os.path.join(arcpy.env.workspace, 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 in the calculate fields 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")

Verwandte Themen