Mais

Interrompendo a análise das instalações mais próximas

Interrompendo a análise das instalações mais próximas


Estou fazendo uma análise de analista de rede (Closest Facility). Eu estarei dirigindo de "Incidentes" para "Instalações". Minhas "Instalações" são o centro populacional de um município. Em "Instalações" tenho uma coluna "POP" que diz quantos moradores estão no centro populacional. Primeiro, as análises das Instalações Mais Próximas irão para as "Instalações" mais próximas e contarão quantos residentes existem na coluna "POP". Portanto, ele deve ir para a segunda "Instalações" mais próxima e contar quantos moradores estão na coluna "POP" lá. Para cada “Instalações” ele contará quantos moradores existem na coluna “POP” e acumulará o resultado da coluna “POP” em uma coluna chamada cumulativa.

Eu fiz isso até agora. Mas meu problema é quando a acumulação atingiu a soma mais próxima acima de 5.000 na coluna acumulada, eu quero que as análises de instalação mais próxima parem e não vá para todas as "instalações" em meu conjunto de dados. Quero que a análise pare quando atingir a soma mais próxima, acima de 5.000, a fim de economizar tempo e energia do computador.

É possível fazer com que a Instalação mais próxima pare da maneira que desejo ou ela deve passar por todas as "Instalações" que tenho?

import arcpy, os, sys # Verifique todas as licenças necessárias arcpy.CheckOutExtension ("Network") arcpy.env.overwriteOutput = True # Variáveis ​​locais: WS = "C:  Tom  Oppdrag_2015  KMD_NY" ELVEG_Nettverk_ND_2013 = "C:  Tom  Krd_2013  ELVEG_Nettverk_2013  ELVEG_Nettverk_2013.gdb  ELVEG_Nettverk  ELVEG_Nettverk_ND_2013 "Til = r" C:  Tom  Oppdrag_2015  KMD_NY  04_Hedmark_Ut.g  r " Tom  Oppdrag_2015  KMD_NY  04_Hedmark_Ut.gdb  Fra "Ruter = r" C:  Tom  Oppdrag_2015  KMD_NY  Ruter.shp "Routes =" Instalação mais próxima  Routes "ODLines_Layer =" ODLines_Layer "NY =" TEST "Closest "Closest Facility" arcpy.MakeFeatureLayer_management (Fra, "FraLyr") arcpy.MakeFeatureLayer_management (Til, "TilLyr") # Processo: Adicionar Field (2) arcpy.AddField_management ("TilLyr", "Innggere_NY", "LONG", " , "", "20", "", "NULLABLE", "NON_REQUIRED", "") arcpy.AddField_management ("FraLyr", "FraGkr", "LONG", "", "", "20", "" , "NULLABLE", "NON_REQUIRED", "") # Processo: Calculate Field (3) arcpy.CalculateField_management ("F raLyr "," FraGkr "," [GRUNNKRETS] "," VB "," ") rows = arcpy.da.SearchCursor (" FraLyr "," TEST ") para linha em linhas: Gkr = str (linha [0]) where = "" TEST  "=" + "" + str (Gkr) + "" arcpy.SelectLayerByAttribute_management ("FraLyr", "NEW_SELECTION", onde) nearBTP = "ClosestBTP" # Processo: Tornar mais próximo o layout da instalação outNALayer = arcpy .MakeClosestFacilityLayer_na (ELVEG_Nettverk_ND_2013, mais próximoBTP, "Metros", "TRAVEL_TO", "", "50", "", "ALLOW_UTURNS", "Oneway", "USE_HIERARCHY", "", "TRUE_LINES_WITH_MEED", " ) arcpy.AddFieldToAnalysisLayer_na (mais próximoBTP, "Rotas", "Gkr_nr", "TEXTO", "", "", "50") # Processo: Adicionar Campo (3) arcpy.AddField_management (mais próximoBTP + " Rotas", " Akkumulert "," LONG "," "," "," 20 "," "," NULLABLE "," NON_REQUIRED "," ") arcpy.AddField_management (mais próximoBTP +"  Routes "," Grunnkrets "," LONG " , "", "", "20", "", "NULLABLE", "NON_REQUIRED", "") arcpy.AddLocations_na (mais próximoBTP, "Incidentes", "FraLyr", "Nome GRUNNKRETS #", "5000 Metros", "", "ELVEG_Vegnett_2013 FORMA ; ELVEG_Nettverk_ND_2013_Junctions NONE "," MATCH_TO_CLOSEST "," APPEND "," NO_SNAP "," 5 Meters "," INCLUDE "," ELVEG_Vegnett_2013 #; ELVEG_Nettverk_ND_2013_Junctions_Junctions # ", mais próximo" Instalações ", TLocações" Tlocations "," Tlocations "mais próximo," AddLocações "," Tlocations ", mais próximo", Adições ", Arcpy.na GRUNNKRETS # "," 5000 Metros "," "," ELVEG_Vegnett_2013 SHAPE; ELVEG_Nettverk_ND_2013_Junctions NONE "," MATCH_TO_CLOSEST "," APPEND "," NO_SNAP "," 5 Metros "," INCLUDE "#JEGD_2013) Processo: Solve arcpy.Solve_na (mais próximoBTP, "SKIP", "TERMINATE", "") # Processo: Calculate Field arcpy.CalculateField_management (mais próximoBTP + " Routes", "Gkr_nr", "[Nome]", "VB" , "") # Processo: Calculate Field (4) arcpy.CalculateField_management (mais próximoBTP + " Routes", "Grunnkrets", "[Gkr_nr]", "VB", "") # Processo: Calculate Field (2) arcpy .CalculateField_management (mais próximoBTP + " Routes", "Gkr_nr", "Right ([Gkr_nr], 8)", "VB", "") # Processo: Join Field arcpy.JoinField_management (mais próximoBTP + " Routes", "Gkr_nr", "TilLyr", "GRUNNKRETS", "Em nbyggere_NY ") # Processo: Calcule Field (5) arcpy.CalculateField_management (mais próximoBTP +"  Routes "," Akkumulert "," cumsum (! Innbyggere_NY! ) "," PYTHON_9.3 "," total = 0  ndef cumsum (inc):  n total global  n total + = inc  n total de retorno  n ") arcpy.SaveToLayerFile_management (mais próximoBTP," Grunnkrets "+" _ "+ Gkr," RELATIVO ")

Fiz trabalhos semelhantes no passado e acho que usar a função NA como você fez aqui (adicionar / remover recursivamente um novo conjunto de alvos e destinos) é bastante ineficiente nos aspectos de processamento / uso de recursos, é por isso que você está procurando uma resposta para parar processamento uma vez que o processo atinge um certo limite (5000 pessoas). Em vez disso, recomendo fortemente que você use a matriz OD para esse propósito. Não testei o fluxo de trabalho abaixo, mas a lógica deve ser aparente:

  • Gere a matriz OD e junte os valores da sua população às Instalações;
  • Exporte sua tabela para Excel;
  • Ao usar a Tabela Dinâmica do Excel, some os valores da população (você pode fazer ainda mais)

Desta forma, você seria capaz de calcular a população geral e, em seguida, empregar os limites que deseja aplicar (por exemplo, menos de 5000, mais de 5000, etc.)


Assista o vídeo: Sesja Rady Gminy Żabia Wola z dnia 31 marca 2021 roku