Пересечь 3D линию мультипатчем (3D Analyst)
Резюме
Определяет количество геометрических пересечений между линией и объектами-мультипатчами и возвращает это количество как результат. При этом в выходные классы пространственных объектов также можно записать точечные объекты, представляющие собой пересечения, и/или линии, соответствующие входным линиям, разделенным в этих точках.
Рисунок
Использование
-
Двумерные линейные объекты не поддерживаются этим инструментом. Необходимы трехмерные линейные объекты с Z-значениями, поскольку вычисления выполняются в трехмерном евклидовом пространстве с применением трехмерных объектов. Двумерные линейные объекты со значениями высоты, хранящимися в атрибутивном поле, могут быть преобразованы в 3D инструментом Объекты в 3D по атрибуту (Feature To 3D By Attribute).
Число пересечений будет возвращено в окне сообщений в виде целого числа, и его можно в дальнейшем использовать как предварительное условие в модели или в скрипте.
-
Также возможен результат в виде точек, представляющих собой пересечения между входной линией и объектами-мультипатчами, кроме того, эти точки будут иметь следующие атрибуты:
- LINE_OID — OBJECTID исходной линии, вдоль которой найдено пересечение.
- MPATCH_OID — OBJECTID объекта-мультипатча, который пересекает линию в данном месте.
- DIST_3D — 3D-расстояние вдоль исходной линии, на котором найдено пересечение.
-
Также возможен результат в виде линий, полученных путем разделения входного линейного объекта в точках пересечения, эти линии будут иметь следующие атрибуты:
- LINE_OID — OBJECTID исходной линии, из которой была получена данная линия.
- FROM_MP_ID — OBJECTID объекта-мультипатча, пересекающего данную линию в ее начале. Значение -1 означает, что начало линии не является точкой пересечения.
- TO_MP_ID — OBJECTID объекта-мультипатча, пересекающего данную линию в ее конце. Значение -1 означает, что начало линии не является точкой пересечения.Примечание:
Если линия не пересекает мультипатч ни в одной точке, то она полностью копируется в результат, а ее поля FROM_MP_ID и TO_MP_ID принимают значение -1.
- DIST_3D — 3D-расстояние вдоль исходной линии, на котором найдено пересечение. Оно также обозначает точку начала данной производной линии.
- LENGTH_3D — 3D-длина данной производной линии. Сумма длин всех линий, полученных из исходной линии, будет равна 3D-длине исходной линии.
Полученные в результате объекты (если они есть) могут ссылаться на атрибутивные значения исходной линии посредством установки параметра Соединяемые атрибуты (Join Attributes) в выходном классе линейных объектов.
Этот инструмент – это оператор, предоставляющий аналитические функции для 3D объектов. Дополнительные сведения об операциях пересечения 3D объектов и их использовании см. в разделе Работа с операциями пересечения 3D объектов.
Синтаксис
Параметр | Объяснение | Тип данных |
in_line_features |
Линейные объекты, пересекаемые с объектами-мультипатчами. | Feature Layer |
in_multipatch_features |
Объекты-мультипатчи, с которыми будут пересекаться линии. | Feature Layer |
join_attributes (дополнительно) |
Определяет, будут ли сохранены атрибуты исходных линейных объектов в выходном классе линейных объектов.
| String |
out_point_feature_class (дополнительно) |
Дополнительно в результате будут отображены точки пересечения между трехмерной линией и мультипатчем. | Feature Class |
out_line_feature_class (дополнительно) |
Дополнительно в результате будут отображены линии, на которые делится трехмерная линия в точках пересечения с мультипатчем. | Feature Class |
Пример кода
В следующем примере показано использование этого инструмента в окне Python:
import arcpy
from arcpy import env
arcpy.CheckOutExtension('3D')
env.workspace = 'C:/data'
arcpy.Intersect3DLineWithMultiPatch_3d('inLine.shp', 'inMultipatch.shp',
'IDS_ONLY', 'outPts.shp', 'outLine.shp')
В следующем примере показано использование этого инструмента в автономном скрипте Python:
'''****************************************************************************
Name: Intersect3DLineWithMultiPatch Example
Description: This script demonstrates how to
use the Intersect3DLine tool.
****************************************************************************'''
# Import system modules
import arcpy
import exceptions, sys, traceback
from arcpy import env
try:
# Obtain a license for the ArcGIS 3D Analyst extension
arcpy.CheckOutExtension('3D')
# Set environment settings
env.workspace = 'C:/data'
# Set Local Variables
inLineFC = 'sample.gdb/lines_3d'
inMP = 'sample.gdb/test_MP'
# Ensure a unique name is produced for output files
outPoint = arcpy.CreateUniqueName('OutPt_3DIntersect', 'sample.gdb')
outLine = arcpy.CreateUniqueName('OutLine_3DIntersect', 'sample.gdb')
# Execute Intersect 3D Line with Multipatch
arcpy.Intersect3DLineWithMultiPatch_3d(inLineFC, inMP, 'IDS_ONLY',
outPoint, outLine)
except arcpy.ExecuteError:
print arcpy.GetMessages()
except:
# Get the traceback object
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
# Concatenate error information into message string
pymsg = 'PYTHON ERRORS:\nTraceback info:\n{0}\nError Info:\n{1}'\
.format(tbinfo, str(sys.exc_info()[1]))
msgs = 'ArcPy ERRORS:\n {0}\n'.format(arcpy.GetMessages(2))
# Return python error messages for script tool or Python Window
arcpy.AddError(pymsg)
arcpy.AddError(msgs)