ArcGIS六边形渔网生成工具箱:空间均匀采样与蜂窝图实战

发布时间:2026/10/27 7:08:31

ArcGIS六边形渔网生成工具箱:空间均匀采样与蜂窝图实战 简介本资源是一款面向GIS从业者与空间分析学习者的ArcGIS工具箱用于在ArcGIS中快速生成正六边形渔网蜂窝图解决传统渔网工具难以直接产出规则六边形格网的问题适用于城市规划、生态分区、格网统计等场景。压缩包共83个文件约889KB包含tbx工具箱、lyr图层文件、mxd工程文档、py脚本以及配套gdb示例地理数据库含gdbtable、gdbtablx、atx索引等解压后可直接加载使用双击工具箱输入研究区与六边形边长即可生成结果支持ArcGIS 10.2及以上版本永久可用。目前已有363人学习下载适合需要快速构建蜂窝格网、开展格网化空间分析的中初级用户参考使用。1. 六边形渔网不是花架子从蜂窝图到空间均匀采样的真实需求做空间分析的人迟早会撞上一个问题用规则方格网做采样或统计边缘效应和方向偏差总是阴魂不散。方格网在对角线方向上的邻接距离是边长的 1.414 倍这意味着同一套数据在不同方向上被看见的方式根本不一样。六边形渔网蜂窝图就是冲着这个痛点来的——每个六边形的六条边到中心距离完全相等邻接方向只有六个各向同性远好于方格。ArcGIS 自带的渔网工具Fishnet只能生成矩形网格想要六边形得自己动手。这份工具箱干的事很明确在 ArcGIS 里一键生成指定范围、指定大小的六边形蜂窝渔网输出可直接用于采样、聚合、制图和分析的要素类。适合做土地利用统计、生态样方布设、客流热力聚合、遥感影像分块的人。下面把它怎么落地、参数怎么调、哪里容易翻车一条条拆开讲。2. 工具箱的底层逻辑六边形怎么在 ArcGIS 里被画出来2.1 为什么不用 ArcGIS 自带 Fishnet 硬凑ArcGIS 的 Fishnet 工具CreateFishnet生成的是正交矩形网格它的几何构造逻辑是给定原点、Y 轴角度、格网宽高、行列数逐个计算每个矩形的四个角点。这套逻辑天生只认矩形你没法通过改参数让它输出六边形。有人试过用 Fishnet 生成点阵再手动连线但那样得到的六边形要么边长不一致要么在投影坐标系下发生形变后期做邻接分析时拓扑错误一堆。常见做法是绕开 Fishnet直接用脚本按六边形几何公式逐行逐列计算中心点坐标再构造 Polygon。工具箱本质上就是这个思路的封装输入范围、六边形外接圆半径或边长脚本算出所有六边形中心点然后以每个中心点为基准生成六边形面。这样做的好处是几何精度可控不会因为投影变形导致蜂窝歪斜——前提是你得用投影坐标系地理坐标系下算出来的六边形会随纬度变形这是后面要重点说的坑。2.2 六边形几何参数与坐标计算六边形分平顶flat-top和尖顶pointy-top两种朝向。平顶六边形的宽是2 * size高是sqrt(3) * size尖顶六边形反过来宽是sqrt(3) * size高是2 * size。这里size是外接圆半径也等于边长。工具箱一般默认尖顶朝向因为它在南北方向上排列更紧凑适合做纵向采样。行与行之间的垂直间距是1.5 * size尖顶情况下同一行内相邻六边形中心水平间距是sqrt(3) * size奇数行要水平偏移sqrt(3) * size / 2。这套偏移逻辑是蜂窝图的核心写错了就会得到一堆重叠或间隙的六边形。下面是一段典型的中心点计算代码工具箱内部逻辑与此一致import math def gen_hex_centers(xmin, ymin, xmax, ymax, size, pointy_topTrue): 生成覆盖指定范围的六边形中心点坐标 size: 外接圆半径等于边长 pointy_top: True 为尖顶六边形False 为平顶 centers [] if pointy_top: # 尖顶水平间距 sqrt(3)*size垂直间距 1.5*size dx math.sqrt(3) * size dy 1.5 * size row 0 y ymin while y ymax size: # 奇数行水平偏移半个间距 x_offset (dx / 2) if (row % 2 1) else 0 x xmin x_offset while x xmax size: centers.append((x, y)) x dx y dy row 1 else: # 平顶水平间距 1.5*size垂直间距 sqrt(3)*size dx 1.5 * size dy math.sqrt(3) * size col 0 x xmin while x xmax size: y_offset (dy / 2) if (col % 2 1) else 0 y ymin y_offset while y ymax size: centers.append((x, y)) y dy x dx col 1 return centers这段代码的关键参数就两个size和pointy_top。size直接决定蜂窝密度size越小六边形越多、计算越慢pointy_top决定朝向选错了后续做邻接矩阵时方向定义会全乱。代码里while y ymax size多留了一个size的余量是为了保证边缘六边形完整覆盖范围不然边界上会出现半截六边形。工具箱在调用这段逻辑后会用arcpy.Polygon按六个顶点构造面顶点角度从30°开始每隔60°取一个尖顶情况平顶则从0°开始。2.3 工具箱的输入参数与运行环境工具箱通常以.tbx或.pyt形式提供挂在 ArcGIS 的 ArcToolbox 里。核心输入参数一般包括输出要素类路径、范围可以是要素类、栅格或手动输入的 xmin/ymin/xmax/ymax、六边形大小单位跟随坐标系、朝向选择。运行环境要求 ArcGIS Desktop 10.x 或 ArcGIS Pro需要 Python 2.7Desktop或 Python 3.xPro环境依赖arcpy站点包。参数含义常见取值注意输出路径结果要素类位置地理数据库.gdb内不要输出到 shapefile字段名会截断范围来源决定蜂窝覆盖区域要素类 / 栅格 / 手动坐标手动坐标要和数据同坐标系六边形大小外接圆半径100 / 500 / 1000米单位跟随投影坐标系朝向尖顶或平顶尖顶与后续分析方向定义一致参数设完后点运行工具箱会在后台完成中心点计算、面构造、投影写入、属性表添加通常带一个唯一 ID 字段。如果范围很大、size很小生成过程可能跑几分钟到几十分钟这是正常的不是卡死。3. 从零跑通一遍范围准备、参数设置与结果校验3.1 准备范围和坐标系动手之前先把范围定清楚。最常见的做法是拿一个研究区的面要素作为范围输入工具箱会读取它的extent。但这里有个前置动作容易被跳过确认数据框和输入要素都用了投影坐标系。如果是地理坐标系比如 WGS84 经纬度六边形会随纬度发生形变越往高纬越扁。判断方法很简单看坐标系名称里有没有Degree或经纬度字样有就说明是地理坐标系需要先投影。投影用Project工具选一个适合研究区的投影带。国内常用的是 CGCS2000 高斯克吕格投影或 UTM 分区投影。投影完再拿投影后的要素去生成蜂窝。这一步不做后面所有六边形的面积、邻接距离都不可信。import arcpy # 把研究区面要素投影到适合的投影坐标系 arcpy.Project_management( in_datasetstudy_area_wgs84, out_datasetstudy_area_projected, out_coor_systemarcpy.SpatialReference(4547) # CGCS2000 3度带 中央经线117E )SpatialReference(4547)是 CGCS2000 的 3 度带投影中央经线 117°E适合华东一带。换研究区要换对应的 EPSG 代码别照抄。投影完成后用arcpy.Describe确认一下spatialReference.type是不是Projected是的话再往下走。3.2 调用工具箱生成蜂窝工具箱挂载后在 ArcToolbox 里双击打开按顺序填参数。如果习惯脚本调用也可以用arcpy直接调工具箱里的脚本工具import arcpy # 调用六边形渔网工具箱 arcpy.HexagonFishnet_toolbox( in_featuresstudy_area_projected, out_featuresC:/data/analysis.gdb/hex_grid, hex_size500, # 外接圆半径 500 米 orientationPOINTY, # 尖顶朝向 add_id_fieldTrue # 添加唯一 ID 字段 )hex_size500意味着每个六边形外接圆半径 500 米相邻中心间距约 866 米尖顶水平方向。这个尺度适合做中等分辨率的人口或土地利用聚合。如果研究区是城市街区级别size可以降到 100 甚至 50如果是省级尺度可以放大到 5000 或 10000。add_id_fieldTrue会加一个类似HEX_ID的字段后续做表连接和分组统计时靠它做唯一标识建议开着。运行结束后结果会自动加载到地图。先别急着做分析花两分钟做几何校验。3.3 结果校验面积、邻接与覆盖完整性校验分三步。第一步看面积随便选几个六边形用Calculate Geometry算面积和理论值(3 * sqrt(3) / 2) * size^2对比。size500时理论面积约 649519 平方米。如果算出来差很多说明坐标系或几何构造有问题。第二步看邻接用Polygon Neighbors工具需要 Advanced 许可或手动量测确认每个六边形有 6 个邻居边缘的除外。如果出现 4 个或 8 个邻居说明行偏移逻辑写错了蜂窝变成了错位方格。第三步看覆盖把研究区面要素叠上去目视检查边缘有没有大面积空洞或超出范围太多。工具箱一般会多生成一圈边缘六边形这是正常的可以用Select by Location把与研究区不相交的六边形删掉。# 删除与研究区不相交的边缘六边形 arcpy.MakeFeatureLayer_management(hex_grid, hex_lyr) arcpy.SelectLayerByLocation_management(hex_lyr, INTERSECT, study_area_projected) arcpy.CopyFeatures_management(hex_lyr, hex_grid_clipped)SelectLayerByLocation的INTERSECT关系会把只要碰到研究区的六边形都留下包括只搭了一个角的。如果要求六边形中心点落在研究区内改用HAVE_THEIR_CENTER_IN。这一步做完蜂窝就算真正可用了。4. 避坑与排查六边形渔网最容易翻车的五个地方4.1 地理坐标系下生成六边形变成扁蜂窝现象生成的六边形在高纬度地区明显被压扁面积不一致邻接距离也不等。原因地理坐标系以度为单位经度方向的实际距离随纬度收缩而脚本按等间距度数计算中心点导致几何形变。解决生成前先用Project工具把范围要素投影到投影坐标系确保size参数的单位是米而不是度。判断方法看数据框坐标系名称含Degree就是地理坐标系。4.2 六边形大小设成直径结果密度翻倍现象生成的蜂窝比预期密一倍六边形数量远超估算。原因工具箱的size参数是外接圆半径等于边长不是直径也不是对边距离。有人按直径 1000 米去填size1000实际得到的是半径 1000 米、直径 2000 米的六边形但数量计算时又按 1000 米估导致预期和结果对不上。解决填参数前先确认工具箱文档里size的定义按半径填。如果不确定先生成一小块测试量一下相邻中心间距尖顶情况下水平间距应该是sqrt(3) * size。4.3 输出到 Shapefile 导致字段名截断和中文乱码现象生成的蜂窝要素类属性表里字段名变成HEX_ID_1、HEX_I之类或者中文别名显示为乱码。原因Shapefile 格式限制字段名最长 10 个字符且对 Unicode 支持差。解决输出路径一律指向文件地理数据库.gdb不要用.shp。如果必须用 Shapefile字段名控制在 10 字符以内别名用英文。4.4 范围太大导致内存溢出或运行超时现象工具箱跑到一半报内存错误或者进度条卡住几十分钟不动。原因size设得太小、范围太大六边形数量达到百万级arcpy逐面构造 Polygon 时内存扛不住。解决先估算六边形数量公式是(范围面积) / (六边形面积)六边形面积约2.598 * size^2。如果超过 50 万考虑放大size或分块生成再合并。分块时注意块与块之间要留重叠带避免接缝处出现半截六边形。4.5 邻接分析时发现六边形有重叠现象做Polygon Neighbors或空间连接时发现某些六边形互相重叠或者同一个六边形被重复计数。原因行偏移量算错奇数行偏移了dx而不是dx/2导致相邻行六边形错位重叠。解决检查中心点计算代码里x_offset的值尖顶情况下应该是dx / 2平顶情况下y_offset应该是dy / 2。生成后用Intersect工具自查如果结果非空说明有重叠需要修正偏移逻辑重新生成。5. 进阶用法把蜂窝渔网接进空间统计与制图流程蜂窝图生成只是第一步真正体现价值的是后续怎么用。一个高频场景是空间聚合统计把点数据比如 POI、采样点按六边形分组计数得到每个六边形的密度值再拿去做热力图或聚类分析。做法是用Spatial Join把点要素连接到六边形上match_option选CONTAINS然后按HEX_ID分组统计。# 把 POI 点空间连接到六边形统计每个六边形内的点数 arcpy.SpatialJoin_analysis( target_featureshex_grid_clipped, join_featurespoi_points, out_feature_classhex_with_count, join_operationJOIN_ONE_TO_ONE, join_typeKEEP_ALL, match_optionCONTAINS ) # 此时属性表里 Join_Count 字段就是每个六边形的点数join_typeKEEP_ALL保证没有点的六边形也保留Join_Count为 0。这一步之后可以拿Join_Count做分级设色或者导出到其他工具做空间自相关分析。六边形的邻接关系比方格更均匀做 Morans I 或 Getis-Ord Gi* 时结果更稳这是蜂窝图在空间统计里的核心优势。另一个场景是遥感影像分块采样。把蜂窝渔网叠在影像上每个六边形作为一个采样单元提取六边形范围内的像元均值。用Zonal Statistics as Table工具zone_field选HEX_IDstatistics_type选MEAN输出表格再连接回六边形属性表。这样得到的采样数据在空间上分布均匀不会像方格那样在方向上产生系统性偏差。# 按六边形分区统计栅格均值 arcpy.gp.ZonalStatisticsAsTable( in_zone_datahex_grid_clipped, zone_fieldHEX_ID, in_value_rasterndvi.tif, out_tablehex_ndvi_stats, statistics_typeMEAN )zone_field必须是整型字段HEX_ID如果生成时是字符串要先转成整型。statistics_type除了MEAN还可以选SUM、MAX、MIN、STD按分析目标定。输出表格用HEX_ID和六边形做Join就能在地图上按 NDVI 均值设色。最后说一个我自己的习惯每次生成蜂窝后先跑一遍Check Geometry和Repair Geometry再跑Polygon Neighbors确认邻接数。这三步加起来不到一分钟但能挡掉后面九成的玄学问题。从那以后我每次做蜂窝渔网都强制走一遍这个校验流程宁可多花一分钟也不想在空间统计跑完之后才发现几何有毛病。希望帮到你。本文还有配套的精品资源点击获取
延伸阅读

