Загрузка полигонов в QGIS

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
dragonik
Новоприбывший
Сообщения: 8
Зарегистрирован: 27 фев 2010, 12:29
Репутация: 0

Загрузка полигонов в QGIS

Сообщение dragonik »

Добрый день!
Мне нужно загрузить набор точек в виде полигонов в QGIS. У меня есть только координаты точек в СК Trans Mercator. Как я понял нужно иметь файл, например, такого формата:
altay
1
84.0024871826 49.0830841064
84.0024871826 52.668598175
89.8699798584 52.668598175
89.8699798584 49.0830841064
84.0024871826 49.0830841064
END
END
или нет?
Но когда я пытаюсь добавить данные как новый векторный слой мне всё время пишут, что файл не является источником данных. У меня получается загружать данные только как точки через модуль Delimeted text, а мне нужно как полигоны. Подскажите, пожалуйста, формат данных и модуль через который можно загрузить.
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Загрузка полигонов в QGIS

Сообщение Denis Rykov »

Если полигонов не много - можно составить их описание в формате WKT и c помощью ogr2ogr сконвертировать в шейп. Можно попробывать закинуть данные в БД PostGIS и там встроенными функциями попытаться собрать полигоны. Приложите ваш набор, если не сложно.
Spatial is now, more than ever, just another column- The Geometry Column.
dragonik
Новоприбывший
Сообщения: 8
Зарегистрирован: 27 фев 2010, 12:29
Репутация: 0

Re: Загрузка полигонов в QGIS

Сообщение dragonik »

Спасибо за ответ. Полигонов не много. А как устроен этот формат WKT?

Пример одного из полигонов такой:
507812.00 7531812.00
508212.00 7531812.00
508212.00 7531212.00
508612.00 7531212.00
508612.00 7530612.00
510012.00 7530612.00
510012.00 7530012.00
511412.00 7530012.00
511412.00 7529412.00
512012.00 7529412.00
512012.00 7528812.00
512612.00 7528812.00
512612.00 7528212.00
513412.00 7528212.00
513412.00 7527612.00
514212.00 7527612.00
514212.00 7525812.00
514887.00 7525812.00
514887.00 7525712.00
515012.00 7525712.00
515012.00 7525212.00
515687.00 7525212.00
515687.00 7525112.00
515812.00 7525112.00
515812.00 7524812.00
515787.00 7524812.00
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Загрузка полигонов в QGIS

Сообщение Mavka »

Wiki: WKT
Для ogr2ogr подготавливаете файл в формате CSV.
лангольеры под окном жрали время ом-ном-ном
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Загрузка полигонов в QGIS

Сообщение Denis Rykov »

Вид записи полигона в формате WKT:

Код: Выделить всё

POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2))
где первая скобка (1 1,5 1,5 5,1 5,1 1) - внешняя граница, а вторая (2 2, 3 2, 3 3, 2 3,2 2) - внутренняя (в случае полигона с "дыркой"). Важно: координаты первой и последней точек должны совпадать, что видно из привеленного пример: 1 1 для внешней и 2 2 для внутренней границ.

Предположим, что "дырок" в ваших полигонах нет. Дальше порядок действий следующий:

1) Допустим файл list.txt содержит координаты узлов полигона в виде:

Код: Выделить всё

507812.00 7531812.00
508212.00 7531812.00
508212.00 7531212.00
508612.00 7531212.00
508612.00 7530612.00
Я набросал небольшой скриптик (назовём его txt2wkt.py) на python, конвертирующий эти данные в csv файл, содержащий WKT описание полигона:

Код: Выделить всё

import sys
PolyVertexList = open(sys.argv[1], "r")
WKTPolygon = open(sys.argv[2], "wt")
WKTPolygon.write('WKT,index'+'\n')
WKTPolygon.write('\"POLYGON((')
for line in PolyVertexList:
        WKTPolygon.write(str(line).rstrip('\n')+',')
PolyVertexList.seek(0, 0);
WKTPolygon.write(PolyVertexList.read().split('\n')[1]+'))\",foo')
PolyVertexList.close()
WKTPolygon.close()
Имя первого столбца обязательно должно быть WKT, это позволит упростить дальнейшую конвертацию в shp без использования vrt драйвера. Поле index со значением 'foo' введено для работы ogr2ogr (при одном поле файл не распознается как csv). Строка:

Код: Выделить всё

WKTPolygon.write(PolyVertexList.read().split('\n')[1]+'))\",foo')
обеспечивает совпадение координат первой и последней точки границы полигона.

Запускается скрипт командой:

Код: Выделить всё

txt2wkt.py list.txt wkt.csv
где wkt.csv - выходной файл

2) Остается сконвертировать полученный csv в шейп, это делается командой:

Код: Выделить всё

ogr2ogr output.shp wkt.csv
Думаю идея понятна. Если что не ясно - спрашивайте.
Spatial is now, more than ever, just another column- The Geometry Column.
dragonik
Новоприбывший
Сообщения: 8
Зарегистрирован: 27 фев 2010, 12:29
Репутация: 0

Re: Загрузка полигонов в QGIS

Сообщение dragonik »

Спасибо Вам большое! Вроде бы всё понял, буду пробовать.
dragonik
Новоприбывший
Сообщения: 8
Зарегистрирован: 27 фев 2010, 12:29
Репутация: 0

Re: Загрузка полигонов в QGIS

Сообщение dragonik »

