网络分析(ArcPy)

news2024/9/19 6:34:10

 一.前言

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

二.数据资源

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

三.步骤

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

四.代码

# --coding:utf-8--
import arcpy
import numpy as np

path = u"C:\\Users\\86152\\Desktop\\各科作业\\GIS算法\\workspace_5"
arcpy.env.workspace = path

arcpy.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:
        break
    distance_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 + 1
    sql = '"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_List
    line_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 + 1
    ptl = '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为阻抗值计算设施点的服务区范围

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java_Map集合

认识Map集合 Map集合称为双列集合&#xff0c;格式&#xff1a;{key1value&#xff0c;key2value2,key3value3,…},一次需要存一对数据作为一个元素。 Map集合的每个元素“Keyvalue” 称为一个键值对/键值对对象/一个Entry对象&#xff0c;Map集合也被叫做“键值对集合” Map集…

Simscape Multibody与RigidBodyTree:机器人建模

RigidBodyTree&#xff1a;主要用于表示机器人刚体结构的动力学模型&#xff0c;重点关注机器人的几何结构、质量和力矩&#xff0c;以及它们如何随时间变化。它通常用于计算机器人的运动和受力情况。Simscape Multibody&#xff1a;作为Simscape的一个子模块&#xff0c;专门用…

10.2 Go Channel

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

虚拟机调用摄像头设备一直 select timeout问题的解决

在VMware里面调用v4l2-ctl捕获图像&#xff0c;或者opencv的VideoCapture(0)捕获图像&#xff0c;或者直接调用v4l2的函数&#xff0c;在streamon后&#xff0c;调用select读取数据&#xff0c;均会一直提示select timeout的问题&#xff0c;大概率是由于USB版本的兼容性造成的…

【氵】Archlinux+KDE Plasma 6+Wayland 安装nvidia驱动 / 开启HDR

参考: NVIDIA - Arch Linux 中文维基 &#xff08;其实就是把 wiki 简化了一下 注&#xff1a;本教程适用 GeForce 930 起、10 系至 20 系、 Quadro / Tesla / Tegra K-系列以及更新的显卡&#xff08;NV110 以及更新的显卡家族&#xff09;&#xff0c;此处以 RTX3060 为例 …

PHP 寿光蔬菜大棚宣传平台-计算机毕业设计源码88288

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于寿光蔬菜大棚宣传平台当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了寿光蔬菜大棚宣传平台&#xff0c;它彻底…

连续状态方程的离散化例子

连续状态方程的离散化 在控制系统中,连续状态方程的离散化是一个重要的步骤,用于将连续时间系统转换为离散时间系统,以便在数字控制器中实现。这通常涉及将连续时间的微分方程转换为离散时间的差分方程。常用的离散化方法 前向欧拉法(Forward Euler)简单易实现,但精度较…

详解python中的pandas.read_csv()函数

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

OpenGL绘制简单图形

绘制了一个紫色矩形和一个三角形&#xff0c;代码如下&#xff1a; #include <Windows.h> #include <gl/glut.h> void display(void) {glClearColor(0.0f, 0.0f, 0.0f, 1.0f); //设置清屏颜色glClear(GL_COLOR_BUFFER_BIT); //刷新颜色缓冲区&#xff1b;glColor3f…

“程序员职业素养全解析:技能、态度与价值观的融合“

文章目录 每日一句正能量前言专业精神专业精神的重要性技术执着追求的故事结论 沟通能力沟通能力的重要性团队合作意识实际工作中的沟通案例结论 持续学习持续学习的重要性学习方法进步经验结论 后记 每日一句正能量 梦不是为想象&#xff0c;而是让我们继续前往。 前言 在数字…

Policy-Based Reinforcement Learning(1)

之前提到过Discount Return&#xff1a; Action-value Function &#xff1a; State-value Function: &#xff08;这里将action A积分掉&#xff09;这里如果策略函数很好&#xff0c;就会很大&#xff1b;反之策略函数不好&#xff0c;就会很小。 对于离散类型&#xff1a; …