更多相关文章

2026/10/27 7:08:31

Manus回归,AI智能体赛道迎来新变局

Manus 回来了,这是最近科技圈讨论度最高的一句话。不少人的反应和我差不多:先是一愣——它什么时候走的?紧接着刷到新消息、新功能、新的定位介绍,才慢慢意识到,距离当初那个“全民求邀请码”的疯狂三月,已…

2026/10/27 7:08:31

大模型编排互补算法,破解高能耗企业能源优化难题

上个月我去一家水泥厂,电房主管翻开月度电费单,好家伙,峰段电量占比直奔四成,当月基本电费加峰谷价差,硬生生比同行标杆贵出几十万。他之前的节能动作其实已经不少:电机换永磁,风机加变频&#…

2026/10/27 7:08:31

MCPA2A系统:多通道数据处理与实时分析技术解析

1. MCP&A2A项目概述MCP&A2A这个看似神秘的缩写,实际上代表了一个正在快速发展的技术领域。作为从业者,我最初接触这个项目时也感到困惑,但经过深入研究后发现,这是Multi-Channel Processing & Analytics to Action的简…

2026/10/27 7:58:35

动态规划与栈解法:最长有效括号问题详解

1. 题目解析与核心思路Longest Valid Parentheses(最长有效括号)是LeetCode上的一道经典动态规划/栈应用题目,编号32,难度等级为Hard。题目要求在一个仅包含(和)的字符串中,找出最长的有效括号子串的长度。有效括号子串…

