De KML a capa (Conversión)

Resumen

Convierte un archivo .kml o .kmz en clases de entidad y un archivo de capa. 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

  • Esta herramienta crea una geodatabase de archivos que contiene una clase de entidad dentro de un dataset de entidades. El nombre de clase de entidad se denominará point, line, polygon o multipatches en función de las entidades originales del archivo KML. A nivel de la misma carpeta que la geodatabase de archivos habrá un archivo de capa que se puede agregar a un mapa para dibujar las entidades. Este archivo de capa se dibuja las entidades basadas en su esquema de punto, de línea o de polígono, mientras mantiene la simbología original de KML.

    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.

  • Los rásteres o las superposiciones terrestres se convertirán en un dataset de mosaico en la geodatabase de archivos. El ráster de origen en su formato nativo está en la carpeta GroundOverlays en el mismo nivel que la geodatabase del archivo de salida. 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 la herramienta De KML a capa 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 pueden tomar un tiempo prolongado para convertirse debido al tamaño del archivo.

  • La salida se generará en el sistema de coordenadas WGS84. Las entidades de salida 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.

  • La versión 1.3 de ArcGIS Pro introdujo soporte nativo para KML y KMZ como fuentes de datos. Para realizar operaciones de geoprocesamiento en una capa KML, debe convertirse en entidades en una geodatabase de archivos. Utilizando la herramienta De KML a capa, seleccione la capa KML en el menú Contenido y arrástrela al parámetro Archivo KML de entrada de la herramienta. Después de realizar la conversión, realice la operación de geoprocesamiento en la salida nueva.

Parámetros

EtiquetaExplicaciónTipo de datos
Archivo KML de entrada

El archivo .kml o .kmz que se va a convertir.

File; KML Layer
Localización de salida

La carpeta de destino para la geodatabase de archivos y el archivo de capa (.lyrx).

Folder
Nombre de datos de salida
(Opcional)

El nombre de la geodatabase de archivos de salida y el archivo de capa. El valor predeterminado es el nombre del archivo de entrada.

String
Incluir la superposición de terrenos
(Opcional)

Especifica si las superposiciones terrestres de KML (ráster, fotos aéreas, etc.) se incluirán en la salida.

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

  • Activado: se incluirá la superposición terrestre en la salida.
  • Desactivado: las superposiciones terrestres no se incluirán en la salida. Esta es la opción predeterminada.
Boolean

Salida derivada

EtiquetaExplicaciónTipo de datos
Archivo de capa de salida

El archivo de capa de salida.

Group Layer
Geodatabase de archivos de salida

La geodatabase de salida que contiene una clase de entidad en un dataset de entidades.

Workspace

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

El archivo .kml o .kmz que se va a convertir.

File; KML Layer
output_folder

La carpeta de destino para la geodatabase de archivos y el archivo de capa (.lyrx).

Folder
output_data
(Opcional)

El nombre de la geodatabase de archivos de salida y el archivo de capa. El valor predeterminado es el nombre del archivo de entrada.

String
include_groundoverlay
(Opcional)

Especifica si se van a utilizar superposiciones terrestres (ráster, fotos aéreas, etc.).

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

  • 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

Salida derivada

NombreExplicaciónTipo de datos
output_layer

El archivo de capa de salida.

Group Layer
out_geodatabase

La geodatabase de salida que contiene una clase de entidad en un dataset de entidades.

Workspace

Muestra de código

Ejemplo 1 de KMLToLayer (ventana de Python)

Convierta un archivo KMZ en una geodatabase de archivos desde la ventana 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 .kml y .kmz en su respectiva Geodatabase de archivos. Las clases de entidad contenidas en esas 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 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])
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 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")

Información de licenciamiento

  • Basic: Limitado
  • Standard: Sí
  • Advanced: Sí

Temas relacionados