arcpy:TIF/IMG上色后转KMZ文件


本机环境: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. 加载需要上色转换的文件,可以直接拖动文件到窗口中,如图1所示。
    图1
  2. 选中一个图层,鼠标右键选择属性,在打开的属性窗口中选择符号系统,并按照需要更改,完成上色。分别如图2,图3所示。
    图2
    图3 符号系统
  3. 在搜索窗口中,搜索kml,选择图层转KML,在新打开的窗口中选择图层,设置保存路径,确定即可。如图4所示。
    图4
  4. 鼠标右键-字母I-勾选显示背景值-字母I-Enter。嗯,5s一张上色,多来几张就是上色机器了。

方法二:利用arcpy

利用arcgis自带的arcpy完成上述操作。原计划是直接将tif转为kml的,有方法可用。由itf转成的kmz是没有上色的,后采用先添加到地图文档中,然后利用更新的方法给目标图层上色,最后转换为kml文件。
完整代码见文末。

  1. 按照方法一,将上色后的一个图层另存为lyr文件,作为默认的颜色方案。如图5所示。
    图5 保存颜色方案
  2. 加载一个地图文档,可以将默认的地图文档另存为一个新的地图文档,文件后缀为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)
  1. 获需要上色的文件,加载为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
  1. 将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帮助

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值