2026/10/27 7:58:35

Oracle 11gR2 DB-PSU 220118 补丁落地与避坑指南

简介:Oracle 数据库 11.2.0.4 版本的 2022 年 1 月 PSU 补丁包(p33477185),面向需要为 Linux x86-64 平台数据库补齐安全修复与性能改进的 DBA 和运维人员。压缩包约 436.52MB,共 3658 个文件,涵盖大量 so …

2026/10/27 7:58:35

Prompt、Skill与Agent:大模型应用开发中的选型指南

1. 从一个真实困惑说起:为什么这三个词总被混着用刚接触大模型应用开发那阵子,我在一个技术群里看到有人问:"我想让模型帮我自动整理会议纪要,到底该写 Prompt 还是搭个 Agent?"底下回答五花八门&#xff0c…

2026/10/27 7:58:35

百度千帆API实现AI图片生成全攻略

1. 千帆API与AI图片生成技术解析百度智能云的千帆大模型平台近期开放了AI图片生成API接口,这为开发者提供了一种快速集成AI绘图能力的解决方案。不同于需要本地部署的Stable Diffusion等开源模型,千帆API采用云端服务模式,开发者只需通过简单…

2026/10/27 7:58:35

Agent开发必读:先拆能力再改skill,告别盲目调优

1. 为什么“先拆能力”比“先改 skill”更重要做 Agent 开发的人,几乎都经历过这样一个循环:发现 Agent 在某类任务上表现不行,第一反应是去改 prompt、加工具、换模型,或者干脆把整个 skill 重写一遍。改完之后跑几个 case&#…

2026/10/27 7:53:35

AI大模型实战:从入门到部署全流程指南

1. 项目概述:AI大模型实战全攻略这个教程的诞生源于我过去三年在AI领域的实战经验。记得第一次接触大模型时,面对海量的专业术语和复杂的代码库,我花了整整两周才跑通第一个demo。现在,我将这些经验浓缩成一套从零开始的完整学习路…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/27 0:59:21

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价

“模式选错”的典型代价 摘要 在软件工程中,设计模式、架构模式、并发模式乃至团队协作模式的选择,往往在项目早期就决定了后续的开发效率和维护成本。本文通过多个真实场景,剖析“模式选错”带来的典型代价——包括返工成本、技术债务累积、…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式20_新手推荐路径

新手推荐路径 摘要 在 AI 辅助开发工具快速普及的今天,新手面对最多的困惑往往不是"工具够不够强",而是"我该从哪一步开始用"。本文提出一条经过实践验证的三阶段学习路径:先从 Ask(问答式交互)起…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