2012-05-08 2 views
1

Кто-нибудь там использует комплект топологии .Net? я немного застрял, я пытаюсь получить конверт, чтобы я мог проверить размерыПолучение IEnvelope из типа IGeometry с использованием пакета .Net Topology

Согласно http://resources.esri.com/help/9.3/arcgisengine/dotnet/c6e6b26c-be52-4176-b1e5-bb628d10acd0.htm (с помощью C# пример в нижней части страницы)

Я забираю и IGeometry тип (граница) и разливочных конверта многоугольника на IEnvelope (конверт), с которым я в надежде посмотреть на свойства ширина и высота

Но конверт всегда нуль

IGeometry boundary; 

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

    IEnvelope envelope = boundary.Envelope as IEnvelope; 
Может

кто поможет, это мой первый раз с этим пакетом.


То, что я пытаюсь работать, если после этого примера у меня уже есть тип IGeometry (моя граница переменной), почему это нуль, когда я пытаюсь бросить его.

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 был создан путем буферизации точки в 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); 
3

Я тоже сталкивался с той же проблемой. Это проблема разработчика API, использующего странное соглашение об именах для конверта. IGeometry.Envelope - фактически объект IGeometry. Вместо этого вы должны вместо этого использовать IGeometry.EnvelopeInternal.

IGeometry boundary; 

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

IEnvelope envelope = boundary.EnvelopeInternal; 
Смежные вопросы