ArcGIS点数据统计分析工具开发2.docx
河南大学2016届毕业论文(设计、创作)任务书(应由学生本人认真誉写)论文提要:空间点对象的分布模式包括:随机分布、均匀分布和集中分布。我们可通过基于样 方计数和核密度估计的一阶效应分析,也可通过基于最近邻距离的二阶效应分析来探究 空间点的分布模式。本文主要介绍了基于Python脚本语言的开发ArcGIS点模式分析工 具箱的具体实现过程。课题任务要求:任何的事件对象都可以抽象为空间中的一个位置点,针对点状事件的空间点模式分 析的应用十分广泛。但是缺乏系统的统一化的工具来探究空间数据点的分布模式。在探 究空间点对象的分布模式时,我们可通过基于样方计数和核密度估计的一阶效应分析, 也可通过基于最近邻距离的二阶效应分析。本文主基于Python脚本语言开发ArcGIS点 模式分析工具箱,包括样方分析工具、核密度估计工具和最近邻距离工具。所开发工具 运行稳定、界面简单,使空间点模式分析工作自动化,使用户高效率地分析空间点对象 的分布模式。主要参考文献:1郑文峰,李晓璐等.基于空间点模式分析的地震空间分布集中趋势特性JL电子科技 大学学报.2015, 44 (4) : 557-562.2郭福涛,胡海清,马志海.应用空间点模式方法研究大兴安岭雷击火空间分布格局 J.生态学报.2009, 29(12) : 6741-6747.3姚艳豪,王志宇,马品等.基于点模式分析的地质灾害集聚特征及空间热点研究J. 淮阴师范学院学报.2016,15(1):43-50.4郭洁,吕永强,沈体雁.基于点模式分析的城市空间结构研究一一以北京都市区为例 J.经济地理.2015, 35 (8): 69-74.5魏小强.空间统计分析组件开发与应用研究D.北京:北京师范大学,2009.6赵永.地理信息分析M,北京:科学出版社.2013. 82-84.7田学志.基于python的地理处理应用研究J.智慧城市.2010:46-50.8方圣辉,张玉贤,佃袁勇等.基于Python的ArcGIS地理数据批处理J.测绘与空间地 理信息,2015, 38(1) : 1-2.9焦洋,邓鑫,李胜才.基于Python的ArcGIS空间数据格式批处理转换工具开发J .现 代测绘.2015, 35(3) : 54-55.10余冰,朱欣焰等.基于空间点模式分析的城市管理事件空间分布及演化一一以武汉 江汉区为例J ,地理科学进展.2013, 32(6) : 924-931.任务起止日期:2015年11月1日至2016年4月30日pnt=feat.getPart(O)y.append(pnt.Y) return y#获取各单元格中心点中各点的x坐标和y坐标的数组以及单元格中心的个数 layer l=nfish_label.shpnx_fish=getx(layer 1)y_fish=gety(layer 1) n_fish=len(x_fish)#获取原始点数据中各点各点的x坐标和y坐标的数组以及单元格中心的个数x = getx (layer) y = gety(layer)n =len(x)(4)使用While循环遍历各单元格中心点,内嵌While循环遍历原始点数据中的各点, 根据设置的核带宽r,判断原始点数据中落在以各个单元格中心点为圆心,核带宽为半 径的圆内的点的数目,并依据核密度估计公式:入=始生誓 计算各单元格的核密度口 nr2强度:#计算每单元格的核密度强度i = 0while i < n_fish:#遍历单元格中心点j 二。k = 0while j < n:#遍历原始数据各点dis=distance(x_fishi,xj,y_fishi,yj) if dis < r:k=k+lj=j+lp.叩 pend(k/(3. 14*r*r) i = i+1(5)依据得到的各单元的核密度强度,在CreateFishnet工具生成矢量化的网格数据的 属性表添加核密度强度字段p,并使用For循环遍历各单元格,更新其核密度强度字段值:# 给网格添加核密度强度字段 infeature="fish"field_name="p"arcpy.AddField_management(infeature,field_name,"DOUBLEn)# 为核密度强度字段赋值cursor=arcpy.da.UpdateCursor(infeature,field_name) i=0for row in cursor:row0=picursor.updateRow(row) i=i+l(6)依据网格数据的核密度强度字段,使用FeatureToRaster工具将矢量化的网格数据 转化为栅格数据:# 矢量数据转为格网数据arcpy.FeatureToRaster_conversion(infeature,field_name, outraster,Grid)自定义核密度估计工具箱在点模式分析工具中添加核密度估计的脚本工具(Kernel Density) o在Script File 设置关联的核密度估计的脚本文件;然后设置核密度估计的参数,包括输入型要素图层 数据Pointlayer、输出型栅格图层Output raster、输入型双精度数据Cellsize、输入型双精 度数据Search radius,参数设置界面如图5所示。最近邻距离分析脚本工具相应参数设置 完毕后,运行脚本工具,界面如图6所示。Add ScriptClick any parameter above to see its properties below.Display NameData TypePoint layerFeature LayerOutput rasterRaster LayerCellsi zeDoubleSearch radiusDoubleParameter PropertiesPropertyValue>TypeRequiredDirecti on MultiValue Default EnvironmentInput NoFilter NoneTo add a new parameter, type the name into an empty row in the name column, click in the Data Type column to choose a data type, then edit the Parameter Properties.上一步| Finish | 取消图5核密度估计参数设置口回 汉Kernel DensityCancel Environments. << Hide HelpTool Help4* Kernel Density Point layer圄 Output raster回 Cellsi ze Search radius图6核密度估计工具界面4. 3最近邻距离工具.3.1最近邻距离分析原理最近邻距离指的是该模式中某一事件与其最近的事件之间的距离。位于科和小的两 个事件之间的表示为距离d(ppj),其计算使用欧基里德距离:d(pPj) = & 修)2 + (力一%)2公式中,点pi和Pj的位置坐标分别为凶舟), (Xj,yj)o. 3. 2最近邻距离分析流程最近邻距离的处理思路为使用SearchCursor方法遍历各耍素点,获取其坐标位置, 从而遍历出与其最近的要素点及对应的距离。图7是本文基于点数据进行最近邻距离分 析的算法流程图。r?Fl ry 曰八 y /xrr dfi3. 3最近邻距离分析关键步骤源代码导入模块,并设置相关参数: import arcpy,os,sysfc=arcpy.GetParameter(O) 使用For循环遍历图层中各点,获取各点x坐标和y坐标的数组:x = #x坐标数组y = #y坐标数组desc=arcpy. Describe(fc) shapefieldname = desc.ShapeFieldName rows=arcpy.SearchCursor(fc) rows.reset() for row in rows:feat=row.getValue(shapefieldname)pnt=feat.getPart(O)x.append(pnt.X)y.append(pnt.Y)使用While循环遍历各要素点,搜索与其距离最近的要素点及其对应距离:# 定义计算两点之间距离的函数def distance(il ,i2,j 1 ,j2):d=math.sqrt(i 1 - *(i 1 -+(j 11 -j2)return d# 使用While循环遍历各要素点,对各要素点的最近邻点及其距离的初始值进行赋值 n=len(x)dmin = near = i = 0 while i < n:if i = 0:dmin.append(distance(xi,xl,yi,y 1) near.append(l) i=i+lcontinuedmin.append(distance(xi,xO,yi,y 0)near.append(O) i=i+l# 使用While循环遍历各要素点,搜索各要素点的最近邻点及其距离 d 二口i = 0j =1while i < n:while j < n:if l=j:d.append(O)if i !=j:d.append(distance(xi,xj,yli,y|j|)if dj-l < dmini: dmini = dj-l neari = jj =j+lwhile j >= 2:del dj-2 j=j-li=i+l(4)在点要素属性表中添加最近邻点字段和最近邻距离字段,使用For循环遍历图层 中各点,为最近邻字段和最短距离字段赋值:#属性表中添加最近邻点、最短距离字段field l_name=Hnear_pointnfield2_name=Hnear_disnarcpy.AddField_management(fc,fieldl_name,nSHORTH)arcpy.AddField_management(fc,field2_name,nDOUBLEH)#使用For循环遍历图层中各点,为最近邻字段和最短距离字段赋相应的值cursor=arcpy.da.UpdateCursor(fc,fieldl_name,field2_name) i = 0for row in cursor:row0J = nearirowl = dmini cursor.updateRow(row) i=i+l4. 3. 4自定义最近邻距离分析工具箱在点模式分析工具中添加样方分析的脚本工具(Nearest Distance)。在Script File设置关联的最近邻距离分析的脚本文件;然后设置样方分析的参数,包括输入型要素图层 数据Pointlayer,参数设置界面如图8所示。最近邻距离分析脚本工具相应参数设置完毕 后,运行脚本工具,界面如图9所示。区区Add Script图8最近邻距离分析参数设置回汉图9最近邻距离分析工具界面Naerest Distance5应用实例在ArcMap的ArcToolbox中添加点模式分析工具箱(Point Analysis.tbx),在ArcMap中即可直接调用相应工具进行分析。5.1样方分析工具应用使用大新庄东碑村地块数据进行样方分析。设置样方分析范围及单元格数,工具界 面如图10所示,运行工具,结果统计了每个单元格所包含的事件点的数量,结果如图11 所示。Quadrat AnalysisQuadrat Analysis口回 汉图10样方分析工具运行界面Quadrat AnalysisCompletedClose this dialog when completed successfullyExecuting: QuadratAnalysis 大新庄乡东碑村/ 地块 大新庄乡东碑村地块layer extent" 5Start Time: Wed Apr 27 21:23:14 2016 Running script QuadratAnalysis. 大新庄乡东碑村地块 Shape extent X: 38463946.737938464316.7371 'grid_0_01: 1, 'grid_0_l': 0, 'grid_0_ 2' : 0,_0rid_O_3, : 2 r grid_0_4 1 : 0, 1grid_3_41:grid_3_31:grid_3_2l: 17 7grid_3_l1: 27 "grid_3_01: 07 " 三 1grid_2_41: 0,grid_2_21: 0,"'grid_2_ 3,: 07 7grid_2_01: 07 7grid_2_l1: 07 " 1grid_4_41: 0, 'grid_4_01: 0, 1grid_4_ I1: 17 "grid_4_21: 17 "grid_4_3': 0二一 1 grid_l_l1 : 0r-'grid_l_01 : O'grid-l 3' : 07 7grid_l_2' : 07 7grid_l_4 1 : 0?" Completed script QuadratAnalysis.Succeeded at Wed Apr 27 21:23:14 2016 (Elapsed Time : 0.00 seconds)图11样方分析工具运行结果5. 2核密度估计工具应用使用某地气温数据进行核密度估计。设置栅格单元格大小及核密度分析的核带宽, 工具运行界面如图12所示,运行工具,分析结果如图13所示。Kernel DensityKernel Density口回 汉图12核密度估计工具运行界面图13核密度估计工具运行结果5. 3最近邻距离工具应用使用大新庄东碑村地块数据进行最近邻距离分析。设置最近邻距离分析图层,工具 界面如图14所示,运行工具,属性表中neajpoint和neajdis字段分别统计了距离各事 件点最近的事件点及其对应的距离,分析结果如图15所示。Naerest Distance次回图14最近邻距离分析工具运行界面TableFIDShape Idnear_pointnear_dis0Point0801Point0255. 009492Point0640. 9321873Point0460. 1491984Point0360.1491985Point0616.7892896Point0516.789289Point00%. 400048Point000大新庄乡东碑村地块胄(0 out of 9 Selected)大新庄乡东碑村地块图15最近邻距离分析工具运行结果5结束语空间点模式分析是空间统计分析的重要组成局部,探究出空间点的分布模式具有重 要的应用价值。本文基于Python开发ArcGIS工具箱的模式,开发了进行空间点模式分 析的工具:样方分析工具、核密度估计工具和最近邻距离分析工具。点模式分析工具基于ArcGISScripting框架,使用Python语言,开发ArcGIS工具 的基础路线是可行的。且工具运行稳定、界面简单,使空间点模式分析工作自动化,有 助于用户高效率地分析空间点对象的分布模式。参考文献:河南大学2016届毕业论文(设计、创作)中期进展情况检查表环境与规划学院题目名称:ArcGIS点数据统计分析工具开发姓名所学专业地理信息系统指导教师姓 名一、论文进展情况11月份开始查阅ArcGIS探索性空间统计资料,阅读相关书籍,确定论文方向;12 月份进行python语言及基于python开发ArcGIS工具箱的学习;1月份开始进行点模式 统计工具的开发;2月份开始书写初稿,此时初稿基本完成。二、存在问题任何的事件对象都可以抽象为空间中的一个位置点,针对点状事件的空间点模式分 析的应用十分广泛。但是缺乏系统的统一化的工具来探究空间数据点的分布模式。三、拟采取的研究方法和可行性分析在探究空间点对象的分布模式时,我们可通过基于样方计数和核密度估计的一阶效 应分析,也可通过基于最近邻距离的二阶效应分析。本文主基于Python脚本语言开发 ArcGIS点模式分析工具箱,包括样方分析工具、核密度估计工具和最近邻距离工具。该 工具运行稳定、界面简单,使空间点模式分析工作自动化,使用户高效率地分析空间点 对象的分布模式。四、指导教师对学生论文(设计、创作)进展等方面的评语指导教师签字:年 月 日此表除第四项外由学生填写指导教师签名 川郑文峰,李晓璐等.基于空间点模式分析的地震空间分布集中趋势特性J.电子科技大学学JR.2015,44(4):557-562.郭福涛,胡海清,马志海.应用空间点模式方法研究大兴安岭雷击火空间分布格局J.生态学报.2009,29(12):6741-6747.姚艳豪,王志宇,马品等.基于点模式分析的地质灾害集聚特征及空间热点研究J.淮阴师范学院学报.2016,15(1):43-50.4郭洁,吕永强,沈体雁.基于点模式分析的城市空间结构研究一一以北京都市区为例J.经济地 理.2015,35(8):69-74.5魏小强.空间统计分析组件开发与应用研究D.北京:北京师范大学,2009.赵永.地理信息分析M,北京:科学出版社.2013.82-84.田学志.基于python的地理处理应用研究J.智慧城市.2010:46-50.方圣辉,张玉贤,仙袁勇等.基于Pylhon的ArcGIS地理数据批处理J.测绘与空间地理信息,2015,38(1):129焦洋,邓鑫,李胜才.基于Python的ArcGIS空间数据格式批处理转换工具开发J.现代测绘.2015,35(3):54-55.10余冰,朱欣焰等.基于空间点模式分析的城市管理事件空间分布及演化一一以武汉江汉区为例J.地理 科学进展.2013,32(6):924-931.ArcGIS点数据统计分析工具开发摘 要:空间点模式分析应用广泛。可通过基于样方计数和核密度估计的一阶效应分析, 也可通过基于最近邻距离的二阶效应分析来探究空间点的分布模式。本文主要介绍了基 于Python脚本语言的开发ArcGIS点模式分析工具的具体实现过程。关键词:空间点模式;Python; ArcGIS1引言任何的事件对象都可以抽象为空间中的一个位置点,地理事件点的分布模式可划分 为:随机分布、均匀分布和聚集分布,而针对点状事件的空间点模式分析的应用十分广 泛。文献1基于空间点模式分析了地震的空间分布趋势川;文献2使用空间点模式分析确 定了大兴安岭地区雷击火的空间分格局;文献3使用空间点模式分析确定了保山市隆阳 区地质灾害的空间集聚特征叫文献4基于空间点模式分析方法研究了就业中心对不同产 业的集聚程度。在探究空间点事件的分布模式时,我们可以基于样方计数法、核密度估 计法进行一阶效应分析,同时可以基于最近邻距离分析法进行二阶效应分析。本文主要介绍了样方分析、核密度估计和最近邻距离分析的原理,基于Python语言 开发相应工具的算法流程,并给出了相应的主要代码,最后介绍了脚本工具界面中相应 参数的设置。2点模式分析空间数据分析与常规的统计数据分析不同,在经典统计学中,研究样本是相互独立 的,而空间对象在空间位置上都具有一定的相关性,他们在空间上的变化不是随机的, 且空间数据的研究结果可能会因研究尺度和研究单元的组合方式而发生改变。探索性数 据分析与常规的数据分析模式也有所不同,它防止了传统数据分析对数据模式、趋势和 关系的假设。探索性数据分析在没有先验假设的前提下,通过对数据的深入分析,最大 限度的洞察数据,揭示潜在结构,提取重要变量,探测奇异值,从而构成有检验价值的 假设。从20世纪90年代开始,广大地学研究者逐步把探索性数据分析方法应用到地理 数据的分析中,来完善和开展空间分析技术的理论和方法,从而形成了探索性数据分析 (Exploratory Data Analysis)这一领域。探索性空间统计分析可以用来概括空间数据的 性质,探索空间数据的模式,产生和地理数据相关的假设,并在地图上识别异常数据的 分布位置,已发现是否存在热点区域等。空间点模式分析是研究点状的地理实体或者事件的方法。点模式分析是探索性空间 分析的重要内容,因为任何的事件对象都可以抽象为空间中的一个位置点。地理事件点 的分布模式包括随机分布、均匀分布和聚集分布。对于空间点模式的一阶效应分析和二 阶效应分析,分别主要基于点密度和点距离的方法。当空间上过程的强度变化时,一阶 效应显著,事件间的绝对位置有决定作用,单位面积的事件数量在空间上有比拟清楚的 变化,强调用观测事件的空间密度估计,主要的分析方法有样方分析和核密度估计。样 方分析方法是记录各研究单元内的事件数量;核密度通过计数一个区域中的,或中心在 待估计位置的核中的事件数量进行估计。当二阶效应强烈时,位置之间存在相互作用, 事件间的相对位置和距离具有决定作用,这时增加和减少相邻事件之间距离的效果明显, 强调用事件之间的距离估计,主要的分析方法有K函数和基于最近邻距离的G函数和F 函数。最近邻距离指的是该模式中某一事件与其最近的事件之间的距离。平均最近邻距 离计算所有点最近邻距离的平均值;G函数基于事件间最近邻距离的频率分布不同;F 函数基于区域内任意位置点与事件间最近邻距离的频率分布;K函数基于事件间的所有 距离。3技术方案基于ArcGISScripting框架,使用Python语言,调入了 ArcPy站点包,编写工具代码; 在ArcCatalog中添加点模式分析工具箱,在Toolbox中添加脚本工具;将分析工具与 Python文件关联后,设置相应参数,完成工具界面设置;进而在ArcGIS中调用数据使用 工具进行分析,验证工具的可靠性。Python语言是一门简单而且强大的编程语言,又被称为脚本语言,可以作为ArcGIS 的脚本语言。ArcGIS 9开始使用脚本处理技术,支持包括Python、VBScript、JavaScript、 Jscritp和Perl在内的脚本语言。与系统语言C+和.NET等相比,脚本语言更加简洁。VBA 曾是ArcGIS应用最普遍的编程工具,但ArcGIS 10后,VBA不再作为ArcGIS的默认安 装程序,Python作为VBA的替代品被广泛使用。Python作为ArcGIS的脚本语言,具有以下优点:与C+、Visual Basic等高度结构 化的语言相比,语法简单,容易掌握;Python是一款开源软件;Python是一种解释性语 言,不需要编译可以直接运行,这使Python具有较强的可移植性;可伸缩性强,大型项 目或小型的一次性程序都可使用。ArcGIS 10引入了 ArcPy站点包,用来访问ArcGIS的地理处理功能。ArcPy是在 ArcGISScripting的基础上开展来的,继承了 ArcGISScripting的功能。通过Python调用 ArcPy站点包可以进行地理数据分析、数据转换等。在使用ArcPy之前,首先要先导入 ArcPy站点包。导入ArcPy站点包后,可以调用ArcGIS地理处理工具箱中的所有工具。ArcGIS 9.x版本已经引入Python工具箱,可实现自定义工具箱的功能,又便于创立 新的脚本工具。在ArcCatalog中添力口一个新的工具箱(New Toolbox),在Toolbox中添 加脚本工具(Add Script);将实现相应功能Python文件与该脚本工具进行关联,通过 Script File选取相应py文件;分析工具与Python文件关联后,设置相应参数,包括参数 的数据格式、输入输出类型等。工具界面设置完成后,就可在ArcToolbox中添加工具箱 (AddToolbox),在文件夹中选取相应的工具箱文件即可。4点模式分析工具开发样方分析工具4.1.1 样方分析原理样方分析方法是在一组固定大小的单元或样方内,记录各研究单元内的事件数量。 样方分析有两种计数方法,一种是对完全覆盖该研究区域的不重叠样方进行枚举检查, 另一种是在研究区域内随机设置样方并计算其事件数量。此处,我们开发的是基于枚举 检查的样方分析工具。4.1.2 样方分析流程样方分析的处理思路为根据网格行列数对网格进行编号,根据网格范围、网格数判 断数据点所在的网格,从而统计每个内的事件数量。图1是本文基于点数据进行样方分 析的算法流程图。图1样方分析流程图4.1.3 样方分析关键步骤源代码 导入模块,并设置相关参数:import arcpy, os, sys#点要素图层#边界图层#选取范围#格网范围layer = arcpy.GetParameter(O)layer2 = arcpy.GetParameterAsText( 1)extentType = arcpy.GetParameterAsText(2)nGrid = arcpy.GetParameter(3) 使用If选择语句设置网格的范围:if(extentType="Layer exrent"): ext=layer.getExtent()else:mxd = arcpy. mapping.MapDocument("CURRENT")df = arcpy.mapping.ListDataFrames(mxd)O ext = df.extent 根据网格范围和网格数目计算单元格的宽度和高度:dx = (ext.XMax - ext.XMin)/nGrid#单元格宽度dy = (ext.YMax - ext.YMin)/nGrid#单元格高度(4)使用SearchCursor方法获取各要素点,使用For循环遍历图层中各要素点,根据 单元格的宽度、高度,判断其所在的网格编号,从而统计各网格内的要素点数目:#使用For循环遍历各网格,将各网格内点要素的数目的初始值设置为零grids = for i in range(nGrid):for j in range(nGrid):gridsHgrid_n+str(i)+,_,+str(j)=O#使用For循环遍历各点,根据单元格的宽度、高度,判断其所在的网格的编号,以 此统计各网格内的要素点数目desc = arcpy.Describe(layer)shapefieldname = desc. S hapeFieldN amerows = arcpy.SearchCursor(layer)rows.reset()for row in rows:feat = row.getV alue(shapefieldname)pnt = feat.getPart(O)xidx = int (pnt.X-ext.XMin)/dx) #计算行的编号yidx = int (pnt.Y-ext.YMin)/dy) #计算列的编号#根据要素点的行列编号,使用If选择语句,判断其所在的网格的编号if xidx<0 or xidx>=nGrid:continueif yidx<0 or yidx>=nGrid: continuegrids"grid_"+str(xidx)+”_"+str(yidx) = grids"grid_"+str(xidx)+”_"+str(yidx) +1 del rows,rowarcpy.AddMessage(grids)自定义样方分析工具箱在ArcCatalog中添加一个点模式分析的工具箱(Point Analysis.tbx),在点模式分析 工具中添加样方分析的脚本工具(Quadrat Analysis) o在Script File设置关联的样方分析 脚本文件;然后设置样方分析的参数,包括输入型要素图层数据Point layer、输入型要素 图层数据Boundary layer>输入型字符串数据Extent、输入型长整型数据Grid (n*n),参数 设置界面如图2所示。样方分析脚本工具相应参数设置完毕后,运行脚本工具,界面如 图3所不。Add ScriptClick any parameter above to see its properties below.Display NameData TypePoint layerFeature LayerBoundary layerFeature LayertExtentStringGrid (n*n)Long4Parameter PropertiesPropertyValueTypeRequiredDirectionInputMultiValueNoDefault Environment FilterNone To add a new parameter, type the name into an empty row in the name column, click in the Data Type column to choose a data type, then edi t the Parameter Properties.上一步CB)Finish取消图2样方分析参数设置3* Quadrat AnalysisQuadratAnalysisTool Help Point layer圄 Boundary layer圄Extent layer extentGrid (n*n)10川|Cancel Environments. << Hide Help图3样方分析工具界面4. 2核密度估计工具核密度估计原理核密度估计是在样方分析的基础上开展而来的,与样方分析相比,核密度估计的优 点在于,它考虑了研究区域中各点之间的关系。研究范围内的任一点都有一个密度,不 只是在有事件发生的位置上,核密度通过计数一个区域中的,或中心在待估计位置的核 中的事件数量进行估计。核密度估计的最简单的方法是在估计的位置上使用一个圆,然 后计数圆内的事件点的数目,然后用事件点的数目除以圆的面积。于是在点p有了一个核密度强度估计。核密度强度估计。#(SGC(p,r)p nr2其中,C(p,r)是中心在感兴趣点p,半径为r的圆。在核密度估计中,核带宽的选择 具有重要影响。如果带宽选择过大,估计的密度就会处处相似,且接近于整个模式的平 均密度。但是如果带宽太小,估计结果就会强调单个事件,在远离事件的位置上,核密 度为零口 °】。4. 2. 2核密度估计流程核密度估计的处理流程为根据点数据范围生成网格,判断以各网格为圆心,以带宽 为半径的圆内的事件的数量,然后除以圆的半径,从而求取每个单元格的核密度,进而 获得整个外表的核密度。图4是本文基于点数据进行核密度估计的算法流程图。图4核密度估计流程图5. 2. 3核密度估计关键步骤源代码导入模块,并设置相关参数:import arcpy, os, syslayer = arcpy.GetParameter(O)#输入点要素图层outraster = arcpy.GetParameter( 1) #输出栅格图层cellsize = arcpy.GetParameter(2)#栅格图层 的单元格大小#核带宽r = arcpy. GetParameter(3) 依据原始点要素图层范围和设置的输入单元格大小参数,使用CreateFishnet工具 生成矢量化的网格数据和各单元的中心点数据:# 设置网格生成范围mxd=arcpy.mapping.MapDocument(nCURRENTH) df=arcpy.mapping.ListDataFrames(mxd)O ext=df.extent# 设置CreateFishnet方法的相应参数outfeatureclass=nE:/pythoexc/wwq.gdb/fishnetnorigincoordinate=arcpy.Point(ext.XMin,ext.YMin) yaxiscoordinate=arcpy.Point(ext.XMin,ext.YMax) cellsizewidth = cellsize cellsizeheight = cellsize numrows = 0 numcolum = 0oppositecoornor=arcpy.Point(ext.XMax,ext.YMax) labels = true'templateExtent = >#'geometryType ='POLYGON'# 调用 CreateFishnet 方法arcpy.CreateFishnet_management(outfeatureclass,origincoordinate,yaxiscoordinate,cellsiz ewidth,cellsizeheight,numrows,numcolum,oppositecoornor,labels,templateExtent,geometryTyp e)使用For循环分别遍历原始点数据中的各要素点和各单元格的中心点,分别获取 原始点数据和单元格中心点数据中各点的x坐标和y坐标的数组:# 定义获取图层中各点x坐标的数组的函数def getx(layer):desc=arcpy.Describe(layer)shapefieldname = desc.ShapeFieldName x=rows=arcpy.SearchCursor(layer)rows.reset()for row in rows:feat=row.getValue(shapefieldname)pnt=feat.getPart(O) x.append(pnt.X) return x# 定义获取图层中各点y坐标的数组的函数def gety (layer):desc=arcpy.Desc