KML vers couche (Conversion)

Synthèse

Convertit un fichier .kml ou .kmz en jeux de données dans une géodatabase et un fichier de couche. Le fichier de couche conserve la symbologie du fichier .kml ou .kmz en entrée.

En savoir plus sur la prise en charge de KML dans ArcGIS

Utilisation

  • Les jeux de données en sortie s’intitulent Points, Lines, Polygons ou Multipatches, en fonction des types d’entités dans le fichier en entrée.

    Chaque classe d’entités créée présente des attributs qui contiennent des informations sur le fichier en entrée. La structure des dossiers d’origine, le nom et les informations contextuelles, ainsi que les champs qui permettent de définir la position des entités sur une surface, constituent les attributs de chaque entité.

  • Le fichier de couche en sortie qui gère la symbologie KML d’origine est créée dans le dossier cible.

  • Les rasters ou les superpositions au sol sont convertis en jeu de données mosaïque dans la géodatabase en sortie. Le raster source au format natif est copié dans un dossier GroundOverlays du dossier cible. Les superpositions au sol ne sont pas converties par défaut. Utilisez le paramètre Inclure la superposition au sol pour créer des rasters.

    Licence :

    L’utilisation du paramètre Inclure la superposition au sol pour créer un jeu de données mosaïque nécessite une licence Desktop Standard.

    Remarque :

    La conversion de superpositions à l’aide de cet outil peut prendre du temps, selon les données source. Tous les rasters et toutes les superpositions disponibles dans le fichier KML sont convertis. Toute l’imagerie est convertie si un fichier KML fait référence à un service qui propose de l’imagerie. La conversion d’images très détaillées risque de prendre du temps en raison de la taille des fichiers.

  • Les jeux de données en sortie utilisent le système de coordonnées WGS84. Il est possible de reprojeter les classes d’entités dans un autre système de coordonnées à l’aide de l’outil Projeter.

  • Il est possible de spécifier en entrée des fichiers KMZ dans la version 2.2 et les versions antérieures de la norme OGC KML. Les localisations ponctuelles qui font appel à des balises d’adresse (par géocodage) ne sont pas pris en charge. La localisation doit être spécifiée selon sa latitude et sa longitude dans le fichier KML source.

  • ArcGIS AllSource prend en charge l’ajout de couches KML et KMZ à la carte dans leur format d’origine, sans conversion. Toutefois, pour la mise à jour ou la modification des couches de quelque manière que ce soit, la couche doit être convertie à l’aide de cet outil. Vous pouvez sélectionner la couche KML comme entrée de cet outil.

Paramètres

ÉtiquetteExplicationType de données
Fichier en entrée (KML ou KMZ)

Fichier .kml ou .kmz à convertir en jeux de données de géodatabase.

File; KML Layer
Dossier cible

Dossier de destination dans lequel la géodatabase en sortie et le fichier de couche (.lyrx) sont créés.

Folder
Nom en sortie
(Facultatif)

Nom à utiliser pour la géodatabase en sortie et le fichier de couche (.lyrx). Le nom par défaut est celui du fichier en entrée.

Vous pouvez spécifier le nom d’une géodatabase existante dans le dossier cible ; la conversion enregistre alors les nouveaux jeux de données dans cette géodatabase existante. Si la géodatabase dont le nom a été spécifié n’existe pas, elle est créée dans le dossier cible.

String
Inclure la superposition au sol
(Facultatif)

Indique si les superpositions au sol du fichier KML sont incluses dans la sortie.

Soyez prudent si le fichier KMZ désigne un service qui propose des images. L’outil tente de convertir l’imagerie raster à toutes les échelles disponibles. Ce processus risque de prendre du temps, de surcharger le service ou d’arriver à expiration.

  • Option activée : les superpositions de sol sont incluses dans la sortie.
  • Désactivé : les superpositions au sol ne sont pas incluses dans la sortie. Il s’agit de l’option par défaut.
Boolean
Suffixe en sortie
(Facultatif)

Suffixe ajouté aux noms de tous les jeux de données d’entités, classes d’entités, jeux de données mosaïques et fichiers de couche en sortie. Si aucun suffixe n’est spécifié, le jeu de classes d’entités de la géodatabase en sortie est Repères.

String

Sortie obtenue

ÉtiquetteExplicationType de données
Fichier de couche en sortie

Fichier de couche en sortie.

Group Layer
Géodatabase en sortie

Géodatabase en sortie contenant des classes d’entités dans un jeu de données d’entités et un jeu de données mosaïque si les superpositions au sol ont été incluses.

Workspace

arcpy.conversion.KMLToLayer(in_kml_file, output_folder, {output_data}, {include_groundoverlay}, {out_suffix})
NomExplicationType de données
in_kml_file

Fichier .kml ou .kmz à convertir en jeux de données de géodatabase.

File; KML Layer
output_folder

Dossier de destination dans lequel la géodatabase en sortie et le fichier de couche (.lyrx) sont créés.

Folder
output_data
(Facultatif)

Nom à utiliser pour la géodatabase en sortie et le fichier de couche (.lyrx). Le nom par défaut est celui du fichier en entrée.

Vous pouvez spécifier le nom d’une géodatabase existante dans le dossier cible ; la conversion enregistre alors les nouveaux jeux de données dans cette géodatabase existante. Si la géodatabase dont le nom a été spécifié n’existe pas, elle est créée dans le dossier cible.

String
include_groundoverlay
(Facultatif)

Indique si les superpositions au sol du fichier KML sont incluses dans la sortie.

Soyez prudent si le fichier KMZ désigne un service qui propose des images. L’outil tente de convertir l’imagerie raster à toutes les échelles disponibles. Ce processus risque de prendre du temps, de surcharger le service ou d’arriver à expiration.

  • GROUNDOVERLAYLes superpositions au sol sont incluses dans la sortie.
  • NO_GROUNDOVERLAYLes superpositions au sol ne sont pas incluses dans la sortie. Il s’agit de l’option par défaut.
Boolean
out_suffix
(Facultatif)

Suffixe ajouté aux noms de tous les jeux de données d’entités, classes d’entités, jeux de données mosaïques et fichiers de couche en sortie. Si aucun suffixe n’est spécifié, le jeu de classes d’entités de la géodatabase en sortie est Repères.

String

Sortie obtenue

NomExplicationType de données
output_layer

Fichier de couche en sortie.

Group Layer
out_geodatabase

Géodatabase en sortie contenant des classes d’entités dans un jeu de données d’entités et un jeu de données mosaïque si les superpositions au sol ont été incluses.

Workspace

Exemple de code

Exemple 1 d’utilisation de la fonction KMLToLayer (fenêtre Python)

Convertissez un fichier .kmz en géodatabase fichier à partir de la fenêtre Python.

import arcpy

arcpy.KMLToLayer_conversion(r'C:\kmls\earthquakes.kml',r'C:\gisdata\fromkmls','earthquake_09')
Exemple 2 d’utilisation de la fonction KMLToLayer (script autonome)

Le script suivant convertit un dossier de fichiers .kmz et .kml dans leur géodatabase fichier respective. Les classes d’entités figurant dans les géodatabases fichier sont alors regroupées en une seule géodatabase fichier.

Remarque :
Ce script ne permet pas de conserver les fichiers de couche de la fonction KMLToLayer.

# 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])
Exemple 3 d’utilisation de la fonction KMLToLayer (script autonome)

Le script suivant convertit un fichier .kmz et extrait les données contextuelles HTML vers des attributs de champ.

Remarque :
Ce script ne permet pas de conserver les fichiers de couche de la fonction 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")

Rubriques connexes