6

所以我有一堆 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”。

有任何想法吗?

在此先感谢,

4

1 回答 1

5

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