Восстановить геометрию (Управление данными (Data Management))
Краткая информация
Выявляет ошибки геометрии внутри класса пространственных объектов. После обнаружения проблем геометрии, будут выполнены соответствующие исправления, и будет возвращено краткое описание, определяющее пространственный объект, а также встретившуюся проблему.
Корректными входными данными являются шейп-файлы, классы пространственных объектов персональной или файловой базы геоданных.
Использование
-
Инструмент использует ту же логику, что и инструмент Проверить геометрию (Check Geometry) для оценки того, имеет ли геометрия ошибки.
-
Ниже приведен перечень ошибок геометрии и соответствующих исправлений, которые будут выполняться этим инструментом:
- Нулевая геометрия: запись будет удалена из класса объектов. Чтобы сохранить записи с нулевой геометрией, снимите флажок Удалить объекты с нулевой геометрией (Delete Features with Null Geometry) или в скриптах установите для параметра delete_null значение KEEP_NULL.
- Короткий сегмент: короткий сегмент геометрии будет удален.
- Неправильный порядок вызова: геометрия будет обновлена и будет содержать правильный порядок вызова.
- Неправильное размещение сегмента: геометрия будет обновлена и будет содержать правильное размещение сегмента.
- Пересекает сам себя: области наложения в полигоне будут слиты.
- Незамкнутое звено: незамкнутое звено будет замкнуто путем соединения конечных точек звена.
- Пустые части: нулевые или пустые части будут удалены.
- Повторяющаяся вершина: одна из вершин будет удалена.
- Несоответствие атрибутов: координаты Z или M будут обновлены для соответствия.
- Непрерывные части: будет создано несколько частей из существующей непрерывной части.
- Значение Z не заполнено: значение Z будет установлено на 0.
-
Базы геоданных SDE автоматически проверяют и восстанавливают геометрии объектов, если пространственные объекты подгружены в базу данных, поэтому не требуется использовать инструменты Проверить геометрию (Check Geometry) и Восстановить геометрию (Repair Geometry) с классами пространственных объектов SDE.
-
После применения одного из восстановлений выше, инструменты повторно оценят результирующую геометрию, и при обнаружении другой ошибки будут выполнены соответствующие исправления.
В версиях программы 10.0 и более поздних геометрия линии больше не считается "самопересекающейся", если она пересекает саму себя. За этими типами геометрии не было замечено производимого неблагоприятного эффекта, поэтому инструмент Проверить геометрию (Check Geometry) больше не будет сообщать о таких пространственных объектах как об ошибке, а инструмент Восстановить геометрию (Repair Geometry) больше не будет выполнять "исправление" геометрии таких пространственных объектов. В предыдущих версиях программы (до версии 10.0) инструмент Восстановить геометрию (Repair Geometry) добавлял вершины в точках пересечения "самопересекающихся" линий. Если вам потребуется добавить вершины в случае самопересекающихся объектов линий, воспользуйтесь инструментом Интегрировать (Integrate).
Этот инструмент изменяет входные данные. Более подробно о стратегиях предотвращения неожиданных изменений данных см. в разделе Инструменты, не создающие выходных данных (Tools with no outputs).
Синтаксис
Параметр | Объяснение | Тип данных |
in_features |
Класс пространственных объектов или слой, которые будут восстановлены. Корректными входными объектами являются шейп-файлы и классы пространственных объектов персональной и файловой баз геоданных. | Feature Layer |
delete_null (дополнительно) |
Устанавливает, какое действие будет применять нулевую геометрию.
| Boolean |
Пример кода
Пример скрипта Python для выполнения функции Восстановить геометрию (Repair Geometry) с запуском из окна Python в ArcGIS.
import arcpy
arcpy.RepairGeometry_management ("c:/data/sketchy.shp")
Пример скрипта Python для выполнения функции Восстановить геометрию (Repair Geometry) в автономном режиме.
# Description:
# Goes through the table generated by the Check Geometry tool and does
# the following
# 1) backs-up all features which will be 'fixed' to a "_bad_geom" feature class
# 2) runs repairGeometry on all feature classes listed in the table
# Author: ESRI
import arcpy
import os
# Table that was produced by Check Geometry tool
table = r"c:\temp\data.gdb\cg_sample1"
# Create local variables
fcs = []
# Loop through the table and get the list of fcs
for row in arcpy.da.SearchCursor(table, ("CLASS")):
# Get the class (feature class) from the cursor
if not row[0] in fcs:
fcs.append(row[0])
# Now loop through the fcs list, backup the bad geometries into fc + "_bad_geom"
# then repair the fc
print "> Processing {0} feature classes".format(len(fcs))
for fc in fcs:
print "Processing " + fc
lyr = 'temporary_layer'
if arcpy.Exists(lyr):
arcpy.Delete_management(lyr)
tv = "cg_table_view"
if arcpy.Exists(tv):
arcpy.Delete_management(tv)
arcpy.MakeTableView_management(table, tv, ("\"CLASS\" = '%s'" % fc))
arcpy.MakeFeatureLayer_management(fc, lyr)
arcpy.AddJoin_management(lyr, arcpy.Describe(lyr).OIDFieldName, tv, "FEATURE_ID")
arcpy.CopyFeatures_management(lyr, fc + "_bad_geom")
arcpy.RemoveJoin_management(lyr, os.path.basename(table))
arcpy.RepairGeometry_management(lyr)