Как идентифицировать полигоны с ошибками «флажка»

12

Работая в ArcMap, я сталкивался с ошибками в слое многоугольника, который я назову «осколки флага» (взятые из аналогичного языка в посылках, называют «участки флага»). Эти многоугольники (см. Изображение ниже) обычно состоят только из одного дополнительного узла, который пользователь случайно добавил.

На изображениях ниже «флаг» и «флагшток» представляют собой одну особенность, в которой «флагшток» просто перекрывает себя. Левое изображение имеет в общей сложности 5 узлов.

простой флаг введите описание изображения здесь

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

Вероятно, это происходит потому, что они используют редактор на основе шейп-файлов, и поэтому я не могу реализовать какие-либо правила редактирования на основе топологии, чтобы предотвратить это в будущем.

У кого-нибудь есть способ выявления и устранения этих типов ошибок? Я бы предпочел автоматизированный метод идентификации и разрешения, так как полевые пользователи - те, кто создал ошибки, но я застрял после их устранения. Благодарю.

RyanKDalton
источник
3
Интересно, почему Esri предоставляет правило, которое не должно пересекаться с самим собой для линейных объектов, но не для полигонов.
Кирк Кайкендалл,
Находит ли их инструмент проверки геометрии?
Mkennedy
Также ищите на болтаться и перелетать. Оба подняли несколько сценариев, но ничего нового и много для полилиний, а не для многоугольников.
Mkennedy
Райан, можно ли будет предоставить часть ваших данных? Кроме того, вы случайно не исследовали комментарий mkennedy об инструменте «Проверить геометрию»?
Аллан Адэйр
Какая версия arcmap?
Кирк Кайкендалл

Ответы:

5

Если у вас есть доступ к инструментам Safe Fme, вы найдете полезный преобразователь spikeRemover, посмотрите на него. Вы можете попробовать загружаемую ограниченную версию SAFE FME или проверить свою лицензию ArcGis на «FME Extension for ArcGIS»

http://docs.safe.com/fme/html/FME_Transformers/Default.htm#Transformers/spikeremover.htm

http://cdn.safe.com/resources/fme/FME-Transformer-Reference-Guide.pdf

Хорхе Видинья
источник
Мне удалось успешно использовать SpikeRemover в расширении ArcGIS Data Interop для очистки пиков. Он также имеет выходные данные, которые позволяют указывать неизмененные, измененные и помеченные (всплески) функции. Все это оказалось очень удобным для определения характеристик, у которых были пики, и было очень легко создать новый слой без спайков, просто разместив как неизмененные, так и измененные выходные данные на одном уровне, а «помеченные» выходные данные на уровне контроля качества. для дальнейшего осмотра. esri.com/software/arcgis/extensions/datainteroperability/…
RyanKDalton
2

Я не уверен, где ваша проблема возникает, или где у вас есть возможность избежать / исправить ее. Но я часто видел это в нашей базе данных SDE, хотя геометрия в SDE всегда должна быть правильной. В нашем случае это было потому, что мы импортировали шейп-файлы, используя ArcObjects, в SDE. Когда геометрии были сохранены, они привязывались к сетке SDE и, таким образом, создавали неправильные геометрии с осколками, которые вы описываете, когда у геометрии был тонкий шип. Это потому, что шейп-файлы имеют полную двойную точность для координат, а SDE - более грубую сетку.

Нашим решением было исправить геометрии, когда они были импортированы:
1. Установите пространственную привязку геометрии из шейп-файла к пространственной привязке соответствующего класса пространственных объектов SDE.
2. Прикрепите геометрию к пространственной привязке (IGeometry.SnapToSpatialReference (). )
3. Установите ITopologicalOperator2.IsKnownSimple = false (важно, иначе упрощение ничего не делает).
4. Выполните некоторую упрощенную операцию. Для полигонов мы использовали IPolygon.SimplifyPreserveFromTo ()

Стефан
источник
2

В arcmap 9.3.1 я бы добавил поле с именем Flag (или, может быть, FlagFlag?) И использовал бы код VBA в калькуляторе полей для вычисления этого поля.

