Страница 1 из 1
Загрузка полигонов в QGIS
Добавлено: 27 фев 2010, 12:57
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, а мне нужно как полигоны. Подскажите, пожалуйста, формат данных и модуль через который можно загрузить.
Re: Загрузка полигонов в QGIS
Добавлено: 27 фев 2010, 14:39
Denis Rykov
Если полигонов не много - можно составить их описание в формате WKT и c помощью ogr2ogr сконвертировать в шейп. Можно попробывать закинуть данные в БД PostGIS и там встроенными функциями попытаться собрать полигоны. Приложите ваш набор, если не сложно.
Re: Загрузка полигонов в QGIS
Добавлено: 27 фев 2010, 15:11
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
Re: Загрузка полигонов в QGIS
Добавлено: 27 фев 2010, 15:55
Mavka
Wiki:
WKT
Для ogr2ogr подготавливаете файл в формате
CSV.
Re: Загрузка полигонов в QGIS
Добавлено: 27 фев 2010, 17:33
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')
обеспечивает совпадение координат первой и последней точки границы полигона.
Запускается скрипт командой:
где wkt.csv - выходной файл
2) Остается сконвертировать полученный csv в шейп, это делается командой:
Думаю идея понятна. Если что не ясно - спрашивайте.
Re: Загрузка полигонов в QGIS
Добавлено: 27 фев 2010, 19:18
dragonik
Спасибо Вам большое! Вроде бы всё понял, буду пробовать.
Re: Загрузка полигонов в QGIS
Добавлено: 27 фев 2010, 20:34
dragonik
Начал пробовать, но понял, что я ещё мало понимаю в устройстве QGIS, да и надо учиться программировать.
Я понял смысл скрипта, но я не знаю куда его нужно засунуть, чтобы программа поняла на что ссылаться. И в какой консоле запускать скрипт и соответственно потом конверт? Я пробовал во вкладке Модули-Консоль Python написать txt2wkt.py list.txt wkt.csv (ну вместо list - моё название файла), но это наверное неправильно. И ещё: где должен лежать исходный файл txt?
Re: Загрузка полигонов в QGIS
Добавлено: 27 фев 2010, 20:54
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).
Re: Загрузка полигонов в QGIS
Добавлено: 01 мар 2010, 12:48
dragonik
Спасибо за разъяснения. QGIS у меня был установлен именно таким образом.
Я наверное уже надоел, что так туплю, но...
Я попробовал в консоле OSGeo4W.bat выполнить С:\OSGeo4W\txt2wkt.py list.txt wkt.csv, предварительно положив в эту папку файл list.txt (с координатами) и файл txt2wkt.py (правда может этот файл я сделал неправильно, так как потом при запуске появилось сообщение:"Не удалось открыть файл txt2wkt.py", что нужно выбрать вручную или через инет программу для его открытия). Может быть Python не установился, поскольку этот файл не распознается.
Чтобы получить txt2wkt.py я открыл блокнот, скопировал туда текст кода, сохранил и потом поменял разрешение .txt на .py
Re: Загрузка полигонов в QGIS
Добавлено: 01 мар 2010, 16:49
dragonik
И ещё: я создал файл типа wkt вручную и попытался запустить в (OSGeo4W.bat) консоле ogr2ogr output.shp wkt.csv.
Было написано, что org2org не является внутренней или внешней командой, исполняемой программой или пакетным файлом. Может быть он отдельно устанавливается?
Re: Загрузка полигонов в QGIS
Добавлено: 01 мар 2010, 18:26
Denis Rykov
Здравствуйте. Вы все делаете правильно!
Добавьте в переменную окружения PATH строку:
Код: Выделить всё
c:\OSGeo4W\apps\gdal-dev\bin\;c:\OSGeo4W\bin\
Во всяком случае ogr2ogr должен запуститься. С питоном будем смотреть дальше.
Re: Загрузка полигонов в QGIS
Добавлено: 05 мар 2010, 13:07
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 можно проще осуществить?
Re: Загрузка полигонов в QGIS
Добавлено: 05 мар 2010, 14:51
Denis Rykov
1. Если отсутствует каталог gdal-dev, значит не стоит пакет gdal-dev, скачайте установщик
OSGeo4W и установите его (находится в категории Libs). В этом пакете находится самая последняя версия GDAL/OGR, в которой как раз присутствуют нужные вам возможности.
2. ogr2ogr у вас не запускается потому что вы пишите ogr2ogr вместо ogr2ogr.exe. Советую все-таки поставить gdal-dev и прописать переменные окружения как я писал ранее.
3. Точки в полигоны - посмотрите Инструменты - Обработка - Выпуклые оболочки.
Re: Загрузка полигонов в QGIS
Добавлено: 05 мар 2010, 16:32
dragonik
Спасибо.
Ура! После установки пакета gdal-dev ogr2ogr сработал и создал файл! (Я и до того писал ogr2ogr.exe просто видимо в тех папках свои заморочки)
Всё получилось. И я догадался, что чтобы запустить скрипт (по аналогии с остальными файлами в папка QGIS) нужно было писать немножно не так (хотя может можно и так, но у меня не получалось) как Вы писали txt2wkt.py list.txt wkt.csv.
А нужно было создать файл txt2wkt.bat

и написать txt2wkt.bat list.txt wkt.csv
Спасибо ещё раз! Без Вас я бы точно не разобрался.