惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
有赞技术团队
有赞技术团队
www.infosecurity-magazine.com
www.infosecurity-magazine.com
大猫的无限游戏
大猫的无限游戏
爱范儿
爱范儿
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threatpost
V
Visual Studio Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - Franky
人人都是产品经理
人人都是产品经理
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
The Cloudflare Blog
N
News and Events Feed by Topic
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
AWS News Blog
AWS News Blog
S
SegmentFault 最新的问题
T
Tailwind CSS Blog
Hugging Face - Blog
Hugging Face - Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Spread Privacy
Spread Privacy
J
Java Code Geeks
博客园 - 聂微东
T
Tor Project blog
宝玉的分享
宝玉的分享
博客园 - 叶小钗
Webroot Blog
Webroot Blog
博客园 - 【当耐特】
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
H
Heimdal Security Blog
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
MongoDB | Blog
MongoDB | Blog
I
InfoQ
Security Latest
Security Latest
Martin Fowler
Martin Fowler
Hacker News: Ask HN
Hacker News: Ask HN
P
Privacy International News Feed
C
CERT Recently Published Vulnerability Notes
Latest news
Latest news
雷峰网
雷峰网
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cisco Blogs
H
Help Net Security
L
LINUX DO - 最新话题
L
LINUX DO - 热门话题

博客园 - 我才是银古

第16章:常见问题、排错与最佳实践 第15章:扩展生态、MCAD 与外部集成 第12章:实战案例:机械结构与 3D 打印零件 第14章:构建、测试、调试与贡献流程 第13章:OpenSCAD 源码架构与核心执行流程 第11章:预览、渲染、网格精度与性能优化 第09章:列表推导、递归与算法建模 第08章:参数化零件库与复用设计 第10章:导入导出、命令行与自动化 第06章:CSG 布尔建模方法 第07章:二维图形、拉伸、旋转与投影 第05章:基础几何、坐标系与变换 第04章:参数、变量、函数、模块与作用域 OpenSCAD 教程目录 第03章:OpenSCAD 语言基础 第02章:安装、环境配置与开发工作流 第01章:OpenSCAD 项目全景与学习路线 第02章:源码获取、编译与开发环境配置 第01章:OCCT项目全景与学习路线 第18章:二次开发实战与综合案例 第18章:综合实战案例 第17章:数据交换与协同 第16章:源码架构与二次开发 第15章:插件与自定义工作台开发 第14章:Python脚本宏与自动化 第13章:FEM仿真分析 第12章:CAM数控加工 第11章:SurfaceMesh与逆向工程 第10章:Draft二维绘图与BIM建筑 第09章:工程图TechDraw 第07章:参数化表达式与Spreadsheet 第08章:装配设计Assembly 第06章:Part工作台与几何内核 第05章:PartDesign实体特征建模 第04章:草图Sketcher约束建模 第02章:安装版本与工作环境配置 第03章:界面工作台与基础操作 第01章:项目全景与学习路线 第十二章:插件开发、研究功能与最佳实践 第十章:定时任务与自动化(Cron) 第七章:技能、记忆与自学习闭环 第八章:MCP 集成与上下文文件 第六章:工具系统与终端后端 第五章:模型供应商与配置体系 Hermes Agent 教程目录 第十一章:语音、视觉、浏览器与子代理协作 第四章:CLI/TUI 与会话管理 第十二章:学习路线、实战方案与最佳实践 第十一章:源码结构、开发调试与插件开发 第十章:自动化、远程访问、日志与排障 第九章:Control UI、节点、Canvas 与语音能力 第七章:工具、技能、插件与能力扩展 第八章:安全模型、访问控制与沙箱实践 第六章:Agent 工作区、会话与多智能体路由 第五章:多通道消息接入与聊天平台配置 第四章:配置体系、模型接入与认证管理 第三章:Gateway 架构、协议与运行机制 第二章:安装、环境准备与快速上手 第一章:OpenClaw 项目概览与核心定位 oh-my-openagent 教程目录 09-命令模型回退与配置参考 10-实战案例最佳实践与故障排除 05-工作模式-Ultrawork-Prometheus-Atlas 08-Hooks与MCP系统 06-Category与Skill系统 07-核心工具链 04-智能体全景详解 03-安装与环境配置 02-整体架构与多模型编排机制 01-项目简介与核心理念 01-项目概览与学习路线 02-安装部署与工具适配 03-Skill机制与using-superpowers 05-TDD系统化调试与完成前验证 04-需求澄清方案设计与计划编写 07-并行智能体子智能体与Git-Worktree 第六章:代码审查、反馈处理与分支收尾 08-中国特色Skills与本土团队落地 09-MCP构建工作流执行与自定义Skill 第23章:FreeCAD-Python-API Clipper2 C# 源码解读教程 第19章:PolyTree 多边形树结构 第20章:实际应用与最佳实践 第18章:Minkowski 和与差 第17章:RectClip 矩形裁剪优化 第16章:ClipperOffset 偏移类详解 第15章:填充规则详解 第14章:布尔运算执行流程 第13章:ClipperD 浮点裁剪类 第11章:OutRec 与 OutPt 输出结构 第9章:Active 活动边结构 第10章:Vertex 顶点与 LocalMinima 局部极小值 第12章:Clipper64 裁剪类详解 第7章:高精度运算与128位整数 第8章:ClipperBase 基类详解 第5章:枚举类型与常量定义 第6章:InternalClipper 内部工具类 第2章:核心数据结构 - Point64、PointD 第3章:路径与多边形表示 - Path64、PathD、Paths64、PathsD 第4章:矩形边界 - Rect64、RectD
第十一章:网络分析步骤详解
我才是银古 · 2026-06-22 · via 博客园 - 我才是银古

