arcpy使用

写在前面

地理处理框架与arcpy

éå®æ§æ¨¡åçå¸å±

arcgis地理处理包括了查找工具、工具箱、地理处理环境、模型、python脚本、arcpy等一系列自动执行地理任务的框架。

arcpy是esri针对arcgis系列产品做的一个python站点包,它像胶水一样黏贴了多个与arcgis应用程序相关的arc objects函数对象,我们甚至可以从帮助里找到toolbox每个工具箱的代码原型。arcpy涉及地理数据分析、数据转换、数据管理和地图自动化等地理处理业务。使用python和arcpy的好处在于能够将多个地理处理工具组织一起,汇聚成一个工作流,解决一些复杂的地理处理工作。并可以将工作流打包成地理处理包或者创建地理处理服务,与他人共享使用。

Python语言

Python语言包含了数字、字符串、语句、表达式、控制语句(条件语句、分支语句、循环语句)、对象、函数等基本要素以及编写python语句的基本语法和范式。但是这些东西也没必要面面俱到,因为光是《python library reference》,就有1000多页,你得翻到什么时候。了解Python基本组成部分如字符串处理、路径、控制语句、模块、对象、函数和常用的编码规范即可,边用边学。

本文按照arcpy编写环境、站点包引入、地理处理工具函数和非工具函数、空间数据访问和处理、创建地理处理工具、构建地理处理模型、共享地理处理服务讲述arcpy使用的全过程。arcpy编写环境、站点包引入、地理处理工具函数和非工具函数、空间数据访问和处理是编写arcpy脚本过程;创建地理处理工具、构建地理处理模型是制作脚本工具过程;共享地理处理服务是将脚本工具发布为地理处理服务过程。其中,地理处理函数和非工具函数涉及内容重复性过多,不能一一列举,但它也是arcpy最丰富、最出彩的地方,之所以把地理处理工具函数和非工具函数放在数据访问前面,也是因为如此。很多时候,地理处理函数,甚至都看不到专有数据驱动,就直接处理数据了。由于大部分地理处理过程需要用到python中的数据类型、函数、控制语句、类型等来连贯地理处理函数及数据处理过程,python相关内容也需补充的。

一、制作地理处理脚本

地理处理:arcpy编写环境

在安装arcgis的过程中,一般都会提示你安装python2.7。这个其实就是在让我们给arcpy安装一个自带的语言编写环境。

以上是在arcgis安装完成后,python2.7自带的站点包,里面包含了诸如osgeo、numpy、pandas、pil等遥感影像处理常用的开源站点包。还有如pip这样的Python 包管理工具,用于站点包的查找、下载、安装、卸载等。arcpy工具包放在另外一个位置,该工具包从文件表现形式上有,arengine\acrserver\arceditor等等,arcpy工具包如下:

我们先来看一下python2.7的IDE工具,也就是用于引用arcpy的编写工具:

倒数第二个图标就是python的IDE,可以打开来看一下。

这个IDE以命令行的方式呈现,我们可以按照python语法键入一条语句。

import this 

python在引入包(python中特定的工具集)的时候,需要使用关键字import 引入,如下:

 

也可以打开arccatalog或者arcmap,交互式进入命令行窗口:

 

 

一般而言,如果使用命令行的方式,是我们写一条语句,回车,程序执行一条语句,再写一句,再回车,程序再执行一条语句。实际情况是我们总希望把一个完整的业务逻辑全部写下来,让程序一次性执行完毕,这时候我们就需要脚本。几乎所有带有.py的文件都可以是python的脚本 。我们可以使用记事本、notepad、python gui、pycharm、vs等工具编写python语句,最后保存为.py的文件,然后使用编译器python.exe解释,在cmd中键入python xx.py后回车确认,得到运行结果。

前提你把python.exe路径加入系统变量了

    

或者在IDE中,在new file 按钮上新建文件,键入print("hellow the world")

 

一个简单完整的地理处理脚本编写过程如下:

import arcpy   #arcpy站点包导入
arcpy.env.workspace = "C:/Workspace" #设置工作空间
    

arcpy.Clip_management(
    "image.tif","1952602.23 294196.279 1953546.23 296176.279",
    "clip.gdb/clip", "#", "#", "NONE") # 执行地理处理工程,此处是栅格裁剪

地理处理:arcpy站点包引入

导入arcpy站点包语句为(imprt是python中导入站点包、函数、模块的关键字,一般需要设置系统访问路径):

import arcpy 

arcpy以地理处理工具包、函数集、模块、类等组织在一起,结构如下:

arcpy组成部分描述如下:

术语

定义

ArcPy

