当前位置: 首页 > article >正文

ArcPy 脚本:批量生成郑州市 1990-2019 年空间分析结果(核密度、热点、平均中心、标准差椭圆)

ArcPy 脚本批量生成郑州市 1990-2019 年空间分析结果核密度、热点、平均中心、标准差椭圆背景介绍在城市研究中我们常常需要分析多年数据的空间分布模式比如建筑物高度在郑州市的聚集情况、热点区域变化、整体中心位置迁移以及分布方向趋势。如果每年手动在 ArcGIS 中运行四种空间分析工具会非常耗时且容易出错。这个脚本就是为了解决这个问题而写的——它能自动批量处理 1990 到 2019 共 30 年的数据一键生成四类分析结果让你把精力放在结果解读上而不是重复操作上。代码功能说明这个脚本的核心功能是自动读取每一年郑州市的点要素数据shp 文件依次完成四种常见空间统计分析并将结果整齐保存到对应的文件夹中。具体能实现的效果核密度分析 → 生成每年建筑物高度的密度栅格图tif冷热点分析Getis-Ord Gi* → 生成每年显著的高值/低值聚集区域shp平均中心 → 计算每年高度加权的中心点shp标准差椭圆方向分布 → 绘制每年数据的分布方向和离散程度shp适用场景城市地理、规划、人口、经济等时空格局研究特别是需要对比多年变化的场景。运行完成后你会在输出文件夹里看到四个子文件夹核密度、冷热点、平均中心、椭圆每个文件夹里按年份命名整齐存放对应结果文件总共约 120 个文件30 年 × 4 类。运行环境准备要运行这个脚本你需要安装ArcGIS Pro推荐 2.8 或更高版本或ArcGIS Desktop 10.x带 Spatial Analyst 扩展脚本使用的是 ArcGIS 自带的 Python 环境和 arcpy 模块不需要额外用 pip 安装任何包确保你的 ArcGIS 许可证已启用Spatial Analyst扩展脚本会自动 checkout注意普通 Python如 Anaconda无法运行此脚本必须在 ArcGIS 提供的 Python 环境中执行。详细运行步骤按照以下顺序操作新手也能一步步跑通。每一步都说明了“为什么要这么做”。准备输入数据为什么脚本会按年份逐个读取 shapefile 文件如果路径或文件名不对就会报错。操作在你的磁盘上新建一个输入文件夹例如D:\CMAB_data\input在里面按年份建立子文件夹1990、1991、...、2019将每年的点数据命名为郑州市_XXXX.shpXXXX 为年份放入对应年份的子文件夹中数据结构示例输入文件夹\1990\郑州市_1990.shp创建输出和临时文件夹为什么脚本需要地方存放结果和临时文件避免污染其他目录。操作新建输出文件夹例如D:\CMAB_data\output\郑州新建临时文件夹scratch例如D:\CMAB_data\scratch空间足够大即可保存并修改代码为什么路径必须指向你自己的文件夹否则找不到文件。操作将下面的完整代码复制到一个新文件中保存为zhengzhou_spatial_analysis.py重点修改以下三行路径用你的实际路径替换方括号内的内容input_base_dir r【你的输入基础目录】 # 示例: rD:\CMAB_data\input output_base_dir r【你的输出基础目录】 # 示例: rD:\CMAB_data\output\郑州 scratch_dir r【你的临时目录】 # 示例: rD:\CMAB_data\scratch运行脚本为什么在 ArcGIS 自带的 Python 环境中运行才能调用 arcpy。操作两种方式任选其一方式一推荐打开 ArcGIS Pro → 顶部菜单“分析” → “Python” → 打开 Python 窗口 → 拖入你的.py文件 → 回车执行方式二在 Windows 开始菜单找到 “Python Command PromptArcGIS Pro” → 输入python C:\path\to\zhengzhou_spatial_analysis.py运行过程会在控制台打印进度大约几分钟到十几分钟取决于电脑性能和数据量。验证结果为什么确认脚本是否成功生成了所有文件。操作运行结束后控制台会打印统计信息每个文件夹多少文件打开输出文件夹检查四个子文件夹是否都有按年份命名的文件用 ArcGIS Pro 打开任意几个结果文件查看是否正常显示核心代码解析下面是完整代码已将个人路径模糊化。我们用大白话逐段解释关键逻辑。import arcpy import os import shutil def clean_previous_results(output_base_dir, sub_folders): 删除之前的结果文件 print(正在清理之前的输出结果...) for folder_name in sub_folders.values(): folder_path os.path.join(output_base_dir, folder_name) if os.path.exists(folder_path): try: # 删除文件夹内所有内容但保留文件夹本身 for filename in os.listdir(folder_path): file_path os.path.join(folder_path, filename) try: if os.path.isfile(file_path) or os.path.islink(file_path): os.unlink(file_path) elif os.path.isdir(file_path): shutil.rmtree(file_path) except Exception as e: print(f 删除 {file_path} 失败: {e}) print(f 已清理: {folder_name}) except Exception as e: print(f 清理 {folder_name} 文件夹时出错: {e}) else: # 如果文件夹不存在创建它 os.makedirs(folder_path, exist_okTrue) print(f 创建了: {folder_name}) def run_analysis(): # 配置区域 input_base_dir r【你的输入基础目录】 output_base_dir r【你的输出基础目录】 scratch_dir r【你的临时目录】 arcpy.CheckOutExtension(Spatial) arcpy.env.overwriteOutput True sub_folders { kde: 核密度, hotspot: 冷热点, mean_center: 平均中心, ellipse: 椭圆 } # 清理之前的输出结果 clean_previous_results(output_base_dir, sub_folders) # 开始循环处理 (1990-2019) for year in range(1990, 2020): input_shp os.path.join(input_base_dir, str(year), f郑州市_{year}.shp) if not os.path.exists(input_shp): print(f文件不存在跳过: {input_shp}) continue print(f\n正在处理: {year} 年数据...) try: # --- 任务1: 核密度 --- temp_point_path os.path.join(scratch_dir, ftemp_pts_{year}.shp) arcpy.management.FeatureToPoint(input_shp, temp_point_path, INSIDE) out_raster_path os.path.join(output_base_dir, sub_folders[kde], f{year}年郑州市.tif) out_kde arcpy.sa.KernelDensity(temp_point_path, height, 30, None, SQUARE_METERS) out_kde.save(out_raster_path) arcpy.management.Delete(temp_point_path) print(f √ 任务1完成: 核密度) # --- 任务2: 热点分析 --- out_hotspot_path os.path.join(output_base_dir, sub_folders[hotspot], f{year}年郑州市冷热点.shp) try: arcpy.stats.HotSpotAnalysis( input_shp, height, out_hotspot_path, FIXED_DISTANCE_BAND, EUCLIDEAN_DISTANCE, NONE, None, None, FEATURE_CLASS ) except AttributeError: try: arcpy.stats.HotSpotAnalysis_GetisOrdGi( input_shp, height, out_hotspot_path, FIXED_DISTANCE_BAND, EUCLIDEAN_DISTANCE, NONE, None, None, FEATURE_CLASS ) except AttributeError: arcpy.HotSpots_stats(input_shp, height, out_hotspot_path) print(f √ 任务2完成: 热点分析) # --- 任务3: 平均中心 --- out_center_path os.path.join(output_base_dir, sub_folders[mean_center], f{year}郑州.shp) arcpy.stats.MeanCenter(input_shp, out_center_path, height) arcpy.management.AddField(out_center_path, 年份, TEXT, field_length10) with arcpy.da.UpdateCursor(out_center_path, [年份]) as cursor: for row in cursor: row[0] str(year) cursor.updateRow(row) print(f √ 任务3完成: 平均中心 (已添加年份字段)) # --- 任务4: 方向分布 --- out_ellipse_path os.path.join(output_base_dir, sub_folders[ellipse], f{year}郑州.shp) arcpy.stats.DirectionalDistribution(input_shp, out_ellipse_path, 1_STANDARD_DEVIATION, height) arcpy.management.AddField(out_ellipse_path, 年份, TEXT, field_length10) with arcpy.da.UpdateCursor(out_ellipse_path, [年份]) as cursor: for row in cursor: row[0] str(year) cursor.updateRow(row) print(f √ 任务4完成: 标准差椭圆 (已添加年份字段)) print(f ✓ {year} 年数据处理完成) except Exception as e: print(f ✗ 处理 {year} 年数据时发生错误: {str(e)}) import traceback traceback.print_exc() # 最终统计 print(\n *50) print(所有处理已完成) print(\n输出结果统计:) print(-*30) total_files 0 for folder_key, folder_name in sub_folders.items(): folder_path os.path.join(output_base_dir, folder_name) if os.path.exists(folder_path): if folder_key kde: files [f for f in os.listdir(folder_path) if f.endswith(.tif)] else: files [f for f in os.listdir(folder_path) if f.endswith(.shp)] count len(files) total_files count print(f{folder_name} 文件夹: {count} 个文件) if count 0: print(f 示例: {, .join(files[:3])} (... if count 3 else )) else: print(f{folder_name} 文件夹: 不存在) print(f\n总计生成: {total_files} 个结果文件) print(*50) if __name__ __main__: run_analysis()大白话解释核心逻辑for year in range(1990, 2020)就像一个自动翻页的书从 1990 年到 2019 年一张张处理。每一年先检查文件是否存在不存在就跳过避免程序直接崩溃。核密度先把面转成点因为核密度工具需要点然后计算“哪里点最密集”输出一张热力图一样的栅格。热点分析直接告诉 ArcGIS “用高度字段找出显著的高值聚集和低值聚集区”。平均中心计算所有点的高度加权中心就像找一群人的“平均位置”但高楼影响更大。标准差椭圆画一个椭圆包裹大部分点显示整体分布的方向和范围。每次分析完都会在结果文件里加一个“年份”字段方便后期合并所有年份一起分析。最后统一统计生成了多少文件给你一个清晰的完成反馈。常见问题解决报错 “RuntimeError: Cannot check out Spatial Analyst”原因许可证未启用 Spatial Analyst 扩展。解决在 ArcGIS Pro 中 → 项目 → 许可 → 确认 Spatial Analyst 已勾选。找不到输入文件提示文件不存在原因路径写错或文件名不完全匹配区分大小写、后缀完整。解决仔细检查input_base_dir和文件实际位置确保是原始字符串加 r 前缀。热点分析函数报 AttributeError原因不同 ArcGIS 版本函数名不同。解决脚本已内置多种尝试通常能自动适配若仍失败请确认你的 ArcGIS 版本。磁盘空间不足或权限问题

