Vairāk

Diagramma/tīkla izveide un saistīto daudzstūru analīze programmā ArcGIS for Desktop?

Diagramma/tīkla izveide un saistīto daudzstūru analīze programmā ArcGIS for Desktop?


Tas ir vairāk papildu jautājums, lai sadalītu daudzstūrus * n * vienādu skaitu grupu ar ArcPy? un ciemata punktu grupēšana, pamatojoties uz attālumu un iedzīvotāju skaitu, izmantojot ArcGIS Desktop?, jo īpaši FelixIP atbildes.

Es cenšos telpiski sagrupēt daudzstūru kopu ar maksimālo iedzīvotāju ierobežojumu. (Grupēšanas analīzes rīks ArcGIS ir līdzīgs vēlamajiem rezultātiem, taču var veikt tikai laika vai telpiskus ierobežojumus, bez populācijas - tāpēc ir nepieciešama tīkla analīze, izmantojot ArcPy.)

Es galvenokārt sekoju FelixIP atbildē uz pirmo jautājumu norādītajām darbībām, bet esmu iestrēdzis tajā vietā, kur viņš iesaka "[fi] un [ti] ir secīgs savienoto mezglu skaits. Lai aizpildītu šo tabulu, meklējiet šajā forumā, kā piešķirt saites mezgliem un tiem." Diemžēl šķiet, ka šādas atbildes nav (vai arī es formulēju slikti), tāpēc mans jautājums:

Kā izveidot tīklu/grafiku, ko var izmantot, lai aprēķinātu secīgi pievienoto mezglu skaitu? Un patiesībā, vai es pareizi saprotu, ka šie [fi] un [ti] lauki attēlo kopējo mezglu skaitu, no kura var sasniegt katru mezglu (fi), un kaimiņu mezglu skaitu, ko katrs mezgls var sasniegt (ti)?

Līdz šim man ir viss pārējais, kas vajadzīgs līdz šim brīdim: punktu mezgla slānis un polilīnijas saišu slānis (ar un no mezgla). Tālāk sniegts vizuālais atbalsts kontekstam:


(avots: maks.is)


Kā jau teicu, punkti un līnijas ir pārmērīgas. Tas pats ar "fromn" un "ton" - no un uz mezglu nosaukumiem. Šī ir vienkāršota atbilde, pieņemsim to izmantot.

Izveidojiet formas failu šādi:

Sauciet šo slāni par "mezgliem" satura rādītājā.

Pievienojiet telpisko savienojumu sev (noņemiet visus laukus!):

Saites tabula izskatīsies šādi

Pievienojiet kartei izvadi, nosauciet to par "saitēm". Noņemiet visas funkcijas, kur "TARGET_FID" = "JOIN_FID" (bijušie fi un ti lauki). Saites tabulai pievienojiet lauku "reizes", aizpildiet to ar 1. Tās ir ceļa izmaksas no kaimiņa uz kaimiņu.

Izveidojiet lauku "P2013" (populācijas lauks) mezglu slāņos, aizpildiet to ar 1 vai 2, kā parādīts pirmajā attēlā.

Izveidojiet lauku "rcvnode", garš vesels skaitlis, - saņemšanas mezgls, lai saglabātu saimniekdatora "FID" vērtību.

Pievienojiet šo skriptu pielāgotajam rīkam:

importēt arcpy, traceback, os, sys importēt itertools kā šeit sys.path.append (r'C:  Users  felix_pertziger  AppData  Roaming  Python  Python27  site-package ') importēt networkx kā nx RATIO = int (arcpy. GetParameterAsText (0)) tolerance = float (arcpy.GetParameterAsText (1)) try: def showPyMessage (): arcpy.AddMessage (str (time.ctime ()) + " -" + ziņojums) # FIND LAYERS mxd = arcpy.mapping .MapDocument ("CURRENT") theNodesLayer = arcpy.mapping.ListLayers (mxd, "mezgli") [0] theLinksLayer = arcpy.mapping.ListLayers (mxd, "links") [0] arcpy.SelectLayerByAttribute_management "(saites) ) linksFromI = "TARGET_FID" linksToI = "JOIN_FID" G = nx.Graph () arcpy.AddMessage ("Saites pievienošana grafikam") ar arcpy.da.SearchCursor (theLinksLayer, (linksFromI, linksToI, "Times")) kā kursoru : rindai kursorā: (f, t, c) = G. rinda. add_edge (f, t, weight = c) pops = [rinda [0] rindai arcpy.da.TableToNumPyArray (theNodesLayer, ("P2013") ]] arcpy.AddMessage ("Datora matricas skaitļošana") length0 = nx.all_pairs_dijkstra_path_length (G) nNodes = len (p ops) aBmNodes = [] aBig = xrange (nNodes) resursdators = [-1]*nNodes, kamēr True: RATIO+=-1, ja RATIO == 0: break arcpy.AddMessage ('Mērķa attiecība %i' %RATIO) aBig = set (aBig) .difference (set (aBmNodes)) p = itt.combinations (aBig, 2) nBig = len (aBig) nTotal = nBig*(nBig-1)/2 arcpy.SetProgressor ("solis", "", 0 , nKopā, 1) pMin = 1000000 a in p: arcpy.SetProgressorPosition () S0, S1 = pops [a [0]], pops [a [1]] citi = set (aBig) .difference (set (a) ) citiem i: p = pops [i] L0 = garums0 [a [0]] [i] L1 = garums0 [a [1]] [i], ja L0= S1: aBmNodes, m, n, lBig = lBig [:], 1,0, lSmall [:] for i in aBmNodes: host [i] = aBest [m] for i in lBig: host [i] = aBest [ n] # rezultātu saglabāšana mezglu tabulā ar arcpy.da.UpdateCursor (theNodesLayer, "rcvnode") kā kursoru: i = 0 rindai kursorā: rinda [0] = resursdators [i] cursor.updateRow (rinda) i+= 1 del rinda, kursors, izņemot: message = " n *** PYTHON ERRORS ***"; showPyMessage () message = "Python Traceback Info:" + traceback.format_tb (sys.exc_info () [2]) [0]; showPyMessage () message = "Python kļūdas informācija:" + str (sys.exc_type) + ":" + str (sys.exc_value) + " n"; showPyMessage ()

Instrumentam ir 2 parametri:

Neoptimāls, viens no daudziem, vietējais vai jebkurš risinājums:

Es ceru, ka tas palīdzēs labāk izprast iepriekšminētās pieejas lauku nozīmi


Skatīties video: Diagrammas veidošana un noformēšana