思路

  • 1.问题由来
  • 2.分析问题
  • 2.1计算图形面积的方式有哪些
  • 2.2 什么是相对法截线、测大地线
  • 3.实验过程及问题解析
  • 4. 总结


1.问题由来

前段时间,有个朋友问了我一个问题,关于Arcgis中的面积计算的问题:
用!shape.geodesicarea!计算的面积,和用Toolbox里计算的面积,为什么会有有差别?
平时使用这几个工具进行面积计算倒是很多,但具体的计算面积的原理及差异竟不不慎了解,我竟一时无法回答这个问题,针对这个问题我在网上寻找问题的答案,同时根据这个问题,自己进行实验验证问题的原因。接下来我将我的验证过程及自己的总结分享给大家。

2.分析问题

2.1计算图形面积的方式有哪些

首先我们要明确在ArcGIS中计算图形面积的方式有哪些:
预先声明一下我用的是 ArcGIS 10.4
2.1.1.Calculate Geometry(计算几何)
此工具是我们用的比较多的一个,这个工具计算面积分为两种方式:

基于数据源的坐标系统计算面积;
基于数据框的坐标系统计算面积。
如下图所示,测试要素的数据源的坐标系为CGCS2000 3 Degree GK Zone 39,而数据框的坐标系则为Asia Lambert Conformal Conic,显然这两种方式计算的结果会存在差异。
注:只能计算投影坐标系的面积。

pic 2.1.1-1

pic 2.1.1-2

arcgis python计算面积 arcgis面积怎么算_数据源

arcgis python计算面积 arcgis面积怎么算_arcgis python计算面积_02

2.1.2.Field Calculator (字段计算器)
主要是利用了ArcGIS中内置的python函数进行面积计算的。
注:可以计算投影坐标系的面积,也可以计算椭球坐标系。

pic 2.1.2-1 字段计算器

pic 2.1.2-2 字段计算器表达式-计算投影面积

arcgis python计算面积 arcgis面积怎么算_数据源_03

arcgis python计算面积 arcgis面积怎么算_arcgis_04

pic 2.1.2-3 字段计算器表达式-计算椭球面积

说明

arcgis python计算面积 arcgis面积怎么算_数据源_05

常用公式:!Shape.Area!,!Shape.geodesicarea!

2.1.3.Add Geometry Attributes(添加几何属性)
这是工具中的一个工具【需要说明的是这个工具在ArcGIS10.2.2以上的版本才会有】,也可以用来计算面积,且可以设置计算面积的坐标系。

其中Geometry Properties(几何属性)选择有很多选项,我在这里只说关于面积计算的问题

AREA,AREA_GEODESIC,其他属性的计算有兴趣的可自行尝试,这里不在赘述。
AREA:计算要素的面积
AREA_GEODESIC:计算要素的测地线面积(接下来我会说一下测大地线的问题)

pic 2.1.3-1 添加几何属性

pic 2.1.3-2 添加几何属性

arcgis python计算面积 arcgis面积怎么算_数据源_06

arcgis python计算面积 arcgis面积怎么算_字段_07

2.1.4.Calculate Area(计算面积)
这个工具使用地还是比较少的,但是也是可以用来计算面积的。此工具由于前三个工具的存在,使用的很少,在Arcgis Pro中已经删除此工具。与!shape.Area!的计算结果一致,唯一的区别在于重新生成一个数据,添加一个F_AREA计算结果。

pic 2.1.4-1 计算面积

arcgis python计算面积 arcgis面积怎么算_数据源_08

2.1.5 shp或其他不在数据库中的数据,转换导入至数据库
ESRI地理数据库默认会为要素添加Shape_Area字段中要素会自动计算面积,数据库最方便的地方就是在实时编辑数据时后,自动计算图斑的面积,无需重新计算面积。值得说明的是Shape_Area的面积是由数据源的坐标系决定。
如果数据源的坐标系为地理坐标系,那么Shape_Area中的值为平方度,1平方度约等于1万平方公里。

2.2 什么是相对法截线、测大地线

