¿Convertir entre Esri Geometry y WKT usando ArcObjects?

16

Parece que no hay medios para convertir una geometría de ArcObjects a la representación de texto conocido (y viceversa) en la API de ArcGIS ArcObjects. Lo único que pude encontrar es la conversión a WKB (la interfaz IWkb).

¿Hay alguna forma de realizar la conversión entre los objetos de geometría y WKT o tengo que implementarlo yo mismo? Mi objetivo principal es la implementación de .NET sin muchas dependencias externas.

    
pregunta Petr Krebs 21.12.2010 - 17:05

6 respuestas

6

En el pasado, he usado el convertidor de Sharpmap, pero primero tenía que llegar a WKB. No sé si es la mejor opción ahora.

SharpMap.Geometries.IGeometry sharpGeom = SharpMap.Converters.WellKnownBinary.GeometryFromWKB.Parse(geombytes);
wkt = SharpMap.Converters.WellKnownText.GeometryToWKT.Write(sharpGeom);

Tampoco sé dónde está el repositorio actual de SharpMap, pero encontré una referencia de la clase aquí:

En ese momento, creo que estaba usando SharpMap de Codeplex.

Me olvidé de ZigGIS. Es posible que puedas construir sobre ese código: este enlace es el ziggis más antiguo. Creo que los métodos aoPolygonToWkt, aoPointToWkt, aoPolylineToWkt funcionarán: enlace

    
respondido por el Jay Cummins 21.12.2010 - 18:07
12

El uso de la interfaz IWkb hace un buen trabajo al convertir entre un IGeometry y un WKB. Desde un WKB puede usar la biblioteca Microsoft.SqlServer.Types para convertir un WKB a SqlGeometry y luego volver a WKT.

IWkb wkb = geometry as (IWkb); //(Where geometry is an instance of IGeometry)
byte[] wkb_bytes = new byte[wkb.WkbSize];
int byte_count = wkb.WkbSize;
wkb.ExportToWkb(ref byte_count, out wkb_bytes[0]);

En este punto, tiene el WKB almacenado en wkb_bytes. Si desea ir al siguiente paso a SqlGeometry y luego a WKT:

SqlGeometry sqlGeom = SqlGeometry.STGeomFromWKB(new SqlBytes(wkb_bytes), srid);
string wkt = sqlGeom.ToString();
    
respondido por el SagebrushGIS 13.02.2012 - 18:02
6

Puede intentar hacer referencia al Microsoft.SqlServer.Types (que Creo que se incluye con la edición gratuita de Sql Server Express), luego use STGeomFromWKB método estático para crear una geometría de microsoft, que luego se podría convertir en WKT usando STAsText .

También tenga en cuenta que, si bien Microsoft se enorgullece de ser propietario, sí ofrecen código fuente a muchos funciones útiles en sus SqlServer Spatial Tools en codeplex. Por lo tanto, si SqlServerTypes es una dependencia demasiado externa para usted, es posible que pueda encontrar el código fuente que hace esto.

    
respondido por el Kirk Kuykendall 21.12.2010 - 17:59
3

NTS puede "hablar" WKT, y tiene lectores y escritores para WKB y WKT. Así que si tienes WKB, NTS puede leer eso y escribir en WKT.

Sin embargo, también puede crear objetos NTS utilizando los atributos de una geometría de ArcObjects y luego mostrarlos como WKT.

Para uno de nuestros proyectos ArcObjects, creamos métodos de utilidad para que NTS mueva la geometría (principalmente para aprovechar los métodos de proyección alternativos que ofrece NTS).

    
respondido por el mwalker 21.12.2010 - 18:14
3

El proyecto de código abierto DNRGPS (licencia here ) tiene métodos de extensión para convertir entre IGeometry y WKT, aunque tendría que adaptarlos para no usar IObjectFactory si desea usarlos fuera de una aplicación de ArcGIS.

La licencia parece bastante permisiva, así que puse mi versión independiente (no uso IObjectFactory ) en GitHub si alguien estaba interesado:

Actualización: He realizado algunas mejoras en mi versión para admitir la aplicación de referencias espaciales para los objetos de geometría de salida y el uso de una referencia espacial predeterminada compatible con coordenadas enteras (Plate Carree) si no se especifica ninguna.

    
respondido por el blah238 28.02.2013 - 07:52
-2

Echa un vistazo a GeometryBridge, podría ser capaz de ayudarte. enlace

    
respondido por el patrick 21.12.2010 - 17:18

Lea otras preguntas en las etiquetas