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

サマリー

.kml または .kmz ファイルをフィーチャクラスとレイヤー ファイルに変換します。 レイヤー ファイルは、入力 .kml または .kmz ファイルのシンボルを維持します。

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

使用法

  • このツールは、フィーチャ データセットのフィーチャクラスを含むファイル ジオデータベースを作成します。 フィーチャクラス名は、入力ファイルの元のフィーチャに応じて、pointlinepolygon、または multipatches という名前になります。 ファイル ジオデータベースと同じフォルダー レベルに、レイヤー ファイルが置かれ、レイヤー ファイルをマップに追加してフィーチャを描画できます。 このレイヤー ファイルはポイント、ライン、あるいはポリゴンのスキーマに基づいたフィーチャを描写しますが、元の KML シンボルは維持します。

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

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

    ライセンス:

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

    注意:

    オーバーレイの変換に [KML → レイヤー (KML to Layer)] ツールを用いると、ソース データに応じて時間がかかる場合があります。 KML で利用可能なすべてのラスターとオーバーレイが変換されます。 KML が画像を提供するサービスを参照している場合はすべての画像が変換されます。 非常に詳細な画像はファイルのサイズが大きいので変換に時間がかかる場合があります。

  • 出力は、WGS84 座標系で生成されます。 出力フィーチャは、[投影変換 (Project)] ツールを使用して、別の座標系に再投影できます。

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

  • AllSource 1.3 リリースでは、KML および KMZ がデータ ソースとしてネイティブにサポートされるようになりました。 KML レイヤーでジオプロセシング処理を実行するには、そのレイヤーをファイル ジオデータベース内のフィーチャに変換する必要があります。 [KML → レイヤー (KML to Layer)] ツールを使用して、[コンテンツ] メニューから KML レイヤーを選択し、ツールの [入力 KML ファイル] パラメーターにドラッグします。 変換が完了したら、新しい出力でジオプロセシング処理を実行します。

パラメーター

ラベル説明データ タイプ
入力 KML ファイル

変換される .kml または .kmz ファイル。

File; KML Layer
出力場所

ファイル ジオデータベースとレイヤー ファイル (.lyrx) の格納先となるフォルダー。

Folder
出力データ名
(オプション)

出力のファイル ジオデータベースとレイヤーファイルの名前。 デフォルトは、入力ファイルの名前です。

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
(オプション)

出力のファイル ジオデータベースとレイヤーファイルの名前。 デフォルトは、入力ファイルの名前です。

String
include_groundoverlay
(オプション)

グラウンド オーバーレイ (ラスターや航空写真など) を使用するかどうかを指定します。

KMZ がラスター画像を提供するサービスを参照している場合は注意してください。 ツールは、利用可能なあらゆる縮尺でラスター画像を変換しようとします。 この処理は、時間がかかったり、サービスをハングアップさせたりすることがあります。

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

派生した出力

名前説明データ タイプ
output_layer

出力レイヤー ファイル。

Group Layer
out_geodatabase

フィーチャ データセットのフィーチャクラスを含む出力ジオデータベース。

Workspace

コードのサンプル

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

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

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 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")