2.2.1相对法截线
关于相对法截线的介绍 2.2.2 大地线/测地线
包含椭球面上一点法线的平面称为法截面,法截面与该椭球面的交线称为法截线,椭球面上两点间的最短程曲线称为大地线。大地线又称为测地线,大地线是一条空间曲面曲线
关于‘大地线’详解 值得注意的是大地线的性质:
大地线是椭球面上两点间的最短线。
大地线是无数法截线的连线。
椭球面上的大地线是双重弯曲的曲线。
大地线位于相对法截线之间。

3.实验过程及问题解析

本次绘制的图形比较简单,仅用来说明问题。

3.1.绘制18个图形,包括圆形,矩形,三角形,随意多边形等图形用以说明问题。

arcgis python计算面积 arcgis面积怎么算_arcgis python计算面积_09


3.2.将绘制的图形(未定义坐标系,默认在CGCS2000 3 Degree GK Zone 39 绘制),将绘制的图形分别定义不同的投影分带后,基于定义后的数据源坐标系、数据框的坐标系,分别计算图形投影面积。

3.3.将将绘制的图形定义坐标系CGCS2000 3 Degree GK Zone 39 ,并分别投影到28度带至45度带,统计分析,现已半径为1000m的圆为例分析说明(其余图形的变化规律相似,多项式可以拟合误差曲线,不同之处在于多项式参数不一致)

arcgis python计算面积 arcgis面积怎么算_数据源_10


arcgis python计算面积 arcgis面积怎么算_arcgis python计算面积_11


通过比对投影面积与椭球面积之差与理论面积的比值可知,总体服从西往东误差逐渐减小的规律;图形的理论面积与椭球面积之差与理论面积之比在一定值域范围内。

arcgis python计算面积 arcgis面积怎么算_arcgis_12


arcgis python计算面积 arcgis面积怎么算_arcgis python计算面积_13


通过上表和图可知,椭圆、圆形等带有弧段的图形的理论面积与椭球面积之间差值与理论值的比值域幅度明显偏大;

图形的理论面积与椭球面积之差与理论面积之比在(2.32,2.53)范围内,且椭球面积的准确性受到节点的距离以及弧段的影响。具体的阈值范围是否符合上述规律,暂未进行测试。有兴趣的伙伴可以进行探索一下规律,欢迎分享。3.4.关于弧线的问题:需要指出的是,因为我在三调过程中,接触过图斑的绘制工作,其中有一条就是关于图形节点距离的问题,节点最大距离不应超过70m,因此我又突然想到,对上述的图形进行节点加密,对图形会有什么影响?

a. 如下截图是三个1000m半径的圆,其中一个是使用弧线绘制,另外两个是通过节点加密近似表示的半径为1000m的圆,数据框的坐标系与数据源的坐标系一致,均为投影坐标系CGCS2000 3 Degree GK Zone 39。

arcgis python计算面积 arcgis面积怎么算_arcgis python计算面积_14


**b.**还是上述数据圆,我又重新设置数据框的坐标系,将数据框的坐标系设置为地理坐标系GCS_China_Geodetic_Coordinate_System_2000,我们会发现一个有意思的事情,如下如所示

arcgis python计算面积 arcgis面积怎么算_arcgis python计算面积_15

弧线圆

多段线圆(2m距离)

多段线圆(70m距离)

arcgis python计算面积 arcgis面积怎么算_arcgis python计算面积_16

arcgis python计算面积 arcgis面积怎么算_字段_17

arcgis python计算面积 arcgis面积怎么算_数据源_18

同一数据因数据框设置的是地理坐标系的原因,图形会发生形变,用!Shape.Area!计算面积,会发现面积并未变化。这还是与高斯克吕格投影(等角横切椭圆柱投影)有直接的关系。当你将数据框设置为地理坐标系,使用计算几何工具计算面积的时候,你会有如下发现:

arcgis python计算面积 arcgis面积怎么算_arcgis_19


只能计算投影面积,无法计算椭球面积。

