Упростить полигон (Картография)

Сводка

Упрощает границы полигонов посредством удаления лишних вершин с сохранением основной формы.

Иллюстрация

Сравнение четырех алгоритмов упрощения, используемых инструментом Упростить полигон

Использование

  • Этот инструмент задействует различные алгоритмы упрощения для разных целей. Более подробно о работе этих алгоритмов, см. Как работают инструменты Упростить линию и Упростить полигон.

    • Алгоритм Сохранение критических точек (Дугласа-Пекера) (algorithm='POINT_REMOVE' в Python) работает путём выявления и удаления относительно излишних вершин для упрощения данных, чтобы отображать их в мелких масштабах. Это самый быстрый алгоритм упрощения в данном инструменте. Этот алгоритм часто используется для сжатия данных или грубого упрощения. Угловатость получившегося контура полигона значительно возрастает при увеличении допуска. Данный алгоритм основан на алгоритме Дугласа-Пекера: Douglas, David and Peucker, Thomas, "Algorithms for the reduction of the number of points required to represent a digitized line or its caricature," The Canadian Cartographer. 10(2), 112–22 (1973).
    • Алгоритм Сохранение критических изгибов (Ванга-Мюллера) (algorithm='BEND_SIMPLIFY' в Python) работает путём выявления и сглаживания относительно незначительных изгибов для упрощения данных, чтобы отображать их в мелких масштабах. Он гораздо добросовестнее обрабатывает входную геометрию, чем алгоритм Сохранение критических точек (Дугласа-Пекера), но его работа занимает гораздо больше времени. Данный алгоритм основан на алгоритме, описанном в работе Wang, Zeshen and Müller, Jean-Claude, "Line Generalization Based on Analysis of Shape Characteristics," Cartography and Geographic Information Systems 25(1), 3–15 (1998).
    • Алгоритм Сохранение взвешенной полезной площади (Джоуи-Джонс) (algorithm='WEIGHTED_AREA' в Python) определяет треугольник полезной площади для каждой вершины. Затем эти треугольники взвешиваются по набору определений, для оценки их однородности, асимметричности и выпуклости для каждой области. Взвешенные области указывают на избыточные вершины для удаления, позволяющие упростить контур полигона, максимально возможно сохраняя при этом его характеристики. Данный алгоритм основан на алгоритме, описанном в работе Zhou, Sheng and Jones, Christopher B., (2005) Shape-Aware Line Generalisation with Weighted Effective Area, in Fisher, Peter F. (Ed.), Developments in Spatial Handling: 11th International Symposium on Spatial Handling, 369–80 (2005).
    • Алгоритм Сохранение полезных областей (Визвалингам-Ватт) (algorithm='EFFECTIVE_AREA' в Python) идентифицирует треугольники полезной области для каждой вершины, чтобы направлять удаление вершин для упрощения контура полигона, сохраняя при этом как можно точнее его характеристики. Этот алгоритм основан на алгоритме, указанном в работах Visvalingam, M. и Whyatt, J. D., "Line Generalisation by Repeated Elimination of the Smallest Area," Cartographic Information Systems Research Group (CISRG) Discussion Paper 10, The University of Hull (1992).

  • Параметр Допуск упрощения определяет степень упрощения. Чем больше допуск, тем грубее будет полученная геометрия. Меньшие допуски создают более точную геометрию. Для сохранения использованного значения допуска для полученной геометрии добавлены поля MinSimpTol и MaxSimpTol.

    • Для алгоритма Сохранение критических точек (Дугласа-Пекера) допуском является максимально возможное расстояние по перпендикуляру, опущенному из каждой из вершин до вновь созданной линии.
    • Для алгоритма Сохранение критических изгибов (Ванга-Мюллера) допуском является диаметр окружности, приближенной к значимому изгибу.
    • Для алгоритма Сохранение взвешенной полезной площади (Джоуи-Джонс) квадрат допуска – это площадь значительного треугольника, заданного тремя соседними вершинами. Чем дальше треугольник отклоняется от равностороннего, тем больший вес он получает и тем меньше вероятность его удаления.
    • Для алгоритма Сохранение полезных областей (Визвалингам-Ватт) квадрат допуска – это площадь значительного треугольника, заданного тремя соседними вершинами.

  • Все полигоны, которые меньше параметра Минимальной площади, удаляются из выходного класса пространственных объектов. Для группы смежных полигонов, имеющих общие рёбра, минимальная площадь относится к общей площади группы. Используйте параметр Сохранить линии нулевой длины, чтобы оставить записи удаленных полигонов в виде точечных объектов.

  • Части составных полигонов упрощаются отдельно.

  • Используйте параметр Сохранить линии нулевой длины (collapsed_point_option в Python), чтобы создать выходной класс пространственных объектов, который будет представлять полигоны, удалённые по причине их размеров меньше минимальной площади. Получаются выходные точки; они используют те же имя и местоположение, как у параметра Выходной класс пространственных объектов (out_feature_class в Python), но с суффиксом _Pnt. В выходном полигональном классе пространственных объектов имеются все поля, представленные во входном классе. Выходной класс точечных объектов не содержит ни одного из этих полей.

  • Выходными данными будет топологически корректный полигональный класс пространственных объектов. Все топологические ошибки входных данных будут помечены в выходном полигональном классе пространственных объектов. Выходной класс пространственных объектов содержит два дополнительных поля: InPoly_FID и SimPgnFlag, в которых хранятся соответственно идентификаторы входных пространственных объектов и топологические ошибки или расхождения входных данных.

    Возможны следующие значения поля SimPgnFlag:

    • SimPgnFlag = 0 означает, что ошибки отсутствуют.
    • SimPgnFlag = 1 означает, что присутствуют топологические ошибки.
    • SimPgnFlag = 2 указывает на наличие объектов, которые были разделены на части и теперь, после упрощения, меньше минимальной области. Флаг может отображаться только на одной части разделенного объекта. Все эти объекты сохраняются в выходном классе объектов. Подобная ситуация возникает только при использовании параметра среды Картографические разделы.
    Прежние версии:

    В предыдущей версии этого инструмента топологические ошибки можно было генерировать в процессе обработки. Параметр Управление топологическими ошибками (error_option в Python) пока присутствует в синтаксисе инструмента для совместимости в скриптах и моделях, но в диалоговом окне инструмента скрыт и в данный момент не используется.

    Поле SimPgnFlag использовалось для того, чтобы отмечать обнаруженные в процессе работы инструмента ошибки топологии в выходном классе пространственных объектов. Теперь в этом поле отмечаются ошибки, присутствующие во входных данных. Кроме того, в ходе исправления топологии в предыдущих версиях этого инструмента изменялся допуск для каждого объекта, а значения этого допуска сохранялись в полях MinSimpTol и MaxSimpTol. В текущей версии значения в этих полях остаются неизменными и соответствует допуску, указанному в параметре Допуск упрощения. Не забудьте изменить существующие модели или скрипты, если они ссылаются на эти поля.

  • Используйте параметр Входные барьерные слои для указания пространственных объектов, которые не должны пересекаться упрощаемыми полигонами. Объектами-барьерами могут быть полигоны, линии или точки.

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

  • Обработка больших наборов входных данных может вызвать превышение ограничений использования оперативной памяти. В таком случае попытайтесь разделить входные данные на части, определив соответствующий полигональный класс пространственных объектов с помощью параметра среды Картографические части. Части данных, разделенные между собой границами, будут последовательно обрабатываться отдельно друг от друга. Полученный выходной класс объектов будет бесшовным и соответствовать границам частей. Более подробно см. Генерализация больших наборов данных путем разделения на части.

