Ottieni valori Lon Lat da un tipo di dati GEOGRAFIA in PostGIS


16

Dopo aver memorizzato i valori lat lat come tipo di dati GEOGRAFIA, come posso recuperare i singoli valori lat lat?

Tentativo fallito:

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

Errore:

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

1
Per il tipo di dati geografico utilizzare una funzione valida, ad es. ST_MaxX () e ST_MaxY () .
Peter Krauss,

Risposte:


20

La funzione ST_X (punto) supporta solo la geometria (per ora).

Una soluzione alternativa è lanciare il geog in geom usando ::geometry.

Quindi la tua query dovrebbe essere così:

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

E poiché è geog il SRID sarebbe 4326 .

Inoltre ecco una buona fonte per il tipo di geog.


Grazie, la tua soluzione funziona bene (durante le query con pgAdmin3). Tuttavia quando sarò l'interrogazione da PHP (nginx + php5-FPM), ottengo l'errore: Undefined object: 7 ERROR: type "geometry" does not exist. Qualche idea? stackoverflow.com/questions/15780931/...
Nyxynyx

Bene, funziona bene per me.
Felipe,

1

Non è necessario il cast

Prova a usare questa query.

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

per me funziona.


1
Quale versione di PostGIS e PostgreSQL stai usando? Con 9.5 e 2.2, l'esecuzione della query SELECT ST_XMax(ST_GeographyFromText('SRID=4326;POINT(-73.968504 40.779741)'));mi dà ERROR: function st_xmax(geography) does not exist.
r0estir0bbe,

0

prova a usare questa query.

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

spero che ti aiuti


1
Le funzioni X()e Y()non sembrano esistere. Dove li hai presi?
Zoltán,

@ Zoltán Penso X()e Y()sono validi in una versione precedente di PostGIS - forse 8.x ?. Aggiornato, quella query avrebbe usato ST_X()e ST_Y()invece.
elrobis,

Anche PostGIS 2.2 non ha ST_X ( geografia ), vedi postgis.net/docs/manual-2.2/ST_X.html
Peter Krauss,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.