আসল সেট:
এটির সিউডো-কপি (সিওএনটিআরএল-ট্রেইগ-এ টানুন) তৈরি করুন এবং ক্লোন সহ অনেকের সাথে স্থানিক যোগ করুন। এই ক্ষেত্রে আমি 500 মিটার দূরত্ব ব্যবহার করেছি। আউটপুট টেবিল:
এই টেবিলটি থেকে রেকর্ডগুলি সরিয়ে ফেলুন যেখানে PAR_ID = PAR_ID_1 - সহজ।
টেবিলের মাধ্যমে পরিদর্শন করুন এবং এর উপরে যে কোনও রেকর্ডের (PAR_ID, PAR_ID_1) = (PAR_ID_1, PAR_ID) রেকর্ডগুলি সরিয়ে ফেলুন। এত সহজ নয়, এসিপি ব্যবহার করুন।
ক্যাচমেন্ট সেন্ট্রয়েডগুলি গণনা করুন (ইউনিিকআইডি = PAR_ID)। এগুলি নোড বা নেটওয়ার্ক। স্থানিক যোগদানের টেবিলটি ব্যবহার করে লাইনে তাদের সংযুক্ত করুন। এটি অবশ্যই এই ফোরামে কোথাও somewhereাকা পৃথক বিষয়।
নীচের স্ক্রিপ্টটি ধরে নিয়েছে যে নোডের টেবিলটি দেখতে এমন দেখাচ্ছে:
যেখানে এমআইডি পার্সেলগুলি থেকে এসেছে, P2013 সংক্ষিপ্ত করার ক্ষেত্র। এক্ষেত্রে = 1 শুধুমাত্র গণনার জন্য। [rcvnode] - স্ক্রিপ্ট আউটপুট গ্রুপ / ক্লাস্টারের সংজ্ঞায়িত প্রথম নোডের সমষ্টি নোডেরেকের আইডি সঞ্চয় করতে।
হাইলাইট করা গুরুত্বপূর্ণ ক্ষেত্রগুলির সাথে লিঙ্কগুলি সারণী কাঠামো
টাইমস লিঙ্ক / প্রান্তের ওজন সঞ্চয় করে, অর্থাত নোড থেকে নোডের ভ্রমণের ব্যয়। এক্ষেত্রে সমান 1 যাতে সমস্ত প্রতিবেশীর ভ্রমণের ব্যয় একই হয়। [ফাই] এবং [টিআই] সংযুক্ত নোডগুলির ক্রমিক সংখ্যা। এই টেবিলটি বসানোর জন্য এই ফোরামে অনুসন্ধান করুন কীভাবে লিংক থেকে নোডগুলি অর্পণ করতে হবে।
স্ক্রিপ্টটি আমার নিজস্ব ওয়ার্কবেঞ্চ এমএক্সডির জন্য অনুকূলিতকরণ করা হয়েছে। আপনার ক্ষেত্র এবং উত্সগুলির নামকরণ সংশোধন করতে হবে, হার্ডকোড করতে হবে:
import arcpy, traceback, os, sys,time
import itertools as itt
scriptsPath=os.path.dirname(os.path.realpath(__file__))
os.chdir(scriptsPath)
import COMMON
sys.path.append(r'C:\Users\felix_pertziger\AppData\Roaming\Python\Python27\site-packages')
import networkx as nx
RATIO = int(arcpy.GetParameterAsText(0))
try:
def showPyMessage():
arcpy.AddMessage(str(time.ctime()) + " - " + message)
mxd = arcpy.mapping.MapDocument("CURRENT")
theT=COMMON.getTable(mxd)
NODES LAYER সন্ধান করুন
theNodesLayer = COMMON.getInfoFromTable(theT,1)
theNodesLayer = COMMON.isLayerExist(mxd,theNodesLayer)
লিঙ্কস লেয়ার পান
theLinksLayer = COMMON.getInfoFromTable(theT,9)
theLinksLayer = COMMON.isLayerExist(mxd,theLinksLayer)
arcpy.SelectLayerByAttribute_management(theLinksLayer, "CLEAR_SELECTION")
linksFromI=COMMON.getInfoFromTable(theT,14)
linksToI=COMMON.getInfoFromTable(theT,13)
G=nx.Graph()
arcpy.AddMessage("Adding links to graph")
with arcpy.da.SearchCursor(theLinksLayer, (linksFromI,linksToI,"Times")) as cursor:
for row in cursor:
(f,t,c)=row
G.add_edge(f,t,weight=c)
del row, cursor
pops=[]
pops=arcpy.da.TableToNumPyArray(theNodesLayer,("P2013"))
length0=nx.all_pairs_shortest_path_length(G)
nNodes=len(pops)
aBmNodes=[]
aBig=xrange(nNodes)
host=[-1]*nNodes
while True:
RATIO+=-1
if RATIO==0:
break
aBig = filter(lambda x: x not in aBmNodes, aBig)
p=itt.combinations(aBig, 2)
pMin=1000000
small=[]
for a in p:
S0,S1=0,0
for i in aBig:
p=pops[i][0]
p0=length0[a[0]][i]
p1=length0[a[1]][i]
if p0<p1:
S0+=p
else:
S1+=p
if S0!=0 and S1!=0:
sMin=min(S0,S1)
sMax=max(S0,S1)
df=abs(float(sMax)/sMin-RATIO)
if df<pMin:
pMin=df
aBest=a[:]
arcpy.AddMessage('%s %i %i' %(aBest,sMax,sMin))
if df<0.005:
break
lSmall,lBig,S0,S1=[],[],0,0
arcpy.AddMessage ('Ratio %i' %RATIO)
for i in aBig:
p0=length0[aBest[0]][i]
p1=length0[aBest[1]][i]
if p0<p1:
lSmall.append(i)
S0+=p0
else:
lBig.append(i)
S1+=p1
if S0<S1:
aBmNodes=lSmall[:]
for i in aBmNodes:
host[i]=aBest[0]
for i in lBig:
host[i]=aBest[1]
else:
aBmNodes=lBig[:]
for i in aBmNodes:
host[i]=aBest[1]
for i in lSmall:
host[i]=aBest[0]
with arcpy.da.UpdateCursor(theNodesLayer, "rcvnode") as cursor:
i=0
for row in cursor:
row[0]=host[i]
cursor.updateRow(row)
i+=1
del row, cursor
except:
message = "\n*** PYTHON ERRORS *** "; showPyMessage()
message = "Python Traceback Info: " + traceback.format_tb(sys.exc_info()[2])[0]; showPyMessage()
message = "Python Error Info: " + str(sys.exc_type)+ ": " + str(sys.exc_value) + "\n"; showPyMessage()
6 টি গ্রুপের আউটপুট উদাহরণ:
আপনি সাইট প্যাকেজ প্রয়োজন হবে NETWORKX
http://networkx.github.io/documentation/development/install.html
স্ক্রিপ্টটি প্রয়োজনীয় সংখ্যক ক্লাস্টারকে প্যারামিটার হিসাবে গ্রহণ করে (উপরের উদাহরণে 6)। এটি ভ্রমণের প্রান্তের সমান ওজন / দূরত্ব সহ একটি গ্রাফ তৈরি করতে নোড এবং লিঙ্ক টেবিলগুলি ব্যবহার করছে। এটি 2 দ্বারা সমস্ত নোডের সংমিশ্রণকে বিবেচনা করে এবং প্রতিবেশীর দুটি গোষ্ঠীতে মোট [P2013] গণনা করে। যখন প্রয়োজনীয় অনুপাত অর্জিত হয়, উদাহরণস্বরূপ (-1-১) / 1 প্রথম পুনরাবৃত্তিতে, হ্রাস অনুপাতের লক্ষ্যমাত্রা, অর্থাৎ 4, ইত্যাদি সহ 1 অবধি অব্যাহত থাকে Start আপনার নোডের টেবিলের (বাছাই?) উদাহরণ আউটপুটটিতে প্রথম 3 টি গোষ্ঠী দেখুন। এটি প্রতিটি পরবর্তী পুনরুক্তিতে 'শাখা কাটা' এড়াতে সহায়তা করে।
এমএক্সডি থেকে স্ক্রিপ্ট কাস্টমাইজেশন:
- আপনার কমোন আমদানি করার দরকার নেই। এটি আমার নিজস্ব জিনিস, যা আমার নিজস্ব পরিবেশের টেবিলটি পড়ে, যেখানে নোডস লাইয়ার, দ্য লিংকস লাইয়ার, লিংকফর্মআই, লিংকটোআই নির্দিষ্ট করা আছে। নোড এবং লিঙ্ক স্তরগুলির নিজের নামকরণের সাথে প্রাসঙ্গিক লাইনগুলি প্রতিস্থাপন করুন।
- নোট করুন যে ফিল্ড P2013 যে কোনও কিছু সঞ্চয় করতে পারে, যেমন ভাড়াটে বা পার্সেল অঞ্চল। যদি তাই হয় তবে আপনি প্রায় সমান সংখ্যক ব্যক্তি ইত্যাদি ধরে রাখতে বহুভুজকে ক্লাস্টার করতে পারেন etc.