Obtenir des valeurs Lon Lat à partir d'un type de données GEOGRAPHY dans PostGIS

16

Après avoir stocké les valeurs lat lat en tant que type de données GEOGRAPHY, comment récupérer les valeurs lat lat individuelles?

Tentative échouée:

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

Erreur:

No function matches the given name and argument types. You might need to add explicit type casts.
Nyxynyx
la source
1
Pour le type de données géographiques, utilisez une fonction valide, par ex. ST_MaxX () et ST_MaxY () .
Peter Krauss du

Réponses:

20

La fonction ST_X (point) ne prend en charge que la géométrie (comme pour l'instant).

Une solution consiste à jeter le geog à l' aide geom ::geometry.

Hense votre requête devrait être comme ceci:

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

Et comme c'est geog, le SRID serait 4326 .

Voici également une bonne source pour le type geog.

nickves
la source
Merci, votre solution fonctionne bien (lors d'une requête à l'aide de pgAdmin3). Cependant , quand je suis Interrogation de PHP (nginx + php5-FPM), je reçois l'erreur: Undefined object: 7 ERROR: type "geometry" does not exist. Des idées? stackoverflow.com/questions/15780931/…
Nyxynyx
Bon, ça marche bien pour moi.
Felipe
1

Pas besoin de plâtre

Essayez d'utiliser cette requête.

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

ça marche pour moi.

Peter Krauss
la source
1
Quelle version de PostGIS et PostgreSQL utilisez-vous? Avec 9.5 et 2.2, l'exécution de la requête SELECT ST_XMax(ST_GeographyFromText('SRID=4326;POINT(-73.968504 40.779741)'));me donne ERROR: function st_xmax(geography) does not exist.
r0estir0bbe
0

essayez d'utiliser cette requête.

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

J'espère que ça t'aide

Aragon
la source
1
Les fonctions X()et Y()ne semblent pas exister. Où les avez-vous obtenus?
Zoltán
@ Zoltán Je pense X()et Y()sont valables dans une ancienne révision de PostGIS - peut-être 8.x ?. Mis à jour, cette requête utiliserait ST_X()et à la ST_Y()place.
elrobis
Même PostGIS 2.2 n'a pas de ST_X ( géographie ), voir postgis.net/docs/manual-2.2/ST_X.html
Peter Krauss