De KML a capa (Conversión)

Resumen

Convierte un archivo .kml o .kmz en datasets en una geodatabase y un archivo de capas. El archivo de capa mantiene la simbología del archivo de entrada .kml o .kmz.

Obtenga más información sobre la compatibilidad KML en ArcGIS

Uso

  • Los datasets de salida se denominarán Points, Lines, Polygons o Multipatches, en función de los tipos de entidades del archivo de entrada.

    Cada clase de entidad creada tendrá atributos que contienen información sobre el archivo de entrada. La estructura de carpeta original, el nombre y la información emergente, así como los campos que ayudarán a definir la forma en que las entidades se sitúan en una superficie, conforman los atributos de cada entidad.

  • El archivo de capa de salida que mantiene la simbología KML original se creará en la carpeta de destino.

  • Los rásteres o las superposiciones terrestres se convertirán en un dataset de mosaico en la geodatabase de salida. El ráster de origen en su formato nativo se copiará en una carpeta de GroundOverlays de la carpeta de destino. Las superposiciones terrestres no se convierten de forma predeterminada. Utilice el parámetro Incluir la superposición de terrenos para crear rásteres.

    Licencia:

    El uso del parámetro Incluir superposición de terrenos para crear un dataset de mosaico requiere una licencia Desktop Standard.

    Nota:

    Las superposiciones de conversión que utilizan esta herramienta pueden tomar un tiempo prolongado, dependiendo de los datos de origen. Se convierten todos los rásteres y superposiciones disponibles en el KML. Todas las imágenes se convertirán si un KML hace referencia a un servicio que proporciona imágenes. Las imágenes muy detalladas también pueden tomar un tiempo prolongado para convertirse debido al tamaño del archivo.

  • Los datasets de salida estarán en el sistema de coordenadas WGS84. Las clases de entidades se pueden volver a proyectar en otro sistema de coordenadas con la herramienta Proyectar.

  • Por lo general, es compatible con la entrada de KMZ hasta la versión 2.2 de OGC KML estándar. Las ubicaciones de puntos que utilizan la etiqueta de dirección (a modo de geocodificación) no son compatibles. Se requiere una ubicación de latitud y longitud válida en el KML de origen.

  • ArcGIS AllSource permite agregar capas KML y KMZ al mapa en su formato original sin conversión. Sin embargo, para realizar ediciones o modificar las capas de cualquier forma, la capa debe convertirse utilizando esta herramienta. Puede seleccionar la capa KML como entrada para esta herramienta.

Parámetros

EtiquetaExplicaciónTipo de datos
Archivo de entrada (KML o KMZ)

El archivo .kml o .kmz que se convertirá en datasets de la geodatabase.

File; KML Layer
Carpeta de destino

La carpeta de destino donde se creará la geodatabase de salida y el archivo de capas (.lyrx).

Folder
Nombre de salida
(Opcional)

Nombre que se utilizará tanto para la geodatabase de salida como para el archivo de capas (.lyrx). El valor predeterminado es el nombre del archivo de entrada.

Puede especificar el nombre de una geodatabase existente en la carpeta de destino y la conversión escribirá los nuevos datasets en la geodatabase existente. Si la geodatabase con el nombre especificado no existe, se creará en la carpeta de destino.

String
Incluir la superposición de terrenos
(Opcional)

Especifica si las superposiciones terrestres de KML se incluirán en la salida.

Tenga precaución si el KMZ apunta a un servicio de imágenes: La herramienta intentará convertir las imágenes ráster en todas las escalas disponibles. Este proceso podría ser largo y posiblemente desbordar el servidor.

  • Activado: las superposiciones terrestres se incluirán en la salida.
  • Desactivado: las superposiciones terrestres no se incluirán en la salida. Esta es la opción predeterminada.
Boolean
Sufijo de salida
(Opcional)

Un sufijo que se agregará a los nombres de todos los datasets de entidades de salida, clases de entidades, datasets de mosaico y archivos de capas. Si no se especifica ningún sufijo, el dataset de entidades de la geodatabase de salida será Marcas de posición.

String

Salida derivada

EtiquetaExplicaciónTipo de datos
Archivo de capa de salida

El archivo de capa de salida.

Group Layer
Geodatabase de salida

La geodatabase de salida contiene clases de entidades en un dataset de entidades y un dataset de mosaico si se incluyeron superposiciones de terrenos.

Workspace

arcpy.conversion.KMLToLayer(in_kml_file, output_folder, {output_data}, {include_groundoverlay}, {out_suffix})
NombreExplicaciónTipo de datos
in_kml_file

El archivo .kml o .kmz que se convertirá en datasets de la geodatabase.

File; KML Layer
output_folder

La carpeta de destino donde se creará la geodatabase de salida y el archivo de capas (.lyrx).

Folder
output_data
(Opcional)

Nombre que se utilizará tanto para la geodatabase de salida como para el archivo de capas (.lyrx). El valor predeterminado es el nombre del archivo de entrada.

Puede especificar el nombre de una geodatabase existente en la carpeta de destino y la conversión escribirá los nuevos datasets en la geodatabase existente. Si la geodatabase con el nombre especificado no existe, se creará en la carpeta de destino.

String
include_groundoverlay
(Opcional)

Especifica si las superposiciones terrestres de KML se incluirán en la salida.

Tenga precaución si el KMZ apunta a un servicio de imágenes: La herramienta intentará convertir las imágenes ráster en todas las escalas disponibles. Este proceso podría ser largo y posiblemente desbordar el servidor.

  • GROUNDOVERLAYLas superposiciones terrestres se incluirán en la salida.
  • NO_GROUNDOVERLAYLas superposiciones terrestres no se incluirán en la salida. Esta es la opción predeterminada.
Boolean
out_suffix
(Opcional)

Un sufijo que se agregará a los nombres de todos los datasets de entidades de salida, clases de entidades, datasets de mosaico y archivos de capas. Si no se especifica ningún sufijo, el dataset de entidades de la geodatabase de salida será Marcas de posición.

String

Salida derivada

NombreExplicaciónTipo de datos
output_layer

El archivo de capa de salida.

Group Layer
out_geodatabase

La geodatabase de salida contiene clases de entidades en un dataset de entidades y un dataset de mosaico si se incluyeron superposiciones de terrenos.

Workspace

Muestra de código

Ejemplo 1 de KMLToLayer (ventana de Python)

Convierta un archivo .kmz en una geodatabase de archivos desde la ventana de Python.

import arcpy

arcpy.KMLToLayer_conversion(r'C:\kmls\earthquakes.kml',r'C:\gisdata\fromkmls','earthquake_09')
Ejemplo 2 de KMLToLayer (secuencia de comandos independiente)

El siguiente script convertirá una carpeta de archivos .kmz y .kml en su respectiva Geodatabase de archivos. Las clases de entidad contenidas en las geodatabases de archivos se consolidan en una sola geodatabase de archivos.

Nota:
Esta secuencia de comandos no mantiene los archivos de capa desde la función KMLToLayer.

# Name: BatchKML_to_GDB.py
# Description: Convert a directory of KMLs and copy 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])
Ejemplo 3 de KMLToLayer (secuencia de comandos independiente)

El siguiente script convierte un archivo .kmz y extrae los datos emergentes de HTML en atributos de campo.

Nota:
Esta secuencia de comandos no mantiene los archivos de capa desde la función KMLToLayer.

# 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")