相关文章:

ArcPy 脚本:批量生成郑州市 1990-2019 年空间分析结果(核密度、热点、平均中心、标准差椭圆)

ArcPy 脚本:批量生成郑州市 1990-2019 年空间分析结果(核密度、热点、平均中心、标准差椭圆)背景介绍在城市研究中,我们常常需要分析多年数据的空间分布模式,比如建筑物高度在郑州市的聚集情况、热点区域变化、整体中心…...

Qwen-Image-Edit快速入门:上传模糊图片,一键生成高清人像

Qwen-Image-Edit快速入门:上传模糊图片,一键生成高清人像 1. 认识Qwen-Image-Edit图像修复模型 1.1 模型核心能力 Qwen-Image-Edit-2511-Unblur-Upscale是一款专为图像修复设计的AI模型,它能将模糊、低分辨率的人像照片快速转化为高清效果…...

SNOMED CT入门指南:从概念、关系到数据文件,手把手带你理解这个医学术语标准

SNOMED CT技术解析:从数据结构到医疗信息系统的实战指南 在医疗信息化领域,数据标准化是打破信息孤岛的关键。当不同医院的电子病历系统使用各自独立的术语体系时,跨机构的数据交换就像一场没有翻译的多国会议——充满误解和低效。这正是SNOM…...

