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
以下のための地理データ型の使用に有効な機能、EX。また、ST_MaxX()および ST_MaxY()
ピータークラウス

回答:


20

ST_X(ポイント)関数は(今のような)ジオメトリをサポートしています。

1つの回避策は を使用して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()
ゾルタン14

@ZoltánPostGISの古いリビジョン(おそらく8.x?)で有効だX()と思いY()ます。更新され、そのクエリは代わりにST_X()and を使用しST_Y()ます。
elrobis

PostGIS 2.2にもST_X(geography)はありません。postgis.net/ docs / manual
Peter Krauss
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.