ArcGIS使用Python脚本进行地理处理

摘要:
文章目录ArcPy类ArcPy的执行ArcPy权限检查ArcPy获取空间数据信息ArcPy光标,SQLArcPy操作几何元素ArcPy运行网格数据集Python是ArcGIS的内置脚本处理功能,可以执行地图分析、数据处理、映射等功能。ArcPy中间游标和SQL游标用于操作表数据。它们主要用于操作要素属性值。游标的使用需要与循环语句相结合。

文章目录


Python是ArcGIS内置的脚本处理函数,可进行地图分析,数据处理,制图等功能。脚本与我们熟悉的ModelBuilder或是ArcToolbox功能很类似,但是不同的地方有:

  • 低层次的处理任务只有脚本可以执行,如某些表格操作
  • 脚本可以使用更复杂的编程逻辑,如错误捕捉等
  • 脚本可以包裹其他软件,如Excel 或是 R程序
  • 脚本可以单独运行,实际上也需要安装ArcGIS
  • 脚本可以定时执行

ArcPy的类

ArcPy有很多类,其中比较重要的有:

  • 地图自动化 arcpy.mapping
  • 地图代数 arcpy.sa

ArcPy的执行

导入ArcPy的方式

  • 整体导入:

    import arcpy
    
  • 按需导入:

    from arcpy import env
    # 推荐方式
    # 导入的模块、类、或是方法可以有别名,如
    # from arcpy import env as myEnv
    

设置工作空间:

每个任务的开始需要先设置工作空间

import arcpy
arcpy.env.workspace = "C:/Data"

调用ArcPy中方法:

调用ArcPy中方法的两种方式:

1、 arcpy.<toolname_toolboxalias>() 如:

import arcpy
arcpy.env.workspace = "C:/Data"
arcpy.Clip_analysis("streams.shp", "study.shp", "result.shp")  

2、 arcpy..() 如:

import arcpy
arcpy.env.workspace = "C:/Data"
arcpy.analysis.Clip("streams.shp", "study.shp", "result.shp")  

ArcPy中包含所有ArcToolbox中方法,名称也与对应的工具名称对应,如

Analysis Tools -> Extract -> clip对应的方法为:Clip_analysis

注意调用函数时,如遇到无需填写的参数可用""或是"#" 占位

获取ArcPy执行结果

执行函数

print arcpy.GetMesssages()

ArcPy权限检查

检查产品有:

  • arcview
  • arceditor
  • arcinfo
  • engine
  • enginegeodb
  • arcserver

检查产品可用性:

print arcpy.CheckProduct("arcinfo")
# AlreadyInitalized

# AlreadyInitalized— 许可已经设置
# Available—许可可用
# Unavailable—许可不可用
# NotLicensed—许可无效
# Failed—系统出错

检查产品信息:

print arcpy.ProductInfo()
# ArcInfo

检查扩展:

arcpy.CheckExtension("spatial")
# available

ArcPy获取空间数据信息

判断是否存在数据集

import arcpy
print = arcpy.Exists("C:/Data/streams.shp")

arcpy.Exists() 中dataset是一个字符串,可是是windows可以识别的文件路劲,也可是是catalog中的路径。

数据集可以是地理空间数据库要素类,shp文件,栅格文件,表格等

数据集描述信息

import arcpy
desc = arcpy.Describe("C:/Data/streams.shp")
print desc.shapeType

获取的desc是一个描述对象,由于参数的类型不一定,所有得到的结果描述对象也是动态的。常用的属性有:

shapeType, spatialReference , datasetType, dataType , path, catalogPath,file, baseName,

name

罗列数据

罗列函数有:
ListFields, ListIndexes, ListDatasets,ListFeatureClasses, ListFiles, ListRasters, ListTables,ListWorkspaces, and ListVersions. 含义根据命名可知。

# 罗列要素类
ListFeatureClasses ({wild_card}, {feature_type}, {feature_dataset})
# 罗列栅格
ListRasters ({wild_card}, {raster_type})
# 罗列字段
ListFields(dataset, {wild_card}, {field_type})

上面三个函数中,参数凡有{}都可以省略,可以看到ListFeatureClasses,和ListRasters可以都省略的。在设置工作空间后,可以省略参数,罗列空间中的要素。

ArcPy中游标,SQL

游标

游标用于操作表格数据,多用于操作要素属性值,游标的使用多需要结合循环语句。

