You are not logged in.
- Topics: Active | Unanswered
Announcement
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***
#1 2010-01-09 14:53:54
- vespex
- Member
- From: Sarov/Moscow
- Registered: 2009-12-29
- Posts: 143
Рисование леса и других однородных полигонов - скрипт JOSM+python
Замечательную вещь для автоматического рисования леса сделали Komяpa и Upliner, сырую правда, но уже рабочую
Вам потребуется:
1) JOSM http://josm.openstreetmap.de/
2) python 2.6 http://www.activestate.com/activepython/
3) модуль для питона python-imaging http://www.pythonware.com/products/pil/
4) плагин fuzzer для JOSM http://code.google.com/p/josm-plugins/downloads/list (спасибо Upliner-у)
-- поместить его в папку с плагинами JOSM (для windows путь в проводнике %AppData%\JOSM\plugins) и включить плагин в настройках JOSM
5) скрипт на питоне fuzzyselect.py http://latlon.org/fuzzyselect.py (спасибо Komяpе)
-- создать папку fuzzer с этим файлом и поместить её в папку с плагинами JOSM
В JOSM появится меню Инструменты -- Fuzzy select (Shift+K). Нажимаете, и тыкаете в центр куска леса или поля, получаете окно "Трассировка (разбор данных OSM)", ждёте отработки скрипта (от 5 сек до минуты). Скрипт скачает изображение с WMS, определит границу леса (по разнице в цвете), и векторизует её. Плагин подхватит полигон или мультиполигон и вставит в JOSM.
Если повезет, быстро получите нормальный кусок леса, если нет, скрипт будет работать больше 2-3 минут и создаст лес на пол-региона или не сможет его векторизовать и ничего не выдаст.
discuss!
НАПОМИНАЮ, чаще всего -- нужно использовать тег natural=wood, в России все леса входят в лесничества (лесной фонд), и большинство обслуживаются редко.
И только если леc обслуживается регулярно (очищается, рубится и делаются лесопосадки) -- то ставим landuse=forest. см. Wiki
Last edited by vespex (2010-01-18 16:07:52)
Offline
#2 2010-01-09 14:55:37
- vespex
- Member
- From: Sarov/Moscow
- Registered: 2009-12-29
- Posts: 143
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
В процессе работы скрипта можно увидеть какой полигон распознался в текущий момент -- в файле img.png в папке fuzzer. Масштаб может увеличиваться, т.к. сейчас скрипт расширяет область поиска по мере поиска замкнутой внешней границы леса.
Попробовать настроить параметры скрипта, чтобы он лучше ловил границы леса вы можете отредактировав файл fuzzyselect.py:
1) Из какого WMS брать картинку для распознавания - в 30-32 строках раскомментьте нужное (пробелы в начале строк не удаляйте). Думаю лучше оставить YahooSat, он вроде контрастней, и разрешения достаточно (если у вас стоит кэширующая twms, то выбирайте строку с 127.0.0.1):
a = "http://wms.latlon.org/?layer=yhsat&format=image/jpeg&force=noresize&width=700&bbox=%s,%s,%s,%s"%tuple(bbox)
#a = "http://127.0.0.1:8080/?layer=yhsat&format=image/bmp&force=noresize&filter=median&width=1200&bbox=%s,%s,%s,%s"%tuple(bbox)
#a = "http://irs.gis-lab.info/?layer=irs&format=image/jpeg&force=noresize&width=600&bbox=%s,%s,%s,%s"%tuple(bbox)
#a = "http://onearth.jpl.nasa.gov/wms.cgi?request=GetMap&layers=global_mosaic&styles=IR2&srs=EPSG:4326&width=1000&height=1000&format=image/jpeg&bbox=%s,%s,%s,%s"%tuple(bbox)
2) Насколько чувствителен алгоритм распознавания границы цвета:
init=5 # размер квадрата спутникового изображения, чем больше -- тем меньше разрешение и хуже видны дороги и границы = 4-5-10 is ok
color_str = 25 # разница цвета пикселей у границы, чем больше -- тем больше разных (близких к цвету указанной точки) цветов захватит скрипт = 20-25-30 is ok
medianfilter_str = 7 # сила усреднения цветов пикселей, чем больше -- тем расплывчатей границы леса = 5-7-13 is ok
douglas_peucker_epsilon = 2 # коэф. ступенчатости границ полигона, чем больше - тем меньше точек и поворотов будет в линиях = 0.71 - 3 is ok (don't set less than 0.71!)
zoom_no_more_than = 4 # количество увеличений площади анализа (картинки со спутника), если лес полностью не поместился в исходном квадрате
3) Для выделения рек/озёр/водоёмов нужно лишь уменьшить color_str до 10 например (или около того), т.к. цвет воды очень не сильно колеблется.
Last edited by vespex (2010-01-19 07:43:10)
Offline
#3 2010-01-09 20:44:46
- coolkaas
- Member
- From: RU, Penza
- Registered: 2009-05-28
- Posts: 2,391
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
О, я тоже нашел этот плагин отбой вопроса в соседней теме.
Завтра попробуем.
А без питона никак?
Offline
#4 2010-01-09 20:51:05
- Komяpa
- Member
- From: Minsk
- Registered: 2009-04-14
- Posts: 1,323
- Website
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
ну если перепишешь питоновскую часть
world processing is what we do.
[OSMF BY Team] [http://komzpa.net/] [jabber: komzpa@gmail.com] [mobile/SMS: +375257407159]
Offline
#5 2010-01-09 22:30:24
- Ivan Komarov
- Member
- Registered: 2008-10-02
- Posts: 1,050
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
ну если перепишешь питоновскую часть
На чём?
Offline
#6 2010-01-09 23:37:00
- Kotelnikov
- Member
- From: Krasnodar, RU
- Registered: 2009-05-07
- Posts: 2,854
- Website
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
Конечно на Java.
1 000 000 points: 80% complete
Offline
#7 2010-01-09 23:39:32
- Komяpa
- Member
- From: Minsk
- Registered: 2009-04-14
- Posts: 1,323
- Website
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
Хоть на javascript.
на входе - широта-долгота клика как параметры командной строки, на выходе - .osm в stdout. что будет внутри, явовскую часть плагина слабо волнует
world processing is what we do.
[OSMF BY Team] [http://komzpa.net/] [jabber: komzpa@gmail.com] [mobile/SMS: +375257407159]
Offline
#8 2010-01-10 09:32:45
- ikz
- Member
- From: Тартария, Набережные Челны
- Registered: 2009-09-18
- Posts: 942
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
А если джосм ругается, что "Cannot run program "pythonw" (In directory "C:\Users\1\AppData\Roaming\JOSM\plugins\fuzzer"): CreateProcess error=2, ...", в чем может быть проблема?
Если в проводнике руками ткнуть в fuzzyselect.py, то мелькает окошко python.exe, т.е. сам python доступен.
p.s. Python стоит 2.5, но проблема думаю не в этом.... Может из-за того, что стоит в \program files\development\python25?
Offline
#9 2010-01-10 09:35:40
- Komяpa
- Member
- From: Minsk
- Registered: 2009-04-14
- Posts: 1,323
- Website
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
pythonw должен быть доступен в PATH.
world processing is what we do.
[OSMF BY Team] [http://komzpa.net/] [jabber: komzpa@gmail.com] [mobile/SMS: +375257407159]
Offline
#10 2010-01-10 13:41:47
- coolkaas
- Member
- From: RU, Penza
- Registered: 2009-05-28
- Posts: 2,391
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
3) модуль для питона python-imaging http://www.pythonware.com/products/pil/
что с ним делать, поподробнее пожалуйста.
а. я тормоз, это ехешник)) ехешники мы (виндузятники) запускать умеем.
ps. Заработал, когда прописал прямой путь на pithonw в PATH, который в "Переменные среды пользователя ..." (а не в "Системные переменные" -- сюда кстати Питон прописывается сам, но винда похоже эти переменные не видит).
Last edited by coolkaas (2010-01-10 13:54:26)
Offline
#11 2010-01-10 14:03:17
- shadowjack
- Member
- Registered: 2008-05-05
- Posts: 439
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
[offtopic]
Сложно вам, виндузятникам...
[/offtopic]
Last edited by shadowjack (2010-01-10 14:03:33)
Offline
#12 2010-01-10 14:22:09
- coolkaas
- Member
- From: RU, Penza
- Registered: 2009-05-28
- Posts: 2,391
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
Понизил color_str до 20, а то и зелёные поля часто рядом прихватывает))
Спасибо большое! главное, что оно работает))
Не, 20 маловато, 26 самый ок.
Плагин подхватит полигон или мультиполигон и вставит в JOSM.
у меня вот этого не делается, просто серенькие полигоны, все отношения назначаю вручную. Что не так делаю, доктор?
Last edited by coolkaas (2010-01-10 14:33:28)
Offline
#13 2010-01-10 14:47:05
- vespex
- Member
- From: Sarov/Moscow
- Registered: 2009-12-29
- Posts: 143
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
Всё верно, скрипт сейчас не проставляет теги.
Offline
#14 2010-01-10 15:08:53
- ikz
- Member
- From: Тартария, Набережные Челны
- Registered: 2009-09-18
- Posts: 942
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
Насколько я понял, в данный момент скрипт не понимает, что подложка сдвинута?
Как-то странно создаются полигоны -не достают до края леса метров 50. Вместо прямой линии (просеки) - что-то пилообразное.
Если полигон не был создан, в стек команд добавляется пустой FuzzySelect. Не смертельно, но непонятно.
Сделал бы скриншот, но выложить некуда.
Offline
#15 2010-01-10 15:26:14
- coolkaas
- Member
- From: RU, Penza
- Registered: 2009-05-28
- Posts: 2,391
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
шоты на radikal.ru
Да, пилы имеются. Удаление руками каждой второй точки приводит к более благолепному виду.
Как обращаться со смещением непонятно, местами это важно.
Кстати, теги может и не нужны -- мы же не только леса будем обклацывать, а и поля и прочее однородное.
Несколько раз рисовался аутер, а рядом с ним, за пределами иннер (ну то есть, я догадываюсь, что это такие роли, сейчас же они не ставятся пока..), то есть рисуется несколько наружных полигонов.
В целом неплохо -- ткнул раз, и все леса на экране выделились)) но обещанной логике это немного не соответствует. Посему, предупреждаю.
А еще картинка курсора портится, не восстанавливается. Жму шифт-к, курсор становится крестиком, тыкаю, рисуется полигон, после жму s -- мой любимый основной режим -- курсор остаётся крестиком, и только перетыкиванием скажем последовательно "a" - "s", курсов возвращается к нормальном рисуночку. Трассировщик озёр тем же страдал.
Last edited by coolkaas (2010-01-10 15:38:05)
Offline
#16 2010-01-10 15:36:01
- vespex
- Member
- From: Sarov/Moscow
- Registered: 2009-12-29
- Posts: 143
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
Да, пилы имеются. Удаление руками каждой второй точки приводит к более благолепному виду.
Как обращаться со смещением непонятно, местами это важно.
Чтобы не было "пил" и векторы были более сглажены - ставьте douglas_peucker_epsilon побольше (сверху он не ограничен)
Смещение вручную править, например, основной слой не грузить, а после работы скрипта всё выделять и перемещать.
Offline
#17 2010-01-10 16:00:16
- evgenykatyshev
- Member
- From: Nizhny Novgorod
- Registered: 2009-06-16
- Posts: 1,413
- Website
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
Как прописать «прямой путь на pithonw в PATH, который в "Переменные среды пользователя ..."»?
Карта культурного наследия России. Нижегородская область: ФГИС, страница в ВК
Offline
#18 2010-01-10 16:03:00
- Alexandr Zeinalov
- Member
- From: New-Peredelkino, Moscow, RU
- Registered: 2009-08-26
- Posts: 1,699
- Website
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
Мой компьютер - Свойства - Дополнительно - Переменные среды
дописываешь в path через точку с запятой нужный каталог
Offline
#19 2010-01-10 16:16:20
- usm78-gis
- Member
- Registered: 2008-04-21
- Posts: 2,672
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
ну если перепишешь питоновскую часть
Переписывайте уж сразу i.cluster :
http://grass.itc.it/grass64/manuals/htm … uster.html
Отлично отличает мелководье от глубокой воды в реках и озерах.
Правда очень тяжело бороться с лужами и весенней талой водой
http://grass.osgeo.org/wiki/Image_classification
Last edited by usm78-gis (2010-01-10 16:37:03)
Offline
#20 2010-01-10 21:18:05
- Bowser
- Member
- From: Нижний Новгород
- Registered: 2009-06-27
- Posts: 43
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
А что в plugin'е так тормозит: закачка картинок или обработка на питоне?
Offline
#21 2010-01-10 21:27:54
- barkulex
- Member
- From: Пенза
- Registered: 2009-07-08
- Posts: 36
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
http://osm.org/go/0u@hLXiG--
Результат работы plugin'a
Last edited by barkulex (2010-01-10 21:30:44)
Offline
#22 2010-01-10 22:00:27
- dedNikifor
- Member
- From: Белгород
- Registered: 2009-09-11
- Posts: 3,419
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
http://osm.org/go/0u@hLXiG--
Результат работы plugin'a
http://www.openstreetmap.org/?lat=53.11 … rs=B000FTF
какой-то червяк с человечьим лицом
п.с.: там развязка, рядышком
на ней праймари_линк нужно на транк_линк переделать...
Last edited by dedNikifor (2010-01-10 22:02:00)
Offline
#23 2010-01-10 22:05:50
- vespex
- Member
- From: Sarov/Moscow
- Registered: 2009-12-29
- Posts: 143
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
А что в plugin'е так тормозит: закачка картинок или обработка на питоне?
сначала закачка картинок, скрипт запрашивает url с нужным квадратом (причем несколько раз, если граница леса не умещается в текущий квадрат)
если лес в процессе оказывается большим, то время анализа будет превалировать (текущая картинка опознанного леса - в файле img.png)
Offline
#24 2010-01-10 22:12:32
- barkulex
- Member
- From: Пенза
- Registered: 2009-07-08
- Posts: 36
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
[off]
п.с.: там развязка, рядышком
на ней праймари_линк нужно на транк_линк переделать...
там сначала надо определиться со статусом дороги от развязки до Пензы
[\off]
Offline
#25 2010-01-10 22:21:43
- vespex
- Member
- From: Sarov/Moscow
- Registered: 2009-12-29
- Posts: 143
Re: Рисование леса и других однородных полигонов - скрипт JOSM+python
не надо, там в любом случае все развязки с транком Р158 должны иметь статус линка от "высшей" дороги (линки всегда по верхнему разряду берутся)
Offline