网络分析(ArcPy)

2024-06-11 02:36
文章标签 arcpy 网络分析

本文主要是介绍网络分析(ArcPy),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 一.前言

        GIS中的网络分析最重要的便是纠正拓扑关系,建立矫正好的网络数据集,再进行网络分析,一般大家都是鼠标在arcgis上点点点,今天说一下Arcpy来解决的方案,对python的要求并不高,具体api参数查询arcgis帮助文档即可。

二.数据资源

在我的资源发布里,下载即可

三.步骤

  • 新建数据库和数据集,并将数据导入数据集中
  • 建立拓扑—导入要素进拓扑—对拓扑添加规则—检查拓扑—将拓扑错误导出
  • 修正拓扑错误,并将选择出的拓扑点导出
  • 调用 arcpy.SelectLayerByAttribute_management 按属性查询点,找到 NERA_DIST 数值相 同的两个点,调用 Points To Line 工具将悬挂点连接起来,生成一个新的线图层。
  • 将所有以点生成的线图层与原道路数据进行合并处理
  • 删除所有以点生成的线图层
  • 对拓扑处理后的道路添加字段计算时间成本
  • 基于拓扑修正后的道路网创建网络数据集
  • 创建服务区图层,加载设施点数据,解算设施点服务范围,并保存服务区域数据

四.代码