游标有三种类型:查找型SearchCursor, 插入型 InsertCursor, 修改型UpdateCursor

游标使用方法:

arcpy.da.InsertCursor(in_table, field_names)
# 表格名,字段名称
arcpy.da.SearchCursor(in_table, field_names, {where_clause}, {spatial_
reference}, {explore_to_points})
# 表格名称,字段名称,属性值筛选器(可选),空间索引(可选),分散为点(可选)
arcpy.da.UpdateCursor(in_table, field_names, {where_clause}, {spatial_
reference}, {explore_to_points})
# 表格名称,字段名称,属性值筛选器(可选),空间索引(可选),分散为点(可选)

游标详细方法如下:

游标类型方法描述
Searchnext检索到下一行
 reset重置到开始位置
InsertinsertRow插入一行到表中
 next检索到下一行
UpdatedeleteRow移除表格中某一行
 next检索到下一行
 reset重置到开始位置
 updateRow更新当前行
# 插入数据
import arcpy
fc = "C:/Data/study.gdb/roads"
cursor = arcpy.da.InsertCursor(fc, ["STREETNAME"])
cursor.insertRow(["NEW STREET"])

# 查找数据
import arcpy
fc = "C:/Data/zipcodes.shp"
fieldname = "CITY"
delimfield = arcpy.AddFieldDelimiters(fc, fieldname)
cursor = arcpy.da.SearchCursor(fc, ["NAME", "CLASSCODE"], delimfield + "= 'LONGWOOD'")
for row in cursor:
	print row[0]
del row
del cursor

# 修改数据
import arcpy
fc = "C:/Data/study.gdb/zones"
cursor = arcpy.da.UpdateCursor(fc, ["ACRES", "SHAPE_AREA"])
for row in cursor:
    row[0] = row[1] / 43560
    cursor.updateRow(row)

# 删除数据
import arcpy
fc = "C:/Data/study.gdb/roads"
cursor = arcpy.da.UpdateCursor(fc, ["STREETNAME"])
for row in cursor:
    if row[0] == "MAIN ST":
        cursor.deleteRow()

使用游标操作表格,会使表格锁定,这可防止多重操作。 若需要多次操作表格数据,则需要删除游标对象

import arcpy
fc = "C:/Data/study.gdb/roads"
cursor = arcpy.da.UpdateCursor(fc, ["STREETNAME"])
for row in cursor:
    if row[0] == "MAIN ST":
    	cursor.deleteRow()
del row
del cursor

ArcPy操作几何要素

读取几何信息

点要素

import arcpy
fc = "C:/Data/hospitals.shp"
cursor = arcpy.da.SearchCursor(fc, ["SHAPE@XY"])
# SearchCursor也可以查找几何要素,第二个参数"SHAPE@XY"相当于几何要素字段,还可使用
# SHAPE@XY 要素坐标
# SHAPE@LENGTH 要素长度
# SHAPE@ 全部要素对象
for row in cursor:
    x, y = row[0]
    print("{0}, {1}".format(x,y))

线要素

import arcpy
from arcpy import env
env.workspace = "C:/Data"
fc = "roads.shp"
cursor = arcpy.da.SearchCursor(fc, ["OID@", "SHAPE@"])
for row in cursor:
    print("Feature {0}: ".format(row[0]))
    for point in row[1].getPart(0): # getPart用于获取点对象的数组
        print("{0}, {1}".format(point.X, point.Y))

写入几何信息

将text文件写入shp

1 542935 1619969
2 543015 1619964
3 543079 1619924
4 543095 1619896
5 543107 1619816
6 543099 1619768
7 543067 1619669
8 543047 1619629
9 543007 1619593
import arcpy, fileinput, os
from arcpy import env
env.workspace = "C:/Data"
infile = "C:/Data/points.txt"
fc = "newpoly.shp"

# CreateFeatureclass_management(out_path, out_name, {geometry_type})创建空要素
arcpy.CreateFeatureclass_management("C:/Data", fc, "Polygon")
# 新要素游标,准备插入数据
cursor = arcpy.da.InsertCursor(fc, ["SHAPE@"])
array = arcpy.Array()
point = arcpy.Point()
# 读取text文件,生成点数组
for line in fileinput.input(infile):
	point.ID, point.X, point.Y = line.split()
	array.add(point) 
