NettopologySuite 和 Dotspatial WKTReader

Ed *_*mer 6 c# geoapi nettopologysuite dotspatial

所以我有一堆代表多多边形的 WKT。我专门使用 DotSpatial 来操作几何图形。具体来说,我试图从我的 WKT 中获取 DotSpatial.Topology.IGeometry。

不幸的是,DotSpatial 的家伙最近将很多东西移到了 NetTopologySuit 中,这就是他们的 WKTreader 所在的地方。

但是读取器传回一个 GeoAPI.Geometries.IGeometry,您不能将其强制转换为 DotSpatial.Topology.IGeometry,因为它们不是同一个类。不得不在三个不同的 API(DotSpatial、GeoAPI 和 NetTopologySuite)之间转换本质上相同的类,这让我感到有点恼火,这些 API 都具有类似的名称。

我想要做的就是从众所周知的文本中提取 DotSpatial.Topology.IGeometry。具体来说,它是我正在使用的 MultiPolygon,但无论如何。

我真的不想有一些很好的条件或选择语句来弄清楚如何处理 GeoAPI IGeometry 类以便我可以使用它。我已经有一个很大的转换器类,用于将各种几何类转换为 dotSpatial,我宁愿完全摆脱它。更少的代码是更好的代码。

任何人都可以协助将 GeoAPI.Geometries.IGeometry 转换为 DotSpatial.Geometries.IGeometry 吗?当我收到以下错误时,我不能直接投射它:无法将“NetTopologySuite.Geometries.MultiPolygon”类型的对象投射到“DotSpatial.Topology.IGeometry”类型。

有任何想法吗?

提前致谢,E

Ted*_*Ted 5

对困惑感到抱歉。从将 IGeometry 接口保留在 DotSpatial 并将其下推到 GeoAPI 中,有一个过渡。这允许使用公共接口在两个库之间传递类信息而无需直接依赖,但让 NetTopologySuite 专注于与来自 Java Topology Suite 的最新更新和其他拓扑改进保持同步,而无需 DotSpatial 团队进行复制源一直在他们自己的项目中。诀窍是将变量标注为 GeoAPI IGeometry,以便两个库都可以使用该对象。DotSpatial 不直接引用 NetTopologySuite 我不认为。此外,这篇文章可能是在过渡仍在开发中的时候发布的,所以希望现在只要你有最新版本就可以了。(我在 2018 年 5 月 22 日使用了 commit cfb523,可在此处获得: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);
Run Code Online (Sandbox Code Playgroud)