Uzyskaj wartości Lon Lat z typu danych GEOGRAFIA w PostGIS

16

Po zapisaniu wartości lon lat jako typu danych GEOGRAFIA, jak mogę pobrać poszczególne wartości lon lat?

Nieudana próba:

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

Błąd:

No function matches the given name and argument types. You might need to add explicit type casts.
Nyxynyx
źródło
1
Dla typu danych geograficznych użyj poprawnej funkcji, np. ST_MaxX () i ST_MaxY () .
Peter Krauss

Odpowiedzi:

20

Funkcja ST_X (punkt) obsługuje tylko geometrię (jak na razie).

Jednym obejściem jest rzutowanie geogiem na geom za pomocą ::geometry.

Hense twoje zapytanie powinno wyglądać tak:

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

A ponieważ jest to geog, SRID wyniesie 4326 .

Również tutaj jest dobre źródło dla typu geog.

nickves
źródło
Dzięki Twoje rozwiązanie działa dobrze (podczas wysyłania zapytań przy użyciu pgAdmin3). Jednak kiedy jestem kwerend z PHP (nginx + php5-FPM), pojawia się błąd: Undefined object: 7 ERROR: type "geometry" does not exist. Jakieś pomysły? stackoverflow.com/questions/15780931/…
Nyxynyx
Dobrze, działa dobrze dla mnie.
Felipe
1

Nie potrzebujesz obsady

Spróbuj użyć tego zapytania.

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

mi to pasuje.

Peter Krauss
źródło
1
Jakiej wersji PostGIS i PostgreSQL używasz? W wersji 9.5 i 2.2 uruchomienie zapytania SELECT ST_XMax(ST_GeographyFromText('SRID=4326;POINT(-73.968504 40.779741)'));daje mi ERROR: function st_xmax(geography) does not exist.
r0estir0bbe
0

spróbuj użyć tego zapytania.

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

Mam nadzieję, że Ci to pomoże

Aragonia
źródło
1
Funkcje X()i Y()wydają się nie istnieć. Skąd je masz?
Zoltán
@ Zoltán myślę X()i Y()obowiązują w starszej rewizji PostGIS - może 8.x ?. Zaktualizowano, to zapytanie użyje ST_X()i ST_Y()zamiast tego.
elrobis
Nawet PostGIS 2.2 nie ma ST_X ( geografia ), patrz postgis.net/docs/manual-2.2/ST_X.html
Peter Krauss