使用Arcgis做路径规划(使用python脚本调用)

场景

如何在全部的铁路线路数据中找到点到点的路径,并且点与点之前的路线可能跨越其它点-也就是路径规划的问题。

须知

argis: “计算机制图”应用,包含了全球范围内的底图、地图数据、应用程序,以及可配置的应用模板和开发人员使用的 GIS 工具和 API,可用于创建 Web 地图、发布GIS服务、共享地图、数据和应用程序

路径规划:根据起始出发点和到达点(可设置途经点和障碍点),在已确定的路网数据中找到最优路线(最短路程,最低时间)

工具

argis10.2

python2(建议使用arcgis自带python)

数据

以铁路数据为例:

路网数据(全国铁路线路shp文件)

列车行驶中所有的点到点的列表数据(shp文件形式,可用cvs转成shp)

步骤

argis配置

配置好argis,在argis客户端计算出一次路径分析,保证argis可执行

配置允许进行网络数据集操作

点击菜单customize->extensions,勾选network analyst

在这里插入图片描述

点击菜单customize->toolbar,勾选network analyst

在这里插入图片描述

数据导入

  1. 打开ArcCatalog,找到文件树后右键新建“File Geodatabase”,随后在新建的gdb上右键新建“feature dataset ”,之后在dataset上右键,选择“Import”–>“Feature Class”导入你的路网数据

    在这里插入图片描述

创建dataset时需要选择对应的投影和地理坐标系

在这里插入图片描述
在这里插入图片描述

结果如下:

在这里插入图片描述

2.线处理:进行线要素的处理

相交线打断。在arcToolBox的data management tools —>features—>featuretoline。
在点要素处打断线。在arcToolBox的data management tools —>features—>split line at point。

  1. 构建拓扑结构:在数据集dataset上右键,New —> Network Dataset…

    在这里插入图片描述

结果如下:

在这里插入图片描述

  1. 新建一次分析:network analyst —> New Route

    在这里插入图片描述

结果如下,左侧为本次分析的数据集界面:

在这里插入图片描述

  1. 增加途经点:Stops 右键 -> Load Locations…

在这里插入图片描述

选择途经点图层导入途经点

结果如下:

在这里插入图片描述

  1. 分析路径:
    点击 solve

在这里插入图片描述

结果如下:

在这里插入图片描述

左侧下的Routes就是我们需要的数据

python执行准备

  1. 脚本:以下代码

  2. 前面配置的网络数据集

  3. 火车站数据以出发点,结束点两个点为一组,全部路线数据(shp),如下图所示,相同的sort为一组:
    在这里插入图片描述

  4. 执行脚本

PS: 数据量多时,可同时执行多个脚本,但是执行的参数需要错开,并且网络数据集需要每个脚本一个,避免出现操作文件是出现冲突,导致异常。

#调用argis接口 根据点查找路径,并将路径保存到shp文件中
import arcpy
from arcpy import env

try:
    #Check out the Network Analyst extension license
    arcpy.CheckOutExtension("Network")

    #Set environment settings  配置argis的当前基础数据的数据文件地址
    env.workspace = "C:/Documents/ArcGIS/routeana0.gdb"
        env.overwriteOutput = True
    
    #Set local variables  配置好的网络数据集(NetworkDataset)位置  即基础数据
    inNetworkDataset = "train/train_ND"
    #输出的经过点的图层名称
    outNALayerName = "StationRoute"
    impedanceAttribute = "Length"
    inAddressLocator = "train_station_copy"
    #所有经过点的图层位置
    allinFeatures = "s2sdis"
    #输入经过点数据表位置
    inAddressTable = "G:/ArcGIS/python/StopAddresses.csv"
    #输入经过点数据表 字段
    inAddressFields = "Name Name VISIBLE NONE"
    #输出经过点图层名称
    outStops = "GeocodedStops"
    #输出经过点图层保存地址
    outLayerFile = "G:/ArcGIS/python" + "/" + outNALayerName + ".lyr"
    searchTolerance = "3000 Meters"
    
    #Create a new Route layer. For this scenario, the default value for all the
    #remaining parameters statisfies the analysis requirements
    outNALayer = arcpy.na.MakeRouteLayer(inNetworkDataset, outNALayerName,
                                         impedanceAttribute)
    
    #Get the layer object from the result object. The route layer can now be
    #referenced using the layer object.  得到输出图层集
    outNALayer = outNALayer.getOutput(0)
    
    #Get the names of all the sublayers within the route layer.
    #得到输出图层名称
    subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
    #Stores the layer names that we will use later  根据名称获取对应图层
    stopsLayerName = subLayerNames["Stops"]
    routesLayerName = subLayerNames["Routes"]
    
    #需要分析多次 筛选多批次的经过点  数据量大时可分批执行
    for i in range(int(start),int(end)) :
        筛选当前批次的经过点到临时图层station2station0
        inFeatures = arcpy.Select_analysis(allinFeatures, "station2station0", '"sort" = '+str(i))
        
        #Load the geocoded address locations as stops mapping the address field from
        #geocoded stop features as Name property using field mappings.
        #网络数据集中清除原来的点,并加入输出经过点图层中的点
        arcpy.na.AddLocations(outNALayer, stopsLayerName, inFeatures, "Name Name #",
                                  searchTolerance, append = "CLEAR",exclude_restricted_elements = "EXCLUDE")
    
        #Solve the route layer, ignore any invalid locations such as those that
        #can not be geocoded
        #执行查找路径方法  可能存在找不到路径的情况 捕捉异常,不打断循环
        try:
            result = arcpy.na.Solve(outNALayer,"SKIP")
        except Exception as e:
            # If an error occurred, print line number and error message
            import traceback, sys
            tb = sys.exc_info()[2]
            print "An error occured on line %i" % tb.tb_lineno
            # 删除临时图层,避免下次创建图层时出错
            arcpy.Delete_management("station2station0")
            print str(e)
            print str(i)
            continue
    
        # 删除临时图层,避免下次创建图层时出错
        arcpy.Delete_management("station2station0")
        #Get the polygons sublayer from the service area layer
        #获取结果中路径的图层
        routes_sublayer = arcpy.mapping.ListLayers(outNALayer,
                                            routesLayerName)[0]
        #将获得的路径汇总到时s2s的shp中
        arcpy.Append_management([routes_sublayer], "s2s", "TEST")

    print("Script completed successfully")

