加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

基于WebService的样方分析设计与实现

发布时间:2020-12-16 23:25:09 所属栏目:安全 来源:网络整理
导读:本科毕设做的是样方分析的web服务设计与实现,这篇博客我主要讲后台,及WebService部分的实现,至于前台就不讲了。 样方分析功能本身有很多问题,我想这也就是ArcGIS没有提供这个功能的原因,且这块网上资料也难找,这就是我写这篇博客的原因。原理资料请点

本科毕设做的是样方分析的web服务设计与实现,这篇博客我主要讲后台,及WebService部分的实现,至于前台就不讲了。

样方分析功能本身有很多问题,我想这也就是ArcGIS没有提供这个功能的原因,且这块网上资料也难找,这就是我写这篇博客的原因。原理资料请点击这里。里面不仅有样方分析原理资料,还有一个样方分析桌面版程序(应老师要求,讲样方分析改写了一个桌面版供后来学生学习)。这个程序开发环境是:VS2010+GDAL64bit.

在地图上,居名点、商店、旅游景点、流行病、犯罪现场、交通事故发生地等都表现为点的特征,有些是具体的地理实体对象,有些则是曾经发生的事件的地点。根据这些实体或事件的空间位置研究其分布模式的方法称为空间点模式。

点在空间上的分布千变万化,但不会超出从均匀到集中的模式。一般将点模式分为三种基本类型:聚集分布、随机分布、均匀分布。那么研究区域内点集对象或事件分布模式的基本问题就是这些对象或事件的分布是随机的、均匀的、还是聚集的?从统计学的角度来说,地理现象或事件出现在空间任意位置都是有可能的。如果没有某种力量或者机制来“安排”事件的出现,那么分布最有可能是随机分布的,否则将以规则或者聚集的模式出现。

研究这些地理对象或事件(点)的空间分布模式对于城市规划、服务设施布局、商业选址、流行病的控制等具有重要的作用。比如以森林中受虫害侵袭的树木的位置为例,如果受灾树木的分布呈聚集态势,我们就可以据此进一步调查感染源;反之,则表明感染源可能不止一个,或病虫害的传播可能受其他因素影响。

空间模式的研究一般是基于所有观测点事件在地图上的分布,也可以是样本点的模式。 点模式关心的是空间点分布的聚集性和分散性问题,地理学家在研究过程中发展了两类点模式分析方法: (1)以聚集性为基础的基于密度的方法: 主要有样方计数法和核函数方法两种; (2)以分散性为基础的基于距离的技术: 通过测度最近邻点的距离分析点的空间分布模式,主要包括最邻近指数、G-函数、F-函数、K-函数方法等。

样方计数法也叫样方分析。

基本思想

通过空间上点分布密度的变化探索空间分布模式,一般使用随机分布模式作为理论上的标准分布,将QA(QuadratAnalysis)计算的点密度和理论分布做比较,判断点模式属于聚集分布、均匀分布还是随机分布。

这类分析中所使用的网格被称为样方,其实也就是空间统计学中所说的抽样单元,也就是说用样方作为抽样单元来确定研究区域内不同位置的分布密度1

样方形状

样方并非一定是正方形,圆形、六边形等其他几何形状。只要适合所研究的空间现象,都可以作为样方。但用得较多的还是正方形,因为正方形能够完全覆盖整个研究区域。然而正方形从几何上看并不紧凑,因此有些研究会使用紧凑的形状--圆形,但是圆形无法覆盖整个研究区域,除非允许它们重叠。还有一种选择是六边形,六边形在地理学文献中用得比较多,尤其是在涉及中心地理论的文献中。六边形比正方形紧凑,而且可以无重叠地覆盖整个研究区域。不管怎样,在任何一项分析中,样方的形状和尺寸必须始终不变。也就是说,如果选择了正方形,那么在整个研究中,就必须始终使用正方形,并且正方形的大小必须始终如一1。因为正方形便于计算和实现,所以本文采用的是正方形。


样方大小

