Обрезка растров по вектору

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
kryl
Завсегдатай
Сообщения: 324
Зарегистрирован: 14 фев 2010, 20:42
Репутация: 0

Обрезка растров по вектору

Сообщение kryl » 20 мар 2010, 12:43

Подскажите пожалуйста, можно ли в QGIS/GRASS/GDAL организовать удобную обрезку растров по векторным полигонам( например отрезать зарамочное оформление топокарт по разграфке).

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Обрезка растров по вектору

Сообщение Denis Rykov » 20 мар 2010, 16:17

Не уверен, что правильно, но как вариант:
1. Открываем в QGIS вектор, по которому нужно произвести обрезку. В свойствах символики выставляем сплошную заливку. Для определенности будем считать, что цвет заливки 255 0 0 (красный).
2. File - Save As Image..., сохраняем в tiff.
3. Создаем новый проект.
4. Добавляем растр, который нужно обрезать и сверху накладываем растр, созданный по вектору.
5. Заходим в свойства растра, который был создан по вектору и задаем 100% прозрачность для цвета 255 0 0.
6. File - Save As Image.
Пример результата:
Вложения
modis.jpg
modis.jpg (904.65 КБ) 24351 просмотр
result.png
result.png (524.35 КБ) 24351 просмотр
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

Re: Обрезка растров по вектору

Сообщение SS_Rebelious » 20 мар 2010, 19:49

Аналогичным способом я как-то пользовался для мапинфо, только там есть опция "врезка" - которая позволяет скрыть на экране всё, что выходит за пределы определённого многоугольника. Может имеет смысл предложить разработчикам сделать аналогичный инструмент для QGIS? Тогда вышеописанную процедуру можно будет осуществить гораздо быстрее.
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Обрезка растров по вектору

Сообщение Denis Rykov » 20 мар 2010, 20:21

"Правильный" способ заключается в использовании утилиты gdal_rasterize:

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

gdal_rasterize -i -b 1 -b 2 -b 3 -burn 255 -l admin admin.shp modis.tif
Внимание! Изменения вносятся непосредственно в растр, так что не забудьте сделать бэкап.
Вот несколько примеров использования утилиты (в комментариях - команда, которой был получен результат):
Вложения
gdal_rasterize-03.gif
gdal_rasterize -i -b 1 -b 2 -b 3 -burn 0 -burn 0 -burn 255 -l admin admin.shp modis.tif
Ключ -i указывает на то, что запись будет вестись вне векторной маски.
-burn 0 -burn 0 -burn 255 - записывает в 3-й канал значение 255, в остальные - 0
gdal_rasterize-03.gif (210 КБ) 24341 просмотр
gdal_rasterize-02.gif
gdal_rasterize -b 1 -b 2 -b 3 -burn 255 -l admin admin.shp modis.tif
-burn 255 - записывает во все каналы маски значение 255
gdal_rasterize-02.gif (147.49 КБ) 24341 просмотр
gdal_rasterize-01.gif
gdal_rasterize -i -b 1 -b 2 -b 3 -burn 255 -l admin admin.shp modis.tif
Ситуация, о которой речь шла в первом посте топика.
gdal_rasterize-01.gif (209.6 КБ) 24341 просмотр
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Обрезка растров по вектору

Сообщение Denis Rykov » 20 мар 2010, 20:39

Можно использовать и различные условия, например:

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

gdal_rasterize -i -b 1 -b 2 -b 3 -burn 255 -l admin admin.shp -where "NAME='Новосибирская область'" modis.tif
Результат:
Вложения
gdal_rasterize-04.gif
gdal_rasterize-04.gif (78.41 КБ) 24331 просмотр
Spatial is now, more than ever, just another column- The Geometry Column.

kryl
Завсегдатай
Сообщения: 324
Зарегистрирован: 14 фев 2010, 20:42
Репутация: 0

Re: Обрезка растров по вектору

Сообщение kryl » 20 мар 2010, 20:44

Спасибо! Попробуем. Вот бы еще соответствующий пунктик добавить в GDAL-tools когда-нибудь.

kryl
Завсегдатай
Сообщения: 324
Зарегистрирован: 14 фев 2010, 20:42
Репутация: 0

Re: Обрезка растров по вектору

Сообщение kryl » 20 мар 2010, 21:06

А с индекстными цветами работать будет?

