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

推荐订阅源

L
LINUX DO - 最新话题
C
Cyber Attacks, Cyber Crime and Cyber Security
G
GRAHAM CLULEY
T
Tenable Blog
T
Threatpost
C
CXSECURITY Database RSS Feed - CXSecurity.com
I
Intezer
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
D
Darknet – Hacking Tools, Hacker News & Cyber Security
K
Kaspersky official blog
Security Latest
Security Latest
P
Privacy & Cybersecurity Law Blog
Google Online Security Blog
Google Online Security Blog
SecWiki News
SecWiki News
P
Palo Alto Networks Blog
TaoSecurity Blog
TaoSecurity Blog
Webroot Blog
Webroot Blog
Spread Privacy
Spread Privacy
O
OpenAI News
The Last Watchdog
The Last Watchdog
P
Proofpoint News Feed
C
Check Point Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
人人都是产品经理
人人都是产品经理
S
Security @ Cisco Blogs
Scott Helme
Scott Helme
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
月光博客
月光博客
S
Securelist
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
T
Troy Hunt's Blog
W
WeLiveSecurity
GbyAI
GbyAI
N
News | PayPal Newsroom
Y
Y Combinator Blog
C
Cisco Blogs
H
Help Net Security
The GitHub Blog
The GitHub Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园 - 【当耐特】
Jina AI
Jina AI
MongoDB | Blog
MongoDB | Blog
P
Proofpoint News Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
云风的 BLOG
云风的 BLOG
小众软件
小众软件
N
News and Events Feed by Topic

博客园 - 我才是银古

第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 博客园 - 我才是银古

第十章:空间分析步骤详解

空间分析步骤(analysis.*)提供高级地理空间分析功能,共 4 个步骤,需要安装 [analysis] 可选依赖(scipy、scikit-learn、matplotlib)。


10.1 安装依赖

pip install -e ".[analysis]"

若未安装,步骤在注册时不会抛出错误,但执行时会提示缺少 scipyscikit-learn


10.2 步骤总览

步骤 ID 名称 功能 依赖
analysis.voronoi 泰森多边形 点→泰森多边形 scipy
analysis.heatmap 热力图 点→核密度栅格 scipy, rasterio
analysis.interpolate 空间插值 点→连续面插值 scipy
analysis.cluster 空间聚类 点聚类分析 scikit-learn

10.3 analysis.voronoi:泰森多边形

根据输入点数据生成泰森多边形(Voronoi 图)。每个多边形包含距离该点比其他点更近的所有位置。

参数

参数 类型 必填 默认值 说明
input geodataframe 输入矢量数据(至少 3 个点)
envelope geodataframe 裁剪边界;不指定则使用点范围的凸包+缓冲区

输出

属性 类型 说明
output GeoDataFrame 泰森多边形(Polygon),携带原始点的属性
stats.input_point_count int 输入点数量
stats.polygon_count int 生成的多边形数量

示例

pipeline:
  name: "气象站泰森多边形"
  description: "为气象站生成泰森多边形,用于面积加权降水量估算"

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

    - id: load-basin
      use: io.read_vector
      params: { path: "data/river_basin.shp" }

    - id: voronoi
      use: analysis.voronoi
      params:
        input: "$load-stations"
        envelope: "$load-basin"      # 裁剪到流域边界

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

注意:输入必须是点(Point)类型。若输入是多边形,先用 vector.reproject 转换或提取质心。


10.4 analysis.heatmap:热力图

基于核密度估计(KDE)从点数据生成热力图栅格,使用高斯核函数和 2D 直方图。

参数

参数 类型 必填 默认值 说明
input geodataframe 输入矢量数据
resolution number 100 输出栅格宽度方向的像素数(越大越精细)
bandwidth number 高斯核带宽(与坐标单位相同);不指定则自动估算

输出

属性 类型 说明
output raster_info 热力图栅格数据(单波段,float64)
stats.point_count int 输入点数量
stats.max_density float 最大密度值
stats.width / stats.height int 输出栅格尺寸

示例

- id: load-incidents
  use: io.read_vector
  params: { path: "data/traffic_accidents.shp" }

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

- id: heatmap
  use: analysis.heatmap
  params:
    input: "$reproject"
    resolution: 500
    bandwidth: 1000     # 1000 米(EPSG:3857 单位为米)

- id: save-heatmap
  use: io.write_raster
  params:
    input: "$heatmap"
    path: "output/accident_heatmap.tif"
    metadata: "$heatmap.metadata"

10.5 analysis.interpolate:空间插值

将离散点数据插值为连续栅格面,支持 griddata 和 IDW(反距离权重)两种方法。

参数

参数 类型 必填 默认值 说明
input geodataframe 输入矢量数据
value_field string 用于插值的属性字段名
resolution number 100 输出栅格分辨率(像素数)
method string linear 插值方法:linear/nearest/cubic/idw
power number 2 IDW 幂次(仅 method=idw 时有效)

