Suite

Interruption de l'analyse de l'installation la plus proche

Interruption de l'analyse de l'installation la plus proche


Je fais une analyse d'analyste de réseau (installation la plus proche). Je vais conduire de « Incidents » à « Installations ». Mes « Installations » sont le centre de population d'une municipalité. Dans « Installations » j'ai une colonne « POP » qui indique le nombre de résidents qui se trouvent dans le centre de population. Premièrement, les analyses de l'établissement le plus proche iront aux « établissements » les plus proches et compteront le nombre de résidents qu'il y a dans la colonne « POP ». Il devrait donc aller à la deuxième "Installations" la plus proche et compter le nombre de résidents qui se trouvent dans la colonne "POP" là-bas. Pour chaque "Installations", il comptera le nombre de résidents dans la colonne "POP" et accumulera le résultat de la colonne "POP" dans une colonne appelée cumulatif.

Je l'ai fait jusqu'à présent. Mais mon problème est que lorsque l'accumulation a atteint la somme la plus proche de plus de 5000 dans la colonne accumulée, je veux que les analyses de l'installation la plus proche s'arrêtent et n'aillent pas à toutes les "installations" de mon ensemble de données. Je souhaite que l'analyse s'arrête lorsqu'elle a atteint la somme la plus proche supérieure à 5000 afin de gagner du temps et de la puissance informatique.

Est-il possible de faire en sorte que l'installation la plus proche s'arrête comme je le souhaite, ou doit-elle passer par toutes les "installations" que j'ai ?

import arcpy, os, sys # Vérifiez toutes les licences nécessaires arcpy.CheckOutExtension("Network") arcpy.env.overwriteOutput = True # Variables locales : WS = "C:TomOppdrag_2015KMD_NY" ELVEG_Nettverk_ND_2013 = "C: TomKrd_2013ELVEG_Nettverk_2013ELVEG_Nettverk_2013.gdbELVEG_Nettverk ELVEG_Nettverk_ND_2013" Til = r"C:TomOppdrag_2015KMD_NY4_Hedmark_Ut TomOppdrag_2015KMD_NY4_Hedmark_Ut.gdbFra" Ruter = r"C:TomOppdrag_2015KMD_NYRuter.shp" Routes = "Installation la plus procheRoutes" ODLines_Layer = "ODLines_Layer" la plus proche de NY = "TEST" "Installation la plus proche" arcpy.MakeFeatureLayer_management(Fra, "FraLyr") arcpy.MakeFeatureLayer_management(Til, "TilLyr") # Processus : Ajouter un champ (2) arcpy.AddField_management("TilLyr", "Innbyggere_NY", "LONG", "" , "", "20", "", "NULLABLE", "NON_REQUIRED", "") arcpy.AddField_management("FraLyr", "FraGkr", "LONG", "", "", "20", "" , "NULLABLE", "NON_REQUIRED", "") # Processus : Calculer le champ (3) arcpy.CalculateField_management("F raLyr", "FraGkr", "[GRUNNKRETS]", "VB", "") rows = arcpy.da.SearchCursor("FraLyr", "TEST") pour les lignes : Gkr = str(row[0]) where = " "TEST" = " + "" + str(Gkr) + "" arcpy.SelectLayerByAttribute_management("FraLyr", "NEW_SELECTION", where) closeBTP = "ClosestBTP" # Processus : Faire la couche d'installation la plus proche outNAlayer = arcpy .MakeClosestFacilityLayer_na(ELVEG_Nettverk_ND_2013, BTP le plus proche, "Meters", "TRAVEL_TO", "", "50", "", "ALLOW_UTURNS", "Oneway", "USE_HIERARCHY", "", "TRUE_LINES_WITH_MEASURES", "", "NOT_USED" ) arcpy.AddFieldToAnalysisLayer_na (closestBTP,"Routes", "Gkr_nr", "TEXT", "", "", "50") # Processus : Ajouter un champ (3) arcpy.AddField_management(closestBTP + "Routes", " Akkumulert", "LONG", "", "", "20", "", "NULLABLE", "NON_REQUIRED", "") arcpy.AddField_management(closestBTP + "Routes", "Grunnkrets", "LONG" , "", "", "20", "", "NULLABLE", "NON_REQUIRED", "") arcpy.AddLocations_na(closestBTP, "Incidents", "FraLyr", "Name GRUNNKRETS #", "5000 Meters", "", "ELVEG_Vegnett_2013 FORME ;ELVEG_Nettverk_ND_2013_Junctions NONE", "MATCH_TO_CLOSEST", "APPEND", "NO_SNAP", "5 Meters", "INCLUDE", "ELVEG_Vegnett_2013 #;ELVEG_Nettverk_ND_2013_Junctions #") arcpy.AddLocations_na(closestBTP", "FilestBTP", "FilestBTP", GRUNNKRETS #", "5000 mètres", "", "ELVEG_Vegnett_2013 SHAPE;ELVEG_Nettverk_ND_2013_Junctions AUCUN", "MATCH_TO_CLOSEST", "APPEND", "NO_SNAP", "5 mètres", "INCLUDE", "ELVEG_VegnetJunction_2013 #t_2013 #t" #verD_Net_Net ");ELVEG_Net_Net Processus : Résoudre arcpy.Solve_na(closestBTP, "SKIP", "TERMINATE", "") # Process : Calculate Field arcpy.CalculateField_management(closestBTP + "Routes", "Gkr_nr", "[Name]", "VB" , "") # Processus : Calculer le champ (4) arcpy.CalculateField_management(closestBTP + "Routes", "Grunnkrets", "[Gkr_nr]", "VB", "") # Processus : Calculer le champ (2) arcpy .CalculateField_management(closestBTP + "Routes", "Gkr_nr", "Right( [Gkr_nr],8 )", "VB", "") # Processus : Join Field arcpy.JoinField_management(closestBTP + "Routes", "Gkr_nr", "TilLyr", "GRUNNKRETS", "Dans nbyggere_NY") # Processus : Calculer le champ (5) arcpy.CalculateField_management(closestBTP + "Routes", "Akkumulert", "cumsum( !Innbyggere_NY! )", "PYTHON_9.3", "total = 0
def cumsum(inc):
 total global
 total+=inc
 total retourné
") arcpy.SaveToLayerFile_management(closestBTP, "Grunnkrets " + "_" + Gkr, "RELATIF")

J'ai fait des travaux similaires dans le passé et je pense qu'utiliser la fonction NA comme vous l'avez fait ici (ajout/suppression récursive d'un nouvel ensemble de cibles et de destinations) assez inefficace pour les aspects de traitement/utilisation des ressources, c'est pourquoi vous cherchez une réponse traitement une fois que le processus atteint un certain seuil (5000 personnes). Au lieu de cela, je vous conseille fortement d'utiliser la matrice OD à cette fin. Je n'ai pas testé le workflow ci-dessous mais la logique devrait être apparente :

  • Générez une matrice OD et joignez vos valeurs de population aux installations ;
  • Exportez votre tableau vers Excel ;
  • En utilisant le tableau croisé dynamique d'Excel, résumez vos valeurs de population (vous pouvez même faire plus)

De cette façon, vous serez en mesure de calculer la population globale et vous pourrez ensuite utiliser les seuils que vous souhaitez appliquer (par exemple, moins de 5 000, plus de 5 000, etc.)


Voir la vidéo: Résistances à lanalyse - 1 -