第十一章:网络分析步骤详解

网络分析步骤(network.*)提供基于图论的路网分析和地理编码功能,共 3 个步骤,需要安装 [network] 可选依赖(networkx、geopy)。


11.1 安装依赖

pip install -e ".[network]"

11.2 步骤总览

步骤 ID 名称 功能 依赖
network.shortest_path 最短路径 计算两点间最短路径 networkx
network.service_area 服务区分析 计算可达服务区 networkx
network.geocode 地理编码 地址列表→坐标点 geopy

11.3 network.shortest_path:最短路径

在线矢量网络(道路、管线等)中计算两点之间的最短路径,使用 networkx 构建图论模型。

参数

参数 类型 必填 默认值 说明
input geodataframe 输入线矢量网络(道路、管线等)
origin list 起点坐标 [x, y]
destination list 终点坐标 [x, y]
weight string 权重字段名(如 "travel_time", "length");不指定则使用几何长度

输出

属性 类型 说明
output GeoDataFrame 最短路径线(LineString),含 path_costnode_count 属性
stats.path_cost float 路径总代价(权重之和或几何长度)
stats.node_count int 路径经过的节点数量
stats.path_length float 路径几何长度

实现原理

  1. 将线矢量网络的每条线段端点作为图节点,线段作为边
  2. 边权重默认为几何长度,也可使用指定属性字段
  3. 找到最近的图节点作为起终点
  4. 使用 networkx.shortest_path(Dijkstra 算法)计算最短路径
  5. 将路径节点序列构建为 LineString

示例

pipeline:
  name: "最短路径分析"

  steps:
    - id: load-network
      use: io.read_vector
      params: { path: "data/road_network.shp" }

    - id: reproject
      use: vector.reproject
      params:
        input: "$load-network"
        target_crs: "EPSG:3857"

    - id: find-path
      use: network.shortest_path
      params:
        input: "$reproject"
        origin: [12952000, 4835000]       # EPSG:3857 坐标
        destination: [12960000, 4840000]
        weight: "travel_time"              # 按行驶时间最短
      on_error: fail

    - id: save-path
      use: io.write_vector
      params:
        input: "$find-path"
        path: "output/shortest_path.geojson"
        format: "GeoJSON"

  outputs:
    path_cost: "$find-path.path_cost"
    path_length: "$find-path.path_length"

注意:若起终点之间没有连通路径,步骤会抛出 ValueError: No path found。建议配合 on_error: fail 快速发现网络连通性问题。


11.4 network.service_area:服务区分析

从指定起点出发,计算在给定代价限制内能到达的所有节点,并构建服务区多边形(等时圈或等距圈)。

参数

参数 类型 必填 默认值 说明
input geodataframe 输入线矢量网络
origin list 服务中心点坐标 [x, y]
max_cost number 最大代价(距离/时间上限)
weight string 权重字段名;不指定则使用几何长度

