从PostGIS中的GEOGRAPHY数据类型获取Lon Lat值


16

在将纬度值存储为GEOGRAPHY数据类型后,如何检索各个纬度值?

尝试失败:

SELECT id, geog, ST_X(geog), ST_Y(geog) FROM locations;

错误:

No function matches the given name and argument types. You might need to add explicit type casts.

1
对于地理数据类型,请使用有效函数,例如。ST_MaxX()ST_MaxY()
彼得·克劳斯

Answers:


20

ST_X(点)功能只支持几何体(如现在)。

一种解决方法是强制转换在使用的GeOG到GEOM ::geometry

您的查询应该像这样:

SELECT id, geog, ST_X(geog::geometry), ST_Y(geog::geometry) FROM locations; 

由于它是geog,因此SRID为 4326

这也是geog类型一个很好的来源。


谢谢您的解决方案运行良好(使用pgAdmin3查询时)。但是,当我从PHP(nginx + php5-fpm)查询时,出现错误:Undefined object: 7 ERROR: type "geometry" does not exist。有任何想法吗?stackoverflow.com/questions/15780931/…–
Nyxynyx

好,对我来说效果很好。
费利佩

1

不需要演员

尝试使用此查询。

SELECT ST_XMax(geog), ST_YMax(geog), ST_AsEWKT(geog)
FROM locations LIMIT 10;

这个对我有用。


1
您正在使用哪个PostGIS和PostgreSQL版本?在9.5和2.2中,运行查询SELECT ST_XMax(ST_GeographyFromText('SRID=4326;POINT(-73.968504 40.779741)'));使我得到ERROR: function st_xmax(geography) does not exist
r0estir0bbe

0

尝试使用此查询。

SELECT X(the_geom), Y(the_geom), ST_AsEWKT(the_geom)
      FROM locations LIMIT 10;

希望对您有帮助


1
X()Y()功能似乎并不存在。你从哪儿得到的?
佐尔坦

@佐尔坦我觉得X()Y()在PostGIS的较旧版本是有效的-也许8.x的?更新后,该查询将使用ST_X()ST_Y()代替。
elrobis 2014年

甚至PostGIS 2.2也没有ST_X(地理),请参见postgis.net/docs/manual-2.2/ST_X.html
Peter Krauss
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.