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基础的都可以实现。
ArcGIS + Python 批量裁剪、添加X/Y坐标脚本的更多相关文章
- python批量裁剪图片
"""用Pythonp批量裁剪图片""" from PIL import Imageimport matplotlib.pyplot as ...
- arcgis中使用excel中x,y坐标创建点问题
文件——从x,y中添加,可以显示点的位置 右击图层导出数据时,出现无法绘制图形,生成shapefile文件的情况.经过排除数据发现 当x,y坐标值中出现null等异常值时,会出现上述无法导出的情况.
- arcgis影像批量裁剪代码
# -*- coding:utf-8 -*- # Name: ExtractByMask_Ex_02.py # Description: Extracts the cells of a raster ...
- python批量json文件转xml文件脚本(附代码)
场景:在使用了mask rcnn跑实验后标注了大量地json格式文件,现在打算使用yolo和faster rcnn 跑实验 所以需要将之前地json文件转为xml 但是找了很久,没发现有批量处 ...
- python 批量扫描mongodb 未授权访问脚本
需要 pymongo库easy_install pymongo脚本: import socket import sys import pymongo ipcons = [] def Scanner(i ...
- arcgis中给属性文件加x y坐标
两种方式: 一, 1在ArcGIS 9.2桌面软件arcview级别以上软件中,加载要添加x,y坐标的数据,打开属性表,添加X.Y字段 2 右键X字段,选择calculate geometry,如果颜 ...
- Python批量自动裁剪图片
"""用Pythonp批量裁剪图片""" from PIL import Image import matplotlib.pyplot as ...
- ArcGIS Python编程案例-电子资料链接
ArcGIS Python编程案例(1)-Python语言基础 https://www.jianshu.com/p/dd90816d019b ArcGIS Python编程案例(2)-使用ArcPy编 ...
- arcpy arcgis python实例教程--原点夹角距离定义线(坐标正算)
arcpy arcgis python实例教程--原点夹角距离定义线(坐标正算) 商务合作,科技咨询,版权转让:向日葵,135-4855__4328,xiexiaokui#qq.com 此地理处理工具 ...
随机推荐
- 使用 LVS 实现负载均衡原理及安装配置详解(课堂随笔)
一.负载均衡LVS基本介绍 LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director Server上,然后它把用户的请求根据设置好的调度算法,智能均衡地分发到后端真正服务器(r ...
- 工具中修改设置Default VM Arguments
转自:https://www.cnblogs.com/zouhao/p/6513177.html
- linux 编程 如何判断socket断开???--ongoing
1 利用select ? 2从github上找例子 3 学习asio c++ library
- 《Mysql - 如何恢复和避免误删除?》
一:误删数据 (如何恢复和避免误删除) - 使用 delete 语句误删数据行: - 使用 drop table 或者 truncate table 语句误删数据表: - 使用 drop databa ...
- IDE集成开发环境(pycharm)、基本数据类型、用户的交互、运算符
一.IDE集成开发系统pycharm 目的:让Python编程更方便.高效. pycharm的简单定义: PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提 ...
- 03 python 对象笔记
类的命名方法 1.使用大驼峰命名法:每一个单词的首字母大写(第一个的也要)2.单词之间不需要下划线 对象的内置函数和属性 1.使用dir()函数来获取对象的内置方法和属性.返回值是一个列表.2.返回中 ...
- Linux安装Python3流程
安装必要的依赖库文件 yum -y install zlib zlib-devel bzip2 bzip2-devel ncurses ncurses-devel readline readline- ...
- 《C++语言程序设计》初学者必备教材
很多刚开始学习C++语言的同学,都会遇到一个问题:很多教材都不适合零基础的初学者.它们有的枯燥乏味,让人难以消化吸收,有的层次结构混乱,很难理清楚知识点,有的更是难度太大,没有代码的过渡,就开始讲解算 ...
- (转)高效线程池之无锁化实现(Linux C)
本文链接:https://blog.csdn.net/xhjcehust/article/details/45844901 笔者之前照着通用写法练手写过一个小的线程池版本,最近几天复习了一下,发现大多 ...
- 一行代码实现Vue微信支付,无需引用wexin-sdk库,前后端分离HTML微信支付,无需引用任何库
前后端分离项目实现微信支付的流程: 1:用户点击支付 2:请求服务端获取支付参数 3:客户端通过JS调起微信支付(微信打开的网页) * 本文主要解决的是第3步,视为前两步已经完成,能正确拿到支付参数, ...