KML 转为图层 (转换)
用法
该工具用于创建文件地理数据库,该地理数据库中包含要素数据集中的要素类。会将要素类名称命名为点、线、面或多面体,具体取决于 KML 文件的原始要素。会在文件地理数据库所在的同一文件夹级别下显示一个图层 (.lyr) 文件,可以将该文件添加至 ArcMap 以绘制要素。此图层文件根据其点、线或面的方案绘制要素,同时维护原始 KML 符号。
所创建的每个要素类均将含有用于维护有关原始 KML 文件的信息的属性。原始文件夹结构、名称、弹出信息以及有助于定义要素在表面出现方式的字段,所有这些都组成了每个要素的属性。
栅格或地面叠加层都将转换为文件地理数据库内的栅格目录。在与输出文件地理数据库属于相同级别的 GroundOverlays 文件夹中可以提供本机格式的源栅格。
注:使用 KML 转图层工具转换叠加层可能需要很长时间,具体取决于源数据。将会转换 KML 内的所有可用栅格和叠加层。如果 KML 引用提供影像的服务,则将转换所有影像。转换内容极为详细的影像可能会因其文件大小消耗很长时间。
将在 WGS84 坐标系中生成输出。必要时,可使用投影工具将输出要素投影到另一个坐标系中。
-
主要支持 OGC KML 标准的高达 KMZ 2.2 版本的输入。不支持使用地址标签(按地理编码方式)的点位置。在源 KML 内需要有效的经度和纬度位置。
语法
参数 | 说明 | 数据类型 |
in_kml_file |
要转换的 KML 或 KMZ 文件。 | File |
output_folder |
文件地理数据库和图层 (.lyr) 文件的目标文件夹。 | Folder |
output_data (可选) |
输出文件地理数据库和图层文件 (.lyr) 的名称。默认为输入 KML 文件的名称。 | String |
include_groundoverlay (可选) | 包括地面叠加层(栅格、航空照片等)。KMZ 指向提供栅格影像的服务时务必要谨慎。该工具将尝试按所有可用比例转换栅格影像。此过程可能会很长且可能超出服务的能力。
| Boolean |
代码实例
在 Python 窗口中,将 KMZ 文件转换为 FGDB。
import arcpy
arcpy.KMLToLayer_conversion(r'C:\kmls\earthquakes.kml',r'C:\gisdata\fromkmls','earthquake_09')
以下脚本会将 KMZ 和 KML 文件的文件夹转换为其各自的文件地理数据库。然后,会将这些文件地理数据库内的要素类合并到单个文件地理数据库中。
注:此脚本不维护“KML 转图层”工具中的图层文件。
# Name: BatchKML_to_GDB.py
# Description: Converts a directory of KMLs and copies the output into a single fGDB.
# A 2 step process: first convert the KML files, and then copy the featureclases
# Import system models
import arcpy, os
# Set workspace (where all the KMLs are)
arcpy.env.workspace="C:/VancouverData/KML"
# Set local variables and location for the consolidated file geodatabase
outLocation = "C:/WorkingData/fGDBs"
MasterGDB = 'AllKMLLayers.gdb'
MasterGDBLocation = os.path.join(outLocation, MasterGDB)
# Create the master FileGeodatabase
arcpy.CreateFileGDB_management(outLocation, MasterGDB)
# Convert all KMZ and KML files found in the current workspace
for kmz in arcpy.ListFiles('*.KM*'):
print "CONVERTING: " + os.path.join(arcpy.env.workspace,kmz)
arcpy.KMLToLayer_conversion(kmz, outLocation)
# Change the workspace to fGDB location
arcpy.env.workspace = outLocation
# Loop through all the FileGeodatabases within the workspace
wks = arcpy.ListWorkspaces('*', 'FileGDB')
# Skip the Master GDB
wks.remove(MasterGDBLocation)
for fgdb in wks:
# Change the workspace to the current FileGeodatabase
arcpy.env.workspace = fgdb
# For every Featureclass inside, copy it to the Master and use the name from the original fGDB
featureClasses = arcpy.ListFeatureClasses('*', '', 'Placemarks')
for fc in featureClasses:
print "COPYING: " + fc + " FROM: " + fgdb
fcCopy = fgdb + os.sep + 'Placemarks' + os.sep + fc
arcpy.FeatureClassToFeatureClass_conversion(fcCopy, MasterGDBLocation, fgdb[fgdb.rfind(os.sep)+1:-4])
# Clean up
del kmz, wks, fc, featureClasses, fgdb