2

.Net トポロジ スイートを使用している人はいますか? 少し行き詰まっています。寸法を検証できるように封筒を取得しようとしています

http://resources.esri.com/help/9.3/arcgisengine/dotnet/c6e6b26c-be52-4176-b1e5-bb628d10acd0.htmによると (ページ下部の C# の例を使用)

IGeometry タイプ (境界) を取得し、そのポリゴンのエンベロープを IEnvelope (エンベロープ) にキャストして、幅と高さのプロパティを確認したいと考えています。

しかし、エンベロープは常に null です

    IGeometry boundary;

    var wktReader = new WKTReader(OSGBGeometryFactory.Factory);
    boundary = wktReader.Read(projectDTO.BoundaryWKT);

    IEnvelope envelope = boundary.Envelope as IEnvelope;

誰でも助けてもらえますか、このスイートは初めてです。


私が解決しようとしているのは、この例に従って既に IGeometry 型 (境界変数) を持っている場合、それをキャストしようとすると null になるのはなぜですか。

using ESRI.ArcGIS.Geometry;

class temp
{
  public void test()
  {
    // Create an empty polygon object.
    IArea areaPolygon = new PolygonClass();

    // Cast to the IGeometry interface of the polygon object.
    IGeometry geometryPolygon = (IGeometry)areaPolygon;

    // Use the .Envelope property on the IGeometry interface of the
    // polygon object to get an envelope object.
    IEnvelope envelope = geometryPolygon.Envelope;

    // Test to make sure you have an envelope object.
    if (envelope is Envelope)
    {
      // The polygon object and resulting envelope are empty.
      if (envelope.IsEmpty)
      {
        System.Windows.Forms.MessageBox.Show("The envelope is empty.");
      }
    }
  }
}

新しいポリゴンを作成し、それをキャストする (つまり、 を複製するIArea areaPolygon = new PolygonClass();) 必要がありますか?

4

2 に答える 2

4

私も同じ問題に直面しました。これは、Envelope に奇妙な命名規則を使用している API 開発者の問題です。IGeometry.Envelope実際には IGeometry オブジェクトです。代わりに使用する必要がありますIGeometry.EnvelopeInternal

IGeometry boundary;

var wktReader = new WKTReader(OSGBGeometryFactory.Factory);
boundary = wktReader.Read(projectDTO.BoundaryWKT);

IEnvelope envelope = boundary.EnvelopeInternal;
于 2012-08-07T11:42:35.533 に答える
1

OSGBGeometryFactory.Factory が何をするのかはわかりません。リーダーは通常 WKT を使用するためです。これは、WKTがpostgisのポイントをバッファリングすることによって作成された、あなたが望むことをする例です。

        WKTReader rdr = new WKTReader();
        Polygon poly =(Polygon) rdr.Read(
                "POLYGON((10 0,9.23879532511287 -3.82683432365089,7.07106781186548 -7.07106781186547,3.82683432365091 -9.23879532511286,1.61554255216634e-14 -10,-3.82683432365088 -9.23879532511287,-7.07106781186546 -7.07106781186549,-9.23879532511286 -3.82683432365092,-10 -3.23108510433268e-14,-9.23879532511288 3.82683432365086,-7.0710678118655 7.07106781186545,-3.82683432365094 9.23879532511285,-4.62458305157398e-14 10,3.82683432365085 9.23879532511289,7.07106781186544 7.07106781186551,9.23879532511284 3.82683432365095,10 0))");
        GeoAPI.Geometries.ICoordinate [] coords =  poly.Envelope.Coordinates;
        double width = coords[2].X - coords[0].X;
        double height = coords[2].Y - coords[0].Y;

        Console.WriteLine("width={0:f}, height={1:f}", width, height);
于 2012-05-09T12:30:51.447 に答える