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) のどちらにも使用される名前。 デフォルトは、入力ファイルの名前です。
ターゲット フォルダー内の既存のジオデータベースの名前を指定できます。これで、変換を行うと、新しいデータセットが既存のジオデータベースに書き込まれます。 指定した名前のジオデータベースが存在しない場合は、そのジオデータベースがターゲット フォルダー内に作成されます。
|
String
|
|
include_groundoverlay
(オプション)
|
KML からのグラウンド オーバーレイを出力に含めるかどうかを指定します。
KMZ が画像を提供するサービスを参照している場合は注意してください。 ツールは、利用可能なあらゆる縮尺でラスター画像を変換しようとします。 この処理は、実行に時間がかかったり、サーバーに多大な負荷をかけたり、タイムアウトになったりすることがあります。
|
Boolean
|
|
out_suffix
(オプション)
|
すべての出力フィーチャ データセット、フィーチャクラス、モザイク データセット、およびレイヤー ファイルの名前に付加される接尾辞。 接尾辞を指定しないと、出力ジオデータベース内のフィーチャ データセットの名前はプレースマークになります。
|
String
|
派生した出力
|
名前
|
説明
|
データ タイプ
|
|
output_layer
|
出力レイヤー ファイル
|
Group Layer
|
|
out_geodatabase
|
フィーチャ データセット内のフィーチャクラスを含む (グラウンド オーバーレイが含められた場合はモザイク データセット内のフィーチャクラスも含む) 出力ジオデータベース。
|
Workspace
|
コードのサンプル
KMLToLayer の例 1 (Python ウィンドウ)
Python ウィンドウから、.kmz ファイルをファイル ジオデータベースに変換します。
import arcpy
arcpy.conversion.KMLToLayer(r'C:\kmls\earthquakes.kml', r'C:\gisdata\fromkmls',
'earthquake_09')
KMLToLayer の例 2 (スタンドアロン スクリプト)
次のスクリプトは、.kmz ファイルと .kml ファイルのフォルダーをそれぞれのファイル ジオデータベースに変換します。 この結果、これらのファイル ジオデータベース内のフィーチャクラスが 1 つのファイル ジオデータベースに集約されます。
注意:
このスクリプトは 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")