Python用于识别曲线段

1 投票
3 回答
2288 浏览
提问于 2025-04-16 19:02

我在ESRI论坛上发了一个类似的问题,但似乎没有人回复我,感觉有点冷清 :(

有没有人知道怎么判断一个ESRI的特征类里是否包含弯曲的(弧形)段呢?

我有几千个特征类,如果能用Python来处理就太好了!

谢谢!

编辑:更新

有人在ESRI那边评论说,可以通过比较特征的“真实中心”(truecentroid)和“中心”(centroid)来判断一个折线特征是否包含弧形段。如果真实中心和中心不相等(truecent. <> cent),那么这个特征就包含弧形段。这种方法还不错,但我仍然没有找到处理多边形的解决方案,因为上面的方法不适用。

这是我们目前的进展:

lstFCs = arcpy.ListFeatureClasses("*", "Polyline")

for fc in lstFCs:
    rows = arcpy.SearchCursor(fc)
    print fc
    for row in rows:
        type = row.Shape
        geom = str(type.centroid.X)
        truegeom = str(type.trueCentroid.X)
        if geom != truegeom:
            print row.ObjectID

del row, rows

3 个回答

0

在地理空间SQL中,有一个标准函数很适合你想做的事情。这个函数叫做ST_CurvosityIndex(LineString)。当你把它应用到一个LineString特征上时,它会给出一个介于0到1之间的指数值。1表示是一条直线,而0则表示是一串起点和终点在同一个坐标的线。

不过,我没有找到关于这个SQL/MM语句背后算法的更多信息,但我觉得你可以发邮件给Alessandro Furieri,邮箱是a.furieri@lqt.it,问问他关于这个算法的细节,看看它是怎么判断LineString特征的曲线程度的。

0

试试这样做:

import arcpy, json

arcpy.env.workspace = r"..." #Your database
lstFCs = arcpy.ListFeatureClasses("*", "Polyline")

for fc in lstFCs:
    rows = arcpy.SearchCursor(fc)
    print fc
    for row in rows:
        jsonGeometry = json.loads(row.Shape.JSON)
        if 'curve' in jsonGeometry or 'curveRings' in jsonGeometry:
            print row.ObjectID
    del row, rows
0

对于多边形,我觉得你首先需要遍历多边形的环,找到多条线段,然后就可以像你在代码中那样检查这些线段了。

抱歉我无法进一步帮助你,因为我没有安装ArcGIS(而且我很久以前就不再使用ArcGIS了)。你可以在 gis.stackexchange.com 上得到更好的回复。

撰写回答