Использование PostGIS с существующей таблицей данных с десятичными координатами

У меня есть файл данных в формате CSV, в котором есть такие данные: идентификатор поля | плитка данных | описание данных | долгота | широта

У меня уже установлены PostgreSQL и PostGIS, и я хотел бы использовать PostGIS для создания запроса, который отобразит все записи (из таблицы выше), которые находятся в пределах указанного расстояния от местоположения широты / долготы.

Проблема в том, что я не знаю, с чего начать. Могу ли я просто импортировать свой CSV-файл в базу данных PostgreSQL и начать использовать функции PostgreSQL и PostGIS, как только я конвертирую CSV-файл в таблицу PostgreSQL?

Есть ли какие-то дополнительные шаги, чтобы таблица работала с функциями PostGIS?

Каковы были бы правильные шаги для этого? Я искренне ценю вашу помощь!


person avatar    schedule 09.01.2011    source источник


Ответы (3)


Для работы с PostGIS вам необходимо импортировать эти скрипты в вашу рабочую базу данных.

Как только вы закончите этот шаг, настройте свою таблицу и добавьте к ней столбец PostGIS.

SELECT AddGeometryColumn('yourtable', 'columnname', 4269, 'POINT', 2 );

Последние 3 значения - это SRID, тип и размер. Я просто предполагаю, что это то, что вы хотите. Возможно, вам потребуется настроить SRID, но это должно быть нормально.

Вы можете установить в своем импорте / обновлении / все, что вы выбрали, чтобы добавить геометрию, например

ST_Transform(ST_PointFromText('POINT(-85.45899 32.1337)', 4326));

Этот запрос можно записать в ваш сценарий UPDATE или INSERT для данных.

person DrColossos    schedule 09.01.2011
comment
Спасибо! На самом деле это то, что я искал. Я, вероятно, мог бы написать небольшой скрипт на Python, который будет просматривать таблицу и преобразовывать эти десятичные координаты в точки. - person avatar; 09.01.2011
comment
Хотелось бы, чтобы это сработало? ОБНОВЛЕНИЕ mytable SET geometrycolumn = ST_Transform (ST_PointFromText ('POINT (-85.45899 32.1337)', 4326)), где column1 = 'data1' и column2 = 'data2'; - person avatar; 15.01.2011
comment
@itgorilla Я не знаю справочник по PostGIS наизусть, но почему бы и нет, просто попробуйте;) - person DrColossos; 15.01.2011

Мне просто нужно было решить ту же задачу и сделать что-то похожее на решение DrColossos ... Вы, вероятно, уже справились с этим, но я просто хотел добавить это на случай, если кто-то поищет эту проблему в Google (как я): Нет необходимости чтобы написать сценарий для генерации геометрии из полей lat / lon, вы можете использовать простую объединенную строку:

UPDATE mytable
SET the_geom = ST_PointFromText('POINT(' || x ||' '|| y ||')', 4326)
person m.chips    schedule 22.03.2011

Это забавный вопрос :-)

Вы знаете, в какой системе координат находятся широты?

Я задаю этот вопрос, потому что он имеет отношение к тому, как вы храните данные.

Что вам нужно сделать, так это создать столбец в дополнение к столбцам в файле CSV, которые содержат объект геометрии PostGIS типа POINT.

Затем я бы импортировал данные CSV в стандартные столбцы таблицы, а затем запустил обновление SQL, чтобы построить данные POINT из каждой записи и сохранить их в созданном столбце геометрии.

На этом этапе вы должны иметь возможность использовать функции PostGIS для доступа к данным и выполнения запросов к ним.

Это все своего рода мета, о чем я говорю выше, потому что есть сложности в отношении используемых данных. Вам необходимо знать систему пространственной привязки, используемую изначально для данных.

person Dave G    schedule 09.01.2011
comment
Не уверен, что это правильный вопрос, но как мне преобразовать десятичные таблицы широты и долготы в ТОЧКУ? Я не уверен, что PostgreSQL, просто запустив обновление SQL, узнает, что у меня есть два поля для широты и долготы, и преобразует их в ТОЧКУ. - person avatar; 09.01.2011
comment
Справа широта и длинная указаны в десятичном формате, но они относятся к определенному сфероиду (например, системе координат WGS84 или NAD83). При выполнении обновления вам нужно будет выполнить обновление с подвыборкой, чтобы преобразовать чистые данные о широте и долготе в соответствующий объект PostGIS POINT. Вам нужно будет обратиться к документации о том, как это сделать. - person Dave G; 09.01.2011