ArcPy(通常称为 ArcPy 站点包),为用户提供了使用 Python 语言操作所有地理处理工具(包括扩展模块)的接口,并提供了多种有用的函数和类,以用于处理和询问 GIS 数据。使用 Python 和 ArcPy,可以开发出大量的用于处理地理数据的实用程序。

 

ArcPy 模块

模块通常是一个包含函数和类的 Python 文件。ArcPy 由一系列模块支持,包括数据访问模块 (arcpy.da)、制图模块 (arcpy.mapping)、ArcGIS Spatial Analyst 扩展模块 模块 (arcpy.sa) 以及 ArcGIS Network Analyst 扩展模块 模块 (arcpy.na)。

ArcPy 类

类的作用类似于建筑设计蓝图。蓝图为如何创建事物提供了一个框架,类可用于创建对象,即通常所说的实例。ArcPy 类,如 SpatialReference 和 Extent类,通常用作地理处理工具参数设置的快捷方式,否则的话,这些参数会使用更加复杂的字符串。

ArcPy 函数

函数是用于执行某项特定任务并能够纳入更大的程序的已定义功能。

在 ArcPy 中,所有地理处理工具均以函数形式提供,但并非所有函数都是地理处理工具。除工具之外,ArcPy 还提供多种函数来更好地支持 Python 地理处理工作流。函数(通常称为方法)可用于列出某些数据集、检索数据集的属性、在将表添加到地理数据库之前验证表名称,或执行其他许多有用的脚本任务。

 

如果需要用到包里的一部分类、对象、或者函数,可以写为:

from arcpy import env

也可将类、对象、模块进行标识(取名):

from arcpy import env  as myenv

myenv.workspace="c:/data"

arcpy站点包还包含了许多模块,如自动化制图模块(arcpy.mapping) 和数据访问模块(arcpy.da),导入方式如下:

import arcpy.mapping

编写python脚本前,需设置当前工作空间,如:

import arcpy 

arcpy.env.workspace="c:/data"

注:路径表达方式一般有三种

斜杠:

"c:/data"

反斜杠:

"c:\\data"

特殊字符r:

r"c:\data"

“\”在编码中需转义,前面加r,直接按照原文意思输出。

 

地理处理:地理处理工具函数和非工具函数

工具

地理处理工具是指arcgis软件工具箱中工具的统称,每个工具都会给出相应的图形界面、使用帮助和arcpy语法和使用方式,比如矢量裁剪工具:

打开空间分析的裁剪工具图形界面:

打开裁剪工具帮助:

 

裁剪工具语法结构:

Clip_analysis (in_features, clip_features, out_feature_class, {cluster_tolerance})

参数说明数据类型

in_features

要裁剪的要素。

Feature Layer

clip_features

用于裁剪输入要素的要素。

Feature Layer

out_feature_class

待创建的要素类。

Feature Class

cluster_tolerance

(可选)

所有要素坐标之间的最小距离以及坐标可以沿 X 和/或 Y 方向移动的距离。如果此值设置得较高,则数据的坐标精度将会较低;如果此值设置得较低,则数据的坐标精度将会较高。

Linear unit

裁剪工具脚本代码:

import arcpy
from arcpy import env

# Set workspace
env.workspace = "C:/data"

# Set local variables
in_features = "majorrds.shp"
clip_features = "study_quads.shp"
out_feature_class = "C:/output/studyarea.shp"
xy_tolerance = ""

# Execute Clip
arcpy.Clip_analysis(in_features, clip_features, out_feature_class, xy_tolerance)

地理处理工具以锤子状的图标形式呈现,有相关的图形界面和代码表现方式(如裁剪工具:arcpy.Clip_analysis()),我们在使用arcgis过程中经常用到工具箱,此处不详细说,我们侧重描述arcpy代码部分。

确切的说,arcpy地理处理工具是一个python脚本函数,该类函数可以直接调用并进行相关地理处理。

一个完整的地理处理脚本包含函数名和调用参数。调用参数一般有输入参数、输出参数和附加参数。附加参数常常指处理过程中的设置条件,如上述的裁剪函数的附加参数是容差{cluster_tolerance}。在裁剪时,我们有可能需要设置裁剪的容差。很多时候,设置条件是默认选项,不需要进行设置。

地理处理工具脚本按照地理处理功能分类,有数据管理、数据转换、地理编码、地理分析、地理统计、服务器工具等大类和几百个工具函数,应当在具体应用是细细体会。

地理处理工具脚本具体调用方式有两种。

(1)按照命名方式逐层展开调用,工具箱和函数以点号隔开,如:

         arcpy.analysis.Clip()

(2)按照函数直接调用,函数和工具箱用_隔开,如:

        arcpy.Clip_analysis()

其中,analysis是Analysis Tools(分析工具)别名。很多时候我们记不住他们的名字,可以对着工具箱属性查阅。。

非工具函数

