Получить значения Lon Lat из типа данных GEOGRAPHY в PostGIS


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
Для географического типа данных используйте допустимую функцию, напр. ST_MaxX () и ST_MaxY () .
Питер Краусс

Ответы:


20

Функция ST_X (точка) поддерживает только геометрию (как сейчас).

Одним из обходных путей является приведение geog к geom с помощью ::geometry.

Hense ваш запрос должен быть таким:

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

И поскольку это геог, SRID будет 4326 .

Также вот хороший источник для типа geog.


Спасибо, ваше решение работает хорошо (при запросах с использованием pgAdmin3). Однако , когда я запрашивая из PHP (Nginx + php5-футов в минуту), я получаю ошибку: 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(), кажется, не существует. Где ты их взял?
Золтан

@ Zoltán Я думаю X()и Y()действительны в более старой версии PostGIS - возможно, 8.x ?. Обновлено, этот запрос будет использовать ST_X()и ST_Y()вместо.
elrobis

Даже в PostGIS 2.2 нет ST_X ( география ), см. Postgis.net/docs/manual-2.2/ST_X.html
Питер Краусс,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.