Синтаксис

arcpy.cartography.SimplifyPolygon(in_features, out_feature_class, algorithm, tolerance, {minimum_area}, {error_option}, {collapsed_point_option}, {in_barriers})
ParameterОбъяснениеТип данных
in_features

Входные полигональные объекты, которые необходимо упростить.

Feature Layer
out_feature_class

Упрощённый выходной класс полигональных объектов. В нём имеются все поля, представленные во входном классе. Выходными данными будет топологически корректный полигональный класс пространственных объектов. Инструмент не вводит топологические ошибки, но все топологические ошибки входных данных будут помечены в выходном полигональном классе пространственных объектов.

Выходной класс пространственных объектов содержит два дополнительных поля: InPoly_FID и SimPgnFlag, в которых содержатся соответственно идентификаторы входных пространственных объектов и топологические ошибки входных данных и расхождения.

Возможны следующие значения поля SimPgnFlag:

  • SimPgnFlag = 0 означает, что ошибки отсутствуют.
  • SimPgnFlag = 1 означает, что присутствуют топологические ошибки.
  • SimPgnFlag = 2 указывает на объекты, которые были разделены при делении на части и теперь после упрощения меньше минимальной площади. Флаг может отображаться только на одной части разделенного объекта. Все эти объекты сохраняются в выходном классе объектов. Подобная ситуация возникает только при использовании параметра среды Картографические разделы.

Feature Class
algorithm

Определяет используемый алгоритм упрощения полигонов.

  • POINT_REMOVEСохраняет критические точки, которые образуют главную форму контура полигона и удаляет все остальные точки (Дуглас – Пекер). Используется по умолчанию.
  • BEND_SIMPLIFY Сохраняет только критические точки, определяющие основную форму линии, и удаляет все остальные точки (Ванг – Мюллер).
  • WEIGHTED_AREAОставляет вершины, которые формируют треугольники эффективной площади и которые были взвешены согласно треугольной геометрии (Джоуи – Джонс).
  • EFFECTIVE_AREA Оставляет вершины, которые формируют треугольники эффективной площади (Визвалингам – Ватт).
String
tolerance

