arcgis python脚本对中文处理_ArcGIS使用Python脚本进行地理处理

低层次的处理任务只有脚本可以执行,如某些表格操作

脚本可以使用更复杂的编程逻辑,如错误捕捉等

脚本可以包裹其他软件,如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.() 如:

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})

# 表格名称,字段名称,属性值筛选器(可选),空间索引(可选),分散为点(可选)

游标详细方法如下:

游标类型

方法

描述

Search

next

检索到下一行

reset

重置到开始位置

Insert

insertRow

插入一行到表中

next

检索到下一行

Update

deleteRow

移除表格中某一行

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,用于保存栅格数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值