except Exception as e:
    # If an error occurred, print line number and error message
    import traceback, sys
    tb = sys.exc_info()[2]
    print ("An error occured on line %i" % tb.tb_lineno)
    print (str(e))
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 面向ArcGISPython脚本编程是指使用Python语言编写脚本,以实现ArcGIS软件中的地理数据处理、分析、可视化等功能。这种编程方式可以通过ArcPy模块来实现,ArcPy提供了一系列的工具和函数,可以方便地访问和操作ArcGIS中的地理数据。通过面向ArcGISPython脚本编程,用户可以快速地完成复杂的地理数据处理任务,提高工作效率。 ### 回答2: 面向ArcGISPython脚本编程是一种使用Python编程语言来操作ArcGIS geoprocessing工具和对象模型的方法。ArcGIS是一个强大的地理信息系统(GIS)软件,提供了广泛的功能来管理、分析和展示地理空间数据。 Python是一种流行的脚本编程语言,它具有简单易学、灵活和功能广泛等特点。通过Python脚本编程,可以利用ArcGIS提供的丰富功能来完成地理数据的处理、分析和可视化等任务。 在面向ArcGISPython脚本编程中,我们可以使用ArcPy模块来进行编程。ArcPy是ArcGISPython库,提供了一系列用于操作地理数据的工具和函数。通过ArcPy,我们可以进行空间数据的导入导出、创建和编辑地理要素、进行空间分析和地图生成等操作。 使用Python脚本编程可以极大地提高工作效率和自动化处理过程。通过编写脚本,可以将一系列繁琐的操作自动化执行,从而节省时间和精力。Python的语法简洁而强大,可以通过简单的几行代码完成复杂的地理数据处理任务。 除了ArcPy,Python还支持其他各种库和模块,如NumPy、Pandas和Matplotlib等,这些库可以进一步拓展ArcGIS的功能,并进行更高级的数据处理和可视化。通过Python脚本编程,我们可以根据自己的需求定制化和扩展化地理分析流程,实现更灵活和精确的地理数据处理和分析。 总之,面向ArcGISPython脚本编程是一种强大而灵活的地理数据处理方法,通过编写Python脚本,可以利用ArcGIS提供的功能和库来高效地处理和分析地理空间数据。 ### 回答3: 面向ArcGISPython脚本编程指的是使用Python语言编写脚本以实现ArcGIS软件的自动化操作和地理空间数据的处理与分析。通过Python脚本,我们可以利用ArcGIS的功能来完成各种地理信息系统的任务,包括数据处理、地图制作、空间分析等。 在进行面向ArcGISPython脚本编程时,我们可以使用ArcPy这个Python库来调用ArcGIS的各种功能。ArcPy提供了一系列的工具和函数,使得我们可以使用Python语言与ArcGIS进行交互。我们可以通过ArcPy来读取和处理地理空间数据,创建和编辑地图要素,进行空间查询和分析,以及生成各种地理信息产品。 通过面向ArcGISPython脚本编程,我们可以提高工作效率,实现自动化的地理信息处理工作流程。比如可以编写脚本实现批量处理地理数据,进行数据转换和格式化,同时可以用脚本来生成符号化的地图,并自动进行地理空间分析,生成分析结果报告。 除了使用ArcPy,我们还可以使用Python的其他第三方库来扩展脚本的功能,比如使用Pandas库来进行数据处理和分析,使用NumPy库和Matplotlib库来进行科学计算和绘图。这样可以更加灵活地进行地理空间数据的处理和分析。 总之,面向ArcGISPython脚本编程是一种强大的地理信息处理方法,可以帮助我们快速高效地处理数据、分析空间关系和制作地图。通过编写脚本,可以提高工作效率,减少重复劳动,同时提供更强大的数据分析和可视化能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值