计算!Shape.Area!(投影面积)。可以看到数据结果是相同的,同一图形在同一空间位置节点加密后越近越接近于理论值(注:节点距离越近,数据量会越大,需要根据实际情况折中处理),且弧段线更接近于理论值(shp数据是不支持弧线的,会将弧线数据转换为多段线的形式表示)。3.5以下是关于函数公式!Shape.GeodesicArea!计算的面积与使用工具Add Geometry Attributes(添加几何属性)中的Area_Geodesic计算面积之间差异分析。

arcgis python计算面积 arcgis面积怎么算_数据源_20

通过上表分析可知:弧线对这两种方法计算椭球面积的影像比较明显,其次就是节点之间的距离。
GIS中计算多边形面积的原理

!shape.geodesicarea! 是在ArcGIS中计算椭球面积的工具,它是基于椭球体模型计算的,而不是基于球体模型计算的。因此,它的计算结果可能会与使用球体模型计算的其他工具不同。

而Add Geometry Attributes工具中的Area_Geodesic工具使用的是球体模型计算的,它是基于球体模型计算的。因此,它的计算结果可能会与使用椭球体模型计算的其他工具不同。

两种方法的主要区别在于它们使用的地球模型的形状。椭球体模型更加接近地球的真实形状,而球体模型则是一种简化的模型。因此,在不同的情况下,它们的计算结果可能会有所不同。

需要注意的是,任何一种计算面积的工具都有一定的误差,因为地球的形状是复杂的,而且地球上的数据也可能有一定的误差。因此,在实际应用中,需要根据具体情况选择适合的工具。


4. 总结

综上述实验结果分析可得如下结论
4.1.上述所列的计算面积工具的原理可分为两类:
第一类:基于数据源、显示数据框的计算投影面积
计算投影面积:上述方法中均可以计算图形的投影面积,且计算结果是一致的;不同在于能否设置坐标系,以及设置哪种坐标系的问题。
第二类:基于数据源的地理坐标系计算的椭球面积(测大地线有关)。
计算椭球面积:在字段计算器中使用!Shape.geodesicarea!、使用Add Geometry Attributes(添加几何属性)中的Area_Geodesic。两者的计算结果还是存在一定的差距。

4.2.基于定义后的数据源坐标系、数据框的坐标系,分别计算图形投影面积。
同一个图形分别定义不同的分带投影后,计算的图形面积不会发生改变;
定义投影后的图形然后投影到不同的分带后,原始的图形会发生变形,所以投影面积会发生变化,且变形会随着距离变远,变形会变大。
然而定义投影后的图形虽然投影到不同的分带,因同属于同一个地理椭球面的投影,所以在计算测大地线面积(椭球面积)的时候,面积的计算结果变化会很小(但是仍有少许的差异,与投影变形面积差相比,可以忽略不计),轻微变化的原因主要还是因为映射函数误差累计,导致测大地线的长度发生变化(此为猜测,有了解具体原因的读者,欢迎批评指正),。

4.3.图形面积的变化规律:
假设有一个可以自由移动的平面图形A:
图形A的面积由赤道向两极逐渐减小
图形A的面积由中央经线向东西两侧逐渐减小
我们平时使用的地理坐标系为CGCS2000,投影采用的是高斯-克吕格投影(等角横切椭圆柱投影),投影后要素图形的角度是准确的,而要素图形边长会因为投影变换的原因而发生形变,为保证变形最小,我们才会使用6°分带和3°分带。
4.4.同一要素分别在不同投影带定义投影后的面积是保持一致的;但是在不同投影分带上的要素所计算的测大地线面积是有所差异的,主要是因为位置发生改变,导致测大地的长度发生了变化,致使面积发生变化。
经过测试实验,得出如下结论:定义投影带后的要素分别进行投影换会(分别将坐标系为CGCS2000GK39要素分别投影至CGCS2000GK28到CGCS2000GK45),图形的shape.Area的变化规律是从西向东逐渐减小,变化规律可以用二次多项式拟合。
4.要素节点的距离在一定值域范围内,要素在投影前后的测大地线面积计算的误差就会越小
5.带有弧线的要素投影变换后面积变化差异较大,且与弧段长度以及弧的弯曲程度有关
6.计算椭球面积工具的两种方法,分别使用的是两种不同形式的球体模型,计算结果存在差异