Допуск, определяющий степень упрощения. Вы можете выбрать предпочитаемые вами единицы; если вы не станете выбирать единицы, будут использоваться единицы входных данных. В выходные данные будут добавлены поля MinSimpTol и MaxSimpTol для сохранения допуска, который использовался в процессе обработки.

  • Для алгоритма POINT_REMOVE допуском является максимально возможное расстояние по перпендикуляру, опущенному из каждой из вершин до вновь созданной линии.
  • Для алгоритма BEND_SIMPLIFY допуском является диаметр окружности, приближенной к значимому изгибу.
  • Для алгоритма WEIGHTED_AREA квадрат допуска – это площадь значительного треугольника, заданного тремя соседними вершинами. Чем дальше треугольник отклоняется от равностороннего, тем больший вес он получает и тем меньше вероятность его удаления.
  • Для алгоритма EFFECTIVE_AREA квадрат допуска – это площадь значительного треугольника, заданного тремя соседними вершинами.
Linear Unit
minimum_area
(Дополнительный)

Минимальная сохраняемая площадь полигона. Значение по умолчанию равно нулю; в этом случае сохраняются все полигоны. Вы можете выбрать предпочитаемые единицы измерения указанного значения; в противном случае будут использоваться единицы входных данных.

Areal Unit
error_option
(Дополнительный)
Прежние версии:

Этот параметр больше не используется. Раньше он использовался для определения способа обработки топологических ошибок, которые могли появиться в процессе обработки. Этот параметр пока присутствует в синтаксисе скрипта для совместимости в скриптах и моделях, но в диалоговом окне инструмента скрыт.

String
collapsed_point_option
(Дополнительный)

Определяет, надо ли создать выходной класс точечных пространственных объектов, в котором будут храниться центроиды полигонов, удалённых по причине того, что они были меньше значения параметра minimum_area. Получаются выходные точки; они используют те же имя и местоположение, как у выходного полигонального класса объектов, который вы указали в параметре out_feature_class, но с суффиксом _Pnt.

  • KEEP_COLLAPSED_POINTSВ выходной точечный класс объектов записываются центроиды полигонов, удалённых по причине того, что они были меньше Минимальной площади. Используется по умолчанию.
  • NO_KEEPВыходной точечный класс объектов не создается.
Boolean
in_barriers
[in_barriers,...]
(Дополнительный)

Входные слои, содержащие пространственные объекты, которые должны работать как барьеры для упрощения. Выходные упрощённые полигоны, которые не касаются и не пересекают объекты-барьеры. Например, при упрощении лесных районов результирующие упрощённые полигоны лесных территорий не будут касаться объектов-дорог, которые были заданы как барьеры.

Feature Layer

Производные выходные данные

NameОбъяснениеТип данных
out_point_feature_class

Если используется параметр Сохранить линии нулевой длины (collapsed_point_option в Python), то создается точечный выходной класс пространственных объектов, который будет хранить точки, представляющие собой полигоны, которые были удалены, так как их размер меньше минимально разрешенной площади.

Класс пространственных объектов

Пример кода

SimplifyPolygon, пример (окно Python)

Пример скрипта Python для использования инструмента SimplifyPolygon в режиме прямого запуска.

import arcpy
import arcpy.cartography as CA
arcpy.env.workspace = "C:/data"
CA.SimplifyPolygon("soils.shp", "C:/output/output.gdb/simplified_soils", "POINT_REMOVE", 100)
SimplifyPolygon, пример 2 (автономный скрипт)

В следующем автономном скрипте показано, как использовать инструмент SimplifyPolygon.

# Name: SimplifyPolygon_Example2.py
# Description: Eliminate small islands before simplifying and smoothing lake boundaries
 
# Import system modules
import arcpy
import arcpy.management as DM
import arcpy.cartography as CA
 
# Set environment settings
arcpy.env.workspace = "C:/data/Portland.gdb/Hydrography"
 
# Set local variables
inLakeFeatures = "lakes"
eliminatedFeatures = "C:/data/PortlandOutput.gdb/lakes_eliminated"
simplifiedFeatures = "C:/data/PortlandOutput.gdb/lakes_simplified"
smoothedFeatures = "C:/data/PortlandOutput.gdb/lakes_smoothed"
# Eliminate small islands in lake polygons.
DM.EliminatePolygonPart(inLakeFeatures, eliminatedFeatures, 100, "OR", 0, "CONTAINED_ONLY")
 
# Simplify lake polygons.
CA.SimplifyPolygon(eliminatedFeatures, simplifiedFeatures, "POINT_REMOVE", 50, 200, "#", "KEEP_COLLAPSED_POINTS")
 
# Smooth lake polygons.
CA.SmoothPolygon(simplifiedFeatures, smoothedFeatures, "PAEK", 100, "FLAG_ERRORS")

Информация о лицензиях

  • Basic: Нет
  • Standard: Да
  • Advanced: Да

Связанные разделы