Аватара пользователя
taimyr
IT-моторист
Сообщения: 460
Зарегистрирован: 14 окт 2003, 12:36
Репутация: 17
Откуда: Москва
Контактная информация:

Re: Обрезка растров по вектору

Сообщение taimyr » 20 мар 2010, 21:30

Господа, давайте договоримся о терминах - это все НЕ ЕСТЬ ОБРЕЗКА, это СКРЫТИЕ ЧАСТИ растра. Обрезка - это то что делает инструмент image clipper - а именно - удаление лишнего на растре, но к сожалению, только по прямоугольному....
И оставшиеся в живых позавидуют мёртвым....

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Обрезка растров по вектору

Сообщение Максим Дубинин » 20 мар 2010, 21:57

taimyr, строго говоря да.
Однако, если дополнить то, что предлагает DR, определением охвата векторного объекта/слоя и обрезкой результата скрытия по нему, это будет то, о чем говоришь ты.
пристегивайтесь, турбулентность прямо по курсу

Аватара пользователя
taimyr
IT-моторист
Сообщения: 460
Зарегистрирован: 14 окт 2003, 12:36
Репутация: 17
Откуда: Москва
Контактная информация:

Re: Обрезка растров по вектору

Сообщение taimyr » 20 мар 2010, 22:05

sim писал(а):taimyr, строго говоря да.
Однако, если дополнить то, что предлагает DR, определением охвата векторного объекта/слоя и обрезкой результата скрытия по нему, это будет то, о чем говоришь ты.
Тут почти согласен - но как я понял, нулевые значения все же остаются за пределами обрезки, а не обрезаются по крайним точкам
И оставшиеся в живых позавидуют мёртвым....

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Обрезка растров по вектору

Сообщение Denis Rykov » 21 мар 2010, 04:45

kryl писал(а):А с индекстными цветами работать будет?
Да, будет, например:

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

gdal_rasterize -i -b 1 -burn 0 -l cutting cutting.shp k-52-06.tif
где -burn 0 - одно из значений, присутствующих в палитре, и используемое в качестве цвета обрезанной области.
Spatial is now, more than ever, just another column- The Geometry Column.

kryl
Завсегдатай
Сообщения: 324
Зарегистрирован: 14 фев 2010, 20:42
Репутация: 0

Re: Обрезка растров по вектору

Сообщение kryl » 22 мар 2010, 10:32

Способ мне понравился, только артефакты при обрезке ландсата вылезают. Полосы всякие.
строка:

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

gdal_rasterize -i -b 1 -b 2 -b 3 -b 4 -b 5 -b 6 -burn 255 -l clip clip.shp LT51720192009208MOR00.img
Вложения
clip.jpg
clip.jpg (111.01 КБ) 24285 просмотров

kryl
Завсегдатай
Сообщения: 324
Зарегистрирован: 14 фев 2010, 20:42
Репутация: 0

Re: Обрезка растров по вектору

Сообщение kryl » 22 мар 2010, 10:48

Разобрался снимок в UTM, а шейп в ДД на WGS о чем GDAL честно предупреждает.

Warning : the output raster dataset and the input vector layer do not have the s
ame SRS.
Results might be incorrect (no on-the-fly reprojection of input data).
0...10...20...30...40...50...60...70...80...90...100 - done.

Если резать шейпом в той же проекции что и растр, то все нормально.

Trace
Активный участник
Сообщения: 153
Зарегистрирован: 14 окт 2009, 05:07
Репутация: 0
Откуда: Красноярск
Контактная информация:

Re: Обрезка растров по вектору

Сообщение Trace » 14 апр 2010, 09:12

Столкнулся с подобной задачей. пришлось обрезать много растров. написал маленький скрипт работает из папки с растрами. запускается из под msys (OSGeo4W) обрезает индексные растры. Если кому поможет выкладываю скрипт...

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

#!/bin/bash
        for i in $( ls *.tif ); do # расширение tif можно заменить на любое другое
            gdal_rasterize -i -b 1 -burn 0 -l list /d/list.shp -where "OBREZKA=$i" $i # list - название обрезки в формате шейп
        done

Аватара пользователя
nadiopt
Гуру
Сообщения: 4744
Зарегистрирован: 29 янв 2009, 13:27
Репутация: 495
Ваше звание: хрюкало
Откуда: Санкт-Петербург
Контактная информация:

Re: Обрезка растров по вектору

Сообщение nadiopt » 25 май 2010, 11:32

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

Ответить

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

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

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