Parece que no hay forma de convertir una geometría de ArcObjects a la representación de texto conocido (y viceversa) en ArcGIS ArcObjects API. Lo único que pude encontrar es la conversión a WKB (la interfaz IWkb).
¿Hay alguna manera de realizar la conversión entre objetos de geometría y WKT o tengo que implementarlo yo mismo? Principalmente apunto a la implementación de .NET sin muchas dependencias externas.
fuente
El uso de la interfaz IWkb hace un buen trabajo al convertir entre un IGeometry y WKB. Desde un WKB puede usar la biblioteca Microsoft.SqlServer.Types para convertir un WKB a SqlGeometry y luego volver a WKT.
En este punto, tiene el WKB almacenado en wkb_bytes. Si desea ir al siguiente paso a SqlGeometry y luego a WKT:
fuente
srid
aquí. Usé esto:int srid = feature.Shape.SpatialReference.FactoryCode;
¿Estás de acuerdo con esa implementación?Puede intentar hacer referencia al ensamblado Microsoft.SqlServer.Types (que creo que se incluye con la edición gratuita Sql Server Express), luego usar el método estático STGeomFromWKB para crear una geometría de microsoft, que luego podría convertirse en WKT usando STAsText .
También tenga en cuenta que, si bien Microsoft detecta muchas fallas acerca de ser propietario, ofrecen código fuente para muchas funciones útiles en sus Herramientas espaciales SqlServer en codeplex. Entonces, si SqlServerTypes tiene demasiada dependencia externa para usted, es posible que pueda encontrar el código fuente que lo hace.
fuente
NTS puede "hablar" WKT, y tiene lectores y escritores para WKB y WKT. Entonces, si tiene 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 generarlos como WKT.
Para uno de nuestros proyectos de 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).
fuente
El proyecto de código abierto DNRGPS (licencia aquí ) tiene métodos de extensión para convertir entre
IGeometry
y WKT, aunque tendría que adaptarlos para que no se usenIObjectFactory
si desea usarlos fuera de una aplicación ArcGIS.La licencia parece bastante permisiva, así que puse mi versión independiente (no la usa
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 amigable de coordenadas enteras (Plate Carree) si no se especifica ninguna.
fuente
Echa un vistazo a GeometryBridge, podría ayudarte. http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#//00010000039n000000
fuente