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
相关产品推荐
相关产品推荐

