Unfortunately arcpy distanceTo method is painfully slow. When speed is crucial, I am still using Avenue to work around it, but it is getting harder to transfer ArcView 3 to newer computers.
As requested by @PolyGeo code snippets tested on polygon made of 3250 vertices.
Avenue:
theView = av.GetActiveDoc
Catchments=theView.GetActiveThemes.Get(0)
aTab=Catchments.getFtab
shpFld=aTab.findField("Shape")
feat=aTab.ReturnValue(shpFld,0)
outLine=feat.AsPolyLine
pC=feat.ReturnCenter
aTime0=date.now
for each i in (0..10000)
d=outLine.Distance(pC)
end
msgbox.info ((Date.Now-aTime0).AsSeconds.asstring,"")
Python:
import arcpy, time
infc=r'C:\Temp\theme1.shp'
with arcpy.da.SearchCursor(infc,("FID","Shape@")) as cursor:
for i,feat in cursor:
break
outline=feat.boundary()
pC=feat.centroid
start = time.time()
for i in range(10000):
d=outline.distanceTo(pC)
end = time.time()
arcpy.AddMessage(end - start)
- Executing: Script3 centres Start Time: Fri Jul 28 19:32:08 2017
- Running script Script3...
- 83.7339999675751
- Completed script Script3...
Note that last 5 lines are doing exactly the same thing, calculatiog distance from polygon centroid to it's boundary. As one can see arcpy function is far behind out of date Avenue.
So, does anybody aware of python module that works significantly faster, please
No comments:
Post a Comment