# 根据array生成polygon
polygon = arcpy.Polygon(array)
cursor.insertRow([polygon])
# 关闭文件输入流
fileinput.close()
# 关闭游标
del cursor

ArcPy操作栅格数据集

相关概念

  • 栅格数据集(Raster Dataset),栅格空间数据模型,存储在磁盘中或是地理数据库中,有多种格式如 TIFF, JPEG, IMAGINE, Esri GRID, 和MrSID 等。可以是单波段或是多波段
  • 栅格波段(Raster Band),栅格的一个图层,代表特定波段的光谱信息
  • 栅格目录(Raster Catalog),栅格数据集的几何

罗列栅格文件

ListRasters({wild_card}, {raster_type})

描述栅格属性

栅格信息有:

  • bandCount,波段数目
  • compressionType,压缩类型
  • format,栅格格式
  • permanent, 是否永久
  • sensorType, 探测器类型
import arcpy
from arcpy import env
env.workspace = "C:/raster"
raster = "landcover.tif"
desc = arcpy.Describe(raster)
print desc.dataType
print desc.bandCount
print desc.compressionType

单波段信息有:

  • height : 行数

  • isInteger : 是否整型

  • meanCellHeight: y方向上像元数

  • meanCellWidth : x方向上像元数

  • noDataValue :null值

  • pixelType: 像元值类型,如 8-bit integer, 16-bit integer,
    single precision floating point,

  • primaryField:索引字段

  • tableType: 表格名称

  • width :列数

import arcpy
from arcpy import env
env.workspace = "C:/raster"
rasterband = "img.tif/Band_1"
desc = arcpy.Describe(rasterband)
print desc.meanCellHeight
print desc.meanCellWidth
print desc.pixelType

栅格对象初始化

两种方式: 一是通过文件夹栅格文件,二是通过地图代数语句

# 文件夹
import arcpy
myraster = arcpy.Raster("C:/raster/elevation")

# 地图代数
import arcpy
outraster = arcpy.sa.Slope("C:/raster/elevation")

栅格对象只有一个方法,save,用于保存栅格数据。

免责声明:文章转载自《ArcGIS使用Python脚本进行地理处理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SAP 实例- 页签tabsrip1.assert下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ArcMap 4 完全卸载ArcGIS

本文提供两种完全卸载ArcGIS的方法 方法一:文字版 1、开始>控制面板>添加删除程序,卸载所有ArcGIS软件和帮助文档,以及所有ArcGIS补丁。 2、从添加删除程序面板中删除所有Python相关的应用程序。 3、进入到如下目录:C:UsersUserNameAppDataRoaming,删除ESRI文件夹。(用搜索工具,把ESRI文件夹...

ArcGIS图层和要素的过滤显示

ArcGIS可以设置动态地图服务(ArcGISDynamicMapServiceLayer)显示哪些图层,也可以设置每个图层根据某个属性字段的某些条件来进行过滤显示。 1、设置显示的图层 主要是通过ArcGISDynamicMapServiceLayer的VisibleLayers属性来设置或得到当前显示的图层,C#代码如下: 代码中Map1和TextBl...

Mapgis地图颜色配置(专题图配置)对比Arcgis根据属性配置图斑颜色

对于大多数arcgis用户来说,根据属性配置图斑颜色对于大家来说应该并不陌生。本文将就arcgis图斑颜色设置与mapgis做出比对,为大家提供更为绚丽的地图配色。     Arcgis颜色配置方案 右键图层点击‘属性’,在图层属性框中,选择‘符号系统’界面,可根据类别选取属性字段类型(唯一值|多字段)设置颜色样式。 arcgis提供多种色带供用户选择。...

地理定位接口

<style>.de{300px;height: 300px;border: 1px solid #ddd;}</style></head><body><div class="de"></div><script>var x=document.getElementById...

python数据库——pymysql模块的使用

本节重点: pymysql的下载和使用 execute()之sql注入 增、删、改:conn.commit() 查:fetchone、fetchmany、fetchall 一、pymysql的下载和使用 之前我们都是通过MySQL自带的命令行客户端工具mysql来操作数据库,那如何在python程序中操作数据库呢?这就用到了pymysql模块,该模块本...

查询速度慢的原因很多,常见如下几种

1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成了瓶颈效应。 3、没有 创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 7、 锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)sp_lock,sp_who,活动的用户查看,原因...