使用Python进行空间数据处理与分析_第1页
使用Python进行空间数据处理与分析_第2页
使用Python进行空间数据处理与分析_第3页
使用Python进行空间数据处理与分析_第4页
使用Python进行空间数据处理与分析_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

uc

ApplyingTheScienceofWhere

2017年第十五届Esri中国用户大会

欢迎您

使用Python进行空间数据处理和分析

Esri(中国)信息技术有限公司

张舵

Jesri9以他

TMfSCACMCfOfWHIM"

大纲

Python是什么

在ArcGIS中使用Python

案例演示

扩展内容

China

UUlFiG

1

Python

g?esri£fena

Python是什么?

•Python是一种面向对象、直译式计算机程序设计语言,也是一种

功能强大而完善的通用型语言,创始人为GuidovanRossum(吉

多・范罗苏姆)。

1989年圣诞节期间,在阿姆斯特丹,Guido

为了打发圣诞节的无趣,决心开发一个新的

脚本解释程序-Python

Ghsrichina

THESOENCEOFWHERF

为什么使用Python

・易于学习,非常适合初学者,也特别适合专家使用

・可伸缩程度高,适于大型项目或小型的一次性程序

•可移植,跨平台

・免费开源

•可嵌入(使ArcGIS可脚本化)

•与ArcGIS深度集成

・稳定成熟

・用户社区规模大

・胶水语言

•丰富的库

China

2

在ArcGIS中使用Python

Resri9顾a

-TMfSCIiMCffOfWHCltf

在ArcGIS使fflPython

•Python在ArcGIS9.0版本中被引入到ArcGIS产品

•Esri已将Python完全纳入ArcGIS中,与ArcGIS深度集成

・已成为ArcGIS推荐使用的脚本语言

WhatOptionsDoIHavefor

ScriptingArcGISwithPython?

TheArcGISplatformprovidestwotechnologiesforscripting

andautomation:

•ArcGISAPIforPython

,ArcPy

TheArcGISAPIforPythonandArcPycanbeusedindividually

ortogethertopoweryourGISneeds.

BEJING

THESCONCEOF

ArcGISPythonAPI的发展历程

基于dispatch自动化制图

arcgisscriptinarcgisscriptinPython2.7数据访问

geoprocessorArcPy站点

Python2.1g第三方包空间分析Python

Python2.4Python2.5

Python2.63.4

ArcGISArcGISArcGIS

9.0/9.19.29.3

ArcGIS中Python的用法

1.字段计算器2.制作gp工具

字段计算器InsertPointCD

解析程序

CKB叨木©Pythondatapath

I):pylbon制作工具并发布成GP服务\dala\point.shp

字段:功能(U)回

.oonjucjateOAjd

◎数字.denoninator)

.imagC

O字符串(D.numeotocO)

O日期ID;ffijSege<_r8toO)

38

厮,hexT°

m*mc

.isintegerQfirstPoint

math.acos()

math.acosh()

math.asin()V

。必示代码块.

/4♦•X

旗理班的本代码:

M90tVabe(a.b):

if(a-b):retum1

elsere(urn0

gelVabe(!al.tbf)

Ias11取消]I环境…]匚反示帮助>o

耻漂独得”

Chiha

、王开宜玄面THESCIENCEOFWHERE

ArcGIS中Python的用法

4.PythonAdd-in

3.模型构建器

ACMJIKOjxions

45by:Ewi

+端够*DMC

C.p-inade«r^cnkxth&Addiiv.-■1.0

吩3隧MUYNone

AEtepAddSe田T>pcinadcKfi|MkwifixMAdd-in.

+C«tedby.Esni

Or.pemacfe&cpwiftrthsAckinTyp®:

flCorTiTTrct

NC#vj:ofy:A*M-lnCcocnM%

AitfTme

+C-cuicdby:Ew

o\^AX^TITOMenEd>ngFeatureAiftxn©

O®♦隹二FGJB

1<IiiMtAllAdd-ln>andcann“iuctheu*crintcrfiK«

oHhAddIncomponenlMMCtbecuUomt/cdialog.

5.Pythonwindow3

»imparlarcpx.计

・fo^s=ajcpy.SearchCursor(test)

.r<>u=rouxnexm

uniqucLisl=[]参数②