# --coding:utf-8--
import arcpy
import numpy as nppath = u"C:\\Users\\86152\\Desktop\\各科作业\\GIS算法\\workspace_5"
arcpy.env.workspace = patharcpy.CreateFileGDB_management(path, "test5.gbd")  # 新建文件地理数据库
prj = u"C:\\Users\\86152\\Desktop\\各科作业\\GIS算法\\data_exp5\\CGCS2000 3 Degree GK CM 114E.prj"  # 坐标系参照arcpy.CreateFeatureDataset_management("test5.gdb", "test5", prj)  # 新建要素数据集# in_features = ['street1.shp', 'pharmacy.shp']  # 当数据就在当前工作空间时,可以直接用文件名
in_features = [u"C:\\Users\\86152\\Desktop\\各科作业\\GIS算法\\data_exp5\\street1.shp", u"C:\\Users\\86152\\Desktop"u"\\各科作业\\GIS算法\\data_exp5"u"\\pharmacy.shp"]
dataset_path = "C:\\Users\\86152\\Desktop\\各科作业\\GIS算法\\workspace_5\\test5.gdb\\test5"
arcpy.FeatureClassToGeodatabase_conversion(in_features, dataset_path)  # 将要素类导入至要素数据集中arcpy.env.workspace = dataset_path  # 切换工作空间至要素数据集,便于访问
arcpy.CreateTopology_management(dataset_path, "street_Topology")  # 新建拓扑
topo_path = dataset_path + "\\street_Topology"
arcpy.AddFeatureClassToTopology_management(r"street_Topology", r"street1", 1, 1)  # 拓扑中添加要素类
arcpy.AddRuleToTopology_management(topo_path, "Must Not Have Dangles (Line)", "street1", "", "", "")  # 新增拓扑规则
arcpy.ValidateTopology_management(topo_path, "")  # 拓扑验证
arcpy.ExportTopologyErrors_management(topo_path, dataset_path, "F_topo")  # 输出拓扑错误# 计算 F_topo_point 中每个点到其最近邻居点的距离,并将结果存储在 F_topo_point 的属性表中,生成几个新字段
arcpy.Near_analysis("F_topo_point", "F_topo_point")
# 近邻距离在0到20范围内的点可能是拓扑错误(例如,两个点非常接近但不相连,或者一个点悬挂在边上)
# 从 F_topo_point 中选择出 NEAR_DIST(近邻距离)在0到20之间的点,并将这些点保存到新的要素类 near_point 中
arcpy.Select_analysis("F_topo_point", "near_point", 'NEAR_DIST <20 and NEAR_DIST>0')
# 添加“NEAR”字段到near_point中
arcpy.AddField_management("near_point", "NEAR", "FLOAT", "", 6, "", "", "NULLABLE", "")
# 将NEAR_DIST的值赋值给NEAR字段
arcpy.CalculateField_management("near_point", "NEAR", '[NEAR_DIST]', "")  # 字段赋值最近距离# 取出最近距离的相同的点
distance_List = []
shprows = arcpy.SearchCursor("near_point", ['NEAR'])
while True:shprow = shprows.next()if not shprow:breakdistance_List.append(shprow.NEAR)
distance_List = np.unique(distance_List)  # 去除重复值,获得唯一的最近距离列表(shp_List)arcpy.MakeFeatureLayer_management("near_point", "near_point")  # 将要素转为图层# 对每一个唯一的最近距离值,选择相应的点,并将这些点连接成线,生成新的线图层
line_List = []
i = 0
for p in distance_List:i = i + 1sql = '"NEAR"=@p'sql = sql.replace('@p', str(p))print(sql)ptl = 'point_to_line@i'ptl = ptl.replace('@i', str(i))arcpy.SelectLayerByAttribute_management("near_point", "NEW_SELECTION", sql)# 根据按属性选择出的点生成线存入ptl图层中arcpy.PointsToLine_management("near_point", ptl)# 将相应德线图层加入line_Listline_List.append(ptl)line_List.append("street1")
arcpy.Merge_management(line_List, "allstreets_temp")  # 将所有以点生成的线图层与原道路数据进行合并处理
arcpy.UnsplitLine_management("allstreets_temp", "allstreets")  # 合并具有重合端点的线# 删除所有以点生成的线图层
i = 0
for p in distance_List:i = i + 1ptl = 'point_to_line@i'ptl = ptl.replace('@i', str(i))arcpy.Delete_management(ptl)arcpy.AddField_management("allstreets", "Time", "FLOAT", "", 6, "", "", "NULLABLE", "")  # 对allstreets添加字段存储时间成本
arcpy.CalculateField_management("allstreets", "Time", '[Shape_Length]/80', "")  # 计算时间成本print('接下来交给你了,请你完成网络分析!')#########此处手动建立网络数据集############# 根据allstreets创造出相应的网络数据集,完成之后解开下面的代码,注释掉上面的代码,运行即可解决# dataset_path = "C:\\Users\\86152\\Desktop\\各科作业\\GIS算法\\workspace_5\\test5.gdb\\test5"
# arcpy.env.workspace = dataset_path
# outSAResultObject = arcpy.na.MakeServiceAreaLayer("test5_ND", "Network_analysis", "长度", "", 1000)  # 创建服务区图层
# outNALayer = outSAResultObject.getOutput(0)
# subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
# facilitiesLayerName = subLayerNames["Facilities"]
# polygonsLayerName = subLayerNames["SAPolygons"]
# PolygonsSubLayer = arcpy.mapping.ListLayers(outNALayer, polygonsLayerName)[0]
# arcpy.na.AddLocations(outNALayer, facilitiesLayerName, "pharmacy", "", "")  # 加载pharmacy作为设施点
# arcpy.na.Solve(outNALayer)  # 求解
# arcpy.management.CopyFeatures(PolygonsSubLayer, "result")  # 将求解结果输出为要素

五.展示

 悬挂点(绿色)

  •         基于拓扑修正后的道路网创建网络数据集
  • 以距离1000m为阻抗值计算设施点的服务区范围

这篇关于网络分析(ArcPy)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1049970

相关文章

linux 内核网络分析 -- 分配并初始化socket

分配并初始化socket inet_creat()函数分配了一个sock结构,定义的代码在2.2中,分配工作是通过sk = sk_alloc(net, PF_INET, GFP_KERNEL, answer_prot) 来完成的,将anwer_prot作为其prot参数使用,已经设置为tcp_prot , sys_socketcall()->sys_socket() sock_create

WireShark网络分析~部署方式

一、《Wireshark网络分析就这么简单》 第一章学习 声明:文章只限于网络学习和实验,请遵守《网络安全法》。 第一章问题一:两台服务器A和B的网络配置如下(见图1),B的子网掩码本应该是255.255.255.0,被不小心配成了255.255.255.224。它们还能正常通信吗? 1.搭建网络拓扑   2.配置IP地址、子网掩码和网关; 服务A配置信息如

