Створення POINT з координат довготи / широти в існуючій таблиці за допомогою PostGIS?


10

Я хотів би зробити POINT за допомогою стовпців довготи та широти існуючої таблиці .
Ось посилання на документацію ST_MakePoint .

Ось мій стіл:

CREATE TABLE sysinst.bio (  
    oid INTEGER PRIMARY KEY,  
    longitude FLOAT,  
    latitude FLOAT,  
        geom GEOMETRY(POINT, 26913)
);

Додавання стовпця з геометрії:

SELECT AddGeometryColumn ('sysinst', 'bio', 'geom', 26913, 'POINT', 2);

Ось мій запит:

UPDATE sysinst.bio SET geom = ST_SetSRID(ST_MakePoint(longitude, latitude), 26913);

Немає поверненої помилки, хоча пункти неправильно подано під час перегляду в QGIS.

Бо (-97.5959, 21.1922)я отримую(-109.4896, 0.0002)

Будь-які пропозиції?

Я готовий зробити це більш ефективно, якщо є простіший спосіб.


Я не бачу проблем із запитом. Можливо, ви можете спробувати діагностувати проблему частинами - можливо, спробувати усунути частину QGIS і просто використовувати командний рядок для постгігів?
BradHards

Можливо, я не розумію, але, здається, ви вводите координати Longitude Latitude (-97, 21) в градусах, в CRS, заснованому на UTM, і використовує метри. Якщо ви декларуєте це як SRID 26918, то значення long / lat повинні бути в цьому CRS. Якщо значення Long / Lat знаходяться в градусах, то вам потрібно буде створити геометрію як ST_SetSRID (MakePoint (...), 4326), а потім перетворити шар на 26913
Micha

@Micha, ваш коментар слід додати як відповідь. Я сподіваюся, що належна SRID вирішить проблему ОП. Також може бути корисним включити і приклад того, як додати ST_Transform .
катахдін

Відповіді:


16

Можливо, я не розумію, але, здається, ви вводите координати Longitude Latitude (-97, 21) в градусах, в CRS, заснованому на UTM, і використовує вимірювачі. Якщо ви декларуєте це як SRID 26918, то значення long / lat повинні бути в цьому CRS. Якщо значення Long / Lat знаходяться в градусах, вам потрібно буде створити геометрію як ST_SetSRID (MakePoint (...), 4326), а потім перетворити шар на 26913. Отже, склавши все це разом, якщо вам потрібно мати шар в 26913 році, але колони довготи / широти знаходяться в градусах, тоді CRS 4326

UPDATE sysinst.bio SET geom = ST_Transform(ST_SetSRID(ST_MakePoint(longitude, latitude), 4326),26913);

Дякую за допомогу. Я повинен був подумати про це раніше ...
Зак
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.