''•'''Vfnrow.getyalue("namer)notinuniqueList:

uni.gueUst|jpnd(row.getValue(,'naniel*));

roweax)egeW\firri(arcc^randC1nteger14')

-f0r小JJ^ainq时犍叫"㈣):代码块

/沙namcM"।孤,।川5+T

cur-arcpy.UpdateCursorC'test".str)fwind==i:

return'north'

tnrrovKincur:fwind==2:

count+=l

row.id=countreturn'east'

cur.updatcRow(row)fwind==3:

return'south'

数据类型

Variant

L确定_I

ArcGIS中Python的用法

5.在ArcGISforServer中使用python

TogramFiles\ArcGIS\Server\tools\adnin>manageservice.py_

:e:manageservice.py[-h]-uUSERNAME-pPASSWORD-sSITE[-nNAME]

[-o{status,start5stop,delete}][-1]

6.在PortaVonline中使用python

>:\>pythonprepareEsriBaseniapsForOfflinelse.py/arcgismahw1022mahw1022

Esage:prepareEsriBasemapsForOfflinelse.py[-h]-uPORTAL-oPORTALADMIN-s

PORTALPASSWORD-aAGOADMIN-p

AGOPASSWORD[-fFOLDER

Chine

THESCIENCEOFWHERE''

ArcPy介绍

Arcpy——为用户提供了使用Python语言操作所有地理处理

工具(包括扩展模块)的入口,并提供了多种有用的函数

和类,以用于处理和访问GIS数据。使用Python和ArcPy,

可以开发出大量的用于处理地理数据的实用程序。

arcpy.daarcpy.mappiarcpy.saarcpy.na

ng

ArcPy的函数

环境和.

设置

描述数•字段

据,ArcGIS

数据存:

常规地理数Online

储/Portal

.列出数

/——M几何■据库管

获取设.

•栅格间

许可授\•消息和置参数

、-----7权和安・错误处

装■理.

.日志历•发布,

Shina

THESCIENCEOFWHERE

ArcPy函数

hiportarcpy

•CursorQli^)ows=arcpy.InsertCur$orKnc:/data.gdb/roads_lutn]

-SearchCursor(查询游标)row=rows.newRow()

row.setValue("rowid",x)

■Insertcursor(插入游标)row.setValue("distance”,100)

rows.insertRow(row)

HJpdateCursor(更新方钵示)lelrow

leirows

importarcpy

rows=arcpy.SearchCursor(

,'c:/data/counties.shp,\fields="NAME;STATE_NAME")

forrowinrows:

print("state:{0},County:{1},Population:{2}".foririat(

ix)w.getValue("STATE_NAME"),

row.getValueC'NAME"),

row.getValue("POP2000")))

h,匚SCONCEOFWHERE

ArcPy函数

arcpy.Describe)

返回数据要素的相关属性

Tables,FeatureClasses,Geodatabases,

Rasters,Coverage,LayerFiles,

RelationshipClasses,Workspaces,

Datasets,FeatureLayersJableViews

importarcpy

#Getthefeatureclasstodescribe(i.e.nC:/Data/airport.gdb/runwaysn)

featureClass=arcpy.GetParameterAsText(O)

desc=arcpy.Describe(featureClass)

#Printselectedfeatureclassproperties

printHshapeType",desc.shapeType

print''hasSpatiallndex^^esc.hasSpatiallndex

print"extentXMinn,desc.extent.XMm

printuextentYMax",desc.extent.YMax

print"thefirstfield'sname1',desc.fields[0].name

print"thefirstfield'stype1',desc.fields[0].type

ArcPy函数

arcpy.ListXXX函数

列出数据

ListDatasets

遍历要素类、表格、栅格等数据

ListFeatureClasses

-返回结果是一个集合

ListFields

ListFiles

ListIndexes

ListRasters

#Settheworkspaceenvironment

z

arcpy.env.workspace='c:/data/leGDB.gdb/fds'ListTables

^outputworkspacetowritetoListVersions

•out_workspace'c:/data/output.gdb'

ListWorkspaces

#Getalistofallfeatureclasses

•featureclasses=arcpy.ListFeatureclasses()

#CHpeachfeatureclasses

,forfcinfeatureclasses:

outputos.path.join(out_workspace,'{}clip.format(fc))

arcpy.Clip_analysis(fc,boundary,output)

richina

OFWHERW

ArcPy类

Cursor,游标

E____________________I

Exceptions|异常

IFeatureSets/r|要素和记录

IRecordSets」i____;___

ArcPy类Fields字段信息

什么情况下使用Python?

1.现有工具实现不了,可以用python

2.流程化需要时,可以使用python

3.需求灵活,需要快速试错

3

案例演示

@esri⑨惊

THfSCIfMCffOfWH£Rf

案例演示:

J矢量数据

♦栅格数据

Chine

THESCIENCEOFWHERE

矢量数据处理都做什么?

派生

演示1:统计

统计每个县不同地块类型的面积

无标题ArcWap□X

EileEditViewBookmarksInsertSelectionGecptocesstigCustomizeWindowsHelp

]修牯2皂xPC一:Editor*•

TabteOfContents1/

母图

Layers

日0「

1徜ottierva*ues>

DLLEI

■Dili

1次

■⑶

■0H1

■D171

■0210

■0220

■0230

□)25(i

■1631

・网

662428.3814161569.996Meters

importos,sys,arcpyresult.txt-记事本

f=open(r,D:\2017UC\Demo\Demol\result.txt\'w,)

rows=arcpy.SearchCursor(,testdata')文件(R)|购(E)格式(O)查看M帮助(H)

row=rousne\i()4032302301.69

unK]ueList=(L])403230210796.85

uniquel.istDIJECTI=[n]4032301114.91

whilc.„row:_../„_....4032301411942.68

ifrow.getValuelXZTIANKTHX)notinumqueTList:403230171501.66

H>4032302202823.98

uniqueListappend!ro\v.getValue("XIAN));03230131827.45

row=rowsnext()32316315.0

Fforiinran即“OJen(uniqueLisl)):

v03230250859.64

filter=uniqueList|],032301205.79

=(!03231633178.07

curarcpyearchCursor^^stda[a»xian)

forrow2incur:

whilegetValue(nDI_LEI")notinuniqueListDILEI:

uniqueListDILEI.appena(row2.getValue(,,DI_LEI"))

row2=cur.ncxt()

1需枷tDIL晒5"皿阶

dilei="'DI_LEr"+"=',+…+flt+,,"+"AND',+xian

print(dilei+"H)

searchcur=arcpy.SearchCursor("testdata".dilei)

value=0.0

.—wl^eSo哂暨2叫efMIANJI")

print(value)

.f.writelines([filter+",(,flt+",,,,as,&value+"\n"])

xt.close(A)

Shina

演示2:过滤

空间数据随机抽取

tarn

・m_■

・Eq

wlr.是

?■rar

?JP:»T«I・I

--------■・■・,・・R・・・一,C若:建管弑瞿装到2A■」K

万M・V・■■■”■“■三m・

・5

■・・丁・••・■・,■.W,U.IG—Y/■」£:,•1/

i丁・NA^・S

ziW匕•■♦,乎■!?>■,■二£■:■余"当■岂,

■u

importarcpyndom

A=random^-sample(range(1673),50)

value=tn

Fforiinrange(0,50):

ifi==49:

value+='FID='+'Sd'。(A[i])

else:

Tvalue+='FID二'+'Sd'%(A[i])+〃0R"

arcpy.SelectLayerByAttribute_management(HRange,'/'ADD_TO_SELECTIONn,value)

演示3:转换

坐标串转面

BC口importxlrd,xlwt,arcpy

类型

名称x11spathA2017UC\imiAD.xo3\Lot.xls

112.655,36.252;113.335,35.609;112.536,34.维陌x坳歌媪嬴雕勰翱懒东获取

地块1耕地872:111.889,35.414:112.655,36.252

112.655,36.252:113.393,37.047;114.078,36.cols=table.colvalues(3)

林地300;113.335,35.609;112.655,36.252

地块2nrows=table.nrows

113.393,37.047:114.117,37.890;115.038,37.point=arcpy.Point()

荒地182J14.078,36.300:113,393,37.047

地块3array=arcpy.Array()

114,117,37.890;114.789,38.718:115.755,37.

耕地polygonGeometryList=[]

地块4999:115.038,37.182:114.117,37.890cur=arcpy.InsertCursor(

113.335,35.609:114.168,34.881;113.307,34.nn

地块5耕地168;112.536,34.872;113.335,35.609rD:\2017UC\Demo\Demo3\data\polygon.shp)

115.038,37.182:115.921,36.283;114.892,35.aforiinrange(l,nrows):

地块6荒地495;114.078,36.300;115.038,37.182str=table.cell(i,3).value

115.038,37.182:115.921,36.283;114.892,35.name=table.cell(i,2).value

地块7赧495;114.078,36.300:115.038,37.182points=str.spHl(';')

114.408,32.875:115.565,33.896;116.570,32.forjinpoints:

耕地

地块8936;115.215,31.642;114.408,32.875xy=j.split(';)

115.565,33.896;117.255,35.495;118.154,34.printxy[0

地块9耕地490;116.570,32.936;115.565,33.896

printxy[l

print'\n'

point.X=float(xy[0])

point.Y=tloat(xyllJ)

array.add(point).

row=cur.newRow()|

row.shapearray

row.namename

anay.removeAll()

cur.insertRow(row)

delCUr

演示4:变更

记录地块权属人变更的要素(字段计算器)

国▼髯▼届励口邮大、土地变更前权属人

地块Copy土地变更后权属人

FIDShape不yni.vi.xT承包人

上.Polygon0

Polygon水浇一李四0

水浇

£PolygonJI0

3±°》gon水浇李四

,IPolygon吴瑞史瑞

判断土地权属人是否变化,不变则Mark

5李四吴瑞

6Porjpfi水浇李四值为1,否则为0

7Polygon张三

-

8PoJigon水浇李四李四-------------------------0

9水浇舞李伟一0

10Eol;ygon水浇李四李四0

水浇

•>Polygon士九王五0

天瑞

12Polygon水浇吴瑞0

水浇

13Polygon天土而0

水流

HPolygon李小红李小红0

13Polygon水浇李小红李小红0

16Polygon7健李四李四0

李四

17Polygon______水浇______场0V

4八”小m

>

4►IH-(0outof225Selected)

地块Copy

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论