正如官方描述所述:在 ArcPy 中,所有地理处理工具均以函数形式提供,但并非所有函数都是地理处理工具。除工具之外,ArcPy 还提供多种函数来更好地支持 Python 地理处理工作流。函数(通常称为方法)可用于列出某些数据集、检索数据集的属性、在将表添加到地理数据库之前验证表名称,或执行其他许多有用的脚本任务。函数比较多,具体用用时查询。

函数名称

类别

AcceptConnections

地理数据库管理

AddDataStoreItem

数据存储

AddError

消息和错误处理

AddFieldDelimiters

字段

AddIDMessage

消息和错误处理

AddMessage

消息和错误处理

AddReturnMessage

消息和错误处理

AddToolbox

工具和工具箱

AddWarning

消息和错误处理

AlterAliasName

常规

AsShape

几何

CheckExtension

许可授予和安装

CheckInExtension

许可授予和安装

CheckOutExtension

许可授予和安装

CheckProduct

许可授予和安装

ClearEnvironment

环境和设置

Command

常规

CopyParameter

获取和设置参数

CreateObject

常规

CreateGeocodeSDDraft

发布

CreateGPSDDraft

发布

CreateImageSDDraft

发布

CreateRandomValueGenerator

常规

CreateScratchName

常规数据函数

CreateSQLiteDatabase

工作空间

CreateUniqueName

常规数据函数

DecryptPYT

工具和工具箱

描述

描述数据

DisconnectUser

地理数据库管理

EncryptPYT

工具和工具箱

Exists

常规数据函数

FromWKB

几何

FromWKT

几何

GetActivePortalURL

ArcGIS Online/Portal

GetArgumentCount

获取和设置参数

GetIDMessage

消息和错误处理

GetImageEXIFProperties

栅格

GetInstallInfo

许可授予和安装

GetLogHistory

日志历史

GetMaxSeverity

消息和错误处理

GetMessage

消息和错误处理

GetMessageCount

消息和错误处理

GetMessages

消息和错误处理

GetPackageInfo

打包

GetParameter

获取和设置参数

GetParameterAsText

获取和设置参数

GetParameterCount

获取和设置参数

GetParameterInfo

获取和设置参数

GetParameterValue

获取和设置参数

GetReturnCode

消息和错误处理

GetSeverity

消息和错误处理

GetSeverityLevel

消息和错误处理

GetSigninToken

ArcGIS Online/Portal

GetSystemEnvironment

环境和设置

GetUTMFromLocation

空间参考和变换

ImportToolbox

工具和工具箱

InsertCursor

游标

IsSynchronous

工具和工具箱

ListDatasets

列出数据

ListDataStoreItems

数据存储

ListEnvironments

环境和设置

ListFeatureClasses

列出数据

ListFields

列出数据

ListFiles

列出数据

ListIndexes

列出数据

ListInstallations

许可授予和安装

ListPortalURLs

ArcGIS Online/Portal

ListPrinterNames

常规

ListRasters

列出数据

ListSpatialReferences

空间参考和变换

ListTables

列出数据

ListToolboxes

工具和工具箱

ListTools

工具和工具箱

ListTransformations

空间参考和变换

ListUsers

地理数据库管理

ListVersions

列出数据

ListWorkspaces

列出数据

LoadSettings

环境和设置

NumpyArrayToRaster

栅格

ParseFieldName

字段

ParseTableName

常规数据函数

ProductInfo

许可授予和安装

RasterToNumPyArray

栅格

RefreshActiveView

常规

RefreshCatalog

常规

RefreshTOC

常规

RemoveDataStoreItem

数据存储

RemoveToolbox

工具和工具箱

ResetEnvironments

环境和设置

ResetProgressor

进度对话框

SaveSettings

环境和设置

SearchCursor

游标

SetLogHistory

日志历史

SetParameter

获取和设置参数

SetParameterAsText

获取和设置参数

SetProduct

许可授予和安装

SetProgressor

进度对话框

SetProgressorLabel

进度对话框

SetProgressorPosition

进度对话框

SetSeverityLevel

消息和错误处理

TestSchemaLock

常规数据函数

UpdateCursor

游标

Usage

常规

ValidateDataStoreItem

数据存储

ValidateFieldName

字段

ValidateTableName

常规数据函数

地理处理:空间数据的访问

通用性访问

无论我们使用什么样的工具,首先第一步就是访问数据。空间数据的访问既可以是软件访问访问,也可以是代码方式访问。在软件方面,有如:arcgisd,mapinfo、QGIS、GRASS GIS uDig等,代码库方式访问有arcpy、GDAL/OGR、Spectral Python、GeoPandas、GEOS等等。当然编码语言本身也能访问空间数据,但是我们需要很清楚地知道数据本身的结构(如python 中的open\read\write函数)。

