Делать ТОЧКУ из координат долготы / широты в существующей таблице, используя PostGIS?


10

Я хотел бы сделать ТОЧКУ, используя столбцы долготы и широты существующей таблицы .
Вот ссылка на документацию 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 и просто использовать командную строку для postgis?
BradHards

Возможно, я не понимаю, но вы, кажется, вводите координаты долготы и широты (-97, 21) в градусах в CRS, основанный на UTM и использующий метры. Если вы объявляете это как SRID 26918, тогда значения long / lat должны быть в этом CRS. Если значения Long / Lat даны в градусах, вам нужно будет создать геометрию как ST_SetSRID (MakePoint (...), 4326), а затем преобразовать слой в 26913
Миша,

@ Мича, вы должны добавить свой комментарий в качестве ответа. Я ожидаю, что правильный SRID решит проблему с OP. Также может быть полезно включить и пример того, как добавить ST_Transform .
Катахдин

Ответы:


16

Возможно, я не понимаю, но вы, кажется, вводите координаты долготы и широты (-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.