Похоже, что в ArcGIS ArcObjects API нет средств для преобразования геометрии ArcObjects в представление «Хорошо известный текст» (и наоборот). Единственное, что мне удалось найти, - это преобразование в WKB (интерфейс IWkb).
Есть ли способ выполнить преобразование между геометрическими объектами и WKT, или я должен реализовать это сам? Я в первую очередь стремлюсь к реализации .NET без особых внешних зависимостей.
источник
Использование интерфейса IWkb делает хорошую работу по конвертации между IGeometry и WKB. Из WKB вы можете использовать библиотеку Microsoft.SqlServer.Types для преобразования WKB в SqlGeometry, а затем обратно в WKT.
На данный момент WKB хранится в wkb_bytes. Если вы хотите перейти к SqlGeometry, а затем к WKT:
источник
srid
здесь. Я использовал это:int srid = feature.Shape.SpatialReference.FactoryCode;
вы согласны с этой реализацией?Вы можете попробовать сослаться на сборку Microsoft.SqlServer.Types (которая, как мне кажется, включена в бесплатную версию Sql Server Express), а затем использовать статический метод STGeomFromWKB для создания геометрии microsoft, которую затем можно преобразовать в WKT с помощью STAsText .
Также обратите внимание на то, что, хотя Microsoft понимает, что является частной компанией, они предлагают исходный код для множества полезных функций в своих пространственных инструментах SqlServer в codeplex. Поэтому, если для SqlServerTypes слишком много внешних зависимостей, вы можете найти исходный код, который это делает.
источник
NTS может «говорить» на WKT и имеет читателей и писателей как для WKB, так и для WKT. Так что если у вас есть WKB, NTS может прочитать это и написать в WKT.
Однако вы также можете создавать объекты NTS, используя атрибуты геометрии ArcObjects, а затем выводить их как WKT.
Для одного из наших проектов ArcObjects мы создали служебные методы для NTS для перемещения геометрии (в основном, для использования альтернативных методов проекции, предлагаемых NTS).
источник
Проект с открытым исходным кодом DNRGPS ( здесь лицензирование ) имеет методы расширения для преобразования между
IGeometry
WKT, но вам придется адаптировать их, чтобы они не использовались,IObjectFactory
если вы хотите использовать их вне приложения ArcGIS.Лицензия выглядит довольно разрешительной, поэтому я поместил ее автономную версию (не использует
IObjectFactory
) на GitHub, если кому-то было интересно:Обновление: я внес несколько улучшений в мою версию, чтобы поддержать применение пространственных привязок для объектов выходной геометрии и использование целочисленной координатной привязки по умолчанию (Plate Carree), если она не указана.
источник
Проверьте GeometryBridge, он может быть в состоянии помочь вам. http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#//00010000039n000000
источник