Экспорт каждого пересечения в отдельный файл

Ответить
Аватара пользователя
Xmypblu
Участник
Сообщения: 73
Зарегистрирован: 18 авг 2013, 05:36
Репутация: 17
Контактная информация:

Экспорт каждого пересечения в отдельный файл

Сообщение Xmypblu » 14 фев 2017, 16:12

Добрый день,

т.к. не силен в терминологии, прошу модератора переименовать тему в более понятное - при необходимости.

Недавно на форуме ОСМ я вызвался сделать "заготовки" в виде шейпов, для желающих уточнить гидрографию.
Особого интереса это не вызвало, но недавно в личной переписке мне задали вопрос:
почему не сделать файлы не по квадрату SRTM, а по небольшому (по площади водосбора?) бассейну
1 файл = 1 "кусту", который необходимо уточнить и отрисовать притоки
...
Если еще получится показать расположение (сам stream, контур буфера или bbox района - на выбор) и наличие спутниковых снимков, то можно подумать о создании сервиса наподобии http://mapcraft.nanodesu.ru/ и раздавать задания желающим
Мне показалась эта идея интересной, но к сожалению моих знаний недостаточно.
как я понял, существует более одного способа экспорта пересечения, но в любом случае требуется id/cat полигона бассейна... только есть подозрение, что из-за проблем векторизации и/или генерализации возможны ошибки связанные с пересечением одной линии - нескольких полигонов

посоветуйте как это сделать правильно и/или проще, учитывая что:
раньше с подобной задачей я не сталкивался,
будет несколько тысяч файлов (например тут будет ~5 тыс.),
я использую модуль <r.stream.order> (если это вдруг важно),
непонятно как экспортировать водотоки, не попавшие ни в одно пересечение

Как бы вы решали подобную задачу?

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: Экспорт каждого пересечения в отдельный файл

Сообщение Александр Мурый » 15 фев 2017, 10:50

Не очень понятна суть проблемы.
Вопросы/замечания:
- с выделением гидрографии в GRASS есть проблемы или нет?
- просьба расписать весь процесс по пунктам с указанием модулей, скриптов и т.д.;
- "способ экспорта" - что это?
Редактор материалов, модератор форума

Аватара пользователя
Xmypblu
Участник
Сообщения: 73
Зарегистрирован: 18 авг 2013, 05:36
Репутация: 17
Контактная информация:

Re: Экспорт каждого пересечения в отдельный файл

Сообщение Xmypblu » 15 фев 2017, 17:51

Александр Мурый писал(а):Не очень понятна суть проблемы.
Вопросы/замечания:
- с выделением гидрографии в GRASS есть проблемы или нет?
- просьба расписать весь процесс по пунктам с указанием модулей, скриптов и т.д.;
- "способ экспорта" - что это?
Проблема в том, что я нахожусь в самом начале пути... и мне неясен алгоритм действий,
после чтения http://gis-lab.info/docs/grass/tutorial60/ вижу два варианта (способы экспорта):
- использовать что-то из 'v.overlay', 'v.extract', 'v.select'
- или создавать дополнительное поле атрибута и при экспорте как-то его использовать

По пунктам расписывать пока нечего... из скрипта на Python:

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


# загрузка SRTM (tiff) взятый с http://gis-lab.info/data/srtm-tif/
grass.run_command('r.in.gdal', input='srtm_65_03.tif', output='elevation')
grass.run_command('r.watershed', elevation='elevation', drainage='direction', stream='streams', basin='basin90', accumulation='accum', threshold=90)
# отдельно подбираем параметры для получения приемлемой/нужной площади водосбора
grass.run_command('r.watershed', elevation='elevation', basin='basin', threshold=1000)
# векторизируем
grass.run_command('r.to.vect', input='basin', output='basins', type='area', flags='s')
# чистим, гладим и снова чистим
grass.run_command('v.clean', input='basins', output='basins_c', type='boundary', tool='prune', threshold='15')
grass.run_command('v.generalize', input='basins_c', output='basins_gen', method='douglas', threshold='100', flags='t')
grass.run_command('v.clean', input='basins_gen', output='basins_clean', type='boundary', tool='prune,rmarea', threshold='150,100000000')
# использую 'r.stream.order' по причине необходимости сохранения направления потока
grass.run_command(ADDONS7 + 'r.stream.order', stream_rast='streams', direction='direction', elevation='elevation', accumulation='accum', stream_vect='river_vector')
# полученный вектор немного сглаживаем, чтобы сделать поменьше "ступенек"
grass.run_command('v.generalize', input='river_vector', output='river_gen', method='chaiken', threshold='15')

что дальше - непонятно, поэтому и обратился за помощью форума.

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: Экспорт каждого пересечения в отдельный файл

Сообщение KolesovDmitry » 16 фев 2017, 10:46

На самом деле из вашего вопроса непонятно, что вы делаете-то вообще? Что с чем пересекаете и зачем, куда эспортировать собираетесь и что?
Поэтому если бы вы по пунктам расписали, что у вас:
* есть такие-то данные;
* вы хотите сделать то-то;
* результат получить в таком-то виде,
то было бы гораздо понятнее.

Аватара пользователя
Xmypblu
Участник
Сообщения: 73
Зарегистрирован: 18 авг 2013, 05:36
Репутация: 17
Контактная информация:

Re: Экспорт каждого пересечения в отдельный файл

Сообщение Xmypblu » 16 фев 2017, 17:10

