使用PostGIS时英国郡几何图形显示在几内亚湾的原因排查
问题原因及解决方案
核心问题:坐标系统不匹配+空间参考未正确绑定
- 你的
uk_counties表几何数据采用的是OSGB36英国国家格网(SRID=27700),坐标单位是米,数值代表东距/北距,不是经纬度。但导入后PostGIS可能未正确识别并绑定这个SRID,导致系统默认把这些数值当成WGS84经纬度(SRID=4326,单位是度)解析——27700的大数值(比如464216, 462110)被当成经纬度的话,会直接映射到接近0°N 0°E的几内亚湾区域。 - 同时
demand_origin的经纬度是WGS84(SRID=4326),两个表的坐标系统完全不兼容,直接关联查询时PostGIS无法计算有效交集,所以结果为空。
修复步骤
1. 确认并绑定uk_counties的正确SRID
先检查当前几何字段的SRID是否正确:
SELECT ST_SRID(geometry) FROM uk_counties LIMIT 1;
如果返回值不是27700(比如0),执行以下语句修复:
ALTER TABLE uk_counties ALTER COLUMN geometry TYPE geometry(Geometry, 27700) USING ST_SetSRID(geometry, 27700);
2. 执行跨坐标系的关联查询
把demand_origin的经纬度转换为SRID=27700的坐标后,再与郡的几何图形做交集判断:
SELECT do.origin_city, uc.ctyua23nm AS county_name FROM demand_origin do JOIN uk_counties uc ON ST_Intersects( -- 将经纬度点转换为OSGB36坐标系 ST_Transform(ST_SetSRID(ST_MakePoint(longitude, latitude), 4326), 27700), uc.geometry );
注意:PostGIS中点的坐标顺序是经度(X)在前,纬度(Y)在后,必须和
ST_MakePoint的参数顺序对应,否则坐标会偏移错误。
内容的提问来源于stack exchange,提问作者Amy Beckett
相关产品推荐
相关产品推荐

