首页 > 其他分享 >ArcGIS Pro脚本工具(3)——直线转弧线

ArcGIS Pro脚本工具(3)——直线转弧线

时间:2023-02-08 15:48:36浏览次数:39  
标签:弧线 Pro addVertex ArcGIS curveline line arcpy 工具

OD成本矩阵求解后的生成线为直线,如下左图,略丑。一通捣鼓终于实现了将直线转为弧线,效果见右图。

实现的方法主要是参考了这片文章,在此先感谢前辈大佬。

生成流向弧线工具 - GIS知乎-新一代GIS问答社区http://zhihu.geoscene.cn/article/2811在前文的基础上,修改了添加折点的方法(为此还解了一道几何题,几乎抓破脑壳),增加了对弧线方向和弧度的控制。值得一提的是,将原直线的属性信息也一并增加到了新生成的弧线中,方便后续的符号化。

工具脚本

    # -*- coding: utf-8 -*-
     
    #引入模块
    import os, arcpy
    import arcpy.cartography as CA
     
     
    #输入原始的line
    line = arcpy.GetParameterAsText(0)
     
     
    #计算弧线的顶点坐标的函数
    k=arcpy.GetParameter(2)
    d=arcpy.GetParameterAsText(3)
     
    def addPoint(x0, y0, x2, y2):
        if d =="顺向":
            x1,y1 = (x2+x0)/2-(y2-y0)/k,(y2+y0)/2+(x2-x0)/k
        elif d=="逆向":
            x1,y1 = (x2+x0)/2+(y2-y0)/k,(y2+y0)/2-(x2-x0)/k
        return (x1, y1)  
     
      
    # 创建一个临时线要素类addVertex
    addVertex = arcpy.CreateFeatureclass_management("in_memory", "addVertex", "POLYLINE", spatial_reference = arcpy.Describe(line).spatialReference)
    arcpy.AddField_management(addVertex, "ORIGID", "LONG")  
     
     
    #创建与line对应的折线并写入addVertex
    with arcpy.da.SearchCursor(line, ["SHAPE@", "OID@"]) as sc:  
        with arcpy.da.InsertCursor(addVertex, ["SHAPE@", "ORIGID"]) as ic:  
            for row in sc:  
                shp = row[0]
                p0 = shp.firstPoint  
                p2 = shp.lastPoint
                x1,y1 = addPoint(p0.X, p0.Y, p2.X, p2.Y)  
                p1 = arcpy.Point(x1,y1)  
                new_geometry = arcpy.Polyline(arcpy.Array([p0, p1, p2]))  
                new_row = [new_geometry, row[1]]  
                ic.insertRow(new_row)
     
     
    #调用SmoothLine工具,输入折线addVertex生成弧线curveline
    curveline = arcpy.GetParameterAsText(1)
    CA.SmoothLine(addVertex, curveline, "BEZIER_INTERPOLATION", "", "", "NO_CHECK")
     
     
    #将原始line的属性信息连接到curveline中
    try:
        arcpy.management.JoinField(curveline, "ORIGID", line, "OBJECTID", )
    except:
        arcpy.management.JoinField(curveline, "ORIGID", line, "FID", )
     
     
    # Delete inmemo fc
    arcpy.Delete_management("in_memory")

 工具参数

 工具使用

 工具下载

代码请自取,完整工具请私信联系
工具说明

有网友获取了代码制作了Pro和ArcMap工具箱,这里需要说明,ArcMap10.7中使用该代码制作的工具会出现错误,弧线曲度较大的情况下生成不了预想中的弧线,原因是ArcMap中的平滑线工具不能正常工作。10.8正常,其他版本没有试过。
————————————————
版权声明:本文为CSDN博主「学学GIS」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baidu_28157641/article/details/124437500

标签:弧线,Pro,addVertex,ArcGIS,curveline,line,arcpy,工具
From: https://www.cnblogs.com/gisoracle/p/17101974.html

相关文章