CheckIntersectingFeatures

Краткая информация

Задает, является ли количество исходных объектов ребра из заданного набора сетевых данных, которые пересекаются объектами в заданном векторном слое, меньшим или равным заданной предельной величине. Если число пересекающихся объектов меньше или равно допустимому лимиту, функция возвращает True. Если число пересекающихся объектов превышает допустимый лимит, функция возвращает False. Эта функция полезна для ограничения количества объектов, которые могут быть загружены как линейные или полигональные барьеры в слой сетевого анализа.

Обсуждение

Данная функция используется для ограничения числа объектов, которые можно загрузить в подуровни, особенно линейные и полигональные препятствия слоев сетевого анализа. При загрузке полигональных барьеров программному обеспечению требуется найти точку пересечения между объектами полигона и граничными источниками из набора сетевых данных. Этот процесс может быть медленным, если объекты полигона пересекают много источников границ, например границы штатов или округов. Например, при создании сервиса геообработки, выполняющего анализ маршрутов, может потребоваться ограничение объектов, загружаемых в качестве полигонов барьеров. Для обеспечения разумного времени реагирования службы можно ограничить загрузку полигональных барьеров, если они пересекают более 5000 исходных граничных объектов из сетевого набора данных. Данная функция может использоваться для выполнения подобной проверки.

Синтаксис

CheckIntersectingFeatures (network_dataset_path, feature_layer, {cutoff})
ПараметрОписаниеТип данных
network_dataset_path

Входной набор сетевых данных, на который ссылается как на путь каталога, объект слоя набора сетевых данных или имя слоя. При проверке учитывается каждый граничный источник в наборе сетевых данных.

String
feature_layer

Переменная, задающая путь к каталогу, набору объектов, объекту слоя или к имени слоя, содержащего объекты, которые вы хотите проверить на пересечения с ребрами сетевого набора данных. Любой набор выделения или запрос на определения в объекте Layer учитывается и может использоваться для указания поднабора объектов.

Layer
cutoff

Целое значение, используемое для урезания при выполнении проверки.

(Значение по умолчанию — 5000)

Long
Возвращаемое значение
Тип данныхОписание
Boolean

Если указанные объекты, пересекающиеся с граничными объектами источникам из сетевого набора данных, имеют значения, меньшие или равные значению обрезки, функция выводит результат True; в противном случае она выводит результат False.

Пример кода

Пример CheckIntersectingFeatures (рабочий процесс)

В этом примере показано, как найти наилучший маршрут между несколькими магазинами с учетом погодных условий, замедляющих скорость движения. В нем показано использование функции CheckIntersectingFeatures для того, чтобы убедиться, что погодные полигоны, используемые в качестве барьеров полигонов, не пересекают более чем указанное число граничных объектов сетевого набора данных. Если условие не выполняется, сценарий выводит стандартное сообщение об ошибке.

import arcpy
from arcpy import env
import os

#Check out the Network Analyst extension license
arcpy.CheckOutExtension("network")

#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 up variables
network = "C:/Data/SanFrancisco.gdb/Transportation/Streets_ND"
polygon_barriers = "C:/Data/SanFrancisco.gdb/Analysis/WeatherSlowDownAreas"
stops = "C:/Data/SanFrancisco.gdb/Analysis/Stores"
cutoff = 3000

#Make a feature layer from the catalog path to the shapefile
barriers_layer = arcpy.management.MakeFeatureLayer(polygon_barriers,
                                        "PolygonBarriersLayer").getOutput(0)

#Check if fewer than 3000 edge features are intersected by barrier features
if arcpy.na.CheckIntersectingFeatures(network, barriers_layer, cutoff):
    
    #Proceed with creating a new route layer and loading the barriers
    route_layer = arcpy.na.MakeRouteAnalysisLayer(network, "WeatherRoute",
                                         "Driving Time").getOutput(0)
                                         
    #Get na class names based on the layer
    naClasses = arcpy.na.GetNAClassNames(route_layer, "INPUT")
    
    #Create field mappings for loading barriers as scaled cost polygon barriers
    #with a slow down of 40%
    fieldMappings = arcpy.na.NAClassFieldMappings(route_layer,
                                                  naClasses["PolygonBarriers"])
    fieldMappings["BarrierType"].defaultValue = 1
    #Figure out the layer's impedance attribute
    solver_props = arcpy.na.GetSolverProperties(route_layer)
    impedance = solver_props.impedance
    fieldMappings["Attr_" + impedance].defaultValue = 1.4
    #Load weather polygons as slow down barriers
    arcpy.na.AddLocations(route_layer, naClasses["PolygonBarriers"],
                          polygonBarriers, fieldMappings)
                          
    #Load stops
    arcpy.na.AddLocations(route_layer, naClasses["Stops"], stops)
    
    #Solve the route
    arcpy.na.Solve(route_layer)

else:
    #Return a standard error message if the test fails.
    arcpy.AddIDMessage("ERROR", 30095, "Polygon Barriers", cutoff)

arcpy.AddMessage("Completed")