YOLO-v5小目标检测:微小物体识别效果惊艳展示

YOLO-v5小目标检测:微小物体识别效果惊艳展示 1. 小目标检测的技术挑战 在计算机视觉领域,小目标检测一直是个棘手的问题。当目标在图像中占据的像素面积小于3232时,传统检测算法往往会遇到以下困难: 特征信息不足:…...

macOS下OpenClaw调试技巧:GLM-4.7-Flash接口连接问题排查

macOS下OpenClaw调试技巧:GLM-4.7-Flash接口连接问题排查 1. 问题背景与前期准备 上周在尝试将本地部署的GLM-4.7-Flash模型接入OpenClaw时,我遇到了三个典型问题:网关端口被占用、模型地址配置错误、以及Token消耗异常。这些问题导致自动化…...

Flash存储、外设操作与系统架构

课程目标与知识体系 课程目的 掌握STM32内部Flash读写操作 熟悉STM32存储器映射 了解malloc动态内存分配 理解STM32启动流程与地址空间知识点体系STM32系统架构 ├── 外设操作(GPIO/USART/DMA) ├── 存储器系统 │ ├── 存储器分类 │ ├── 存储…...

OpenClaw多语言支持:GLM-4.7-Flash跨语言任务处理

OpenClaw多语言支持:GLM-4.7-Flash跨语言任务处理 1. 为什么需要多语言自动化助手 上周我需要整理一份包含中英日三语的会议纪要时,突然意识到一个问题:传统自动化工具往往只擅长处理单一语言环境。当我尝试用Python脚本批量处理日语邮件时…...

