FAQ
ポリラインの任意の地点に垂線を引く方法

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

概要

このトピックではポリラインの任意に地点に垂線を引く方法をご紹介いたします。

Image

サンプル コード

ポリラインの任意の地点に垂線を引くには ICurve::QueryNormal 使用します。引数には、下記の 5 つを設定します。
第一引数 : esriSegmentExtension.esriNoExtension
第二引数 : ポリラインの始点からの距離または始点からの割合
第三引数 : 第二引数を割合で設定した場合はTrue
第四引数 : 垂線の長さ、第五引数には取得したラインを格納するインスタンス化済みのラインオブジェクトを指定

//最上位のレイヤーを取得 
IMxDocument pMxDocument = ArcMap.Document; 
IMap pMap = pMxDocument.FocusMap; 
ILayer pLayer = pMap.get_Layer(0); 

//Object ID が 1 のフィーチャを取得
IFeatureLayer pFeatureLayer = (IFeatureLayer)pLayer;
IFeatureClass pFeatureClasss = pFeatureLayer.FeatureClass; 
IFeature pFeature = pFeatureClasss.GetFeature(1); 

//フィーチャをポリラインとして取得
IGeometry pGeometery = pFeature.Shape; 
IPolyline pPolyline = (IPolyline)pGeometery; 

//ポリラインの中点の位置(0.5 の比の位置)に、長さ1000(地図単位)で引いた垂線を pLine に取得 
ICurve pCurve = (ICurve)pPolyline; 
ILine pLine = new LineClass(); 
pCurve.QueryNormal(esriSegmentExtension.esriNoExtension, 0.5, true, -1000, pLine); 

//Line セグメントでなくポリラインで取得する場合 
IPolyline newPolyline = new PolylineClass(); 
newPolyline.FromPoint = pLine.FromPoint; 
newPolyline.ToPoint = pLine.ToPoint; 

//変更点を保存 
IFeature newFeature = pFeatureClasss.CreateFeature(); 
newFeature.Shape = newPolyline; newFeature.Store(); 

//再描画 
pMxDocument.ActiveView.Refresh();
'最上位のレイヤーを取得
Dim pMxDocment As IMxDocument = My.ArcMap.Document
Dim pMap As IMap = pMxDocment.FocusMap
Dim pLayer As ILayer = pMap.Layer(0)

'Object ID が 1 のフィーチャを取得
Dim pFeatureLayer As IFeatureLayer = CType(pLayer, IFeatureLayer)
Dim pFeatureClass As IFeatureClass = pFeatureLayer.FeatureClass
Dim pFeature As IFeature = pFeatureClass.GetFeature(1)

'フィーチャをポリラインとして取得
Dim pGeometry As IGeometry = pFeature.Shape
Dim pPolyline As IPolyline = CType(pGeometry, IPolyline)

'ポリラインの中点の位置(0.5 の比の位置)に、長さ1000(地図単位)で引いた垂線を pLine に取得
Dim pCurve As ICurve = CType(pPolyline, ICurve)
Dim pLine As ILine = New LineClass()
pCurve.QueryNormal(esriSegmentExtension.esriNoExtension, 0.5, True, -1000, pLine)

' Line セグメントでなくポリラインで取得する場合
Dim newPolyline As IPolyline = New PolylineClass()
newPolyline.FromPoint = pLine.FromPoint
newPolyline.ToPoint = pLine.ToPoint

'変更点を保存
Dim newFeature As IFeature = pFeatureClass.CreateFeature()
newFeature.Shape = newPolyline
newFeature.Store()

'再描画
pMxDocment.ActiveView.Refresh()

メタデータ

機能

種類

製品