Почему GRASS удаляет полигоны при использовании v.generalize?

9

Я сталкиваюсь с дилеммой, пытаясь использовать v.generalize для упрощения полигонов, которые по размеру и структуре похожи на округа или штаты США. Часто я теряю полигоны из набора данных после запуска на них метода упрощения или сглаживания. Что меня беспокоит, так это то, что в этом поведении нет никаких закономерностей. В некоторых случаях один и тот же набор команд, применяемый к разным наборам данных, приводит к совершенно разным результатам. В результате я не могу разработать воспроизводимый рабочий процесс и неохотно начинаю искать другие инструменты упрощения, которые сохраняют топологию. Вот пример:

# LOAD AND CLEAN
v.in.ogr dsn=counties.shp output=county
v.build.polylines input=county output=county_polylines
v.clean input=county_polylines output=county_clean tool=bpol,rmdupl type=boundary

# SMOOTH AND GENERALIZE
v.generalize input=county_clean output=county_smooth method=sliding_averaging look_ahead=7 slide=1
v.generalize input=county_smooth output=county_general method=douglas threshold=.005

Каждый из шагов v.generalize приводит к исчезновению некоторых полигонов. Я хотел бы понять, почему это происходит. Это связано с тем, что функции загружаются в недостаточно памяти? Достаточно ли мои параметры "жесткие", чтобы исключить объекты, потому что они удовлетворяют каким-то критериям геометрии? (Обратите внимание, что я теряю некоторые очень большие функции.) Есть ли проблема с топологией удаленных функций, которая приводит к их удалению? В связи с этим последним вопросом я предполагаю, что build.polylines и чистые операции, которые я делаю изначально, должны позаботиться об этом, но я не совсем уверен, и я не могу найти хорошие инструкции, которые решают эту проблему. Есть ли такие?

Цените любые идеи, которые могут дать люди, особенно те, которые основаны на личном опыте использования инструмента v.generalize.

Роджер

lagerratrobe
источник
похоже, ваши данные могут быть в широте. этого было бы достаточно, чтобы потерять данные с вашим порогом .005. Можете ли вы проверить, что вы используете плоскую CS?
Брэд Несом
Я на самом деле задавался вопросом об этом и перепроектировал в проекцию Равной площади Альберса перед запуском выше. Вот параметры проекции: ПОЛЬЗОВАТЕЛЬ: 100002 (+ proj = aea + lat_1 = 20 + lat_2 = -23 + lat_0 = 0 + lon_0 = 25 + x_0 = 0 + y_0 = 0 + ellps = WGS84 + units = m + no_defs) , Все еще есть та же проблема.
Лагерратроб
Мне интересно, почему вы конвертируете полигоны в полилинии. Есть ли конкретная причина, по которой вы не просто упрощаете полигоны напрямую?
Подземье
Хорошо, я вытащил часть v.build.polylines, так что "county_clean" теперь является слоем многоугольника. По-прежнему теряют кучу областей. Сначала я думал, что это может упростить упрощение, но, поскольку «bpol» в v.clean также ломает многоугольники, возможно, это не имеет значения.
Лагерратроб
1
просто глупый вопрос. Вы уверены, что теряете данные, используя v.generalize, а не v.clean ?
Симо

Ответы:

4

Ответ от команды разработчиков GRASS.

«Исчезновение многоугольников [в v 6.4.1] произошло потому, что сглаженные границы, которые нарушали векторную топологию, были удалены, после этого все границы, которые были топологически некорректны. Границы теперь [в 6.4.2] только сглаживаются / упрощаются, если модификация не нарушать векторную топологию. "

lagerratrobe
источник