Начал пробовать, но понял, что я ещё мало понимаю в устройстве QGIS, да и надо учиться программировать.
Я понял смысл скрипта, но я не знаю куда его нужно засунуть, чтобы программа поняла на что ссылаться. И в какой консоле запускать скрипт и соответственно потом конверт? Я пробовал во вкладке Модули-Консоль Python написать txt2wkt.py list.txt wkt.csv (ну вместо list - моё название файла), но это наверное неправильно. И ещё: где должен лежать исходный файл txt?
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Загрузка полигонов в QGIS

Сообщение Denis Rykov »

QGIS тут как бы совсем не причем. Давайте по порядку.

1) Установите QGIS с помощью OSGeo4W (описано здесь), вместе с QGIS установятся библиотеки GDAL/OGR и соответствующие утилиты (нам будет нужна ogr2ogr), также будет установлен Python.
2) Если при установке были выбраны пути по умолчанию, то у вас появится каталог c:\OSGeo4W\. В нем есть файл OSGeo4W.bat - этот файл запуска консоли OSGeo4W. Вот в этой консоли и выполняйте скрипт на питоне (для удобства файл самого скрипта и файл list.txt можете положить в c:\OSGeo4W\).
3) В этой же консоли производите конвертирование с помощью ogr2ogr.
4) После того как получите шейп - вот тогда открывайте его в QGIS.

Да, все вышеописанное относится к MS Windows.
P.S. Если Вам удобно - можете задавать вопросы в irc (http://gis-lab.info/irc.html).
Spatial is now, more than ever, just another column- The Geometry Column.
dragonik
Новоприбывший
Сообщения: 8
Зарегистрирован: 27 фев 2010, 12:29
Репутация: 0

Re: Загрузка полигонов в QGIS

Сообщение dragonik »

Спасибо за разъяснения. QGIS у меня был установлен именно таким образом.
Я наверное уже надоел, что так туплю, но...
Я попробовал в консоле OSGeo4W.bat выполнить С:\OSGeo4W\txt2wkt.py list.txt wkt.csv, предварительно положив в эту папку файл list.txt (с координатами) и файл txt2wkt.py (правда может этот файл я сделал неправильно, так как потом при запуске появилось сообщение:"Не удалось открыть файл txt2wkt.py", что нужно выбрать вручную или через инет программу для его открытия). Может быть Python не установился, поскольку этот файл не распознается.
Чтобы получить txt2wkt.py я открыл блокнот, скопировал туда текст кода, сохранил и потом поменял разрешение .txt на .py
dragonik
Новоприбывший
Сообщения: 8
Зарегистрирован: 27 фев 2010, 12:29
Репутация: 0

Re: Загрузка полигонов в QGIS

Сообщение dragonik »

И ещё: я создал файл типа wkt вручную и попытался запустить в (OSGeo4W.bat) консоле ogr2ogr output.shp wkt.csv.
Было написано, что org2org не является внутренней или внешней командой, исполняемой программой или пакетным файлом. Может быть он отдельно устанавливается?
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Загрузка полигонов в QGIS

Сообщение Denis Rykov »

Здравствуйте. Вы все делаете правильно!
Добавьте в переменную окружения PATH строку:

Код: Выделить всё

c:\OSGeo4W\apps\gdal-dev\bin\;c:\OSGeo4W\bin\
Во всяком случае ogr2ogr должен запуститься. С питоном будем смотреть дальше.
Spatial is now, more than ever, just another column- The Geometry Column.
dragonik
Новоприбывший
Сообщения: 8
Зарегистрирован: 27 фев 2010, 12:29
Репутация: 0

Re: Загрузка полигонов в QGIS

Сообщение dragonik »

Здравствуйте! Это опять я :)
Папки gdal-dev у меня нет вообще, поэтому такой путь я думаю изначально не верен, org2org.exe у меня расположен по такому пути C:\OSGeo4W\apps\gdal-16\bin. Но, к сожалению, после набора C:\OSGeo4W\apps\gdal-16\bin\ogr2ogr output.shp wkt.csv всё равно пишет, что "apps\gdal-16\bin\ogr2ogr" не является внутр. или внеш командой и т.д.

Параллельно возникла идея конвертации шейпа (.shp) точек (а не txt, csv и т.д.) в полигон. Может это в QGis можно проще осуществить?
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Загрузка полигонов в QGIS

Сообщение Denis Rykov »

1. Если отсутствует каталог gdal-dev, значит не стоит пакет gdal-dev, скачайте установщик OSGeo4W и установите его (находится в категории Libs). В этом пакете находится самая последняя версия GDAL/OGR, в которой как раз присутствуют нужные вам возможности.
2. ogr2ogr у вас не запускается потому что вы пишите ogr2ogr вместо ogr2ogr.exe. Советую все-таки поставить gdal-dev и прописать переменные окружения как я писал ранее.
3. Точки в полигоны - посмотрите Инструменты - Обработка - Выпуклые оболочки.
Spatial is now, more than ever, just another column- The Geometry Column.
dragonik
Новоприбывший
Сообщения: 8
Зарегистрирован: 27 фев 2010, 12:29
Репутация: 0

Re: Загрузка полигонов в QGIS

Сообщение dragonik »

Спасибо.
Ура! После установки пакета gdal-dev ogr2ogr сработал и создал файл! (Я и до того писал ogr2ogr.exe просто видимо в тех папках свои заморочки)
Всё получилось. И я догадался, что чтобы запустить скрипт (по аналогии с остальными файлами в папка QGIS) нужно было писать немножно не так (хотя может можно и так, но у меня не получалось) как Вы писали txt2wkt.py list.txt wkt.csv.
А нужно было создать файл txt2wkt.bat :) и написать txt2wkt.bat list.txt wkt.csv
Спасибо ещё раз! Без Вас я бы точно не разобрался.
Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость