问题描述

昨天刚刚发了一篇文章,解决了弧到底如何转多段线然后入库,开始还在沾沾自喜,觉得问题解决了,之前的文章链接在这儿:弧转多段线
这不是,今天问题又来了,还是接着上面的错误
错误截图
然后心态崩了啊,MD不是已经转过了么?那么开始单步执行,然后崩溃的又来了,这个元素有弧

判断
但是遍历Segment都是Line,弧在哪里?
那么再进一步,转出来Json看看:
ArcGIS Json结构
这横平竖直的,连个‘C’都看不到啊,哪里有弧……然后去问了DeepSeek,回答的也比较有艺术
Answer

解决方案

好了,知道问题可能是出在之前的数据提供方已经做了简化(ArcMap中可能没有暴露HasCurves的相关函数,导致元素更新了,索引和数据记录没有更新?)那就好办了,既然可以转Json

try
{
    var wktString = GeometryEngine.Instance.ExportToWKT(WktExportFlags.WktExportDefaults, shape);
    var wktReader = new NetTopologySuite.IO.WKTReader();
    var geom = wktReader.Read(wktString);
    shapeProperty.SetValue(addItem, geom);
}
catch
{
    var json = shape.ToJson();
    var geometry = GeometryEngine.Instance.ImportFromJson(
        JsonImportFlags.JsonImportDefaults, json);
    var wktString = GeometryEngine.Instance.ExportToWKT(WktExportFlags.WktExportDefaults, geometry);
    var wktReader = new NetTopologySuite.IO.WKTReader();
    var geom = wktReader.Read(wktString);
    shapeProperty.SetValue(addItem, geom);
}

就这样吧……已经增密的图层理论上不存在弧,那么应该就是都是线段组合,也不用担心丢失什么精度了,使用Json重新创建的Geometry里面HasCurvers()的属性返回的就是false了,这种方式理论上对我代码的改造量最小,就这么干了,然后成功上传数据库……结束。
写这个东西一方面是记录下,避免下次遇到问题不知道怎么解决……
另一方面么……让朋友们别踩坑,因为你永远不清楚源数据的千奇百怪……

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