KML в слой (Конвертация)

Краткая информация

Конвертирует файл .kml или .kmz в классы объектов и файл слоя. Файл слоя поддерживает символы входных файлов .kml или .kmz.

Подробнее о поддержке KML в ArcGIS

Использование

  • Этот инструмент создает файловую базу геоданных, содержащую класс объектов в наборе классов объектов. Имя класса объектов будет задано как point, line, polygon или multipatches, в зависимости от исходных объектов файла KML. Файл слоя будет располагаться на том же уровне, что и файловая база геоданных. Файл может быть добавлен на карту для отображения объектов. Этот файл слоя отображает объекты на основе их схемы точки, линии или полигона, сохраняя при этом исходные символы KML.

    Каждый созданный класс объектов будет иметь атрибуты, содержащие информацию о входном файле. Атрибуты каждого объекта состоят из следующих элементов: структура и имя исходной папки, всплывающая информация, а также поля, которые позволяют определить, как объекты размещаются на поверхности.

  • Растры или покрытие снимками будут конвертированы в набор данных мозаики внутри файла базы геоданных. Исходный растр в исходном формате находится в папке GroundOverlays на том же уровне, что и выходная файловая база геоданных. Покрытие снимками по умолчанию не конвертируется. Используйте параметр Включить покрытие снимками, чтобы создать растры.

    Лицензия:

    Используйте параметр Включить покрытие снимками, чтобы создать набор данных мозаики, для которого требуется лицензия Desktop Standard.

    Примечание:

    Конвертация покрытий снимками с помощью инструмента KML в слой может занять длительное время в зависимости от исходных данных. Все доступные растры и покрытия в KML будут конвертированы. Все изображения будут конвертированы в том случае, если KML ссылается на сервис, предоставляющий изображения. Изображения высокой детальности могут конвертироваться длительное время вследствие большого размера файлов.

  • Выходные данные будут создаваться в системе координат WGS84. Выходные объекты могут быть перепроецированы в другую систему координат с помощью инструмента Проецировать.

  • Наиболее органично поддерживается ввод в KMZ версии 2.2 стандарта OGC KML. Положения точек, использующие тег адреса (путем геокодирования), не поддерживаются. В исходном KML-файле требуются действительные координаты широты и долготы местоположения.

  • Версия ArcGIS Pro 1.3 представляет встроенную поддержку KML и KMZ в качестве источников данных. Для выполнения операций геообработки в слое KML его необходимо конвертировать в объекты в файловой базе геоданных. С помощью инструмента KML в слой выберите KML из меню Ресурсы и перетащите его в параметр Входной файл KML. После конвертации вы можете использовать результаты в операциях геообработки.

Параметры

ПодписьОписаниеТип данных
Входной файл KML

Файл .kml или .kmz, который необходимо конвертирован.

File; KML Layer
Выходное местоположение

Целевая папка для файла базы геоданных и файла слоя (.lyrx).

Folder
Имя выходных данных
(Дополнительный)

Имя выходной файловой базы геоданных и файла слоя. По умолчанию используется имя входного файла KML.

String
Включить покрытие снимками
(Дополнительный)

Определяет, будут ли в выходные данные включены покрытия земной поверхности из KML (растр, аэрофотоснимки и т.д.).

Используйте с осторожностью, если KMZ ссылается на сервис, предоставляющий растровые изображения. Инструмент попытается конвертировать растровые изображения во всех доступных масштабах. Этот процесс может занять длительное время и привести к нагрузкам на сервис.

  • Отмечено – покрытие снимками включено в выходные данные.
  • Не отмечено – покрытие снимками не включается в выходные данные. Это значение по умолчанию
Boolean

Производные выходные данные

ПодписьОписаниеТип данных
Выходной файл слоя

Выходной файл слоя.

Group Layer
Выходная файловая база геоданных

Выходная база геоданных, содержащая класс объектов внутри набора классов объектов.

Workspace

arcpy.conversion.KMLToLayer(in_kml_file, output_folder, {output_data}, {include_groundoverlay})
ИмяОписаниеТип данных
in_kml_file

Файл .kml или .kmz, который необходимо конвертирован.

File; KML Layer
output_folder

Целевая папка для файла базы геоданных и файла слоя (.lyrx).

Folder
output_data
(Дополнительный)

Имя выходной файловой базы геоданных и файла слоя. По умолчанию используется имя входного файла KML.

String
include_groundoverlay
(Дополнительный)

Определяет, будут ли в выходные данные включаться покрытия земной поверхности (растр, аэрофотоснимки и т.д.).

Используйте с осторожностью, если KMZ ссылается на сервис, предоставляющий растровые изображения. Инструмент попытается конвертировать растровые изображения во всех доступных масштабах. Этот процесс может занять длительное время и привести к нагрузкам на сервис.

  • GROUNDOVERLAYПокрытие снимками включается в выходные данные.
  • NO_GROUNDOVERLAYПокрытие снимками не включается в выходные данные. Это значение по умолчанию
Boolean

Производные выходные данные

ИмяОписаниеТип данных
output_layer

Выходной файл слоя.

Group Layer
out_geodatabase

Выходная база геоданных, содержащая класс объектов внутри набора классов объектов.

Workspace

Пример кода

KMLToLayer, пример 1 (окно Python)

Конвертирует файл KMZ в базу геоданных из окна Python.

import arcpy

arcpy.KMLToLayer_conversion(r'C:\kmls\earthquakes.kml',r'C:\gisdata\fromkmls','earthquake_09')
KMLToLayer, пример 2 (автономный скрипт)

Следующий скрипт конвертирует папку с файлами .kmz или .kml в соответствующую файловую базу геоданных. Классы объектов в этих файловых базах геоданных далее будут объединены в единую файловую базу геоданных.

Примечание:
Этот скрипт не поддерживает файлы слоев, созданные функцией 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])
KMLToLayer, пример 3 (автономный скрипт)

Следующий скрипт конвертирует файл .kmz и извлекает данные всплывающего окна в формате HTML в атрибутивное поле.

Примечание:
Этот скрипт не поддерживает файлы слоев, созданные функцией 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")

Информация о лицензиях

  • Basic: Ограниченные
  • Standard: Да
  • Advanced: Да

Связанные разделы