ок, согласен что надо переписать первый пост, как только пойму как - перепишу
проблема только в том, что если коротко - непонятно,
если развернуто и с ссылками - никто не читает (могабукв) и не вникает...
KolesovDmitry писал(а):На самом деле из вашего вопроса непонятно, что вы делаете-то вообще? Что с чем пересекаете и зачем, куда эспортировать собираетесь и что?
Поэтому если бы вы по пунктам расписали, что у вас:
* есть такие-то данные;
* вы хотите сделать то-то;
* результат получить в таком-то виде,
то было бы гораздо понятнее.
короткая версия задачи:
- Есть слой с векторными линиями (речная сеть по SRTM)
- Есть слой с векторными полигонами (водосборных бассейнов, тоже по SRTM)
- Нужно взять полигон и сохранить в SHP все линии, в него попадающие
...и так со всем полигонами
- Желательно избежать попадания одних и техже сегментов линий в разные файлы

P.S. "зачем и для чего" - вопрос связан с GRASS или простое любопытство, откуда взялась такая задача? Что-то я совсем запутался

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: Экспорт каждого пересечения в отдельный файл

Сообщение KolesovDmitry » 17 фев 2017, 07:30

Так стало гораздо понятнее.

Остался еще один вопрос -- что делать с линиями, которые не укладываются в один полигон? Разрезать границами полигона и линии, лежащие в разных полигонах, связывать с соответствующими полигонами? Линии не резать, а связывать с каждым полигоном, который линия пересечет? Считать, что пересечений не должно быть и выдавать ошибку, если линия все-таки пересечет границу?

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: Экспорт каждого пересечения в отдельный файл

Сообщение Александр Мурый » 17 фев 2017, 09:34

Вы пробовали, например, применить модуль <v.overlay> с параметром "operator=and" (т.е. пересечение)? Если да, то чем не устраивает? Простое пересечение вполне решает исходную задачу:
Нужно взять полигон и сохранить в SHP все линии, в него попадающие
- Желательно избежать попадания одних и техже сегментов линий в разные файлы
Кстати, просьба: прикладывайте картинки к сообщению, пож-та. У некоторых на работе перекрывают доступ к файлообменникам и прочим таким сервисам.
Редактор материалов, модератор форума

Аватара пользователя
Xmypblu
Участник
Сообщения: 73
Зарегистрирован: 18 авг 2013, 05:36
Репутация: 17
Контактная информация:

Re: Экспорт каждого пересечения в отдельный файл

Сообщение Xmypblu » 17 фев 2017, 19:00

KolesovDmitry писал(а):Остался еще один вопрос -- что делать с линиями, которые не укладываются в один полигон?
- Разрезать границами полигона и линии, лежащие в разных полигонах, связывать с соответствующими полигонами?
- Линии не резать, а связывать с каждым полигоном, который линия пересечет?
- Считать, что пересечений не должно быть и выдавать ошибку, если линия все-таки пересечет границу?
как я понимаю, мы обсуждаем ситуацию как на картинке
кстати, к какому варианту относится ситуация, когда линия идет по границе 2-х полигонов?
r_watershed.png
r_watershed.png (33.56 КБ) 13371 просмотр
на данный момент - "Линии не резать", как самый простой

вариант "выдавать ошибку" - я планировал чуть позже и отдельной темой обсудить,
но раз вопрос про это зашел... воспользуюсь моментом, т.к. у меня вопросы, как это можно обработать:
- возможно связать линию с тем полигоном, по которому линия больше проходит (в процентах)? у кого больше - того и линия
- как линию, при "выдачи ошибки", присоединить к набору линий "выше по течению" (не знаю как правильно это обозвать), если я использую модуль <r.stream.order> и соответственно исключать из набора линий "ниже по течению"?
возможно для этого как-то использовать таблицу атрибутов, которая создается модулем?
https://grass.osgeo.org/grass72/manuals ... order.html
раздел "Stream network topology table description connected with vector file"
Александр Мурый писал(а):Вы пробовали, например, применить модуль <v.overlay> с параметром "operator=and" (т.е. пересечение)?
Вполне возможно что и пробовал (экспериментировал недели три назад),
наверно поэтому и обратил внимание, что иногда странно режет линии...
но это проблема на втором месте и я ее отложил на "потом".
Планировал к ней вернутся как только пойму, как сделать пакетную выгрузку.
Кстати, просьба: прикладывайте картинки к сообщению, пож-та. У некоторых на работе перекрывают доступ к файлообменникам и прочим таким сервисам.
ок. мне переделать старые посты? и/или это относится к ссылке на картинку в первом посте?

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: Экспорт каждого пересечения в отдельный файл

Сообщение Александр Мурый » 17 фев 2017, 20:31

Не надо переделывать посты, я на будущее попросил прикреплять картинки.
Для реальной помощи в решении вашей проблемы идеально было бы, если бы вы выложили сами данные в GRASS (заархивированные область/набор).
Редактор материалов, модератор форума

Аватара пользователя
Xmypblu
Участник
Сообщения: 73
Зарегистрирован: 18 авг 2013, 05:36
Репутация: 17
Контактная информация:

Re: Экспорт каждого пересечения в отдельный файл

Сообщение Xmypblu » 17 фев 2017, 22:35

Александр Мурый писал(а):Для реальной помощи в решении вашей проблемы идеально было бы, если бы вы выложили сами данные в GRASS (заархивированные область/набор).
сделал тестовый набор поменьше
герои нашего обсуждения - 'basins@srtm' и 'river_gen@srtm'
но сохранятся в файл будет в виде 'river@srtm' (если что)
Вложения
srtm_67_03.tar.gz
(5.19 МБ) 768 скачиваний

Ответить

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

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

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