不仅样方形状会影响到点的观测频次和分布,样方的大小也会影响到点的观测频次和分布。在进行样方分析的时候,样方分析的大小是需要认真考虑的问题。如果样方选得太小(图2.2),就会使得很多样方中点数为0;如果选择的样方过大,又会使得样方中点的数量趋于相同(图2.3);如果选择的样方使得大多数样方至少含有一个点且样方中点的数量又有一定的阶梯变化,那么这个样方是合适的。


那么到底样方取多大才是合适的呢?根据Greig-Smith实验(Greig-Smith,1952)与随后的Taylor(1977)及Griffithand Amrhein(1911)的研究,样方的最优尺寸可如下计算:

size=2A/r ? ? ?

其中,size是样方的面积,A为研究区域面积,r为点的个数1。该式表明,对于正方形样方来说,边长为比较合适,对于圆形样方来说,半径等于比较适合。据此,我们还可以得出,当正方形样方的尺寸达到最优时,样方的数量n大约等于r/2。推导过程如下:

n*size=A =>?n*2A/r=A ?=> ?n=r/2

根据上面式子推导,n应该总是等于r/2,为什么我们说约等于r/2呢?这是因为,当样方取最优尺寸时,样方在分析区域x和y方向上求得的个数往往不是整数,但是样方分析要求格网要完全覆盖分析区域。所以,我们就要在x,y方向上取整数,那么n*size往往大于分析区域面积A。所以我们说是大约等于。

根据上面所讲述的我们已经确定了样方形状和样方最优尺寸,那么接下来我们就可以对点进行样方分析了。

一般过程

样方分析法的概念和步骤相对来说比较简单和直观。样方分析一般可分为以下四个步骤:

(1)将研究区域划分为规则的正方形网格区域;

(2)统计落入每个网格中点的数量。由于点在空间上分布的疏密性,有的网格中点的数量多,有的网格中点的数量少,有的网格中点的数量甚至为零;

(3)统计出包含不同数量点的网格数量的频率分布。

(4)将观测得到的频率分布和已知的频率分布或理论上的随机分布(如泊松分布)作比较,判断点模式的类型。

假设检验

我们采用t检验方法,这部分内容参见“ArcView GIS?与ArcGIS?地理信息统计分析_(美)戴维·W·S·黄,杰·李著”一书。

接口设计

既然样方分析是对研究区域内的点进行分析,那么样方分析功能的数据输入自然包括点数据和分析范围。对于点数据的输入则很简单,只需给定点shapefile数据在服务器上的绝对路径即可。但是,分析范围的输入方式就不止一种了。比如用户可以输入分析范围的左下角和右上角坐标,也可以指定一个shapefile,将其属性Extent作为分析范围,或者直接利用点shapefile的Extent属性作为分析范围等等。

?考虑到输入多样性,本文设计了三个WebMethod:

1)样方分析WebMethod1

输入:InputPointFile

????? minX,minY,maxX,maxY

2)样方分析WebMethod2

输入:InputPointFile

InputSHPFile

3)样方分析WebMethod3

输入:InputPointFile

其中,InputPointFile表示的点数据在服务器上的绝对路径;样方分析WebMethod1中minX,minY和maxX,maxY分别表示分析范围的左下角和右上角坐标;样方分析WebMethod2中InputSHPFile表示作为分析范围的SHP数据在服务器上的绝对路径;那么,样方分析WebMethod3则是利用点shapefile的Extent属性作为分析范围。

样方分析输入参数已经确定,接下来确定输出参数。三个WebMethod虽然输入参数不一样,但是输出参数是一样的。

既然是样方分析,那么输出结果中肯定要包含最终的结论,即点的分布类

型。同时样方分析过程中会产生一些文件,比如绘制的格网shapefile文件和存储统计信息的XML文件,然后为了便于下载对文件进行压缩产生的文件等。所以这些文件存放路径也需要输出,便于服务调用者后续操作。

