Сводка
Создает слой сетевого анализа области обслуживания и задает свойства анализа. Слой сетевого анализа области обслуживания необходим для определения зоны доступности в пределах данного порога импеданса вокруг местоположения пункта обслуживания. Слой можно создать с помощью локального набора сетевых данных или размещенного в сети сервиса построения маршрутов либо на портале.
Использование
После создания слоя анализа при помощи данного инструмента, вы можете добавлять в него объекты сетевого анализа при помощи инструмента Добавить положения, выполнять анализ при помощи инструмента Расчет и сохранять результаты на диске при помощи инструмента Сохранить в файл слоя.
При использовании данного инструмента в моделях геообработки, если модель запускается как инструмент, то выходной слой сетевого анализа должен быть задан в качестве параметра модели, в противном случае слой не добавится в содержание карты.
В ArcGIS Pro данные слоев сетевого анализа хранятся на диске в классах пространственных объектов файловой базы геоданных. При создании слоя сетевого анализа в проекте данные слоя будут созданы в новом наборе классов объектов в среде Текущей рабочей области. При создании слоя сетевого анализа в скрипте Python вам необходимо сначала явно задать среду рабочей области для файловой базы геоданных, в которой вы собираетесь хранить данные слоя, используя arcpy.env.workspace = "<path to file gdb>". После создания слоя в файловую базу геоданных будет добавлен новый набор классов объектов, содержащий соответствующие подслои для классов пространственных объектов.
Синтаксис
MakeServiceAreaAnalysisLayer(network_data_source, {layer_name}, {travel_mode}, {travel_direction}, {cutoffs}, {time_of_day}, {time_zone}, {output_type}, {polygon_detail}, {geometry_at_overlaps}, {geometry_at_cutoffs}, {polygon_trim_distance}, {exclude_sources_from_polygon_generation}, {accumulate_attributes})
Parameter | Объяснение | Тип данных |
network_data_source | Набор сетевых данных или сервис, для которого выполняется сетевой анализ. Для сервиса используйте URL-адрес портала. | Network Dataset Layer;String |
layer_name (Дополнительный) | Имя создаваемого слоя сетевого анализа. | String |
travel_mode (Дополнительный) | Имя режима передвижения для выполнения анализа. Режим передвижения представляет собой набор сетевых настроек, например, ограничений передвижения и правил разворотов, определяющих, как пешеход, легковой или грузовой автомобиль или другое средство транспорта передвигается по сети. Режимы передвижения определяются вашим источником сетевых данных. Объект arcpy.na.TravelMode и строка, содержащая действительное представление JSON режима перемещения, также могут использоваться как ввод для параметра. | String |
travel_direction (Дополнительный) | Указывает направление движения от или до пункта обслуживания.
Этот параметр позволяет найти различные области обслуживания в сети с односторонними ограничениями и различными импедансами на основе направления движения. Область обслуживания для службы доставки пиццы, например, может быть создана с учетом пути от пункта обслуживания, а область обслуживания больницы должна быть создана с учетом пути к пункту обслуживания. | String |
cutoffs [cutoffs,...] (Дополнительный) | Вычисляемый экстент территории обслуживания в единицах атрибута импеданса, использующегося в выбранном вами режиме передвижения. Например, при анализе времени передвижения, предельное значение 10 означает, что результирующая область обслуживания будет представлять собой область, которую можно достичь за 10-минутный интервал передвижения. Для создания нескольких концентрических областей обслуживания можно использовать серию предельных значений. Например, чтобы определить 2-х, 3-х и 5-минутные области обслуживания для одного пункта обслуживания , следует указать значения 2,3 и 5. Граничное значение по умолчанию может быть изменено на основе пункта обслуживания путем задания отдельных граничных значений в подслое пунктов обслуживания. | Double |
time_of_day (Дополнительный) | Время отправления или прибытия для пункта обслуживания слоя области обслуживания. Интерпретация этого значения в качестве времени отправления или прибытия зависит от того, какое направление движения задано – от пункта обслуживания или к нему.
Параметр time_of_day главным образом используется для поиска дорог, по которым можно проехать в рамках режима передвижения, использующего атрибут импеданса, меняющийся в зависимости от времени суток, например, привязанный к условиям динамического дорожного трафика. Повторяя один и тот же анализ, но с разными значениями time_of_day, можно увидеть, как изменяется доступность пункта обслуживания с течением времени. Например, пятиминутная область обслуживания вокруг пожарной части может быть большой рано утром, затем уменьшаться в часы пик, снова увеличиваться и так далее. Дату и время можно указать в виде 21.10.05 10:30. Вместо конкретной даты может быть задан день недели, при помощи следующих условных дат:
| Date |
time_zone (Дополнительный) | Указывает часовой пояс параметра Время суток.
| String |
output_type (Дополнительный) | Задает тип создаваемых выходных данных. Выходные зоны обслуживания могут быть линейными объектами, представляющими собой дороги, до которых можно добраться, перед тем как будут превышены значения отсечения, либо полигонами, покрывающими эти линии (т.е. зоны, до которых можно добраться).
Выходные типы геометрии Линии и Полигоны недоступны, если источником данных сети является сервис версии Portal for ArcGIS, не поддерживающей генерацию строк. | String |
polygon_detail (Дополнительный) | Задает уровень детализации выходных полигонов.
Если ваш анализ включает городские территории с прямоугольной сетью дорог, разница между генерализованными и детализированными областями будет минимальной. Однако для горных и сельских дорог стандартные или детализированные полигоны могут представлять существенно более точные результаты, чем генерализованные. | String |
geometry_at_overlaps (Дополнительный) | Задает поведение выходной области обслуживания для нескольких пунктов обслуживания относительно друг друга.
| String |
geometry_at_cutoffs (Дополнительный) | Указывает поведение выходной области обслуживания для одного пункта обслуживания с несколькими предельными значениями. Этот параметр не влияет на выходные линейные данные.
| String |
polygon_trim_distance (Дополнительный) | Расстояние сокращения полигона области обслуживания. Расстояние сокращения - расстояние, на которое полигон область обслуживания будет расширен от дороги, если поблизости нет других доступных дорог, аналогично размеру буфера линии. Это может быть необходимо для предотвращения охвата областей, не содержащих пространственных объектов. Параметр включает значение и единицу измерения расстояния. По умолчанию задано значение 100 метров. | Linear Unit |
exclude_sources_from_polygon_generation [exclude_sources_from_polygon_generation,...] (Дополнительный) | Источник ребер сетевого набора данных, который будет исключен при создании полигонов областей обслуживания. Полигоны не будут генерироваться вокруг исключенных источников, даже если они проходятся в процессе анализа. Исключение сетевого источника из полигонов области обслуживания не предотвращает обход этого источника. Исключение источников из полигонов областей обслуживания влияет только на форму полигонов этих областей. Чтобы предотвратить прохождение заданного сетевого источника, следует создать соответствующее ограничение при определении набора сетевых данных. Это позволяет исключить некоторые сетевые источники из процесса создания полигонов, например, если из-за них полигоны имеют неправильную форму или данные не согласуются с анализом области обслуживания. К примеру, при создании области обслуживания для пешего передвижения в мультимодальной сети, включающей улицы и линии метрополитена, вам следует исключить линии метро из создания полигонов. Хотя пешеходы и могут использовать линии метро, они не могут остановиться в любом месте вдоль линий метро и войти в соседнее здание. Вместо этого, они должны пройти по всей длине линии метро, выйти на станции, затем пройти к зданию по улицам. Было бы неточным создать полигональный объект вокруг линии метро. Этот параметр недоступен, если типы выходной геометрии не включают полигоны, в которых присутствует меньше двух источников ребер в сети, источник данных сети является сервисом ArcGIS Online, либо источник данных сети является сервисом в версии Portal for ArcGIS, которая не поддерживает исключение источников. | String |
accumulate_attributes [accumulate_attributes,...] (Дополнительный) | Список атрибутов стоимости, который будет суммироваться во время анализа. Эти накопившиеся атрибуты могут использоваться только для сведения; алгоритм решения при выполнении анализа использует только атрибут стоимости в соответствии с используемым режимом передвижения. Для каждого из накопленных атрибутов стоимости в выходных объектах сетевого анализа добавляется параметр Total_[Impedance]. Этот параметр недоступен, если слой анализа не настроен на вывод линий, источником сетевых данных является сервис ArcGIS Online или сервис в версии Portal for ArcGIS, не поддерживающей накопление. | String |
Производные выходные данные
Name | Объяснение | Тип данных |
out_network_analysis_layer | Только что созданный слой сетевого анализа. | Слой Network Analyst |
Пример кода
Запуск инструмента с использованием только необходимых параметров.
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeServiceAreaAnalysisLayer(network, "FireStationCoverage")
Выполните инструмент с использованием всех параметров.
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeServiceAreaAnalysisLayer(network, "WarehouseCoverage",
"Driving Time", "FROM_FACILITIES", [5, 10, 15],
"1/1/1900 9:00 AM", "UTC", "POLYGONS",
"STANDARD", "DISSOLVE", "RINGS", "100 meters",
["Metro_Lines", "Transfer_Stations",
"Transfer_Street_Station"], ["Meters",
"DriveTime"])
В следующем автономном скрипте Python показано, как с помощью инструмента MakeServiceAreaAnalysisLayer можно создавать 1-, 2- и 3-минутные области обслуживания вокруг пожарной части.
# Name: MakeServiceAreaAnalysisLayer_Workflow.py
# Description: Generate 1-,2-,3- minute service areas around fire stations and
# save the results to a layer file on disk. The service area
# polygons can be used to visualize the areas that do not have
# adequate coverage from the fire stations
# Requirements: Network Analyst Extension
#Import system modules
import arcpy
from arcpy import env
import os
try:
#Check out Network Analyst license if available. Fail if the Network Analyst license is not available.
if arcpy.CheckExtension("network") == "Available":
arcpy.CheckOutExtension("network")
else:
raise arcpy.ExecuteError("Network Analyst Extension license is not available.")
#Set environment settings
output_dir = "C:/Data"
#The NA layer's data will be saved to the workspace specified here
env.workspace = os.path.join(output_dir, "Output.gdb")
env.overwriteOutput = True
#Set local variables
input_gdb = "C:/Data/SanFrancisco.gdb"
network = os.path.join(input_gdb, "Transportation", "Streets_ND")
layer_name = "FireStationCoverage"
travel_mode = "Driving Time"
facilities = os.path.join(input_gdb, "Analysis", "FireStations")
output_layer_file = os.path.join(output_dir, layer_name + ".lyrx")
#Create a new service area layer. We wish to generate the service area
#polygons as rings, so that we can easily visualize the coverage for any
#given location. We also want overlapping polygons so we can determine the
#number of fire stations that cover a given location. We will specify these
#options while creating the new service area layer.
result_object = arcpy.na.MakeServiceAreaAnalysisLayer(network, layer_name,
travel_mode, "FROM_FACILITIES", [1, 2, 3],
polygon_detail="HIGH",
geometry_at_overlaps="OVERLAP",
geometry_at_cutoffs="RINGS")
#Get the layer object from the result object. The service layer can now be
#referenced using the layer object.
layer_object = result_object.getOutput(0)
#Get the names of all the sublayers within the service area layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
#Stores the layer names that we will use later
facilities_layer_name = sublayer_names["Facilities"]
#Load the fire stations as facilities using default field mappings and
#default search tolerance
arcpy.na.AddLocations(layer_object, facilities_layer_name, facilities, "",
"")
#Solve the service area layer
arcpy.na.Solve(layer_object)
#Save the solved service area layer as a layer file on disk
layer_object.saveACopy(output_layer_file)
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 occurred on line %i" % tb.tb_lineno)
print(str(e))
В этом примере показано, как создать области обслуживания вокруг пунктов обслуживания для различного времени суток, а также перенести поля из входных пространственных объектов в выходные и добавить выходные полигоны к существующему классу пространственных объектов.
# Name: MakeServiceAreaAnalysisLayer_Workflow2.py
# Description: Generate 3-minute service areas around fire stations at several
# times of day to compare coverage differences due to varying
# traffic conditions. Save the results to a feature class on disk.
# Requirements: Network Analyst Extension
#Import system modules
import arcpy
from arcpy import env
import os, datetime
try:
#Check out Network Analyst license if available. Fail if the Network Analyst license is not available.
if arcpy.CheckExtension("network") == "Available":
arcpy.CheckOutExtension("network")
else:
raise arcpy.ExecuteError("Network Analyst Extension license is not available.")
#Set environment settings
output_dir = "C:/Data"
#The NA layer's data will be saved to the workspace specified here
env.workspace = os.path.join(output_dir, "Output.gdb")
env.overwriteOutput = True
#Set local variables
input_gdb = "C:/Data/SanFrancisco.gdb"
network = os.path.join(input_gdb, "Transportation", "Streets_ND")
layer_name = "FireStationCoverage"
out_featureclass = os.path.join(output_dir, "Output.gdb",
"FireStationCoverage")
travel_mode = "Driving Time"
facilities = os.path.join(input_gdb, "Analysis", "FireStations")
times_of_day = [datetime.datetime(2014, 9, 25, 7, 0, 0),
datetime.datetime(2014, 9, 25, 12, 30, 0),
datetime.datetime(2014, 9, 25, 17, 30, 0),
datetime.datetime(2014, 9, 25, 21, 0, 0)]
#Create a new service area layer.
result_object = arcpy.na.MakeServiceAreaAnalysisLayer(network, layer_name,
travel_mode, "FROM_FACILITIES",
[3], polygon_detail="HIGH",
geometry_at_overlaps="OVERLAP")
#Get the layer object from the result object. The service area layer can
#now be referenced using the layer object.
layer_object = result_object.getOutput(0)
#Get the names of all the sublayers within the service area layer.
sublayer_names = arcpy.na.GetNAClassNames(layer_object)
#Stores the layer names that we will use later
facilities_layer_name = sublayer_names["Facilities"]
polygons_layer_name = sublayer_names["SAPolygons"]
#The input data has a field for FireStationID that we want to transfer to
#our analysis layer. Add the field, and then use field mapping to transfer
#the values.
arcpy.na.AddFieldToAnalysisLayer(layer_object, facilities_layer_name,
"FireStationID", "TEXT")
field_mappings = arcpy.na.NAClassFieldMappings(layer_object,
facilities_layer_name)
field_mappings["FireStationID"].mappedFieldName = "FireStationID"
#Load the fire stations as facilities.
arcpy.na.AddLocations(layer_object, facilities_layer_name, facilities,
field_mappings, "")
# Add fields to the output Polygons sublayer for later use.
arcpy.na.AddFieldToAnalysisLayer(layer_object, polygons_layer_name,
"FireStationID", "TEXT")
arcpy.na.AddFieldToAnalysisLayer(layer_object, polygons_layer_name,
"TimeOfDay", "TEXT")
#Get sublayers to work with later
facilities_sublayer = layer_object.listLayers(facilities_layer_name)[0]
polygons_sublayer = layer_object.listLayers(polygons_layer_name)[0]
#Get the Service Area Layer's solver properties. This can be used to
#set individual properties later without re-creating the layer.
solver_properties = arcpy.na.GetSolverProperties(layer_object)
#Solve the Service Area for each time of day in the time list
for t in times_of_day:
print("Calculating service area for time of day: ", t)
#Use the solver properties to set the time of day for the solve
solver_properties.timeOfDay = t
#Solve the service area layer
arcpy.na.Solve(layer_object)
#Transfer the FireStationID field from the input Facilities to the
#output Polygons
arcpy.management.AddJoin(polygons_sublayer, "FacilityID",
facilities_sublayer, "ObjectID")
#The joined fields are qualified by the feature class name of the joined
#table, so determine the feature class names
field_qualifier_pol = os.path.basename(polygons_sublayer.dataSource)
target_field_name = "%s.FireStationID" % field_qualifier_pol
field_qualifier_fac = os.path.basename(facilities_sublayer.dataSource)
expression = "!%s.FireStationID!" % field_qualifier_fac
arcpy.management.CalculateField(polygons_sublayer, target_field_name,
expression, "PYTHON")
arcpy.management.RemoveJoin(polygons_sublayer)
#Populate the TimeOfDay field in the output feature class
expression = '"' + str(t) + '"'
arcpy.management.CalculateField(polygons_sublayer, "TimeOfDay",
expression, "PYTHON")
#Append the polygons to the output feature class. If this was the first
#solve, create the feature class.
if not arcpy.Exists(out_featureclass):
arcpy.management.CopyFeatures(polygons_sublayer, out_featureclass)
else:
arcpy.management.Append(polygons_sublayer, out_featureclass)
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 occurred on line %i" % tb.tb_lineno)
print(str(e))
Environments
Информация о лицензиях
- Basic: Да
- Standard: Да
- Advanced: Да