按照存储模型的不同,一般将空间数据分为矢量数据和栅格数据(你也可以按照维度把数据分为二维数据或者三维数据),两种类型的数据(栅格数据包含影像数据)有着不同的访问方式,即便是矢量数据或者栅格数据,也因为厂商或者标准的不一样,也有着不同的访问方式。如影像:tif,img,bmp,HDF等格式。相对而言,影像比较容易访问,影像内部存储顺序一般比较规律:BSQ 、BIL、BIP,只要知道行列号,波段数目、像元深度,即可方便地访问每个像元值,而矢量数据的关键性信息不仅有行列号、字段值,还需知道字段的数据类型、长度等等,需使用游标或者更加准确的说,使用sql语句进行访问才行。庆幸的是制作arcpy代码库或者函数库的编写者们会考虑到单个函数使用的通用性,即便是不同的数据类型也希望封装成一个函数进行访问,我们在外部几乎看不出数据类型的不同导致的访问函数不一样。

arcgis将各类数据看作是数据集,无论是矢量的、栅格的、数据库、抑或是文件型的(文件夹)。其访问方式全部封装在列表函数中---list()。列表系列的函数有:

ListFiles--文件列表、

ListWorkspaces--工作空间列表、

ListDatasets--数据集列表、

ListFeatureClasses--要素类列表、

ListRasters--栅格列表、

ListTables--属性表列表等等。

只要事先设置工作空间,即可将所有数据读入列表中,而如果再配合arcpy的工具函数和循环语句,即可做大量的批处理工作。

import arcpy

from arcpy import env

env.workspace="c:/data"  

imgs=arcpy.ListRasters("","img")

for img in imgs:

  arcpy.BuildPyramids_management(img)

以上代码就是为“data”文件夹下的所有img栅格数据创建金字塔。

使用列表函数可以轻松地将数据直接导入内存中,进而交给工具函数处理。

差异性访问

矢量数据中,最出名的莫过于shapefile 文件了,其表现方式为:

  • .shp - 存储要素几何的主文件;必需文件。
  • .shx - 存储要素几何索引的索引文件;必需文件。
  • .dbf - 存储要素属性信息的 dBASE 表;必需文件。
  • .prj - 存储坐标系信息的文件;由 ArcGIS 使用。
  • .xml - ArcGIS 的元数据 - 用于存储 shapefile 的相关信息。
  • .sbn 和 .sbx - 存储要素空间索引的文件。
  • .fbn 和 .fbx - 存储只读 shapefile 的要素空间索引的文件。
  • .ain 和 .aih - 存储某个表中或专题属性表中活动字段属性索引的文件。
  • .atx - .atx 文件针对各个 shapefile 或在 ArcCatalog 中创建的 dBASE属性索引而创建。
  • .ixs - 读/写 shapefile 的地理编码索引。
  • .mxs - 读/写 shapefile(ODB 格式)的地理编码索引。
  • .cpg - 可选文件,指定用于标识要使用的字符集的代码页。

从以上也可以看出,矢量数据有几个基本组成部分:1、几何要素、2、属性表、3、空间坐标信息、4、地理编码。

在其他矢量格式数据中都需要这四类信息,几何要素用以表示图形,属性表用以表示属性信息,空间坐标信息用以表示该矢量数据存在于那类空间坐标中,地理编码用于几何要素的空间定位。

因此,围绕矢量数据的访问,也就有着不同的访问方式,或以几何对象访问(几何图形),或以游标访问(属性表),或以几何对象的封装属性访问(空间坐标信息、地理编码),相对而言,矢量数据的访问方式较为复杂。

(这里我们不讨论矢量点、线、面的不同几何类型)

栅格数据中,img表现方式为:
     img:索引文件, 
     rrd:金字塔文件, 
     ige:栅格数据。 
     rde:在某些情况下,金字塔文件(rrd)也会超过2GB,这时会创建rde文件来存储这些信息

其中img文件像其他图像格式的文件(如:bmp,tiff,hdf等)一样,存有图像一些文件头信息,如:图像的大小、波段、行列数,分辨率、是否压缩、像素的行列数、位深等,还有空间坐标信息等,其基本组成部分有:1、栅格信息(R、G、B、NIR等)2空间坐标信息、3、波段、行列数、分辨率、位深

因此,栅格数据的访问一般只是访问栅格信息,其他的基本很少过问,虽然波段、行列数、分辨率、位深如此多的信息,但是它们都是相对单一的。

arcpy在解决以上的差异性问题时,提供的工具有:使用游标访问矢量数据单个属性项数据,使用numpy数组遍历栅格数据单个栅格值。

矢量属性访问