示例

- id: load-stations
  use: io.read_vector
  params: { path: "data/precipitation_stations.shp" }

- id: interpolate-precip
  use: analysis.interpolate
  params:
    input: "$load-stations"
    value_field: "precip_mm"    # 降水量字段
    resolution: 200
    method: "idw"
    power: 2

- id: save-surface
  use: io.write_raster
  params:
    input: "$interpolate-precip"
    path: "output/precipitation_surface.tif"
    metadata: "$interpolate-precip.metadata"

10.6 analysis.cluster:空间聚类

对点数据进行空间聚类分析,支持 DBSCAN(基于密度)和 KMeans(基于距离)两种算法,结果在原始数据上增加 cluster 字段(DBSCAN 中噪声点标记为 -1)。

参数

参数 类型 必填 默认值 说明
input geodataframe 输入矢量数据
method string dbscan 算法:dbscan/kmeans
n_clusters number 5 簇数量(仅 KMeans)
eps number 0.5 邻域半径(仅 DBSCAN,与坐标单位相同)
min_samples number 5 形成核心点的最小邻居数(仅 DBSCAN)

输出

属性 类型 说明
output GeoDataFrame cluster 标签字段的矢量数据
stats.n_clusters int 实际发现的簇数量
stats.noise_count int 噪声点数量(DBSCAN 中 cluster=-1 的点)

算法选择建议

场景 推荐算法 说明
未知簇数、不规则形状 DBSCAN 自动发现簇数,能识别噪声
已知簇数、球形分布 KMeans 速度快,结果稳定

DBSCAN 参数调优

  • eps:若使用 EPSG:4326,eps=0.01 约为 1 公里;若使用 EPSG:3857(米),eps=1000 为 1 公里
  • min_samples:数据密度高时增大,稀疏时减小

示例

# DBSCAN 聚类:发现犯罪热点区域
- id: cluster-crimes
  use: analysis.cluster
  params:
    input: "$reproject-crimes"
    method: "dbscan"
    eps: 500          # 500 米(EPSG:3857)
    min_samples: 10   # 至少 10 个事件才形成一个热点

# KMeans 聚类:将便利设施分为 5 个服务区
- id: cluster-facilities
  use: analysis.cluster
  params:
    input: "$load-facilities"
    method: "kmeans"
    n_clusters: 5

10.7 空间分析综合示例:城市犯罪热点分析

pipeline:
  name: "城市犯罪热点分析"
  description: "对犯罪事件进行热力图和聚类分析,识别高风险区域"

  variables:
    crime_data: "data/crime_incidents.shp"
    study_area: "data/city_boundary.shp"

  steps:
    - id: load-crimes
      use: io.read_vector
      params: { path: "${crime_data}" }

    - id: load-city
      use: io.read_vector
      params: { path: "${study_area}" }

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

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

    # 仅分析城区内的犯罪
    - id: clip-to-city
      use: vector.clip
      params:
        input: "$reproject-crimes"
        clip: "$reproject-city"

    # 生成热力图
    - id: heatmap
      use: analysis.heatmap
      params:
        input: "$clip-to-city"
        resolution: 300
        bandwidth: 800

    - id: save-heatmap
      use: io.write_raster
      params:
        input: "$heatmap"
        path: "output/crime_heatmap.tif"
        metadata: "$heatmap.metadata"

    # DBSCAN 聚类识别热点
    - id: cluster-hotspots
      use: analysis.cluster
      params:
        input: "$clip-to-city"
        method: "dbscan"
        eps: 500
        min_samples: 20

    # 过滤出热点(去掉噪声点 cluster=-1)
    - id: filter-hotspots
      use: vector.query
      params:
        input: "$cluster-hotspots"
        expr: "cluster >= 0"

    - id: save-clusters
      use: io.write_vector
      params:
        input: "$filter-hotspots"
        path: "output/crime_clusters.geojson"
        format: "GeoJSON"

  outputs:
    hotspot_count: "$cluster-hotspots.n_clusters"
    noise_count: "$cluster-hotspots.noise_count"
    total_incidents: "$clip-to-city.feature_count"

10.8 本章小结

本章介绍了 4 个空间分析步骤(需安装 [analysis] 依赖):

  1. analysis.voronoi:泰森多边形,点→多边形,支持自定义裁剪边界
  2. analysis.heatmap:核密度热力图,点→栅格,支持自定义分辨率和带宽
  3. analysis.interpolate:空间插值,离散点→连续栅格面,支持 linear/cubic/IDW 方法
  4. analysis.cluster:空间聚类,支持 DBSCAN 和 KMeans 两种算法

导航← 第九章:栅格分析步骤第十一章:网络分析步骤 →