本机环境:arcgis10.2,arcgis自带的python2.7
参考:
https://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy-mapping/listlayers.htm
https://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy-mapping/addlayer.htm
https://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy-mapping/layer-class.htm
https://desktop.arcgis.com/zh-cn/arcmap/10.3/analyze/arcpy-mapping/updatelayer.htm
前言
最近有较多的tif文件需要上色后转换为kmz文件,前期手动上色,后期利用了arcpy,可以完成批量操作。
教程包含两种方法,第一种为手动上色转换,第二种利用arcpy完成操作。
方法一:手动转换
- 加载需要上色转换的文件,可以直接拖动文件到窗口中,如图1所示。
- 选中一个图层,鼠标右键选择属性,在打开的属性窗口中选择符号系统,并按照需要更改,完成上色。分别如图2,图3所示。
- 在搜索窗口中,搜索kml,选择图层转KML,在新打开的窗口中选择图层,设置保存路径,确定即可。如图4所示。
鼠标右键-字母I-勾选显示背景值-字母I-Enter。嗯,5s一张上色,多来几张就是上色机器了。
方法二:利用arcpy
利用arcgis自带的arcpy完成上述操作。原计划是直接将tif转为kml的,有方法可用。由itf转成的kmz是没有上色的,后采用先添加到地图文档中,然后利用更新的方法给目标图层上色,最后转换为kml文件。
完整代码见文末。
- 按照方法一,将上色后的一个图层另存为lyr文件,作为默认的颜色方案。如图5所示。
- 加载一个地图文档,可以将默认的地图文档另存为一个新的地图文档,文件后缀为xmd。同时获取地图文档的第一个图层,后面所有的文件都将添加到该图层下面,达到图1的效果。记载默认配色文件。代码如下:
# TIF_DIR:源文件路径
# RESULT_DIR:处理后文件保存的路径
# COLOR_PATH:默认的配色方案,必须为图层文件
# MXD_PATH:地图文档路径
TIF_DIR = r'F:\Ori'
RESULT_DIR = r'F:\\kmltest'
COLOR_PATH = r'E:\color.lyr'
MXD_PATH = r'E:\test.mxd'
# mxd:加载地图文档
# df:获取地图文档中的第一个图层,中文版本的arcgis默认名字为'图层'
# lyrFile:加载为上色方案的图层
mxd = arcpy.mapping.MapDocument(MXD_PATH)
df = arcpy.mapping.ListDataFrames(mxd, "")[0]
lyrFile = arcpy.mapping.Layer(COLOR_PATH)
- 获需要上色的文件,加载为layer,添加到地图文档中,并更新符号系统,完成上色:
# 利用Layer()方法将需要上色的文件转换为layer对象,其后利用AddLayer()方法添加到地图文档中,
# 新添加的图层默认在最前面,获取图层利用UpdateLayer()更新符号系统,完成上色。
layer = arcpy.mapping.Layer(tif_path)
arcpy.mapping.AddLayer(df, layer)
lyr = arcpy.mapping.ListLayers(mxd, "", df)[0]
arcpy.mapping.UpdateLayer(df, lyr, lyrFile, True)
return lyr
- 将layer转换为kmz文件即可。
# kmz_name:文件名,结合RESULT_DIR生成文件的绝对路径。
kmz_name = layer.name.split('.')[0] + ".kmz"
result_path = RESULT_DIR + '\\' + kmz_name
print('Output file: ' + result_path)
arcpy.LayerToKML_conversion(layer, result_path) # arcpy中图层转KML的方法
完整代码
# -*- coding: UTF-8 -*-
import os
import sys
import arcpy
# TIF_DIR:源文件路径
# RESULT_DIR:处理后文件保存的路径
# COLOR_PATH:默认的配色方案,必须为图层文件
# MXD_PATH:地图文档路径
TIF_DIR = r'F:\Ori'
RESULT_DIR = r'F:\\kmltest'
COLOR_PATH = r'E:\color.lyr'
MXD_PATH = r'E:\test.mxd'
# mxd:加载地图文档
# df:获取地图文档中的第一个图层,中文版本的arcgis默认名字为'图层'
# lyrFile:加载为上色方案的图层
mxd = arcpy.mapping.MapDocument(MXD_PATH)
df = arcpy.mapping.ListDataFrames(mxd, "")[0]
lyrFile = arcpy.mapping.Layer(COLOR_PATH)
def save_kml(layer):
"""将layer转换为KML/KMZ文件.
调用arcpy的LayerToKML_conversion()方法,生成KML文件,方便在Google Earth中查看。
默认打印输出文件的绝对路径
Args:
layer: arcpy中的layer对象.
Returns:
None.
"""
# kmz_name:文件名,结合RESULT_DIR生成文件的绝对路径。
kmz_name = layer.name.split('.')[0] + ".kmz"
result_path = RESULT_DIR + '\\' + kmz_name
print('Output file: ' + result_path)
arcpy.LayerToKML_conversion(layer, result_path) # arcpy中图层转KML的方法
def update_color(tif_path):
"""给layer上色.
先新建图层,然后利用已有的COLOR_PATH文件配色方案,利用UpdateLayer()方法更新符号系统,
达到上色的目的。
Args:
tif_path: 需要上色的文件的路径.
Returns:
lyr: 上色后的layer对象.
"""
# 利用Layer()方法将需要上色的文件转换为layer对象,其后利用AddLayer()方法添加到地图文档中,
# 新添加的图层默认在最前面,获取图层利用UpdateLayer()更新符号系统,完成上色。
layer = arcpy.mapping.Layer(tif_path)
arcpy.mapping.AddLayer(df, layer)
lyr = arcpy.mapping.ListLayers(mxd, "", df)[0]
arcpy.mapping.UpdateLayer(df, lyr, lyrFile, True)
return lyr
if __name__ == '__main__':
# 获取文件夹下的所有文件
tifs = os.listdir(TIF_DIR)
for tif in tifs:
# 只处理文件名后缀为tif或者img的文件
if tif.endswith('.tif') or tif.endswith('.img'):
tif_path = TIF_DIR + '\\' + tif
print('Input tif: ' + tif_path)
layer = update_color(tif_path) # 给文件上色
save_kml(layer) # 保存上色的文件为kmz格式
更多信息参考ARCGIS帮助。