arcpy.na.MakeServiceAreaLayer(in_network_dataset, out_network_analysis_layer, impedance_attribute, {travel_from_to}, {default_break_values}, {polygon_type}, {merge}, {nesting_type}, {line_type}, {overlap}, {split}, {excluded_source_name}, {accumulate_attribute_name}, {UTurn_policy}, {restriction_attribute_name}, {polygon_trim}, {poly_trim_value}, {lines_source_fields}, {hierarchy}, {time_of_day})
|
Имя
|
Объяснение
|
Тип данных
|
|
in_network_dataset
|
Набор сетевых данных, для которого выполняется анализ области обслуживания.
|
Network Dataset Layer
|
|
out_network_analysis_layer
|
Имя создаваемого слоя области обслуживания.
|
String
|
|
impedance_attribute
|
Стоимостный атрибут, который будет использован в качестве импеданса в анализе.
|
String
|
|
travel_from_to
(Дополнительный)
|
Указывает направление движения от или до пункта обслуживания.
Этот параметр позволяет найти различные области обслуживания в сети с односторонними ограничениями и различными импедансами на основе направления движения. Область обслуживания для службы доставки пиццы, например, может быть создана с учетом пути от пункта обслуживания, а область обслуживания больницы должна быть создана с учетом пути к пункту обслуживания.
|
String
|
|
default_break_values
(Дополнительный)
|
Вычисляемые значение импеданса по умолчанию, включая экстент области обслуживания. Значение по умолчанию можно переопределить путем задания граничного значения для пункта облуживания.
Для создания концентрических областей можно использовать несколько полигональных границ. Например, для нахождения 2-, 3- и 5-минутной областей обслуживания для одного пункта обслуживания необходимо задать "2 3 5" в качестве значений параметра ограничения по умолчанию (числа 2, 3 и 5 следует разделить пробелами).
|
String
|
|
polygon_type
(Дополнительный)
|
Задает количество создаваемых полигонов.
Если данные приведены для городской территории с решеткоподобной сетью, разница между генерализованными и детализированными полигонами будет минимальной. Однако для горных и сельских дорог детализированные полигоны могут представлять существенно более точные результаты, чем генерализованные.
SIMPLE_POLYS–Создает генерализированные полигоны, которые генерируются быстрее и достаточно точны, если не учитывать особые требования. Используется по умолчанию.
DETAILED_POLYS–Создает подробные полигоны, которые точно моделируют области облуживания и могут содержать островки недоступных областей. Этот вариант требует больше времени на вычисление.
NO_POLYS–Выключает создание полигонов в случаях, когда желательно использовать линейное отображение областей обслуживания.
|
String
|
|
merge
(Дополнительный)
|
Задает параметры объединения полигонов, использующих общие граничные значения. Этот параметр применяется только при создании полигонов для нескольких пунктов обслуживания.
NO_MERGE–Создает отдельные полигоны для каждого пункта обслуживания. Полигоны могут накладываться друг на друга.
NO_OVERLAP–Создает отдельные полигоны для каждого пункта обслуживания. Полигоны не накладываются друг на друга.
MERGE–Объединяет полигоны нескольких пунктов обслуживания с общими граничными значениями.
|
String
|
|
nesting_type
(Дополнительный)
|
Указывает опцию создания концентрических полигонов обслуживания в виде кругов или колец. Этот параметр применяется только при задании нескольких граничных значений для пунктов обслуживания.
RINGS–Не включает область с меньшим граничным значением. Создает полигоны между соседними граничными значениями. Этот параметр можно использовать для поиска областей между граничными значениями.
DISKS–Используется для создания полигонов от пункта обслуживания до граничного значения. Например, при создании 5- и 10-минутных областей обслуживания 10-минутная область будет включать 5-минутную. Этот параметр можно использовать для определения всей области между пунктом обслуживания и граничным значением.
|
String
|
|
line_type
(Дополнительный)
|
Задает тип линий, которые создаются на основе анализа области обслуживания. Выбор опции TRUE_LINES или TRUE_LINES_WITH_MEASURES для больших областей обслуживания увеличит потребление ресурсов памяти при выполнении анализа.
NO_LINES–Не создавать линии. Используется по умолчанию.
TRUE_LINES–Линии создаются без измерений.
TRUE_LINES_WITH_MEASURES–Линии создаются с измерениями. Значения размеров генерируются на основе значений импеданса для каждой границы; при этом промежуточные значения интерполируются. Не используйте этот параметр, если вам необходимо ускорить расчеты.
|
String
|
|
overlap
(Дополнительный)
|
Определяет, будут ли при вычислении линий областей обслуживания создаваться перекрывающиеся линии.
OVERLAP–Включать отдельные линейные объекты для каждого пункта обслуживания, если пункты обслуживания имеют совпадающие области обслуживания.
NON_OVERLAP–Включать каждую линию области обслуживания не более одного раза ми связывать с ближайшим пунктом обслуживания (наименьший импеданс).
|
Boolean
|
|
split
(Дополнительный)
|
Определяет, должны ли линейные объекты разделяться по граничным значениям.
SPLIT–Делить каждую линию между двумя границами на две линии – по одной для каждой области. Этот параметр необходим для обозначения линий области обслуживания разрывами. В противном случае используйте параметр NO_SPLIT. Это повысит производительность вычислений.
NO_SPLIT–Линии не делятся на границах областей обслуживания. Используется по умолчанию.
|
Boolean
|
|
excluded_source_name
[excluded_source_name,...]
(Дополнительный)
|
Задает список сетевых источников, исключаемых в процессе создания полигонов. Геометрия используемых элементов от исключенных источников не включается в полигоны.
Это позволяет исключить некоторые сетевые источники из процесса создания полигонов, например, если из-за них полигоны имеют неправильную форму или данные не согласуются с анализом области обслуживания. Допустим, при создании времени движения для области обслуживания в мультимодальной сети (автодороги + железные дороги) необходимо исключить железные дороги, чтобы точно определить области, доступные для автотранспорта.
Исключение сетевого источника из полигонов области обслуживания не предотвращает обход этого источника. Исключение источников из полигонов областей обслуживания влияет только на форму полигонов этих областей. Если необходимо предотвратить прохождение заданного сетевого источника, следует создать соответствующее ограничение при определении набора сетевых данных.
|
String
|
|
accumulate_attribute_name
[accumulate_attribute_name,...]
(Дополнительный)
|
Список атрибутов стоимости, которые будут суммироваться во время анализа. Эти атрибуты суммирования предназначены только для справки: механизм расчета использует только атрибут стоимости, указанный параметром Атрибут импеданса, для вычисления маршрута.
Для каждого суммируемого атрибута стоимости к маршрутам, являющимися выходными для механизма расчета, добавляется свойство [Impedance] Total_.
|
String
|
|
UTurn_policy
(Дополнительный)
|
Определяет правила разворота, используемые в соединениях. При разрешении разворотов неявно предполагается, что механизм расчета позволяет поворот на соединении и продолжение движения по той же улице в обратную сторону. Учитывая, что соединения представляют собой пересечения улиц и тупики, различные транспортные средства могут разворачиваться на некоторых соединениях, но не на всех – это зависит от того, является ли соединение перекрестком или тупиком. Чтобы приспособиться к этому, параметр правила разворота неявно определяется количеством ребер, которые участвуют в соединении, что известно как валентность соединения. Ниже приведены допустимые значения для данного параметра; каждое из них сопровождается описанием значения в терминах валентности соединения.
Для более точного определения правил разворота можно добавить глобальный параметр задержки на повороте в сетевой атрибут стоимости или настроить его, если он уже существует, а также уделить особое внимание конфигурации обратных поворотов. Можно также задать для сетевых положений свойство CurbApproach.
ALLOW_UTURNS–Развороты разрешены в соединениях с любым количеством смежных ребер. Это значение используется по умолчанию.
NO_UTURNS–Развороты запрещены во всех соединениях, вне зависимости от их валентности. Но даже при выборе этой опции развороты в сетевых положениях по-прежнему разрешены. Запретить развороты в отдельных сетевых положениях можно с помощью свойства положения CurbApproach.
ALLOW_DEAD_ENDS_ONLY–Развороты запрещены во всех соединениях, кроме тех, у которых имеется только одно смежное ребро (тупик).
ALLOW_DEAD_ENDS_AND_INTERSECTIONS_ONLY–Развороты запрещены в соединениях с ровно двумя смежными ребрами, но разрешены на перекрестках (в соединениях с тремя смежными ребрами или более) и в тупиках (соединениях с ровно одним смежным ребром). Часто сети имеют избыточные соединения в середине сегмента дороги. Эта опция позволяет запретить развороты транспортных средств в таких местах.
|
String
|
|
restriction_attribute_name
[restriction_attribute_name,...]
(Дополнительный)
|
Список атрибутов ограничений, которые будут применены во время анализа.
|
String
|
|
polygon_trim
(Дополнительный)
|
Определяет, следует ли сокращать выходные полигоны.
TRIM_POLYS–Обрезает полигоны до области в пределах заданного расстояния от границ. Это может быть необходимо для предотвращения охвата областей, не содержащих пространственных объектов.
NO_TRIM_POLYS–Не обрезать полигоны.
|
Boolean
|
|
poly_trim_value
(Дополнительный)
|
Используется для указания расстояния, в пределах которого полигон обрезается. Параметр включает значение и единицу измерения расстояния. По умолчанию задано значение 100 метров.
|
Linear Unit
|
|
lines_source_fields
(Дополнительный)
|
Указывает, должны ли поля источников сети включаться в выходные линии.
LINES_SOURCE_FIELDS–Добавляет к линиям областей обслуживания поля SourceID, SourceOID, FromPosition и ToPosition для хранения сведений об исходных пространственных элементах, используемых в анализе. Это помогает объединять результаты линий области обслуживания с исходными данными.
NO_LINES_SOURCE_FIELDS–Не добавляет к линиям областей обслуживания поля SourceID, SourceOID, FromPosition и ToPosition.
|
Boolean
|
|
hierarchy
(Дополнительный)
|
Параметр не используется, если в наборе сетевых данных, используемом для выполнения анализа, не задан атрибут иерархии.
USE_HIERARCHY–Для анализа будет использоваться атрибут иерархии. Применение иерархии приводит при расчете к предпочтению ребер высшего порядка по сравнению с ребрами низшего порядка. Расчеты с иерархией выполняются быстрее, и они могут использоваться для моделирования предпочтений водителя, который скорее выберет для проезда автостраду, нежели местную дорогу – даже если это приведет к увеличению длины пути. Данная опция доступна, если входной набор сетевых данных имеет атрибут иерархии.
NO_HIERARCHY–Атрибут иерархии не будет использован для анализа, результатом будет область обслуживания, измеренная вдоль всех ребер набора сетевых данных, независимо от уровня иерархии.
|
Boolean
|
|
time_of_day
(Дополнительный)
|
Время отправления или прибытия для пункта обслуживания слоя области обслуживания. Интерпретация этого значения как времени отправления или прибытия зависит от того, какое направление движения задано – от пункта обслуживания или к нему.
Представляет время отправления, если для параметра Движение от или к пункту обслуживания выбрано значение TRAVEL_FROM.
Представляет время прибытия, если Движение от или к пункту обслуживания задано как TRAVEL_TO.
Если выбран атрибут импеданса на основе трафика, то решение будет создано с учетом заданных динамических условий трафика в указанное время суток. Дату и время можно указать в виде 5/14/2012 10:30 AM.
Вместо конкретной даты может быть задан день недели, при помощи следующих условных дат.
Today—30.12.1899
Sunday—31.12.1899
Monday—01.01.1900
Tuesday—02.01.1900
Wednesday—03.01.1900
Thursday—04.01.1900
Friday—05.01.1900
Saturday—06.01.1900
Например, чтобы указать, что маршрут должен начинаться в 17:00 во вторник, следует указать значение параметра, равное 02.01.1900 17:00.
Повторяя один и тот же анализ, но с разными значениями времени суток, можно увидеть, как изменяется доступность пункта обслуживания с течением времени. Например, пятиминутная область обслуживания вокруг пожарной части может быть большой рано утром, затем уменьшаться в часы пик, снова увеличиваться и так далее.
|
Date
|
Производные выходные данные
|
Имя
|
Объяснение
|
Тип данных
|
|
output_layer
|
Только что созданный слой сетевого анализа.
|
Network Analyst Layer
|
Пример кода
MakeServiceAreaLayer, пример 1 (окно Python)
Выполнить инструмент с использованием только обязательных параметров.
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
arcpy.na.MakeServiceAreaLayer(network, "FireStationCoverage", "TravelTime")
MakeServiceAreaLayer, пример 2 (окно Python)
Выполните инструмент с использованием всех параметров.
network = "C:/Data/Paris.gdb/Transportation/ParisMultimodal_ND"
arcpy.na.MakeServiceAreaLayer(network, "WarehouseCoverage", "DriveTime",
"TRAVEL_FROM", "5 10 15", "SIMPLE_POLYS",
"NO_OVERLAP", "RINGS", "TRUE_LINES",
"NON_OVERLAP", "NO_SPLIT",
["Metro_Lines", "Transfer_Stations",
"Transfer_Street_Station"],
["Meters", "DriveTime"], "ALLOW_DEAD_ENDS_ONLY",
["Oneway"], "NO_TRIM_POLYS", "",
"LINES_SOURCE_FIELDS")
MakeServiceAreaLayer, пример 3 (рабочий процесс)
В следующем автономном скрипте Python показано, как с помощью функции MakeServiceAreaLayer можно создавать 1-, 2- и 3-минутные области обслуживания вокруг пожарной части.
# Name: MakeServiceAreaLayer_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:
#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"
impedance = "TravelTime"
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 as we can determine the
#number of fire stations that cover a given location. We use hierarchy to
#speed up the time taken to create the polygons. We will specify these
#options while creating the new service area layer.
result_object = arcpy.na.MakeServiceAreaLayer(network, layer_name,
impedance, "TRAVEL_FROM", "1 2 3",
"DETAILED_POLYS", "NO_MERGE", "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)))
MakeServiceAreaLayer, пример 4 (рабочий процесс)
В этом примере показано, как создать области обслуживания вокруг пунктов обслуживания для различного времени суток, а также перенести поля из входных пространственных объектов в выходные и добавить выходные полигоны к существующему классу пространственных объектов.
# Name: MakeServiceAreaLayer_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
import datetime
try:
#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")
impedance = "TravelTime"
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.MakeServiceAreaLayer(network, layer_name,
impedance, "TRAVEL_FROM", "3",
"DETAILED_POLYS", "NO_MERGE",
hierarchy = "NO_HIERARCHY")
#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, "",
exclude_restricted_elements = "EXCLUDE")
# 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))