IlayerをArcobjectsのIpolygonに変換する方法
-
27-09-2019 - |
質問
ilayerをイポリゴンに変換するのに苦労しています。
私はARCMAP用のツールバーを開発しています。内容テーブルからコードを介してレイヤーをつかみます。レイヤーはポリゴンですが、コードはIpolygonに変換しません。
誰かが私を助けることができますか?これは、私がそれをIpolygonに変換しようとしているコードです...
IPolygon poly = m_document.Maps.get_Item(0).get_Layer(0) as IPolygon;
私がすることができます:
ILayer layer = m_document.Maps.get_Item(0).get_Layer(0) as ILayer;
そして、それは機能し、それをiploygonに変換するのではありません。
解決
ShapeFileレイヤーに含まれるジオメトリにアクセスする場合は、レイヤーの機能クラスを取得する必要があります。これはifeaturelayerインターフェイスのプロパティであるため、最初にレイヤー(ilayer)をキャストする必要があります。
IFeatureLayer FLayer = layer as IFeatureLayer;
IFeatureClass FClass = FLayer.FeatureClass;
機能クラスがある場合、インデックス(スロー)で機能を取得するか、機能クラスでカーソルを定義することで機能することができます(これは、多くの機能を処理するときに高速で好ましい方法です。IfeatureCursorを検索します。優れたコードスニペット付き)。
機能クラスに1つの機能が含まれている場合、または1つの機能が必要な場合は、GetFeatureメソッドを使用できます。
IFeature MyFeature = FClass.GetFeature(0);
今、あなたはほとんどそこにいます。機能のジオメトリは、その形状のプロパティに隠れています。
IPolygon MyPoly = MyFeature.Shape as IPolygon;
ShapeプロパティはIpolygonであり、より具体的なイゴイオメトリーであるため、追加のキャストが必要です。
他のヒント
ilayerは複数のポリゴンで構成されます。レイヤーをSQLテーブルと考え、そのテーブルの列として機能を考えてください。 Ipolygonは、個々の機能を構成するジオメトリを指します。そのilayerをifeaturelayerのようなものとしてキャストして、適切なプロパティ/メソッドにアクセスして、レイヤー内の個々の機能にアクセスする必要がある場合があります。