QGIS中为PostgreSQL导入的无几何表添加几何并生成点图层问询
嘿,我之前也遇到过完全一样的问题——PostgreSQL表里只有X/Y坐标字段,没有几何列,导入QGIS只能看到属性表。别慌,有两种简单的方法能把这些坐标转成点图层,看你需求选:
方法一:在QGIS中直接转换(快速临时方案)
这个方法不用动数据库,适合一次性使用:
- 右键你已经导入的纯属性表图层 → 选择「Export」→「Save Features As...」
- 在弹出的保存窗口里:
- 「Format」选你喜欢的格式(推荐GeoPackage,比Shapefile更稳定)
- 找到「Geometry」选项,勾选后在下拉菜单里选「Point」
- 「X field」选你的X坐标字段,「Y field」选你的Y坐标字段
- 关键一步:在「CRS」里手动选择EPSG:21781 (CH1903 / LV03),必须和你的坐标系统完全匹配
- 设置好保存路径和文件名,点击「OK」,生成的新图层就是带点几何的图层了
方法二:在PostgreSQL中创建带几何的视图(持久化方案)
如果以后还要频繁用这个数据,直接在数据库里生成带几何列的视图更方便,下次导入QGIS直接就能看到点图层:
- 打开QGIS顶部菜单的「Database」→「DB Manager」,连接到你的PostgreSQL数据库
- 找到目标表,打开SQL编辑器,输入下面的SQL(替换
your_table、x_col、y_col为你的实际表名和字段名):
CREATE OR REPLACE VIEW your_table_with_geometry AS SELECT *, ST_SetSRID(ST_MakePoint(x_col, y_col), 21781) AS geom FROM your_table;
- 执行SQL后,回到「Add PostGIS Layer」工具,不用勾选「Also list tables with no geometry」就能找到这个新视图,导入后直接就是正确的点图层
小提醒
- 确保你的X/Y字段是数值类型(比如
float或numeric),如果是文本类型,得先转成数值,把SQL里的x_col改成CAST(x_col AS float)就行 - 如果生成的点位置完全不对,先检查CRS是不是选错了——EPSG:21781是瑞士专用的坐标系,别和EPSG:4326(WGS84)搞混哦
内容的提问来源于stack exchange,提问作者Will