游标是包含从要素类或表中获取的一行或多行数据的内存对象。每行数据包含了数据源中每个字段中的属性以及每个要素的几何信息。游标可对表和要素类的数据进行搜索,增加,插入,更新以及删除。arcpy.da提供了三个游标函数。

函数创建的游标对象说明
SearchCursor()SearchCursor只读查看表或要素类数据
InsertCursor()InsertCursor向表或要素类插入行
UpdateCursor()UpdateCursor编辑或删除表和要素类行

SearchCursor():用于在要素类或表上建立只读游标。SearchCursor 可用于遍历 Row 对象并提取字段值。可以使用 where 子句或字段限制搜索,并对结果排序。

语法

SearchCursor (dataset, {where_clause}, {spatial_reference}, {fields}, {sort_fields})
参数说明数据类型

dataset

包含要搜索行的要素类、shapefile 或表。

String

where_clause

用于限制在游标中返回的行的可选表达式。有关 where 子句和 SQL 语句的详细信息,请参阅 构建 SQL 查询

String

spatial_reference

指定后,要素将使用提供的 spatial_reference 进行动态投影。

SpatialReference

fields

游标中包含以分号分隔的字符串字段。默认情况下,包含所有字段。

String

sort_fields

用于在游标中对行进行排序的字段。每个字段的升序和降序排列表示为 "field1 A;field2 B" 形式,A 表示升序,D 表示降序。

String

返回值

数据类型说明
Cursor

可分发 Row 对象的 Cursor 对象。

列出 Counties.shp 的字段内容。游标按州名称和人口进行排序。

import arcpy
# Open a searchcursor
#  Input: C:/Data/Counties.shp
#  Fields: NAME; STATE_NAME; POP2000
#  Sort fields: STATE_NAME A; POP2000 D
rows = arcpy.SearchCursor("c:/data/counties.shp",
                          fields="NAME; STATE_NAME; POP2000",
                          sort_fields="STATE_NAME A; POP2000 D")
# Iterate through the rows in the cursor and print out the
# state name, county and population of each.
for row in rows:
    print("State: {0}, County: {1}, Population: {2}".format(
        row.getValue("STATE_NAME"),
        row.getValue("NAME"),
        row.getValue("POP2000")))

InsertCursor():向要素类、shapefile 或表中插入行。InsertCursor 可返回一个分发 Row 对象的枚举对象。

语法

InsertCursor (dataset, {spatial_reference})
参数说明数据类型

dataset

将向其中插入行的表、要素类或 shapefile。

String

spatial_reference

在提供的 spatial_reference 中指定的坐标,并动态转换到数据集的坐标系。

SpatialReference

返回值

数据类型说明
Cursor

返回针对指定要素类、shapefile 或表的 Cursor 对象。

向表中插入 25 个新行。

import arcpy
# Create insert cursor for table
rows = arcpy.InsertCursor("c:/base/data.gdb/roads_lut")
# Create 25 new rows. Set the initial row ID and distance values
for x in range(1, 26):
    row = rows.newRow()
    row.setValue("rowid", x)
    row.setValue("distance", 100)
    rows.insertRow(row)
# Delete cursor and row objects to remove locks on the data
del row
del rows

UpdateCursor():创建一个用于更新或删除指定要素类、shapefile 和表中的行的游标。该游标将数据锁定保留至脚本完成或更新游标对象被删除时。

语法

UpdateCursor (dataset, {where_clause}, {spatial_reference}, {fields}, {sort_fields})
参数说明数据类型

dataset

包含要更新或删除行的要素类、shapefile 或表。

String

where_clause

用于限制在游标中返回的行的可选表达式。有关 where 子句和 SQL 语句的详细信息,请参阅在查询表达式中使用的元素的 SQL 参考

String

spatial_reference

在提供的 spatial_reference 中指定的坐标,并动态转换到数据集的坐标系。

SpatialReference

fields

游标中包含以分号分隔的字符串字段。默认情况下,包含所有字段。

String

sort_fields

用于在游标中对行进行排序的字段。每个字段的升序和降序排列表示为 "field1 A;field2 B" 形式,A 表示升序,D 表示降序。

String

返回值

数据类型说明
Cursor

可分布 Row 对象的 Cursor 对象。

根据另一个字段值更新要素类中的字段值。

import arcpy
# Create update cursor for feature class
rows = arcpy.UpdateCursor("c:/data/base.gdb/roads")
# Update the field used in buffer so the distance is based on the
# road type. Road type is either 1, 2, 3, or 4. Distance is in meters.
for row in rows:
    # Fields from the table can be dynamically accessed from the
    # row object. Here fields named BUFFER_DISTANCE and ROAD_TYPE
    # are used
    row.setValue("BUFFER_DISTANCE", row.getValue("ROAD_TYPE") * 100)
    rows.updateRow(row)
