FAQ
ArcObjects でZ 値が有効なポリゴン平面上の値を取得する方法

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

概要

このトピックでは、IProximityOperator3D インターフェイスを利用して、Z 値が有効な Polygon ジオメトリ (PolygonZ)の平面上の Z 値を取得する方法について述べます。

サンプルコード

PolygonZ を構成する頂点(PointZ)と異なり、PolygonZ 平面上の任意の点の Z 値は、 PolygonZ が属性としてもっているわけではありませn。そのため、幾何的な計算によって求める必要があります。まず、ポリゴン平面内の XY 座標値から (X,Y,0) の座標値をもつ PointZ を作成します。次に、この点と PolygonZ の最近接点を IProximityOperator3D::ReturnNearestPoint3D で求めます。取得した最近接点は、(X,Y,0) から Z 軸方向に立ち上げた時の PolygonZ との交点になりますので、取得した点の Z 値が求めたい高さになります。PointZ を作成する際は、ジオメトリが Z 値を認識できるように IZAware::ZAware を True に設定する必要があります。

// 座標値(X,Y,0) をもつ PointZ を作成します。
IPoint pt = new PointClass();
IZAware pz = (IZAware)pt;
pz.ZAware = true;
pt.PutCoords(X座標,Y座標);
pt.Z = 0;

IPolygon zpolygon = //PolygonZ のポリゴンを指定します。
IProximityOperator3D proximityOperator3D = zpolygon as IProximityOperator3D;
IPoint nearestPoint3D = proximityOperator3D.ReturnNearestPoint3D(pt, esriSegmentExtension.esriNoExtension);
//nearestPoint3D に PolygonZ 上のポイントが得られます。
System.Diagnostics.Debug.Print(nearestPoint3D.X.ToString()  + "," + nearestPoint3D.Y.ToString()  + "," + nearestPoint3D.Z.ToString() );
'座標値(X,Y,0) をもつ PointZ を作成します。
Dim pt As IPoint = New PointClass()
Dim pz As IZAware = CType(pt, IZAware)
pz.ZAware = True
pt.PutCoords(X座標,Y座標)
pt.Z = 0

Dim zpolygon As IPolygon = 'PolygonZ のポリゴンを指定します。
Dim proxi3D As IProximityOperator3D = CType(zpolygon, IProximityOperator3D)
Dim nearestPoint3D As IPoint = proxi3D.ReturnNearestPoint3D(pt, esriSegmentExtension.esriNoExtension)
'nearestPoint3D に PolygonZ 上のポイントが得られます。
System.Diagnostics.Debug.Print(NearestPT.X.ToString() + "," + NearestPT.Y.ToString() + "," + NearestPT.Z.ToString())

メタデータ

機能

種類

製品