NettopologySuite и Dotspatial WKTReader - PullRequest
0 голосов
/ 08 июня 2018

Итак, у меня есть группа 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 Ответ

0 голосов
/ 15 августа 2018

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

enter image description here

       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);
...