# Delete cursor and row objects to remove locks on the data.
del row
del rows

以上三个游标函数都返回一个游标对象,游标对象根据实际对象的改变而改变。

矢量几何访问

 

栅格数据访问

import arcpy

arcpy.raster()

NumPy 数组是包含在 Python 的 SciPy 科学计算包中的最著名数组,很多现有 Python 函数都是为了处理 NumPy 数组而创建。

栅格可以使用 ArcPy 函数 RasterToNumPyArray 和 NumPyArrayToRaster 转换为 NumPy 数组,也可以使用同样的函数从这些数组反向转换。您可能想要将 ArcGIS 栅格转换为 NumPy 数组以:

  1. 执行可以应用到 NumPy 数组上的许多现有 Python 函数中的一个(例如,对数据运行过滤器、执行多维分析或使用优化例程)。
  2. 通过访问 NumPy 数组中的各个像元来开发自定义函数(例如,执行邻域记数法,更改各个像元值,或者对整个栅格运行累积运算符)。

用于处理栅格的 arcpy 函数

函数说明
RasterToNumPyArray

将栅格转换为 NumPy 数组。

NumPyArrayToRaster

将 NumPy 数组转换为栅格。

语法

RasterToNumPyArray (in_raster, {lower_left_corner}, {ncols}, {nrows}, {nodata_to_value})
参数说明数据类型

in_raster

要转换为 NumPy 数组的输入栅格。

Raster

lower_left_corner

可从 in_raster 中的左下角提取处理块以转换为数组。x 值和 y 值采用地图单位。若未指定值,则将使用输入栅格的原点。

(默认值为 None)

Point

ncols

in_raster 中要转换为 NumPy 数组的 lower_left_corner 中的列数。

若未指定值,则将使用输入栅格的列数。

(默认值为 None)

Integer

nrows

in_raster 中要转换为 NumPy 数组的 lower_left_corner 中的行数。

若未指定值,则将使用输入栅格的行数。

(默认值为 None)

Integer

nodata_to_value

在生成的 NumPy 数组中分配 in_raster NoData 值的值。

若未指定值,则将使用 in_raster 的 NoData 值。

(默认值为 None)

Variant

将栅格数据转换为 NumPy 数组旨在计算整个栅格行中的像元值的百分比。然后,将会创建一个新的栅格数据。

import arcpy
import numpy
my_array = arcpy.RasterToNumPyArray('C:/data/inRaster')
my_array_sum = my_array.sum(1)
my_array_sum.shape = (my_array.shape[0], 1)
my_array_perc = (my_array * 1.0) / my_array_sum
new_raster = arcpy.NumPyArrayToRaster(my_array_perc)
new_raster.save("C:/output/fgdb.gdb/PercentRaster")

只要将栅格数据转换成为NumPy矩阵数组,那么遥感影像的分割、分类、聚类、机器学习等都将成为可能。它内置有很多数学运算函数,支持大量高级的维度数组与矩阵运算,是大量机器学习框架的基础库。它通常与SciPy一起用于科学计算,某种程度上可以取代matlab。

SciPy模块组成:

模块功能
scipy.cluster矢量量化 / K-均值
scipy.constants物理和数学常数
scipy.fftpack傅里叶变换
scipy.integrate积分程序
scipy.interpolate插值
scipy.io数据输入输出
scipy.linalg线性代数程序
scipy.ndimagen维图像包
scipy.odr正交距离回归
scipy.optimize优化
scipy.signal信号处理
scipy.sparse稀疏矩阵
scipy.spatial空间数据结构和算法
scipy.special任何特殊数学函数
scipy.stats统计

元数据访问(或者说描述性数据访问)

地理信息数据类型多种多样,每种数据类型都有特定的属性,在实际使用过程中常常需要事先知道这些信息。arcpy中的describe函数就可以很好的实现这一点。describe函数可以识别很多数据集的类型,包括、要素类、要素数据集、数据库、栅格数据、栅格数据集、镶嵌数据集等等,同时,它返回一个多属性的describe对象,这个describe对象是动态的,它随着输入对象的改变而改变。

语法

Describe (value, {datatype})
参数说明数据类型

value

要描述的指定数据元素或地理处理对象。

String

datatype

数据的类型。仅当存在命名冲突(例如,如果地理数据库包含同名的要素数据集 (FeatureDataset) 和要素类 (FeatureClass))时需要此项。在这种情况下,数据类型将用于确定要描述的数据集。

(默认值为 None)

String

返回值

数据类型说明
Describe

返回的对象属性中包含被描述对象的详细信息。某些返回的对象属性会包含文本值或对象。

Describe 对象属性

属性说明数据类型
baseName

(只读)

文件基本名称

String
catalogPath

(只读)

数据路径

String
children

(只读)