输出

属性 类型 说明
output GeoDataFrame 服务区多边形(Polygon),由可达节点的凸包构建
stats.reachable_nodes int 可达节点数量
stats.max_cost float 实际使用的最大代价

示例

pipeline:
  name: "医院 15 分钟步行服务区"

  steps:
    - id: load-network
      use: io.read_vector
      params: { path: "data/street_network.shp" }

    - id: reproject
      use: vector.reproject
      params:
        input: "$load-network"
        target_crs: "EPSG:3857"

    # 步行速度约 80 米/分钟,15 分钟 = 1200 米
    - id: service-area
      use: network.service_area
      params:
        input: "$reproject"
        origin: [12953000, 4836000]     # 医院坐标(EPSG:3857)
        max_cost: 1200                  # 1200 米

    - id: save-service-area
      use: io.write_vector
      params:
        input: "$service-area"
        path: "output/hospital_15min.geojson"
        format: "GeoJSON"

11.5 network.geocode:地理编码

将地址字符串列表批量转换为地理坐标,使用 geopy 库,目前支持 Nominatim(OpenStreetMap 数据)。

参数

参数 类型 必填 默认值 说明
addresses list 地址字符串列表
provider string nominatim 地理编码服务(当前仅支持 nominatim
user_agent string geopipe-agent HTTP User-Agent(Nominatim 要求非空且唯一)

输出

属性 类型 说明
output GeoDataFrame 地理编码结果点数据(CRS: EPSG:4326)。含 addressresolved_addresslatitudelongitude 字段
stats.total int 输入地址总数
stats.success int 成功编码数量
stats.failed int 失败数量
stats.failed_addresses list 失败的地址列表

示例

pipeline:
  name: "学校地理编码"

  steps:
    - id: geocode-schools
      use: network.geocode
      params:
        addresses:
          - "北京市海淀区清华大学"
          - "北京市海淀区北京大学"
          - "北京市朝阳区中国传媒大学"
        provider: "nominatim"
        user_agent: "my-gis-project"    # 自定义标识,避免被限速
      on_error: retry    # 网络问题时重试

    - id: save-locations
      use: io.write_vector
      params:
        input: "$geocode-schools"
        path: "output/schools.geojson"
        format: "GeoJSON"

  outputs:
    success_count: "$geocode-schools.success"
    failed_count: "$geocode-schools.failed"

使用限制:Nominatim 是开放服务,有使用速率限制(1 请求/秒)。批量地理编码时请设置合理的 user_agent 并注意请求频率。商业场景建议使用付费地理编码 API。


11.6 网络分析注意事项

6.1 网络数据质量要求

网络分析步骤将线矢量网络转换为图,网络数据质量直接影响分析结果:

  • 连通性:道路线必须在端点处精确相交,存在悬挂线或缺口会导致网络不连通
  • 方向性:当前实现为无向图,不区分单行道方向
  • 坐标系:建议使用投影坐标系(单位米)进行距离计算,使用 WGS84(度)时权重单位为度

6.2 数据预处理建议

# 最短路径分析前的数据准备
steps:
  - id: load-roads
    use: io.read_vector
    params: { path: "data/roads.shp" }

  # 过滤出可通行道路
  - id: filter-passable
    use: vector.query
    params:
      input: "$load-roads"
      expr: "road_class not in ['footway', 'cycleway']"

  # 转换为米制坐标
  - id: reproject
    use: vector.reproject
    params:
      input: "$filter-passable"
      target_crs: "EPSG:3857"

  - id: find-path
    use: network.shortest_path
    params:
      input: "$reproject"
      origin: [12952000, 4835000]
      destination: [12960000, 4840000]

11.7 本章小结

本章介绍了 3 个网络分析步骤(需安装 [network] 依赖):

  1. network.shortest_path:Dijkstra 最短路径算法,支持自定义权重字段,网络不连通时报错
  2. network.service_area:从起点出发的可达服务区,基于代价限制(距离/时间),结果为凸包多边形
  3. network.geocode:批量地址→坐标转换,使用 Nominatim,注意使用频率限制,建议配 on_error: retry

导航← 第十章:空间分析步骤第十二章:数据质检步骤 →