Отримайте значення Lon Lat від типу даних GEOGRAPHY в PostGIS


16

Після збереження значень “lon lat” як типу даних GEOGRAPHY, як я можу отримати окремі значення lat lon?

Помилка спроби:

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 (точка) підтримує лише геометрію (як і зараз).

Одне вирішення - це віддати геог до геома, використовуючи ::geometry.

Уявіть, що ваш запит має бути таким:

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()функцій не існує. Де ти їх взяв?
Золтан

@ Золтан я думаю , 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.