我们有一个使用WCF服务的C#.Net应用程序.该应用程序部署在Windows服务应用程序下的生产服务器中.该模块的一部分负责创建形状文件((*.shp,*.dbf),用于工作人员今天工作的较小区域,并将其发送到PDA.
要编写形状文件,我们使用第三方DLL NetTopologySuite
GisSharpBlog.NetTopologySuite.IO.ShapefileWriter
Run Code Online (Sandbox Code Playgroud)
这也是在C#中.(我不确定它引用的任何dll是否使用非托管代码.) 系统可能会工作一段时间再说一个星期.突然间我们得到一个例外说法
Attempted to read or write protected memory.
This is often an indication that other memory is corrupt.
Run Code Online (Sandbox Code Playgroud)
从Write方法,我们将几何集合写入形状文件.
sfw.Write(FileName, new GeometryCollection(gc.ToArray()));
Run Code Online (Sandbox Code Playgroud)
(GeometryCollection也来自第三方dll,GeoAPI.dll)
此错误会导致整个服务失效并使其无法正常运行.然后我们只是重新启动服务并尝试再次运行相同的数据,它将再工作一周,直到它再次崩溃.它只发生在生产中和随机时间.我们无法找到问题的原因.
许多论坛都认为这可能是因为某些非托管代码中的内存泄漏.但我们找不到哪一个.
我们也准备重写创建新形状文件的部分.请帮我解决这个问题.如果需要更多详细信息,请与我们联系.提前致谢.
所以我有一堆代表多多边形的 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