ArcMap中如何计算Polyline的直线长度

原文地址:ArcMap中如何计算Polyline的直线长度

在做地理数据分析时,有时需要折线的直线长度,比如计算曲折度(Sinuosity = 实际长度L / 直线长度S)。本文记录了我在使用OpenStreetMap数据做分析时,计算直线长度所使用的一种方法。

数据

原始数据(线)

Haversine formula公式

计算直线长度,我首先想到的是,利用Haversine formula公式根据起止点的经纬度来计算距离,因为在ArcMap中可以用Calculate Geometry(如下图)计算线的起止点坐标。实际长度用 !shape.length 计算。但是在计算曲折度的时候,发现部分线的实际长度比直线长度还小。我就挑选了一条线,用测量工具测算出的距离与Haversine formula公式计算的距离不一致。

猜想原因:①直线长度和实际长度两种计算方法的原理不一致,因此导致了“实际长度比直线长度还小”的问题;②投影问题。

Calculate Geometry
因为我比较懒,我也没去深究ArcMap中 !shape.length 的计算原理,也没去管投影问题,因为只要直线长度和实际长度的计算方法一致,就可以计算曲折度。所以,下面这种方法就诞生了。

计算过程

既然实际长度采用 !shape.length 计算,那么我把起、止点连接成直线,再用同样方法计算,就能保证两个长度的计算方法一致了。那么怎么连接起、止点呢?

使用Feature Vertices To Points工具生成起、止点(Points)

Feature Vertices To Points
生成的起、止点图层如下图。
起、止点图层

合并起、止点图层

将两个图层合并可以使用Append或者Dissolve工具。在这里,我选择Append工具,将“End”图层追加到“Start”图层。
Append

将起、止点连接成线(Points To Line)

将“End”图层追加到“Start”图层后,打开属性表,可以发现起、止点都在同一图层,并且ORIG_FID字段存在相同的值,因为他们表示同一条线的起、止点。(下图为FID=1066的线)
FID=1066的线
使用Point To Line工具将点转换为线,注意Line Field选择ORIG_FID。
Point To Line
生成的结果如图。
Point To Line结果

计算直线长度

打开属性表,新建字段,使用字段计算器计算长度。
使用字段计算器计算长度

将计算结果添加到线图层属性表(Join)

Join

结果

结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值