标签: geoapi

随机错误:尝试读取或写入受保护的内存

我们有一个使用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)

此错误会导致整个服务失效并使其无法正常运行.然后我们只是重新启动服务并尝试再次运行相同的数据,它将再工作一周,直到它再次崩溃.它只发生在生产中和随机时间.我们无法找到问题的原因.

许多论坛都认为这可能是因为某些非托管代码中的内存泄漏.但我们找不到哪一个.

我们也准备重写创建新形状文件的部分.请帮我解决这个问题.如果需要更多详细信息,请与我们联系.提前致谢.

c# memory-leaks shapefile geoapi sharpmap

11
推荐指数
1
解决办法
3624
查看次数

NettopologySuite 和 Dotspatial WKTReader

所以我有一堆代表多多边形的 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

c# geoapi nettopologysuite dotspatial

6
推荐指数
1
解决办法
3398
查看次数