另外,服务在运行过程中可能出现错误,导致服务非正常结束,那么输出参数中有必要包含错误信息和服务是否运行成功的信息。由于输出参数过多,本位在输出设计时,就设计了一个类,类中包含所要输出的参数,详细输出参数如下:

Class ResultMessage

{

???????? stringJobId;// 30位随机唯一编码

???????? stringErrorMessage;

???????? stringOutputStatisticPath;

???????? stringOutputGridShpPath;

???????? stringCompressFilePath;

???????? doubleValueT;

???????? intAllPnum;

???????? intAllQnum;

???????? boolIsSuccessful;

???????? stringDistributePattern;

???????? int[]Statistic;

}

这里有必要对参数进行一下说明:

JobId: 随机生成的30个字符,用于文件夹的命名

????????????? ErrorMessage:错误信息

????????????? OutputStatisticPath:包含统计信息的XML文件存放路径

????????????? OutputGridShpPath:格网存放路径

????????????? CompressFilePath:压缩后的文件存放路径

????????????? ValueT:t检验中所计算的t值

????????????? AllPnum:待分析的点总数

????????????? AllQnum:样方总数

????????????? IsSuccessful:样方分析是否成功

????????????? DistributePattern:所计算的点的分布模式

????????????? []Statistic:统计信息


本文前面已经提及,Web Service会生成XML文件。那么XML的文件结构是怎样的呢?因为XML文件记录的是统计信息,即点数和含有此点数的样方数,文件内容很简单,所以对应文件结构很简单。本文设计的XML文件结构如下:

<Statistics>

<PQuadratNum>

<Pnumber> number </Pnumber>

<Qnumber> number </Qnumber>

</PQuadratNum>

<PQuadratNum>

<Pnumber> number </Pnumber>

<Qnumber> number </Qnumber>

</PQuadratNum>

......

</Statistics>


功能设计

本文将样方分析的流程分为几个步骤,一个步骤对应一个功能。一个功能一般由一到两个函数完成。大体分为以下几个功能:

1)获取点数AllPnum

2)计算样方数AllQnum(row*col)

3)画格网Grid.shp

4)统计每个样方中的点数

5)统计含0、1、2…个点的样方数Statistic

6)计算t值判定分布模式

需要说明的是,计算样方数的时候,我们不是直接计算样方总数,而是计

算行和列上样方数。计算方法是,用分析区域边长除以最优样方边长,然后分别得到分析区域行和列上格网数,两者相乘就是样方总数。为什么不直接计算样方总数呢?因为直接计算样方总数没有意义,比如我们求得样方总数为48,那么绘制格网时,是绘制4*12的格网还是6*8的格网呢?无法根据样方总数来绘制格网。

整个功能流程图如下图所示:


功能实现

GDAL是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。本文主要用到GDAL的一个分支OGR。OGR与GDAL类似,只不过它是对矢量数据的支持。

OGR所提供的功能使用起来跟使用AE类似。比如获取一个图层的要素数目可使用GetFeatureCount()方法,获取图层范围可调用其GetExtent()方法,通过空间过滤筛选要素可使用SetSpatialFilterRect()方法,等等。有了AE开发的经验使用GDAL起来很简单。但是GDAL有个缺点就是它对中文的支持很不好,所以在输入路径参数时最好不要包含中文,否则,程序多半因异常退出。

本节接下来重点讲述各个功能的实现方法。

1)获取点总数AllPnum

根据输入的点路径调用OGR读取shapefile文件的函数read()方法,然后返

回类DataSource类型的值。紧接着,调用类DataSource的GetLayerByIndex()方法获取一个图层。最后调用图层的GetFeatureCount()方法获取点总数AllPnum。

2)计算样方数AllQnum(row*col)

为了计算样方尺寸,需要知道分析区域面积。而分析区域的来源可能是坐

标,也可能是shapefile文件。如果是坐标那就很好办,直接利用坐标来计算分析区域面积,如果是shapefile文件,那么需要读取这个文件以获取其Extent属性,然后计算分析区域面积A。

