Python用于识别曲线段
我在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 上得到更好的回复。