子元素列表

Describe
childrenExpanded

(只读)

指示子元素是否已扩展

Boolean
dataElementType

(只读)

元素的元素类型

String
dataType

(只读)

元素类型

String
extension

(只读)

文件扩展名

String
file

(只读)

文件名称

String
fullPropsRetrieved

(只读)

指示是否已检索完整属性

Boolean
metadataRetrieved

(只读)

指示是否已检索元数据

Boolean
name

(只读)

元素的用户分配名称

String
path

(只读)

文件路径

String

常见数据类型子Describe对象属性有:

要素类属性

属性说明数据类型
featureType

(只读)

要素类的要素类型。

  • Simple —面、折线和点,表示具有面积的对象或地点(如水体); 线状对象(如河流)以及局部位置(如房屋或采样位点)。
  • SimpleJunction —几何网络中表示点对象的简单交汇点要素,例如,保险丝、供水点或者电话线杆。
  • SimpleEdge —几何网络中表示折线对象的简单边要素,例如,主要高架装置或次要高架装置。
  • ComplexEdge —几何网络中表示具有中跨连通性的折线对象的复杂边要素,如主要高架装置。网络资源可通过中跨连通性连续流过复杂边。
  • Annotation —地点或对象名称/标识符,例如,街道名称、消火栓 ID 号、土地价值或高程。
  • CoverageAnnotation —地点或对象名称/标识符,例如,街道名称、消火栓 ID 号、土地价值或高程。地理数据库不支持;仅受 coverage 数据集支持。
  • Dimension —测量值,例如,距离、长度、宽度和深度。
  • RasterCatalogItem —栅格目录中含有轮廓线、名称、元数据和其他用户定义属性等信息的栅格数据集。
String
hasM

(只读)

指示几何是否启用 m 值。

Boolean
hasZ

(只读)

指示几何是否启用 z 值。

Boolean
hasSpatialIndex

(只读)

指示要素类是否具有空间索引。

Boolean
shapeFieldName

(只读)

Shape 字段的名称。

String
shapeType

(只读)

几何形状类型。

  • 折线
  • 多点
  • 多面体
String

栅格数据集属性

属性说明数据类型
bandCount

(只读)

栅格数据集内的波段数。

Integer
compressionType

(只读)

压缩类型

  • CCITT Group 3
  • CCITT Group 4
  • CCITT (1D)
  • DEFLATE
  • Deflate/Inflate
  • JPEG
  • JPEG2000
  • LZW
  • LZ77
  • None
  • PACKBITS
  • RLE
  • VECTOR QUANTIZATION
  • Wavelet (MG2)
  • Wavelet (MG4)
  • YCbCr JPEG
String
format

(只读)

栅格格式

  • AAIGrid
  • BAG
  • BIL
  • BMP
  • BSQ
  • DTED 级别 1
  • DTED 级别 2
  • FGDBR
  • FLT
  • GIF
  • GRID
  • GRID Stack 7.x
  • HDF5Image
  • IMAGINE 图像
  • JFIF
  • JP2
  • MrSID
  • NITF
  • PNG
  • RPF
  • SDR
  • TIFF
  • TIL
  • USGSDEM
String
permanent

(只读)

指示栅格的永久状态:False 表示临时栅格;True 表示永久栅格。

Boolean
sensorType

(只读)

用于捕获图像的传感器类型。

String

表属性

属性说明数据类型
hasOID

(只读)

指示表是否包含 ObjectID 字段。

Boolean
OIDFieldName

(只读)

OID 字段(如果存在)名称。

String
fields

(只读)

此表的字段对象的 Python 列表。这与使用 ListFields 函数时相同。

Field
indexes

(只读)

此表的索引对象的 Python 列表。这与使用 ListIndexes 函数时相同。

Index

其他对象属性情况可参看describe函数:https://pro.arcgis.com/zh-cn/pro-app/arcpy/functions/describe.htm 

 

二、制作脚本工具

地理处理:制作地理处理工具

 

地理处理:制作地理处理模型

 

三、发布地理处理服务

地理处理:共享地理处理服务

 

 

不知这个需要写多久,估计也是像以前那篇关于坐标系的文章一样,断断续续需要个三年五载的。

 

 

附件:

argis中自带python其他站点包使用

1、将python和pip执行程序的路径添加进系统配置路径

检查argis中的python和pip是否可用

2、pip安装

     pypi是Python编程语言的软件存储库,PyPI可帮助您查找和安装Python社区开发和共享的软件。pip用于搜索、下载、管理、卸载PyPI上的Python包。

https://pypi.org/

搜索pip

也可以直接以链接官网下载pip包,地址是https://pypi.python.org/pypi/pip#downloads

      下载完成之后,解压到一个文件夹,用cmd进入这个解压好的文件夹,输入:Python setup.py install 

   

 再次检查站点是否可用,cmd中输入:pip

