KML → レイヤー (KML to Layer) (変換)

サマリー

.kml または .kmz ファイルをジオデータベースおよびレイヤー ファイル内のデータセットに変換します。 レイヤー ファイルは、入力 .kml または .kmz ファイルのシンボルを維持します。

ArcGIS での KML のサポートの詳細

使用法

  • 出力データセットには、入力ファイル内のフィーチャ タイプに応じて PointsLinesPolygons、または Multipatches という名前が付けられます。

    作成された各フィーチャクラスには、入力ファイルに関する情報を含む属性があります。 元のフォルダー構造、名前、情報と、どのようにフィーチャが地表に位置するかを定義するフィールドが、各フィーチャの属性を構成します。

  • 元の KML シンボルを維持する出力レイヤー ファイルはターゲット フォルダー内に作成されます。

  • ラスター (グラウンド オーバーレイ) は、出力ジオデータベース内のモザイク データセットに変換されます。 ネイティブ形式のソース ラスターはターゲット フォルダー内の GroundOverlays フォルダーにコピーされます。 デフォルトでは、グラウンド オーバーレイは変換されません。 ラスターを作成するには、[グラウンド オーバーレイを含める] パラメーターを使用します。

    ライセンス:

    [グラウンド オーバーレイを含める] パラメーターを使用してモザイク データセットを作成するには、Desktop Standard ライセンスが必要です。

    注意:

    このツールを使用してオーバーレイを変換する場合、ソース データによっては時間がかかることがあります。 KML で利用可能なすべてのラスターとオーバーレイが変換されます。 KML が画像を提供するサービスを参照している場合はすべての画像が変換されます。 非常に詳細な画像は、そのファイル サイズが大きいので変換に時間がかかることもあります。

  • 出力データセットは WGS84 座標系になります。 フィーチャクラスは、[投影変換 (Project)] ツールを使用して別の座標系に再投影できます。

  • KMZ バージョン 2.2 までの「OGC KML」標準の大部分をサポートしています。 (ジオコーディングによる) アドレス タグを使うポイント位置はサポートしていません。 有効な緯度位置と経度位置がソース KML 内に必要です。

  • ArcGIS AllSource では、変換を行わずに「KML および KMZ レイヤー」を元の形式のままマップに追加することができます。 ただし、編集を加えたり、何らかの方法でレイヤーを変更したりする場合には、このツールを使用してレイヤーを変換する必要があります。 KML レイヤーをこのツールへの入力データとして選択できます。

パラメーター

ラベル説明データ タイプ
入力ファイル (KML または KMZ)

ジオデータベース データセットに変換される .kml または .kmz ファイル。

File; KML Layer
ターゲット フォルダー

出力ジオデータベースとレイヤー ファイル (.lyrx) が作成される対象フォルダー。

Folder
出力名
(オプション)

出力ジオデータベースとレイヤー ファイル (.lyrx) のどちらにも使用される名前。 デフォルトは、入力ファイルの名前です。

ターゲット フォルダー内の既存のジオデータベースの名前を指定できます。これで、変換を行うと、新しいデータセットが既存のジオデータベースに書き込まれます。 指定した名前のジオデータベースが存在しない場合は、そのジオデータベースがターゲット フォルダー内に作成されます。

String
グラウンド オーバーレイを含める
(オプション)

KML からのグラウンド オーバーレイを出力に含めるかどうかを指定します。

KMZ が画像を提供するサービスを参照している場合は注意してください。 ツールは、利用可能なあらゆる縮尺でラスター画像を変換しようとします。 この処理は、実行に時間がかかったり、サーバーに多大な負荷をかけたり、タイムアウトになったりすることがあります。

  • オン - グラウンド オーバーレイが出力に含まれます。
  • オフ - グラウンド オーバーレイが出力に含まれません。 これがデフォルトです。
Boolean
出力の接尾辞
(オプション)

すべての出力フィーチャ データセット、フィーチャクラス、モザイク データセット、およびレイヤー ファイルの名前に付加される接尾辞。 接尾辞を指定しないと、出力ジオデータベース内のフィーチャ データセットの名前はプレースマークになります。

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) のどちらにも使用される名前。 デフォルトは、入力ファイルの名前です。

ターゲット フォルダー内の既存のジオデータベースの名前を指定できます。これで、変換を行うと、新しいデータセットが既存のジオデータベースに書き込まれます。 指定した名前のジオデータベースが存在しない場合は、そのジオデータベースがターゲット フォルダー内に作成されます。

String
include_groundoverlay
(オプション)

KML からのグラウンド オーバーレイを出力に含めるかどうかを指定します。

KMZ が画像を提供するサービスを参照している場合は注意してください。 ツールは、利用可能なあらゆる縮尺でラスター画像を変換しようとします。 この処理は、実行に時間がかかったり、サーバーに多大な負荷をかけたり、タイムアウトになったりすることがあります。

  • GROUNDOVERLAYグラウンド オーバーレイが出力に含まれます。
  • NO_GROUNDOVERLAYグラウンド オーバーレイが出力に含まれません。 これがデフォルトです。
Boolean
out_suffix
(オプション)

すべての出力フィーチャ データセット、フィーチャクラス、モザイク データセット、およびレイヤー ファイルの名前に付加される接尾辞。 接尾辞を指定しないと、出力ジオデータベース内のフィーチャ データセットの名前はプレースマークになります。

String

派生した出力

名前説明データ タイプ
output_layer

出力レイヤー ファイル

Group Layer
out_geodatabase

フィーチャ データセット内のフィーチャクラスを含む (グラウンド オーバーレイが含められた場合はモザイク データセット内のフィーチャクラスも含む) 出力ジオデータベース。

Workspace

コードのサンプル

KMLToLayer (KML → レイヤー) の例 1 (Python ウィンドウ)

.kmz ウィンドウから Python ファイルをファイル ジオデータベースに変換します。

import arcpy

arcpy.KMLToLayer_conversion(r'C:\kmls\earthquakes.kml',r'C:\gisdata\fromkmls','earthquake_09')
KMLToLayer (KML → レイヤー) の例 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 (KML → レイヤー) の例 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")

関連トピック