You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 10中从geography列提取经纬度适配谷歌地图

解决PostgreSQL geography列提取经纬度用于Google Data Studio的问题

你的outline列是geography类型(大概率是多边形、线这类非点几何),所以直接用ST_X()/ST_Y()会报错——这两个函数要求输入必须是点类型。你用ST_Centroid()取几何中心点的思路是对的,以下是针对PostgreSQL 10的最优解决方案:

推荐方案:提取数值类型的经纬度(适配Google Data Studio)

Google Data Studio的地图控件直接支持数值类型的纬度、经度字段,不需要文本格式,这种方式最可靠:

方式1:使用geography专属函数(更简洁)

ST_Latitude()和ST_Longitude()专门用于从geography类型的点中提取纬度、经度:

SELECT 
  i.customer_id, 
  i.captured_at,  
  i.name, 
  i.site_id, 
  ST_Latitude(ST_Centroid(i.outline)) AS latitude,
  ST_Longitude(ST_Centroid(i.outline)) AS longitude
FROM images i

方式2:转geometry后提取

如果习惯用geometry相关函数,可以先把中心点转成geometry类型,再用ST_Y()(纬度)、ST_X()(经度)提取:

SELECT 
  i.customer_id, 
  i.captured_at,  
  i.name, 
  i.site_id, 
  ST_Y(ST_Centroid(i.outline)::geometry) AS latitude,
  ST_X(ST_Centroid(i.outline)::geometry) AS longitude
FROM images i

可选:生成"纬度,经度"字符串格式

如果确实需要字符串格式的坐标,用CONCAT()拼接数值即可:

SELECT 
  i.customer_id, 
  i.captured_at,  
  i.name, 
  i.site_id, 
  CONCAT(ST_Latitude(ST_Centroid(i.outline)), ',', ST_Longitude(ST_Centroid(i.outline))) AS lat_lng_str
FROM images i

注意:优先选择数值类型的经纬度,Google Data Studio对数值型地理字段的兼容性和解析效率都远高于文本格式,能避免不必要的解析错误。

内容的提问来源于stack exchange,提问作者Patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 01:45:42