2012-05-08 4 views
1

.Net 토폴로지 제품군을 사용하는 사람이 있습니까? 나는 내가 복용하고 IGeometry있어.Net 토폴로지 집합을 사용하여 IGeometry 형식에서 IEnvelope 가져 오기

(페이지 하단에있는 C# 예제를 사용) 크기

http://resources.esri.com/help/9.3/arcgisengine/dotnet/c6e6b26c-be52-4176-b1e5-bb628d10acd0.htm에 따라 유효성을 검사 할 수 있도록 봉투를 얻으려고, 조금 붙어 유형 (경계) 내가 너비와 높이 속성

그러나 봉투를보고 기대하고있는이있는 IEnvelope (봉투)에 그 다각형의 봉투를 캐스팅 항상

IGeometry boundary; 

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

    IEnvelope envelope = boundary.Envelope as IEnvelope; 

수있는 사람의 도움이 null의 경우 이 스위트 룸은 처음입니다. 내가 해결하기 위해 노력하고있어


이 다음 예제 나는 이미 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(); 복제) 주조 시도해야합니까?

답변

1

OSGBGeometryFactory.Factory가 무엇인지 잘 모르겠습니다. 독자가 일반적으로 WKT를 사용하기 때문에. 다음은 원하는 작업을 수행하는 예제입니다. 여기서 WKT는 포스트 기어의 한 점을 버퍼링하여 만들어 졌으므로 가치가 있습니다.

 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); 
3

나는 또한 동일한 문제에 직면했다. Envelope에 이상한 명명 규칙을 사용하는 API 개발자의 문제입니다. IGeometry.Envelope은 실제로 IGeometry 개체입니다. 대신 IGeometry.EnvelopeInternal을 사용해야합니다.

IGeometry boundary; 

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

IEnvelope envelope = boundary.EnvelopeInternal;