3 因国外站点pypi速度较慢,使用国内pypi镜像站点

站点如下:

阿里云 http://mirrors.aliyun.com/pypi/simple

中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple

豆瓣(douban) http://pypi.douban.com/simple

清华大学 https://pypi.tuna.tsinghua.edu.cn/simple

使用方法:

在pip下,执行以下命令,如下载request包

pip install request -i https://pypi.tuna.tsinghua.edu.cn/simple

会发现,网速果然比一起啊快了好多 
如果出现这是未信任的源,修改上述命令,如下:

pip install request -i https://pypi.tuna.tsinghua.edu.cn/simple 
- -trusted-host pypi.tuna.tsinghua.edu.cn

如果想使用其为默认源 
windows下可修改%HOMEPATH%\pip\pip.ini文件 
修改内容为: 
[global] 
index-url = https://pypi.tuna.tsinghua.edu.cn/simple 
[install] 
trusted-host=pypi.tuna.tsinghua.edu.cn
 

easy_install的安装:
1 在命令提示符或终端程序中执行“easy_install --version”检验在当前操作系统是否安装了easy_install.

C:\Users\liangxiang>easy_install --version
setuptools 28.8.0 from e:\python\lib\site-packages (Python 3.5)


2 若无前往https://pypi.python.org/pypi/ez_setup下载一个名叫ez_setup.py的程序。解压安装,方法:cmd进入到对应目录下(我的下载目录为E:\python\Lib\ez_setup-0.9),

执行命令:python ez_setup.py

C:\Users\liangxiang>e
 
E:\>cd E:\python\Lib\ez_setup-0.9
 
E:\python\Lib\ez_setup-0.9>python ez_setup.py
easy_install的用法:
1.0 通过库名安装(默认情况下安装最新版本)

easy_install 软件包名称
2.0安装指定版本

easy_install '软件包的名称==版本号'
3.0不指定版本号,要求某一个版本之前或之后的版本

easy_install '软件包名称<=版本号'
4.0安装已经下载的egg文件

easy_install /文件下载路径/egg文件名
5.0安装包卸载

easy_install -m 软件包名称
 6.0安装包更新

#默认最新版本
easy_install --upgrade 安装包名称 
easy_install -U 安装包名称       
#指定升级的版本
easy_install " 安装包名称==版本号"
easy_install " 安装包名称>版本号"
pip的安装:
1 若已经安装easy_install,直接用命令安装

easy_install install pip
2 若无,前往https://pypi.python.org/pypi/pip 下载pip-18.0.tar.gz 文件,解压下载的文件,进入解压后的文件夹中,调出命令行窗口或者终端,输入 python setup.py install

python setup.py install
3 检验pip是否安装成功

C:\Users\liangxiang>pip --version
pip 18.0 from e:\python\lib\site-packages\pip-18.0-py3.5.egg\pip (python 3.5)
 

pip的用法:
1.0  通过库名安装

pip install 软件包名称
2.0 安装指定版本

pip install "软件包名称==版号"
3.0 不指定版本号,要求某一个版本之前或之后的版本

pip install "软件包名称>=版号"
4.0软件包卸载

pip uninstall 软件包名称
5.0  列出所有安装的库

pip list  
pip freeze 
6.0 列出所有过期的库

pip list --outdated 
7.0 库更新

pip install --upgrade 库名 
 
pip install -U 库名
8.0 过期库批量更新/安装

pip freeze > xxxx.txt #导出当前系统安装的库,保存为TXT文件
( pip freeze > E:\\XXX.txt #保存到指定文件夹 )
pip install -r xxxx.txt
9.0 查询某一个库的相关信息

pip search 库名
10.0 其他高级功能,用help查询

pip help
 

寄语

很多时候我们对arcpy是望而却步的,不仅仅是因为它需要编码,而是我们对于地理信息很多本身的逻辑思维都不甚了解。比如,你可能听说过空间统计分析,但是你是否知道自相关系数、欧式距离、线性/非线性回归、聚类等知识,我们的回答常常是否定的。大凡一类事物都有他独有的规则和范围体系,当我们说到一类编程语言的时候,就势必涉及语法规则、数据类型、控制结构、编写环境,编译工具等等,当编程语言触及web网络时,也势必涉及网络七层协议、数据交换、https、css、端口号等等,当我们谈到地图服务的时候,又会涉及到网络地址、服务类型、坐标体系、分辨率、比例尺、旋转参数等等。arcpy也同样有它的规则和体系,它属于python的,必须符合python规则,它又是属于arcgis的,它也必须符合arcgis甚至于地理信息的一些规则。掌握这些规则的过程,也是提升我们自身的过程。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页