GLM-4V-9B GPU高效利用:通过dtype对齐+4-bit量化实现A10G 24GB满载运行

GLM-4V-9B GPU高效利用:通过dtype对齐4-bit量化实现A10G 24GB满载运行 1. 引言 最近在折腾多模态大模型本地部署的朋友,可能都遇到过类似的问题:模型参数动辄几十上百亿,显存要求高得吓人,好不容易找到个能在消费级显…...

OpenClaw二次开发指南:修改Qwen3-VL:30B的飞书交互协议

OpenClaw二次开发指南:修改Qwen3-VL:30B的飞书交互协议 1. 为什么需要定制飞书交互协议 去年11月第一次尝试用OpenClaw对接飞书时,我遇到了一个典型问题:标准协议下发送的Markdown消息在Qwen3-VL:30B多轮对话中频繁出现格式错乱。这个30B参…...

STM32光敏电阻传感器实战:从硬件接线到代码调试全流程(附避坑指南)

STM32光敏电阻传感器实战:从硬件接线到代码调试全流程(附避坑指南) 在智能家居和环境监测项目中,光照强度检测是一个基础但关键的功能模块。光敏电阻因其成本低廉、使用简单,成为许多开发者的首选传感器。本文将带你从…...

FreeRTOS定时器防抖实战:用STM32 HAL库+按键中断,告别按键连击烦恼

FreeRTOS定时器防抖实战:用STM32 HAL库按键中断,告别按键连击烦恼 在嵌入式开发中,按键处理看似简单却暗藏玄机。我曾在一个智能家居项目中遇到这样的尴尬场景:用户按下墙壁开关时,本该只触发一次的动作,由…...

基于OFA的智能写作助手:图文内容自动生成与问答

基于OFA的智能写作助手:图文内容自动生成与问答 1. 引言 你有没有遇到过这样的情况:手头有一堆产品图片,却不知道怎么写吸引人的商品描述;或者看到一张复杂的图表,想要快速提取关键信息却无从下手;又或者…...

零基础上手!基于vLLM的GLM-4-9B-Chat-1M模型保姆级部署指南

零基础上手!基于vLLM的GLM-4-9B-Chat-1M模型保姆级部署指南 1. 模型简介与核心优势 GLM-4-9B-Chat-1M是智谱AI推出的最新一代开源对话模型,基于vLLM框架部署,支持惊人的1M上下文长度(约200万中文字符)。这个模型在多…...

2025年3月AI领域核爆录:从模型开源战争到智能体价值重估

2025年3月AI领域核爆录:从模型开源战争到智能体价值重估 如果AI是一场马拉松,那么2025年3月就是全员冲刺的最后一公里。 这个月,历史的轴线被剧烈地扭动,科技的叙事以周为单位改写。它不再关乎单一的“突破”,而关乎生…...

Janus-Pro-7B在SolidWorks设计中的应用:工程问题智能答疑

Janus-Pro-7B在SolidWorks设计中的应用:工程问题智能答疑 1. 引言 想象一下这个场景:你正在用SolidWorks赶一个复杂的装配体设计,突然卡在了一个配合关系上,或者对某个特征的生成顺序拿不准。这时候,你是去翻几百页的…...

3D Face HRN算力优化:低配A10显卡实测稳定运行3D人脸重建

3D Face HRN算力优化:低配A10显卡实测稳定运行3D人脸重建 1. 项目背景与价值 3D人脸重建技术正在改变我们处理数字人脸的方式。传统的3D建模需要专业设备和复杂操作,而现在的AI技术只需要一张普通照片就能生成高质量的3D人脸模型。3D Face HRN基于先进…...

《与AI的妄想对话:如何给机器人造灵魂?》

本文为个人想法分享,是一种幻觉创作,只图一乐。 #赛博哲学 #概念艺术 #AI幻想 #科幻微小说提问: 你分析一下下面这段文章里面的harness它的构建原则。我觉得他和我们这个理论里面说的某一些东西我感觉很像好像是这种智能的或者说锚点定义的简…...

Phi-3-mini-128k-instruct低资源部署效果:4GB显存流畅运行实测

Phi-3-mini-128k-instruct低资源部署效果:4GB显存流畅运行实测 最近在折腾一些边缘设备上的AI应用,发现一个挺有意思的现象:很多开发者手头只有一些“古董级”的显卡,比如GTX 1650或者移动端的MX系列,显存也就4GB左右…...