Qt中解决编译中文乱码和编译失败的问题

解决方法 1.使用#pragma execution_character_set(“utf-8”) QT5中在cpp中使用#pragma execution_character_set(“utf-8”)解决中文乱码&#xff0c;不过这里要求该源代码必须保存成带Bom的utf-8格式&#xff0c;这也是有些在网上下载的代码&#xff0c;加上这句源代码后还…

QPS,平均时延和并发数

我们当前有两个服务A和B&#xff0c;想要知道哪个服务的性能更好&#xff0c;该用什么指标来衡量呢&#xff1f; 1. 单次请求时延 一种最简单的方法就是使用同一请求体同时请求两个服务&#xff0c;性能越好的服务时延越短&#xff0c;即 R T 返回结果的时刻 − 发送请求的…

对猫毛过敏?怎么有效的缓解过敏症状,宠物空气净化器有用吗?

猫过敏是一种常见的过敏反应&#xff0c;由猫的皮屑、唾液或尿液中的蛋白质引起。这些蛋白质被称为过敏原&#xff0c;它们可以通过空气传播&#xff0c;被人体吸入后&#xff0c;会触发免疫系统的过度反应。猫过敏是宠物过敏中最常见的类型之一&#xff0c;对许多人来说&#…

C语言学习系列:初识C语言

前言&#xff0c;C语言是什么 语言&#xff0c;比如中文、英语、法语、德语等&#xff0c;是人与人交流的工具。 C语言也是语言&#xff0c;不过是一种特殊的语言&#xff0c;是人与计算机交流的工具。 为什么叫C语言呢&#xff1f; 这就要从C语言的历史说起了。 一&#…

11. MySQL 备份、恢复

文章目录 【 1. MySQL 备份类型 】【 2. 备份数据库 mysqldump 】2.1 备份单个数据表2.2 备份多个数据库2.3 备份所有数据库2.4 备份文件解析 【 3. 恢复数据库 mysql 】【 4. 导出表数据 OUTFILE 】【 5. 恢复表数据 INFILE 】 问题背景 尽管采取了一些管理措施来保证数据库的…

14. RTCP 协议

RTCP 协议概述 RTCP&#xff08;Real-time Transport Control Protocol 或 RTP Control Protocol 或简写 RTCP&#xff09;&#xff0c;实时传输控制协议&#xff0c;是实时传输协议&#xff08;RTP&#xff09;的一个姐妹协议。 注&#xff1a;RTP 协议和 RTP 控制协议&#…

Oracle数据库连接并访问Microsoft SQL Server数据库

Oracle数据库连接并访问Microsoft SQL Server数据库 说明&#xff1a;  1.实际开发中&#xff0c;Oracle数据库与SQLServer数据库之间可能需要相互进行访问&#xff0c;方便业务数据抽取&#xff0c;编写视图及表等操作。  2.SQLServer访问Oracle数据库配置相对较为简单&…

Python数据分析与机器学习在电子商务推荐系统中的应用

文章目录 &#x1f4d1;引言一、推荐系统的类型二、数据收集与预处理2.1 数据收集2.2 数据预处理 三、基于内容的推荐3.1 特征提取3.2 计算相似度3.3 推荐物品 四、协同过滤推荐4.1 基于用户的协同过滤4.2 基于物品的协同过滤 五、混合推荐与评估推荐系统5.1 结合推荐结果5.2 评…

抓包工具 HttpAnalyzerFull_V7.6.4 的下载、安装、使用

目录 一、简介二、下载和安装三、如何注册四、使用介绍4.1 开始、停止、清空监控内容4.2 筛选监控内容4.3 监控内容显示 一、简介 Http Analyzer 是一款功能强大的数据包分析工具&#xff0c;它可以实时监控服务器返回的消息&#xff0c;支持64位Windows系统&#xff0c;可以同…