QGIS中多边形内随机点坐标提取、shapefile关联及xlsx导出方法
QGIS 按多边形生成指定数量随机点并导出目标结构Excel操作流程
前期准备
- 确认行政边界图层坐标系:如果需要输出WGS84经纬度,先右键目标州边界图层,选择【导出】→【要素另存为】,坐标系指定为EPSG:4326,保存后加载新投影后的图层开展后续操作,避免坐标计算偏差。
方法一:可视化分步操作(适合新手,过程可校验)
- 生成固定数量随机点
- 打开顶部菜单栏【处理】→【处理工具箱】,找到【矢量创建】分类下的随机点在多边形内工具,参数按如下设置:
- 输入图层:选择投影后的州边界图层
- 点计数策略:选择「按要素计数」
- 每个要素生成点数量:填
6 - 勾选「保留父图层所有属性」选项,自动把每个点所属多边形的
country_name、state_name属性继承到点图层,无需额外做空间关联 - 如需固定随机结果复现,可在高级参数栏填写固定随机种子值,参数确认后点击运行,生成随机点图层。
- 计算点坐标与分组序号
- 右键生成的随机点图层,打开【属性表】→点击字段计算器按钮,依次新增3个字段:
- 新增
lon字段:字段类型选实数(小数),输入表达式$x,计算得到点的经度 - 新增
lat字段:字段类型选实数(小数),输入表达式$y,计算得到点的纬度 - 新增
point_rank字段:字段类型选整数,输入表达式array_find(array_agg($id, group_by:="state_name"), $id)+1,按州分组给每个州下的6个点自动标注1-6的序号,对应后续6个经纬度列。
- 新增
- 转换为要求的宽表结构
- 在处理工具箱找到【矢量通用】分类下的透视表工具,参数设置:
- 输入图层:选择添加完字段的随机点图层
- 行分组字段:勾选
country_name、state_name,最终输出结果每行对应一个州 - 透视列字段:选择
point_rank - 值字段:新建自定义表达式
"lat" || ', ' || "lon",将经纬度拼接为坐标字符串 - 值聚合方式:选择「第一个匹配值」,运行生成临时宽表。
- 打开临时宽表的属性表,用字段计算器将默认命名为
1-6的列,分别重命名为lat_long_1到lat_long_6,删除其余无关字段。
- 导出Excel
- 右键处理完成的宽表图层,选择【导出】→【要素另存为】,格式选择
MS Office Open XML spreadsheet [XLSX],指定保存路径后点击确认即可导出符合结构要求的文件。
方法二:一步生成法(适合数据量较小的场景)
无需生成中间点图层,直接在原州边界图层操作:
- 打开原图层字段计算器,依次新增
lat_long_1到lat_long_6共6个文本类型字段,每个字段的表达式填写如下格式(每个字段单独运行一次计算):
y(generate_random_points_in_polygon($geometry, 1, rand(0,999999))) || ', ' || x(generate_random_points_in_polygon($geometry, 1, rand(0,999999)))
- 6个字段全部计算完成后,直接导出图层为xlsx格式即可,导出时只保留
country_name、state_name和6个经纬度字段。
注意:如果要求随机点必须落在陆地区域、排除水域/飞地等范围,可提前用州边界图层和陆地区域裁剪图层做交集运算,再基于裁剪后的图层生成随机点。
内容的提问来源于stack exchange,提问作者Ryukazu Saviestyan
相关产品推荐
相关产品推荐

