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