Добавить положения (Add Locations) (Network Analyst)
Резюме
Позволяет добавлять объекты сетевого анализа в слой сетевого анализа. Объекты добавляются в конкретный дочерний слой, например, «Остановки» и «Барьеры» (Stops, Barriers). Объекты вводятся как объекты или записи.
Использование
-
Этот инструмент можно применять множество раз для добавления нескольких объектов сетевого анализа в один и тот же слой. Например, если «Остановки» (Stops) для слоя «Маршрут» (Route) поступают из двух классов объектов, инструмент необходимо вызвать дважды, используя параметр APPEND.
-
Чтобы удалить существующие объект сетевого анализа перед загрузкой новых, воспользуйтесь параметром CLEAR.
-
Данный инструмент работает значительно быстрее, если классы пространственных объектов, используемые в качестве сетевых источников в наборе сетевых данных, имеют корректный и актуальный пространственный индекс.
При добавлении точек движения, таких как GPS-координаты, полученные от приемника, установленного на автомобиле, используйте направления и допуски направлений для более точного определения точек в сети.
Синтаксис
Параметр | Объяснение | Тип данных |
in_network_analysis_layer |
Слой сетевого анализа, к которому будет добавлен объект сетевого анализа. | Network Analyst Layer |
sub_layer |
Дочерний слой слоя сетевого анализа, к которому будет добавлен объект сетевого анализа. | String |
in_table |
Класс объектов или таблица как источник новых объектов сетевого анализа. | Table View |
field_mappings |
Задает значения для свойств объектов сетевого анализа. Свойства могут быть заданы постоянными или сопоставлены с полем из входного класса объектов или таблицы. Для указания значения параметра используется объект NAClassFieldMappings, полученный из класса NAClassFieldMappings. Объект NAClassFieldMappings представляет собой коллекцию объектов NAClassFieldMap, позволяющую задавать значения по умолчанию или сопоставлять имена полей из вводных объектов со свойствами объекта сетевого анализа. Если загружаемые данные содержат сетевые положения или диапазоны положений, основанные на наборе сетевых данных, использованных для анализа, сопоставьте поля сетевых положений из входных объектов со свойствами сетевых положений. Указание поля сетевого положения в сопоставлении полей выполняется так же, как с помощью параметра Использовать поля сетевых положений вместо геометрии (Use Network Location fields instead of geometry) из диалогового окна инструмента. Внимание: Во избежание ошибок при использовании инструмента при указании сопоставления поля для какого-либо свойства сетевого положения необходимо указывать сопоставления полей для остальных свойств сетевого положения. | Network Analyst Class FieldMap |
search_tolerance | Допуск поиска для расположения входных объектов в сети. Объекты, находящиеся вне диапазона поиска, остаются неразмещенными. Параметр включает значение и единицы измерения допуска. Этот параметр не используется при добавлении положений для подслоев Линейные барьеры (Line Barriers) или Полигональные барьеры (Polygon Barriers). В таких случаях используйте в качестве значения параметра "#". | Linear unit |
sort_field (дополнительно) |
Поле, в котором сохраняются объект сетевого анализа при добавлении их в слой сетевого анализа. По умолчанию используется поле ObjectID в классе входного объекта или таблицы. | Field |
search_criteria [[Source, SnapType],...] (дополнительно) |
Определяет источники в наборе сетевых данных, поиск в которых будет осуществляться при поиске положений, а также части геометрии (известные как типы замыкания), которые будут использоваться. Значение параметра указывается в виде списка с вложенными списками. Вложенный список состоит из двух значений, указывающих на имя и тип замыкания для каждого источника сети. Тип замыкания указывается с использованием ключевых слов SHAPE, MIDDLE, END или NONE. Например, при поиске положений значение параметра [["Streets","SHAPE"],["Streets_ND_Junctions","NONE"]] указывает, что поиск может быть выполнен на форме источника Улицы (Streets), но не на источнике Streets_ND_Junctions. Для указания нескольких типов замыкания для отдельного источника сети, используйте сочетание ключевых слов типа замыкания, разделенных знаком подчеркивания. Например, MIDDLE_END указывает, что положения могут быть замкнуты на среднюю или конечную точку источника сети. При добавлении линейных или полигональных сетевых положений используется только тип замыкания Форма (Shape), даже в том случае, если указаны другие типы. | Value Table |
match_type (дополнительно) |
Этот параметр не используется при добавлении положений для подслоев Линейные барьеры (Line Barriers) или Полигональные барьеры (Polygon Barriers). В таких случаях используйте в качестве значения параметра "#". | Boolean |
append (дополнительно) |
Укажите необходимость добавления новых объектов сетевого анализа к существующим объектам.
| Boolean |
snap_to_position_along_network (дополнительно) |
Определяет необходимость привязки сетевых положений вдоль набора сетевых данных или с некоторым указанным смещением от набора сетевых данных.
Этот параметр не используется при добавлении положений для подслоев Линейные барьеры (Line Barriers) или Полигональные барьеры (Polygon Barriers). В таких случаях используйте в качестве значения параметра "#". | Boolean |
snap_offset (дополнительно) |
В случае замыкания точки к сети можно применить расстояние смещения. Нулевое расстояние смещения означает, что точки будут совпадать с сетевым объектом (обычно линейным). Чтобы сместить точку от сетевого объекта, введите расстояние смещения. Смещение связано с положением исходной точки; поэтому, если исходная точка была расположена слева, то ее новое положение будет смещено влево. Если она изначально была расположена справа, то ее новое положение будет смещено вправо. Этот параметр не используется при добавлении положений для подслоев Линейные барьеры (Line Barriers) или Полигональные барьеры (Polygon Barriers). В таких случаях используйте в качестве значения параметра "#". | Linear unit |
exclude_restricted_elements (дополнительно) |
| Boolean |
search_query [[Source, Expression],...] (дополнительно) | Определяет запрос на ограничение поиска поднабора объектов в классе исходных объектов. Эта опция полезна, если вы не хотите найти объекты, которые могут не соответствовать сетевому положению. Например, если вы загружаете центроиды полигонов, и не хотите размещать их на дорогах местного значения, вы можете задать запрос, по которому будет выполняться поиск только для основных магистралей. Значение параметра указывается в виде списка с вложенными списками. Вложенный список состоит из двух значений, указывающих имя и выражение SQL для всех источников сети. Синтаксис выражения SQL несколько различается в зависимости от типа класса объектов источника сети. Например, если вы выполняете запрос к исходному классу объектов, хранящемуся в файле, или к базам геоданных ArcSDE, шейп-файлам, SDC, то имена полей необходимо заключить в двойные кавычки: "CFCC". Если вы выполняете запрос к исходному классу объектов, хранящемуся в персональной базе геоданных, заключите поля в квадратные скобки: [CFCC]. Если запрос для конкретного источника указывать не нужно, используйте "#" в качестве значения для выражения SQL, или исключите имя источника и выражение SQL из значения параметра. Если запрос для всех источников сети указывать не нужно, используйте "#" в качестве значения параметра. Например, значение параметра [["Streets","\"CFCC\" = 'A15'"], ["Streets_ND_Junctions",""]] определяет выражение SQL для исходного класса объектов Улицы (Streets) и отсутствие выражения для исходного класса объектов Streets_ND_Junctions. Обратите внимание, что двойные кавычки, окружающие имя поля CFCC, можно проигнорировать, добавив символы обратной косой черты, что позволит избежать ошибки анализа в интерпретаторе Python. | Value Table |
Пример кода
Выполните инструмент с использованием только необходимых параметров.
import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.AddLocations("Route","Stops","Analysis/Hospital","","")
Выполните инструмент с использованием всех параметров.
import arcpy
arcpy.env.workspace = "C:/ArcTutor/Network Analyst/Tutorial/SanFrancisco.gdb"
arcpy.na.AddLocations("Route","Stops","Analysis/Hospital",
"Name Name #;Attr_Minutes VisitTime 0;CurbApproach # 0",
"2 Miles","FID",
[["Streets","SHAPE"],["Streets_ND_Junctions","NONE"]],
"MATCH_TO_CLOSEST","CLEAR","SNAP","10 Feet","EXCLUDE",
[["Streets",'"FREEWAY" = 0'],["Streets_ND_Junctions",""]])
В следующем автономном скрипте Python показано, как с помощью инструмента AddLocations можно загружать отправные пункты и места назначения в матрицу Источник-Назначение (OD Cost Matrix).
# Name: AddLocations_Workflow.py
# Description: The scenario shows how to calculate a travel time matrix between
# store features. Use the Add Locations tool to load origins and
# destinations into an OD Cost Matrix layer. Since the origins and
# destinations are the same in this case, the origins are first loaded
# from the store features using their geometry and the destinations
# are loaded from the origins using network location fields to
# speed up the load times.
# Requirements: Network Analyst Extension
#Import system modules
import arcpy
from arcpy import env
try:
#Check out the Network Analyst extension license
arcpy.CheckOutExtension("Network")
#Set environment settings
env.workspace = "C:/data/SanFrancisco.gdb"
env.overwriteOutput = True
#Set local variables
inNetworkDataset = "Transportation/Streets_ND"
outNALayerName = "StoreTravelTimeMatrix"
impedanceAttribute = "TravelTime"
inFeatures = "Analysis/Stores"
searchTolerance = "500 Meters"
searchQuery = [["Streets",'"FREEWAY" = 0'],["Streets_ND_Junctions",""]]
odOrigins = "Origins"
outLayerFile = "C:/data/output" + "/" + outNALayerName + ".lyr"
#Create a new OD cost matrix analysis layer. For this scenario, the default
#value for all the remaining parameters statisfies the analysis requirements
outNALayer = arcpy.na.MakeODCostMatrixLayer(inNetworkDataset, outNALayerName,
impedanceAttribute)
#Get the layer object from the result object. The OD cost matrix layer can
#now be referenced using the layer object.
outNALayer = outNALayer.getOutput(0)
#Get the names of all the sublayers within the OD cost matrix layer.
subLayerNames = arcpy.na.GetNAClassNames(outNALayer)
#Stores the layer names that we will use later
originsLayerName = subLayerNames[odOrigins]
destinationsLayerName = subLayerNames["Destinations"]
#Get the origin layer object from within the OD cost matrix layer
#The first layer returned by ListLayers is the OD cost matrix layer itself
#which we don't want to use.
for layer in arcpy.mapping.ListLayers(outNALayer)[1:]:
if layer.datasetName == odOrigins:
originsLayer = layer
break
else:
raise Exception("Failed to get the origins layer object.")
#Load store features as origins using the geometry of store features.
#Ensure that the stores are not located on freeways by using a search query.
#The OD cost matrix layer created previously is referred using its name.
arcpy.na.AddLocations(outNALayer,originsLayerName,inFeatures,"",
searchTolerance, exclude_restricted_elements = "EXCLUDE",
search_query = searchQuery)
#Load origins as destinations using the network locations fields from
#origins. This is much faster than loading destinations from the store
#features using their geometry as their network locations have already been
#calculated while loading them origins.
#Create a field mappings object that supports network location fields from
#origins layer using the candidate fields from origins
originsLayer = arcpy.management.MakeFeatureLayer(originsLayer,
outNALayerName+originsLayerName)
candidateFields = arcpy.ListFields(originsLayer.getOutput(0))
fieldMappings = arcpy.na.NAClassFieldMappings(outNALayer,
destinationsLayerName, True,
candidateFields)
arcpy.na.AddLocations(outNALayer,destinationsLayerName,originsLayer,
fieldMappings,"")
#Solve the od cost matrix layer. Halt the execution if there is an
#invalid location
arcpy.na.Solve(outNALayer,"HALT")
#Save the solved na layer as a layer file on disk with relative paths
arcpy.management.SaveToLayerFile(outNALayer,outLayerFile,"RELATIVE")
print "Script completed successfully"
except Exception as e:
# If an error occurred, print line number and error message
import traceback, sys
tb = sys.exc_info()[2]
print "An error occured on line %i" % tb.tb_lineno
print str(e)