麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

在ArcGIS中使用ArcPy构建栅格四至矢量面

帮朋友下载高清卫星影像,按一比一万的图幅下载了很多景,一部分因为疏忽遗漏了下载,直接在ArcMap中加载这些卫片,由于数据量大,需要花费大量时间构建影像金字塔,而且每次移动鼠标都会很卡顿,难以排查。我就在想通过获取影像四至的方式构建矢量面,这样大大提高了获取栅格范围的效率。最终,通过编写arcpy脚本轻松解决。

ArcPy构建栅格四至矢量面

效果如下图所示,红色图形为范围面,绿色面状图形为生成的栅格范围矢量面,可以清楚的看到套合情况。

完整代码

具体实现代码如下:

# -*- coding:utf-8 -*-
import os
import time
import arcpy
def makedirs_file(input_path):
    """
    检查文件夹是否存在,否则创建文件夹
    @param input_path: 文件或文件夹名称
    @return:
    """
    if os.path.isdir(input_path):
        if os.path.exists(input_path) is False:
            os.makedirs(input_path)
    else:
        input_path = os.path.dirname(input_path)
        if os.path.exists(input_path) is False:
            os.makedirs(input_path)
if __name__ == '__main__':
    # 输入栅格存储位置
    rastPath = r'F:\gisData\data0929\refY202410072'
    out_file = os.path.join(rastPath, 'shp', 'RasterExtent.shp')
    # 程序运行开始时间
    startTime = time.time()
    arcpy.env.workspace = rastPath
    rasts = arcpy.ListRasters()
    if len(rasts) < 1:
        raise IOError(u"错误,未发现栅格文件!")
    if arcpy.Exists(out_file):
        arcpy.Delete_management(out_file)
    # 创建输出文件夹
    makedirs_file(out_file)
    resultShp = arcpy.CreateFeatureclass_management(os.path.dirname(out_file), "RasterExtent.shp", "POLYGON")
    arcpy.AddField_management(resultShp, "Name", "TEXT", 50)
    cursor = arcpy.InsertCursor(resultShp)
    for rast in rasts:
        raster = arcpy.Raster(rast)
        extent = raster.extent  # 读取栅格的四个角点坐标
        array = arcpy.Array()
        ll = arcpy.Point(extent.XMin, extent.YMin)  # lowerLeft
        ul = arcpy.Point(extent.XMin, extent.YMax)  # upperLeft
        ur = arcpy.Point(extent.XMax, extent.YMax)  # upperRight
        lr = arcpy.Point(extent.XMax, extent.YMin)  # lowerRight
        array.append(ll)
        array.append(ul)
        array.append(ur)
        array.append(lr)
        array.append(ll)
        row = cursor.newRow()
        polygon = arcpy.Polygon(array)
        row.shape = polygon
        row.setValue("Name", rast)
        cursor.insertRow(row)
    # 程序运行结束时间
    endTime = time.time()
    print ("The program run time is : %.02f seconds" % (endTime - startTime))

相关阅读

麻辣GIS-fungis

作者:

一个努力搬砖的GISer

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子

留言板(小编看到第一时间回复)