WireShark网络分析~环境搭建

一、虚拟网络设备搭建 (一)eNSP介绍 网络由网络设备和计算机构成,eNSP是模拟网络拓扑关系的软件。 (二)eNSP下载 华为官网:https://forum.huawei.com/enterprise/zh/thread/blog/580934378039689216 (三)eNSP安装 根据eNSP指导安装响应软件 下载完eNsp (四)安装eNSP完成,案例

字节跳动万卡集群网络分析

从公开的信息披露,截至2023年9月,字节跳动已经建立超过一万张的英伟达Ampere架构GPU集群,目前正在建设Hopper架构的集群。英伟达Ampere架构主要包括A100和A800型号的芯片,Hopper架构相较前者则更新,主要包括H100和H800芯片 字节和北大公布的论文,关于网络拓扑的描述主要是其中一章节: Network topology. Our datacenter netw

文献合集 | 静息态功能连接和脑网络分析方法

文章来源于微信公众号(茗创科技),欢迎有兴趣的朋友搜索关注。 静息态脑功能成像是脑功能磁共振成像方法的一种。正常人脑在静息态下依然存在有规律的功能活动网络,且病理状态下的脑功能活动网络与正常人脑存在差异及重塑,被检者处于静息状态下应用血氧水平依赖脑功能成像获得脑活动功能图的成像技术。无须进行复杂的任务设计,可操作性好,可避免基于任务的研究由于任务设计的不同及被检者执行情况的差异性导致的实验结果的

GIS之arcgis系列09:arcpy实现克里金差值

矢量点数据经过克里金差值后可以转换成栅格数据,那么就需要了解一下什么是克里金差值。 什么是克里金法?   IDW(反距离加权法)和样条函数法插值工具被称为确定性插值方法,因为这些方法直接基于周围的测量值或确定生成表面的平滑度的指定数学公式。第二类插值方法由地统计方法(如克里金法)组成,该方法基于包含自相关(即,测量点之间的统计关系)的统计模型。因此,地统计方法不仅具有产生预测表面的功能,而且能

GIS之arcgis系列10:arcpy实现批量掩膜提取

按掩膜提取 (Spatial Analyst) 提取掩膜所定义区域内的相应栅格像元。 OutRas = ExtractByMask(InRas1, InMsk1, "INSIDE") 使用情况 输入栅格中的其他属性(若有的话)将按照原样添加到输出栅格属性表。 根据所记录的属性,某些属性值可能需要重新计算。 将多波段栅格指定为输入栅格(Python 中的 in_raster)值时

GIS之arcgis系列08:arcpy实现批量excel转矢量点

文件夹内有很多excel表,每个excel表内有很多数据,爬取每条数据的日期、精度、纬度,根据经纬度将数据转换成矢量点,并指定坐标系。 完整版代码如下: 代码均已经过测试,可直接copy至arcgis工具箱中使用。 (copy后注意改成适用于自己数据的代码,微调相关信息) # -*- coding: utf-8 -*-import pandas as pdimport arcpy

GIS之arcgis系列07:conda环境下安装arcpy环境

首先将python27环境下的“Desktop10.8.pth”拷贝到anaconda环境下。 路径如下(仅参考): C:\Python27\ArcGIS10.8\Lib\site-packages\Desktop10.8.pth D:\Anaconda\Lib\site-packages 在anaconda prompt中穿创建一个新环境 conda create -n arc

arcpy批量导出图且图名为shp属性值

1.打开arcmap加载需要导出的图。需求是逐村显示“村界内图斑”并导出为图,在导出每个村时不显示周围的村和“村界内图斑” 2.arcmap上方空白处右键打开“数据驱动页面” 3.在“数据驱动页面”工具条点击第一个图标,打开“设置数据驱动页面”  4.在“设置数据驱动页面” 勾选“启用数据驱动页面”,在“索引图层”中选择需要驱动的图层(按照哪个图层的来批量出图) ,名称字段(按照