FAQ
ArcObjects でジオメトリ オブジェクト間の距離や近接点を取得する方法

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

概要

このトピックでは、IProximityOperator を利用して、オブジェクト間の距離を計測したり、オブジェクト上の近接点を取得する方法について述べます。

サンプル コード

オブジェクト間の距離を計測

オブジェクト間の距離は、IProximityOperator::ReturnDistance で取得します。

private  double RetDistance(IGeometry Geo1, IGeometry Geo2)
    IProximityOperator  pProxi = (IProximityOperator)Geo1;
    Double adis;
    adis = pProxi.ReturnDistance(Geo2);
    System.Diagnostics.Debug.Print(adis.ToString());
    return (adis);
}
Private Function RetDistance(Geo1 As IGeometry, Geo2 As IGeometry) As Double
    Dim pProxi As IProximityOperator = Geo1
    Dim adis As Double
    adis = pProxi.ReturnDistance(Geo2)
    System.Diagnostics.Debug.Print(adis)
    Return adis
End Function

オブジェクト上の近接点を取得

オブジェクト上の近接点は、IProximityOperator::ReturnNearestPoint または IProximityOperator::QueryNearestPoint で取得します。ReturnNearestPoint は近接点を新規のポイントオブジェクトとして生成して返しますが、QueryNearestPoint は、先にインスタンス化しておいたポイント オブジェクトで近接点を受け取ります。そのため、後者の方法ではメソッド内で新規にポイントを生成しなくて済むため、パフォーマンス上の利点が見込まれます。

IProximityOperator::ReturnNearestPoint メソッドの利用

private IPoint RetNerestPT(IGeometry TargetGeo,IPoint InputPt,esriSegmentExtension est) {
    IProximityOperator pProxi = (IProximityOperator)TargetGeo;
    IPoint retPt;
    retPt = pProxi.ReturnNearestPoint(InputPt, esriSegmentExtension.esriNoExtension);
    return (retPt);
}
Private Function RetNerestPT(TargetGeo As IGeometry, InputPt As IPoint, est As esriSegmentExtension) As IPoint
    Dim pProxi As IProximityOperator = TargetGeo
    Dim retPt As IPoint
    retPt = pProxi.ReturnNearestPoint(InputPt, esriSegmentExtension.esriNoExtension)
    'System.Diagnostics.Debug.Print(adis)
    Return retPt
End Function

IProximityOperator::QueryNearestPoint メソッドの利用

private IPoint QryNearestPT(IGeometry TargetGeo, IPoint InputPt, esriSegmentExtension est)
{
    IProximityOperator pProx = (IProximityOperator)TargetGeo;
    IPoint retPt  = new PointClass();
    pProx.QueryNearestPoint(InputPt, esriSegmentExtension.esriNoExtension, retPt);
    return (retPt);
}
Private Function QryNearestPT(TargetGeo As IGeometry, InputPt As IPoint, est As esriSegmentExtension) As IPoint
    Dim pProxi As IProximityOperator = TargetGeo
    Dim retPt As IPoint = New PointClass
    pProxi.QueryNearestPoint(InputPt, esriSegmentExtension.esriNoExtension, retPt)
    Return retPt
End Function

メタデータ

機能

種類

製品