?????? 获得了分析区域面积后,就可以根据公式计算最优样方尺寸L了。接下来由分析区域边长除以L得到分析区域行和列方向上样方数row和col。那么,样方数AllQnum则为row*col。这里需要注意的是,由于分析区域边长除以样方边长L不一定是整数,如果为浮点数,那么为了格网能覆盖整个研究区域需要取大于等于row和col的最小整数。

3)绘制格网Grid.shp

因为这个功能会产生文件,且要存储在服务器上。那么生成shapefile文件

之前需要判定存储位置是否存在同名的shapefile文件,如果存在同名文件则需将其删除。

可是这里就存在一个问题,shapefile文件包含dbf、shp、shx、prj等格式的多个同名文件。对shapefile进行删除的时候岂不是要对文件夹下所有文件进行判断然后决定是否删除?如果文件夹下文件很多,那么这个过程就会耗费很多时间,使得程序效率低下。幸好,GDAL帮我们解决了这样一个问题。GDAL提供了删除数据源的方法—DeleteDataSource()。只需指定shapefile文件中shp格式的文件绝对路径,即可删除整个shapefile文件。

?????? 紧接着,利用CreateLayer()方法创建图层。创建图层就需要考虑设置空间参考的问题。如果不考虑格网与点数据在一起显示的问题,我们完全不必在意格网空间参考的问题,因为其对于整个样方分析没有影响。但是,为了使格网和点叠加在一起显示能够一起显示,本文将格网的空间参考设置为与点一样的空间参考。

?????? 以上准备工作做完后,就可以开始创建正方形要素了,即样方。这部分主体程序是两个嵌套的for循环。循环里先创建一个要素,然后创建一个Geometry对象,并创建一个由5对坐标表示的正方形。Geometry对象就是基于这个正方形来创建的。这里为什么是5对坐标而不是4对呢?因为5对坐标中第一对和第五对是同一个点,表示多边形闭合了。这一点很重要。最后将要素添加到图层中,照此循环。

4)统计每个样方中的点数

统计样方中的点数可通过空间过滤的方法来筛选符合条件的点来进行。这里主要用到图层的SetSpatialFilterRect()方法,该方法中的参数就是矩形的左下角和右上角坐标。筛选出符合条件的点后,再调用图层的GetFeatureCount()方法获得符合条件的点数。如此循环。

但是,有一点需要注意。每次循环前需要对图层进行重置,否则,后续的筛选都是在前一次筛选得出的点的基础上进行筛选,即后续的筛选得出的点数全为0。

5)统计含0、1、2…个点的样方数Statistic

这一步是个比较耗时的步骤。本文采取的办法是现将步骤4中的统计结果

进行排序,排序之后包含相同点数的样方则排列在一起。紧接着,获取队列第一个值value,然后将其从队列中删除,统计量k自增一。判断value是否等于队列第一个值(此时,队列为新队列),若相等则重复上面过程,若不相等则含有相同点数的样方数为k,然后退出内循环,进行下一个外循环。最后将统计信息写到XML文件中。

6)计算t值判定分布模式

步骤5中已经统计含有0、1、2…个点对应的样方数,那么接着就应该计算

其均值和方差。均值和方差只是中间量,我们主要是计算t值。计算t值后将其与1.96进行比较。若t绝对值小于1.96则可判定点属于随机分布,若t绝对值大于1.96,这时候我们需要判断t值得符号了,若t为正,则点属于聚集分布,反之,属于分散分布(也叫平均分布)。


===========================================================================================
这里,我需要说明一下,由于自己理解有误,自己的webService代码有一个地方不是很正确。就是分析范围这个地方,有意义的范围应该是行政边界指定的范围,那么格网中与行政边界没有交集的样方就不应该参与统计(为了方便,还是要画出来),所以这一点希望读者注意。
===========================================================================================
上面格网就是程序绘制的格网,样方分析WEB服务代码, 请点击这里。

如果有疑问,欢迎大家给我留言。

调用样方分析webservice的前台界面:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读