ArcGIS + Python 批量裁剪、添加X/Y坐标脚本

前言


前一段时间,同事拿来的数据范围太大,用不了那么多(只需要一个乡镇的,结果拿来区县的),太多了加载也是问题。所以就让我给处理下。

由于文件较多,手动裁剪的话,我一个一个用ArcGIS工具箱中的工具进行裁剪,总体下来用了3个小时左右。后面由于需要再次缩小范围,这次再一个一个手动的话那就太坑了。我想到可以用Python写脚本来批量处理。

正文

在安装ArcGIS软件的时候是默认安装了Python的环境的,并且安装了arcpy库。但是,这个Python是2.7的,我以前学习的是用Python3.X的,我本来想着直接用3.X,但是在“import arcpy”的地方一直有问题,找了一些方法还是不行,最后只能用2.7的了。

下面是批量裁剪的 Python 脚本:

import arcpy
import glob
import os

arcpy.CheckOutExtension(‘Spatial‘)

# 指定裁剪前的目录
inws = r"D:\PythonClip\oldData"

# 指定裁剪后的存放目录
outws = r"D:\PythonClip\Newdata"

#指定shp范围边界文件,即目标区域的边界
mask = r"D:\PythonClip\panhuo.shp"
cluster_tolerance="0.0000001 DecimalDegrees"

#利用glob包,将inws下的所有shp文件读存放到shps 中
shps = glob.glob(os.path.join(inws, "*.shp"))

#循环shps 中的所有影像,进行按掩模提取操作
for shp in shps:
    outname = os.path.join(outws, os.path.basename(shp))  #指定输出文件的命名方式
    print outname
    try:
        arcpy.Clip_analysis(shp,mask,outname)
    except Exception as e:
        print e.message

由于文件较多,所以是循环指定目录下的shp文件,一个一个裁剪并输出保存。

在裁剪后,又需要把文件的X/Y坐标添加到属性列表里。我想这个也用脚本来写吧,好没问题下面也顺利完成:

import arcpy

def CalcXY():
    try:
        print "Set Env"
        arcpy.env.workspace = "D:\\PythonClip\\Newdata"

        print "Start AddField And Calculate centroid"

        shps = arcpy.ListFiles("*.shp")

        for shp in shps:
            fieldList = arcpy.ListFields(shp,"","Double")
            fieldNames = []
            for field in fieldList:
                fieldNames.append(field.name)
            if "X" not in fieldNames:
                arcpy.AddField_management(shp,"X","DOUBLE",20,4)
                arcpy.AddField_management(shp,"Y","DOUBLE",20,4)
                arcpy.CalculateField_management(shp, "X", "!SHAPE.CENTROID.X!","PYTHON_9.3")
                arcpy.CalculateField_management(shp, "Y", "!SHAPE.CENTROID.Y!","PYTHON_9.3")
                print shp

        print "AddField And Calculate centroid End"
    except Exception as e:
        print e.message
        CalcXY()

CalcXY()

以上是添加X、Y的代码。

这些简单的脚本,在ArcGIS的帮助文档中都可以找到,而且每一个都有完整的例子。有一些Python基础的都可以实现。

原文地址:https://www.cnblogs.com/zhurong/p/9520795.html

时间: 2024-08-29 19:09:33

ArcGIS + Python 批量裁剪、添加X/Y坐标脚本的相关文章

python 批量扫描mongodb 未授权访问脚本

需要 pymongo库easy_install pymongo脚本: import socket import sys import pymongo ipcons = [] def Scanner(ip): global ipcons sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sk.settimeout(0.3) try: sk.connect((ip,27017)) ipcons.append(ip) sk.close() e

arcgis中给属性文件加x y坐标

两种方式: 一, 1在ArcGIS 9.2桌面软件arcview级别以上软件中,加载要添加x,y坐标的数据,打开属性表,添加X.Y字段 2 右键X字段,选择calculate geometry,如果颜色显示为灰色,不能选择,把数据转换成shape格式 3出现了计算坐标的对话框,选择…….. 4最后结果,坐标加入到了属性表中.同样的方法添加y坐标. 二,ArcToolBox->Data Management Tools->Features->Add XY Coordinates工具就能自动

ArcGIS下栅格裁剪的几种方法和批量处理方法

在一张大图中对某一个地区进行分析时候,我们只需要其中对应的栅格部分,这就需要进行栅格裁剪. 一般来说,网上常见的ArcGIS中栅格裁剪的方法主要是先有一个矢量图层,然后矢量转成栅格,其中对应的Value赋值为1或0,再调用Spatial Analyst中的Raster Calculator进行与需要裁剪的原图的栅格计算.这种方法的例子在网上搜"ArcGIS栅格裁剪"就会有不少. 这种方法先把矢量转成栅格再裁剪走了一条弯路,其实没必要,我们可以用掩膜进行裁剪(掩膜-英文是Mask-Pho

ArcGIS超级工具SPTOOLS-按属性裁剪,矢量数据批量裁剪,矢量数据批量合库

1.1  按属性裁剪 操作视频: https://weibo.com/tv/v/HwaZRoosq?fid=1034:4376687438183117 按属性裁剪:可以图形表,也可以是非图形表,字段值相同导出一个数据,输出数据可以是数据库,也可以是文件夹,生成SHP或DBF. 输入表(要素):可以是表,或者要素 裁剪字段:字段值相同导出一个图层,如果是数字导出到数据库,由于数据库不能数字开头,前面自动加YL 输出空间:选文件夹导出SHP(DBF),选数据库导出到数据库 1.2  矢量数据批量裁剪

arcpy arcgis python实例教程--原点夹角距离定义线(坐标正算)

商务合作,科技咨询,版权转让:向日葵,135-4855__4328,xiexiaokui#qq.com 此地理处理工具根据要素类中包含根据表的 x 坐标字段.y 坐标字段.方位角字段和距离字段中的值,计算线段终点的坐标 脚本BearingDistanceToCoord 工具使用方法 效果: 商务合作,科技咨询,版权转让:向日葵,135-4855__4328,xiexiaokui#qq.com 原文地址:https://www.cnblogs.com/xiexiaokui/p/11766417.h

Python 集合set()添加删除、交集、并集、集合操作详解

在Python set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种.创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方法. 创建集合set python set类是在python的sets模块中,大家现在使用的python2.7.x中,不需要导入sets模块可以直接创建集合.>>>set('boy')set(['y', 'b', 'o']) 集合添加.删除 python 集合的添加有两种常用方法,分别是add

python批量修改SecureCRT会话密码

#利用python批量修改SecureCRT 会话密码 # -*- coding:utf-8 -*- import os,re def CRT_Path(path,*args,**kwargs):     for (dirpath, dirnames, filenames) in os.walk(path):         for file in filenames:             fullname = os.path.join(dirpath, file)             

numpy的shape 和 gt的x、y坐标之间容易引起误会

用numpy来看shape,比如np.shape(img_data),会得到这样的结果(600,790,3) 注意:600不是横坐标,而是表示多少列,790才是横坐标 用numpy测试就可以看出: >>> import numpy as np >>> a = [[1,2,3],[1,2,3]] >>> b = np.array(a) >>> b array([[1, 2, 3], [1, 2, 3]]) >>> np

1-2 图片批量裁剪

# -*-coding:utf-8-*- # !/usr/bin/env python # Author :vilicute ''' func:对某文件夹下的图片进行批量裁剪 ''' import os import time from PIL import Image start = time.time() paths = "C:/Users/vilicute/Desktop/photo/IMG/" # 读取文件路径 aim = "C:/Users/vilicute/Des