ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

QGIS创建正方形网格:坐标系选择、参数计算与CSV导出全解析

2026/8/8 6:23:25 拓冰建站 浏览量
QGIS创建正方形网格:坐标系选择、参数计算与CSV导出全解析 1. 项目概述为什么我们需要用网格分割区域在地理信息处理、城市规划、环境监测乃至商业分析中我们常常会遇到一个核心需求如何对一个连续的地理区域进行系统性的、标准化的空间采样或管理单元划分比如你想分析一个城市不同网格单元的空气质量、计算一个县区内每个平方公里的人口密度或者为外卖骑手规划网格化的配送区域。手动去画这些格子既不现实也缺乏精度和一致性。这时候QGIS的“创建网格”工具就成了我们的“空间分割神器”。这个项目标题“【QGIS】使用‘创建网格’来对一个区域分割得到正方形网格”直指的就是这个高频且实用的操作。它不仅仅是点一下按钮那么简单背后涉及到坐标系的选择、网格参数的精确计算、输出格式的适配等一系列关键决策。我见过不少新手包括一些有经验的从业者在第一步坐标系上就栽了跟头生成一堆“飘”在千里之外的网格或者得到形状扭曲的非正方形。所以这篇内容我会带你从头到尾走一遍不仅告诉你“怎么做”更重点剖析“为什么这么做”。我们会围绕3857坐标系Web墨卡托的适用场景与陷阱、如何基于你的目标区域精确计算网格尺寸、以及如何将生成的网格属性导出为CSV进行后续分析展开一次深度的实操拆解。无论你是刚接触QGIS的学生还是需要在工作中处理空间数据的分析师这套方法都能让你快速、可靠地完成区域网格化任务。2. 核心思路与工具选型背后的考量2.1 为什么是QGIS的“创建网格”工具QGIS的“创建网格”工具位于“矢量”菜单下的“研究工具”中。选择它而不是编写Python脚本或使用其他GIS软件主要基于几点务实考虑开源免费与普及性QGIS是开源GIS的标杆无需授权费用功能强大且社区活跃教程和解决方案丰富降低了学习和协作门槛。工具集成度高“创建网格”工具是一个封装好的算法界面直观参数明确支持实时预览通过“运行为临时图层”非常适合快速迭代和验证。格式兼容性强生成的网格可以直接保存为Shapefile、GeoPackage等通用空间数据格式也能轻松导出属性到CSV无缝对接后续的空间分析或统计分析流程。2.2 坐标系选择3857的诱惑与陷阱热搜词里提到了“3857坐标系”也就是众所周知的Web墨卡托投影EPSG:3857。这是互联网地图如Google Maps、OpenStreetMap的事实标准。为什么大家会想到用它方便叠加在线底图如果你在QGIS中加载了在线的OSM或谷歌地图底图它们通常就是3857坐标系。在此坐标系下创建网格可以确保网格与底图完美贴合可视化检查时非常直观。单位是米3857坐标系的单位是米这对于我们定义网格大小如1000米 x 1000米非常方便符合我们的直觉。但是这里有一个巨大的陷阱Web墨卡托投影在高纬度地区会产生严重的面积和形状变形。它不是为了精确测量而设计的。如果你在纬度较高的地区例如中国东北、欧洲北部创建一个“正方形”网格在3857坐标系下它在地图上看起来是正方形但实际在地球表面的形状可能是一个显著的长方形面积也不准确。注意如果你的分析涉及面积计算、距离测量或需要地理上真实的形状使用3857坐标系创建网格是错误的选择。这会导致后续所有基于网格的分析结果产生系统性偏差。那么正确的坐标系该怎么选这取决于你的分析区域和目的用于精确测量和分析应使用地理坐标系如EPSG:4326, WGS84或适合该区域的等面积投影。在4326坐标系下工具的参数“水平间距”和“垂直间距”的单位是度而不是米。直接输入米数会得到错误结果。通常我们需要先创建一个基于合适投影例如UTM分区投影的网格或者接受在4326下网格不是严格的“正方形”经纬线网格。仅用于可视化或与网络地图叠加且分析区域在低纬度范围例如赤道附近使用3857是可行的但心里要明白其局限性。在本项目中为了覆盖最常见的需求并揭示这个关键点我们将分别演示在**3857坐标系演示其直观性与陷阱和目标区域专用投影演示其精确性**下创建网格的流程。2.3 网格类型与参数解析“创建网格”工具提供了几种类型点、线、矩形面、菱形面。我们要的是“正方形网格”所以选择矩形面。核心参数有三个网格范围即你的目标区域。可以通过画布拖拽、输入坐标、或选择一个已有图层的范围来定义。水平间距网格在X方向通常是东西向的宽度。垂直间距网格在Y方向通常是南北向的高度。 要得到正方形就需要设置水平间距 垂直间距。如何确定这个间距值这不是随便填的。假设你的研究区域东西宽10公里南北长8公里你希望得到大约1平方公里1000米 x 1000米的网格。在3857下直接设置水平间距1000垂直间距1000。在4326或其它地理坐标系下你不能直接设置1000米。你需要将米转换为度。一个近似的方法是1度纬度约等于111公里1度经度约等于111公里 * cos(纬度)。在纬度30度的地方1度经度约等于96公里。要得到1000米的网格间距大约需要设为0.009度经度和0.009度纬度。更专业的做法是先将你的研究区域重新投影到一个以米为单位的本地投影如UTM在那个投影下创建1000米间距的网格然后再转换回你需要的坐标系。3. 分步实操从零创建你的正方形网格3.1 环境准备与数据加载首先确保你安装了QGIS建议使用长期支持版本LTR。打开QGIS我们开始操作。定义你的研究区域有两种主流方法。方法A使用现有边界。如果你有一个行政区划的Shapefile比如一个县的边界直接将它拖入QGIS。我们将以这个图层的范围作为网格范围。方法B手动划定范围。如果你没有现成数据可以粗略估算。在QGIS右下角可以看到鼠标位置的坐标。记下你感兴趣区域的左下角西南和右上角东北的坐标。或者使用“坐标捕获”面板来精确获取。为了演示我假设我们有一个名为study_area.shp的图层它代表某个城市的一个区。我们将其加载到QGIS中。检查并统一坐标系在图层面板右键点击study_area选择“属性”查看“源”选项卡下的“坐标系”。记下它的坐标系例如可能是EPSG:4547一个中国专用的投影坐标系。一个良好的习惯是将QGIS画布的投影坐标系设置为与你的分析需求一致。我们可以在状态栏的右下角点击坐标系暂时设置为EPSG:3857以便与在线底图对照查看但在实际计算时我们会根据需求切换。3.2 场景一在Web墨卡托EPSG:3857下创建网格这个场景适用于快速可视化演示或与在线地图叠加进行粗略的网格规划。设置画布坐标系点击QGIS右下角的坐标系标识例如“EPSG:4326”在搜索框输入“3857”选择“WGS 84 / Pseudo-Mercator (EPSG:3857)”点击“应用”。此时地图视图可能会发生缩放和移动这是正常的投影变换。打开创建网格工具点击顶部菜单栏的“处理” - “工具箱”。在工具箱面板的搜索框输入“创建网格”找到“矢量创建”下的“创建网格”工具并双击打开。配置参数网格类型选择“矩形面”。网格范围点击右侧的下拉箭头选择“使用画布范围”或者如果你加载了study_area图层可以选择“使用图层范围...”并从列表中选择study_area。注意由于画布现在是3857坐标系而study_area图层可能是其他坐标系QGIS会将其范围动态重投影到3857下。这可能会产生一个与原始形状略有差异的范围框。水平间距和垂直间距输入相同的值以创建正方形。例如输入1000单位米。水平格网和垂直格网这两个值会根据你设定的范围和间距自动计算显示网格的行列数。你可以先不管或者根据行列数反推间距。输出网格点击“...”选择“保存到文件”格式选择“GeoPackage”比Shapefile更现代命名为grid_3857.gpkg。运行点击“运行”。稍等片刻一个崭新的正方形网格图层就会加载到你的地图上。你可以关掉其他图层只显示这个网格和在线底图会发现网格与地图道路对齐得很好。实操心得在3857下网格的“正方形”仅在屏幕上是真的。你可以用“测量工具”测量一下网格的对角线长度在低纬度地区可能接近但在高纬度地区会差异显著。使用“使用画布范围”时要格外小心因为画布范围可能随着你缩放地图而变化导致每次生成的网格范围不一致。最佳实践是始终使用一个具体图层的范围。3.3 场景二在精确投影坐标系下创建网格假设我们的study_area图层本身就在一个适合的投影坐标系下例如EPSG:4547这是一个以米为单位的投影。我们要创建真实的1平方公里网格。确保画布与数据坐标系一致将画布坐标系设置为与study_area图层相同的坐标系EPSG:4547。这样可以确保所有计算都在正确的空间参考下进行。再次打开“创建网格”工具。配置参数网格类型依然为“矩形面”。网格范围选择“使用图层范围...”并指定study_area。水平间距和垂直间距输入1000单位米。因为当前投影的单位就是米。输出网格保存为grid_precise.gpkg。运行。现在你得到的是在地理意义上更接近真实正方形的网格。你可以将grid_3857和grid_precise两个图层同时加载到**同一个投影坐标系如4547**下进行对比。你会发现grid_3857图层可能会发生明显的形变和位移因为它是在3857坐标系下生成然后被重投影到4547的。3.4 为网格添加唯一标识与属性生成的网格图层默认只有一个id字段。为了后续分析我们通常需要为每个网格单元添加唯一的、有意义的标识符。打开属性表右键点击grid_precise图层选择“打开属性表”。打开字段计算器点击属性表工具栏上的“打开字段计算器”图标或按CtrlI。创建新字段勾选“创建新字段”。输出字段名称grid_id输出字段类型文本字符串表达式我们可以用行列号来组合。假设我们希望ID格式为“R行号_C列号”。首先我们需要计算每个网格所在的行列。这可以通过其几何中心坐标相对于整个网格范围的偏移量来计算但表达式较复杂。一个更简单实用的方法是利用已有的id字段它通常是按行顺序编号的和网格的总列数。我们需要知道总列数。你可以查看创建网格时工具提示的“水平格网”数假设为cols。表达式可以写为R || ( ( \id\ -1) / cols ) 1 || _C || ( ( \id\ -1) % cols ) 1注意这个表达式需要你提前知道列数(cols)并且假设id是从1开始连续编号的。在实际操作中如果网格数量多更稳妥的方式是使用PyQGIS脚本或后续在Excel/数据库中处理。一个更通用的方法是先添加一个顺序号字段然后通过其他工具如“连接属性按位置”后手动计算来分配行列ID。对于初学者可以先添加一个简单的序列号在字段计算器中使用表达式row_number来生成一个从1开始的序列。4. 网格属性导出为CSV打通空间与统计分析的桥梁CSV逗号分隔值文件是数据交换的通用格式可以被Excel、Python pandas、R、数据库等几乎所有数据分析工具读取。将网格的属性导出为CSV意味着我们可以脱离GIS软件进行更灵活的统计分析、图表制作或与其他非空间数据关联。4.1 导出网格几何中心点坐标很多时候我们不仅需要网格本身更需要每个网格的代表性位置点如中心点的坐标。计算几何中心在grid_precise图层的属性表中再次打开字段计算器。创建新字段例如centroid_x类型为“十进制数”精度根据需要设定。表达式输入x(centroid($geometry))。这个函数会计算每个面网格的质心X坐标。同理再创建一个新字段centroid_y表达式为y(centroid($geometry))。点击“确定”属性表就会新增两列坐标值。导出属性表到CSV右键点击grid_precise图层选择“导出” - “将要素另存为...”。在格式中选择“CSV”。选择保存路径和文件名例如grid_attributes.csv。关键步骤几何图形选项。默认是“无几何图形”这意味着导出的CSV只有属性字段没有空间信息。这正是我们通常需要的纯属性表。点击“确定”导出。现在你得到的grid_attributes.csv文件用Excel打开可以看到每个网格的ID、面积、周长、中心点X坐标、中心点Y坐标等信息。你可以基于这些数据进行排序、筛选、分类汇总等操作。4.2 将空间统计结果关联回网格更强大的用法是先利用QGIS的空间分析功能为每个网格计算指标再导出CSV。示例统计每个网格内POI兴趣点的数量。假设你有一个poi.shp的点图层包含了商店、学校等点位。使用“处理工具箱”中的“按位置汇总”工具。输入图层选择grid_precise网格。汇总图层选择poi.shp。选择几何谓词为“包含”即点落在网格内。要汇总的字段可以选择POI的某个分类字段进行计数或者直接勾选“计数”来统计每个网格内的POI总数。输出一个临时的统计结果图层该图层会在grid_precise的属性表基础上新增一列如poi_count。将这个包含了poi_count的网格图层按照上述步骤导出为CSV。这样你的数据分析表就同时具备了空间单元网格ID、坐标和业务指标POI数量分析维度立刻丰富起来。5. 常见问题、排查技巧与高级应用5.1 问题排查速查表问题现象可能原因解决方案生成的网格是空的或只有一个网格范围设置错误或水平/垂直间距远大于范围本身。检查“网格范围”的坐标值是否合理左下角坐标应小于右上角。大幅减小间距值。网格形状是长方形而不是正方形水平间距和垂直间距设置的值不同。确保两个间距值设置为相同的数值。网格没有覆盖我的目标区域1. 使用的“范围”不对。2. 目标区域和网格的坐标系不一致导致视觉偏移。1. 确认使用目标区域图层的范围。2. 将目标区域图层和网格图层都设置为同一坐标系右键图层-设置图层CRS或使用“重投影图层”工具再查看。在3857下创建的网格换到其他坐标系下严重变形Web墨卡托投影本身的高纬度形变导致。这是预期行为不是错误。对于需要精确形状/面积的分析请始终在合适的等面积或本地投影坐标系下创建网格。导出CSV后坐标是乱码或科学计数法CSV编码或数字格式问题。1. 导出CSV时在“自定义选项”中指定编码为UTF-8。2. 在Excel中打开时导入数据数据-从文本/CSV在导入向导中为坐标列指定为“文本”或“数字”格式。“创建网格”工具灰色不可用当前QGIS项目没有设置有效的坐标系。在QGIS右下角为项目设置一个坐标系如EPSG:4326。5.2 高级技巧创建非全局的规则网格有时我们的研究区域是不规则的比如一个弯曲的河流流域但我们仍然想在内部创建规则网格。直接使用区域外接矩形范围创建会生成大量区域外的无效网格。解决方案先创建大范围的规则网格再裁剪。使用“创建网格”工具基于研究区域的外接矩形或一个稍大的范围创建网格。使用“处理工具箱”中的“裁剪”工具。输入图层上一步创建的大网格。叠加图层你的不规则研究区域边界图层。运行后得到的就是完全落在研究区域内部的规则网格。5.3 从CSV坐标点反向创建网格补充热搜词中也有“导入csv文件”相关。有时你的数据源是CSV里面有一系列点的经纬度坐标。你可以在QGIS中通过“图层”-“添加图层”-“添加分隔文本图层”导入CSV指定X、Y字段。这些点可能分布不均。如果你想基于这些点的空间分布生成一个覆盖它们的网格可以先计算这些点的最小边界矩形MMB。选中导入的点图层。使用“矢量”-“地理处理工具”-“边界框”为选中的点生成一个矩形面。然后以这个矩形面为范围使用“创建网格”工具。5.4 性能优化处理超大范围或高精度网格当你需要为一个省甚至全国创建精细网格如100米网格时生成的矢量面数量会极其庞大数百万甚至上亿可能导致QGIS卡顿甚至崩溃。建议方案分块处理将大区域按行政区划或自定义范围切成多个小块分别生成网格最后再用“合并矢量图层”工具合并。考虑使用栅格对于超大规模的分析有时使用相同分辨率的栅格像素网格来代替矢量面在计算效率上更有优势。可以使用“创建网格”工具先创建点网格然后通过其他方法如插值转为栅格或者直接使用“处理工具箱”中的“创建网格”算法生成栅格。使用命令行或PyQGIS对于批量化、自动化的网格生成任务编写PyQGIS脚本或使用GDAL/OGR的命令行工具如gdal_grid是更专业和高效的选择。这允许你在服务器或无头环境中运行不依赖图形界面。我个人在处理一个城市级、10米精度的网格划分项目时最初在QGIS界面操作直接内存溢出。后来改用PyQGIS脚本将城市按街道划分成数十个任务分批生成最后合并整个过程稳定且效率提升了十倍不止。对于简单的、一次性的任务图形界面工具足够好用但对于复杂、重复或大规模的任务尽早转向脚本化是必由之路。