OpenClaw × 88API:不用注册 Anthropic,5 分钟让 AI Agent 接入 Claude 4.6(2026 完整教程)

折腾了两天,最后 5 分钟搞定 上周我想用 OpenClaw 搭一个能自动重构代码的 Agent。选定 Claude 4.6 当大脑——毕竟它在 Tool Use 精准度和长上下文推理上确实是第一梯队。 结果卡在了第一步:Anthropic 官方账号注册要海外手机号,好不容易注…...

实时手机检测-通用部署指南:3步完成环境搭建与模型调用

实时手机检测-通用部署指南:3步完成环境搭建与模型调用 1. 环境准备与快速部署 1.1 系统要求 操作系统:Linux/Windows/macOS(推荐Ubuntu 20.04)Python版本:3.7-3.10GPU支持:NVIDIA显卡(可选&…...

nli-distilroberta-base多场景:科研论文摘要与结论段落逻辑支撑关系分析

nli-distilroberta-base多场景:科研论文摘要与结论段落逻辑支撑关系分析 1. 项目概述 nli-distilroberta-base是基于DistilRoBERTa模型的自然语言推理(NLI)Web服务,专门用于分析两个句子之间的逻辑关系。这个轻量级模型在学术写作领域具有独特价值&…...

MogFace模型Python入门实战:调用API完成第一个人脸检测程序

MogFace模型Python入门实战:调用API完成第一个人脸检测程序 你是不是也对AI人脸检测感到好奇,想亲手写个程序试试?今天,我们就来一起动手,用Python写一个最简单的程序,调用MogFace模型来检测图片里的人脸。…...

CPU内部总线架构解析:数据通路设计与性能优化

1. CPU内部总线架构概述 当你用手机玩游戏时,有没有想过为什么角色移动能如此流畅?这背后离不开CPU内部精密的数据高速公路——总线架构。就像城市交通网络决定了车辆通行效率,CPU内部总线结构直接影响着数据流动的速度和效率。 现代CPU内部主…...

Qwen3-0.6B-FP8模型服务化:使用Git进行版本管理与CI/CD集成

Qwen3-0.6B-FP8模型服务化:使用Git进行版本管理与CI/CD集成 1. 引言 咱们做AI模型部署的,是不是经常遇到这种烦心事:好不容易把模型服务调通了,过两天想加点新功能,结果发现原来的配置参数、客户端代码、甚至API封装…...

YOLOv9官方镜像深度体验:开箱即用,效果超出预期

YOLOv9官方镜像深度体验:开箱即用,效果超出预期 1. 镜像初体验:零配置启动的惊喜 第一次接触YOLOv9官方镜像时,我带着怀疑的态度——毕竟在深度学习领域,"开箱即用"的承诺往往伴随着各种隐藏的环境配置问题…...

在IDEA里用通义灵码直接调数据库?SpringBoot MCP服务配置与插件集成全攻略

在IDEA中实现数据库智能编码:通义灵码与SpringBoot MCP深度集成实战 当Java开发者面对繁琐的数据库实体类编写时,传统方式往往需要在数据库工具、IDE和文档之间反复切换。现在,通过IntelliJ IDEA中的通义灵码插件与SpringBoot MCP服务的深度集…...

AI-AGENT概念解析 - LLM领域训练

**问题:对于LLM大模型的应用来说,不同的专业需要不同的大模型去进行相应的专业训练吗?同时,不同的大模型训练为不同的专业,那同一个大模型可以为不同的专业进行训练吗?如果可以,那是怎么训练的&…...

Polars 2.0 + Delta Lake + DuckDB三端协同清洗方案(附GitHub Star 1.2k的私有化部署模板)

第一章:Polars 2.0 Delta Lake DuckDB三端协同清洗方案概览现代数据工程正面临高吞吐、低延迟与强一致性三重挑战。Polars 2.0 以 Rust 驱动的惰性执行引擎提供亚毫秒级列式计算能力;Delta Lake 2.4 引入统一元数据协议与事务日志快照机制,…...

电脑系统由硬件系统和软件系统组成(来源网络,原创)

电脑系统由硬件系统和软件系统组成(来源网络,原创)电脑系统由硬件系统和软件系统组成。软件指操作硬件的各种语言或程序,硬件是指电脑系统中我们看得见、摸得着的物理设备。电脑硬件系统由运算器、控制器、存储器、输入设备和输出…...

从基础到卓越:Mac Mouse Fix的技术演进与用户价值提升之路

从基础到卓越:Mac Mouse Fix的技术演进与用户价值提升之路 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 解决鼠标体验痛点:从功能…...