Код VBA затемнит переменную как ITopologicalOperator3 и установит ее в поле Shape.

Затем он вызвал бы не очень простой метод IsSimpleEx .

Установите значение поля Флаг в esriNonSimpleEnum . Предположительно, ошибка, с которой вы столкнулись, вернется esriNonSimpleSelfIntersections.

С 10.0 может быть способ сделать это с помощью python в калькуляторе (?) ... Я не уверен. Я бы использовал команду надстройки. ИМО Esri должен обеспечить поддержку c # в полевом калькуляторе. В конце концов, компилятор c # устанавливается как часть .NET Framework.

Обновить

Код, который я разместил здесь, может найти флажки, если вы примените выражение Definition "Left_OID" = "Right_OID"к результирующему слою объектов Polyline.

Кирк Куйкендалл
источник
1

Этот скрипт Python является удобным инструментом

Удалите осколки полигонов из шейп-файлов

"EliminateSlivers.py циклически перебирает все объекты в шейп-файле многоугольника и удаляет те из выходного шейп-файла, которые падают ниже заданного порога площади.

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

Примечание: вам придется тестировать данные с разными допусками (сначала сделайте копию ваших данных)

http://arcscripts.esri.com/details.asp?dbid=14672

Mapperz
источник
1
Это было легко с покрытиями ArcInfo> Чистые дуги> Построить полигоны ....
Mapperz
Я не уверен, что этот инструмент фактически устранит ошибки, которые я изображаю. Видите ли, осколок (флагшток) и основная часть многоугольника (флаг) на самом деле являются одной функцией. Следовательно, этот сценарий не удалит ТОЛЬКО часть «флагштока» многоугольника, не удаляя одновременно всю функцию «флага».
RyanKDalton
1

Райан,

Я работал с офисом почвенного обследования и периодически проверял их полигоны. То, что я делаю, проверяется на предмет осколков. Я бы отправил класс объектов в покрытие, а затем собрал их для маркировки, чтобы выявить ошибки. Если вы видите 2 метки в одном многоугольнике, это ошибка. Если это одна метка на полигон, вы знаете, что это правильно. Я хотел бы создать класс объектов как точку, чтобы отметить ошибку. Или вы можете выбрать несколько меток в новый класс объектов. Таким образом, вы можете вернуться и исправить ошибку. Это очень хорошо работает с почвенными полигонами. Я использую это, чтобы сообщить почвоведам, чтобы решить проблему.

Это просто мой способ определить проблему. Просто делюсь этим с вами.

Проберт
источник
1

Если идентификация не важна, а просто автоматическое исправление, попробуйте это. Добавьте данные в новый пустой документ карты, затем;

  • Создать топологию карты
  • выбрать все функции
  • использовать конструктивные особенности для разделения существующих функций

Я проверил это, и, кажется, работает, но я не уверен, точно ли я скопировал ваш источник данных

Веселись, CDB

CDBrown
источник
1

Здесь мы рассмотрим несколько способов решения этой проблемы, и, на мой взгляд, наиболее элегантным является использование расширения под названием GIS Data Reviewer . Средство просмотра данных ГИС позволяет создавать настраиваемые и упрощенные проверки пространственной точности и точности атрибутов в дополнение к основной топологии. В топологии есть вещи, которые недоступны, которые являются частью стандартных проверок для Data Reviewer.

  • 3D Закрытие
  • Неверное отверстие
  • Выражение SQL
  • Площадь меньше пространственной привязки
  • Особенность на особенность
  • и многое другое

Я бы использовал это для опроса ваших данных. Еще один способ - создать новый класс пространственных объектов на основе существующего класса пространственных объектов многоугольника. а затем создайте новый класс пространственных объектов Polygon и заполните его линиями, используя инструмент конструктивных элементов на панели инструментов топологии. Это тогда означало бы, что осколки должны отображаться как таковые, а любые другие инструменты топологии должны исправить ошибку. Тогда это вопрос выбора, удаления и замены объектов в существующем классе объектов.

Надеюсь, это поможет, CDB

CDBrown
источник