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

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

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

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

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

  • Выходные наборы данных будут названы Points, Lines, Polygons или Multipatches, в зависимости от типов объектов во входном файле.

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

  • В целевой папке будет создан выходной слой, поддерживающий исходные символы KML.

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

    Лицензия:

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

    Примечание:

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

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

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

  • ArcGIS AllSource поддерживает добавление слоев KML и KMZ на карту в их исходных форматах без конвертации. Однако для редактирования или изменения слоев любым способом слой необходимо конвертировать при помощи данного инструмента. Можно выбрать слой KML в качестве входных данных этого инструмента.

Параметры

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

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

File; KML Layer
Целевая папка

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

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

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

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

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

Указывает, будет ли покрытие снимками из KML включено в выходные данные.

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

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

Суффикс, который будет добавлен к имени все выходных наборов классов объектов, классов объектов, наборов данных мозаики и файлов слоев. Если суффикс не указан, набор классов объектов в выходной базе геоданных будет называться Placemarks.

String

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

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

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

Group Layer
Выходная база геоданных

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

Workspace

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

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

File; KML Layer
output_folder

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

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

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

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

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

Указывает, будет ли покрытие снимками из KML включено в выходные данные.

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

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

Суффикс, который будет добавлен к имени все выходных наборов классов объектов, классов объектов, наборов данных мозаики и файлов слоев. Если суффикс не указан, набор классов объектов в выходной базе геоданных будет называться Placemarks.

String

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

ИмяОписаниеТип данных
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 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, пример 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 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")

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