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.

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.


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.


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.