FAQ
3D ラインの長さを求める方法

ナレッジ番号:5558 | 登録日:2023/07/27 | 更新日:2024/11/21

概要

3D ポリラインの長さを求める方法についてご紹介いたします。

ポリラインの長さは ICurve::Lenght で求められますが、これは 3D ポリラインの Z 値を考慮したものではありません。3D ポリラインについて ICurve::Lenght が返す値は XY 平面にラインを投影した時の長さになります。

3D ポリラインの Z 値を考慮した長さを求めるには ICurve3D::Length3D で求めます。  

サンプル コード

//最上位のレイヤーのフィーチャクラスを取得
IMxDocument pMxDocument = ArcMap.Document;
IMap pMap = pMxDocument.FocusMap;
ILayer pLayer = pMap.get_Layer(0);
IFeatureLayer pFeatureLayer = (IFeatureLayer)pLayer;
IFeatureClass pFeatureClasss = pFeatureLayer.FeatureClass;

//OID を指定してフィーチャを取得
IFeature pFeature = pFeatureClasss.GetFeature(1);

//IGeometry 型にキャスト
IGeometry pGeometery = pFeature.Shape;

//IPolyline 型にキャスト
IPolyline pPolyline = (IPolyline)pGeometery;

//ICurve3D 型にキャスト
ICurve3D pCurve3D = (ICurve3D)pPolyline;

//3D ポリラインの Z 値を考慮した長さを出力
System.Diagnostics.Debug.Print(pCurve3D.Length3D.ToString());
'最上位のレイヤーのフィーチャクラスを取得
Dim pMxDocument As IMxDocument = My.ArcMap.Document
Dim pMap As IMap = pMxDocument.FocusMap
Dim pLayer As ILayer = pMap.Layer(0)
Dim pFeatureLayer As IFeatureLayer = CType(pLayer, IFeatureLayer)
Dim pFeatureClass As IFeatureClass = pFeatureLayer.FeatureClass

'OID を指定してフィーチャを取得
Dim pFeature As IFeature = pFeatureClass.GetFeature(1)

'IGeometry 型にキャスト
Dim pGeometry As IGeometry = pFeature.Shape

'IPolyline 型にキャスト
Dim pPolyline As IPolyline = CType(pGeometry, IPolyline)

'ICurve3D 型にキャスト
Dim pCurve3D As ICurve3D = CType(pPolyline, ICurve3D)

'3D ポリラインの Z 値を考慮した長さを出力
System.Diagnostics.Debug.Print(pCurve3D.Length3D.ToString())

メタデータ

機能

種類

製品