OpenStreetMap Forum

The Free Wiki World Map

You are not logged in.

Announcement

A fix has been applied to the login system for the forums - if you have trouble logging in please contact support@openstreetmap.org with both your forum username and your OpenStreetMap username so we can make sure your accounts are properly linked.

#1 2010-01-09 14:53:54

vespex
Member
From: Sarov/Moscow
Registered: 2009-12-29
Posts: 143

Рисование леса и других однородных полигонов - скрипт JOSM+python

Замечательную вещь для автоматического рисования леса сделали Komяpa и Upliner, сырую правда, но уже рабочую smile
Вам потребуется:
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,171

Re: Рисование леса и других однородных полигонов - скрипт JOSM+python

О, я тоже нашел этот плагин smile отбой вопроса в соседней теме.
Завтра попробуем.
А без питона никак?

Offline

#4 2010-01-09 20:51:05

Komяpa
Member
From: Minsk
Registered: 2009-04-14
Posts: 1,309
Website

Re: Рисование леса и других однородных полигонов - скрипт JOSM+python

ну если перепишешь питоновскую часть smile


world processing is what we do.
[OSMF BY Team] [http://latlon.org/] [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

Komяpa wrote:

ну если перепишешь питоновскую часть smile

На чём? smile

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. smile


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,309
Website

Re: Рисование леса и других однородных полигонов - скрипт JOSM+python

Хоть на javascript. smile
на входе - широта-долгота клика как параметры командной строки, на выходе - .osm в stdout. что будет внутри, явовскую часть плагина слабо волнует smile


world processing is what we do.
[OSMF BY Team] [http://latlon.org/] [jabber: komzpa@gmail.com] [mobile/SMS: +375257407159]

Offline

#8 2010-01-10 09:32:45

ikz
Member
From: Тартария, Набережные Челны
Registered: 2009-09-18
Posts: 937

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,309
Website

Re: Рисование леса и других однородных полигонов - скрипт JOSM+python

pythonw должен быть доступен в PATH.


world processing is what we do.
[OSMF BY Team] [http://latlon.org/] [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,171

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,171

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: 937

Re: Рисование леса и других однородных полигонов - скрипт JOSM+python

Насколько я понял, в данный момент скрипт не понимает, что подложка сдвинута?
Как-то странно создаются полигоны -не достают до края леса метров 50. Вместо прямой линии (просеки) - что-то пилообразное.
Если полигон не был создан, в стек команд добавляется пустой FuzzySelect. Не смертельно, но непонятно.
Сделал бы скриншот, но выложить некуда.

Offline

#15 2010-01-10 15:26:14

coolkaas
Member
From: RU, Penza
Registered: 2009-05-28
Posts: 2,171

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

coolkaas wrote:

Да, пилы имеются. Удаление руками каждой второй точки приводит к более благолепному виду.

Как обращаться со смещением непонятно, местами это важно.

Чтобы не было "пил" и векторы были более сглажены - ставьте douglas_peucker_epsilon побольше (сверху он не ограничен)

Смещение вручную править, например, основной слой не грузить, а после работы скрипта всё выделять и перемещать.

Offline

#17 2010-01-10 16:00:16

evgenykatyshev
Member
From: Nizhny Novgorod
Registered: 2009-06-16
Posts: 1,291
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,636
Website

Re: Рисование леса и других однородных полигонов - скрипт JOSM+python

Мой компьютер - Свойства - Дополнительно - Переменные среды
дописываешь в path через точку с запятой нужный каталог

Offline

#19 2010-01-10 16:16:20

usm78-gis
Member
Registered: 2008-04-21
Posts: 2,383

Re: Рисование леса и других однородных полигонов - скрипт JOSM+python

Komяpa wrote:

ну если перепишешь питоновскую часть smile

Переписывайте уж сразу i.cluster :
http://grass.itc.it/grass64/manuals/htm … uster.html
Отлично отличает мелководье от глубокой воды в реках и озерах.
Правда очень тяжело бороться с лужами и весенней талой водой wink

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 smile

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,414

Re: Рисование леса и других однородных полигонов - скрипт JOSM+python

barkulex wrote:

http://osm.org/go/0u@hLXiG--
Результат работы plugin'a smile

http://www.openstreetmap.org/?lat=53.11 … rs=B000FTF
какой-то червяк с человечьим лицом smile


п.с.: там развязка, рядышком
на ней праймари_линк нужно на транк_линк переделать...

Last edited by dedNikifor (2010-01-10 22:02:00)


Графическая (в виде карты с точками опасных объектов) база спидкамов для разных навигационных программ. Подложка OSM присутствует

Offline

#23 2010-01-10 22:05:50

vespex
Member
From: Sarov/Moscow
Registered: 2009-12-29
Posts: 143

Re: Рисование леса и других однородных полигонов - скрипт JOSM+python

Bowser wrote:

А что в 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]

dedNikifor wrote:

п.с.: там развязка, рядышком
на ней праймари_линк нужно на транк_линк переделать...

там сначала надо определиться со статусом дороги от развязки до Пензы sad
[\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

Board footer

Powered by FluxBB