NettopologySuite и Dotspatial WKTReader

Итак, у меня есть группа WKT, представляющая многоугольник. Я исключительно использую DotSpatial для управления геометрией. В частности, я пытаюсь получить DotSpatial.Topology.IGeometry из моего WKT.

К сожалению, ребята из DotSpatial недавно перенесли много вещей в NetTopologySuit, и именно там живет их WKTreader.

Но читатель возвращает GeoAPI.Geometries.IGeometry, который нельзя просто привести к DotSpatial.Topology.IGeometry, потому что это не тот же класс. Я на самом деле получаю немного обостренную необходимость трансформировать то, что по сути является одним и тем же классом, через три разных API (DotSpatial, GeoAPI и NetTopologySuite), которые имеют одинаковые имена с похожими классами.

Все, что я хочу сделать, это извлечь DotSpatial.Topology.IGeometry из хорошо известного текста. В частности, это MultiPolygon, с которым я работаю, но неважно.

Я действительно не хочу иметь какой-то замечательный условный оператор или оператор select, чтобы выяснить, что делать с классом GeoAPI IGeometry, чтобы я мог его использовать. У меня уже есть большой класс конвертера для преобразования различных классов геометрии в dotSpatial, и я бы предпочел полностью избавиться от него. Чем меньше кода, тем лучше код.

Может ли кто-нибудь помочь с преобразованием GeoAPI.Geometries.IGeometry в DotSpatial.Geometries.IGeometry? Я не могу просто привести его, так как получаю следующую ошибку: Невозможно привести объект типа "NetTopologySuite.Geometries.MultiPolygon" к типу "DotSpatial.Topology.IGeometry".

Есть идеи?

Спасибо заранее, E

1 ответ

Извините за путаницу. Произошел переход от сохранения интерфейса IGeometry в DotSpatial и передачи его в GeoAPI. Это позволяет использовать общий интерфейс для передачи информации о классе между двумя библиотеками, не требуя прямой зависимости, но позволяет NetTopologySuite сосредоточиться на синхронизации с последними обновлениями, поступающими из Java Topology Suite, и другими улучшениями топологии без необходимости репликации командой DotSpatial. источник все время в собственном проекте. Хитрость заключается в том, чтобы измерить ваши переменные как GeoAPI IGeometry, чтобы обе библиотеки могли использовать объект. Я не думаю, что DotSpatial напрямую не ссылается на NetTopologySuite. Кроме того, этот пост, возможно, был написан в то время, когда переход еще находился в разработке, так что, надеюсь, это прямо сейчас, пока у вас последняя версия. (Я использовал commit cfb523 22 мая 2018 года, доступный здесь: https://github.com/DotSpatial/DotSpatial

       using GeoAPI.Geometries;
       using NetTopologySuite.IO;
       using DotSpatial.Data;


       // From any WKT string
        String WKT = "MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),(30 20, 20 15, 20 25, 30 20)))";
        // Create a Well Known Text Reader from NetTopologySuite
        WKTReader reader = new WKTReader();
        // NetTopologySuite passes back a GeoApi IGeometry.  This is a shared interface that can be used by both libraries.
        IGeometry geom = reader.Read(WKT);
        // Create a Feature (a DotSpatial object) using the GeoApi IGeometry from NetTopologySuite.
        Feature f = new Feature(geom);
Другие вопросы по тегам