Mehr

Testen des Punkts in der Polygon-Overlay-Leistung von Intersect, Spatial Join und Near in ArcGIS for Desktop?

Testen des Punkts in der Polygon-Overlay-Leistung von Intersect, Spatial Join und Near in ArcGIS for Desktop?


In Antworten und Kommentaren zu Punkte innerhalb eines Polygons auswählen und Attribute aktualisieren I denken Es wird vorgeschlagen, dass Spatial Join (Analyse) und/oder Near (Analyse) vielleicht schneller als Intersect (Analyse), um einen Punkt in einer Polygonüberlagerung auszuführen, um Polygonattribute auf die Punkte zu übertragen, die sie schneiden.

Dies überraschte mich, da ich immer erwartet hatte, dass Intersect etwas schneller sein könnte als Spatial Join, und ich denke, es wäre viel schneller als Near. Leider habe ich keine Advanced-Level-Lizenz von ArcGIS for Desktop, sodass ich die Leistung von Near nicht testen kann.

Hat jemand einen reproduzierbaren Test, der anzeigt, dass Near und/oder Spatial Join schneller sind als Intersect?

Ich werde als Antwort meinen Test zu Intersect vs Spatial Join geben, bei dem ich ein 10x10-Netz aus Polygonen und ein 100x100-Netz aus Punkten erstelle, die die gleiche Ausdehnung (0,0,10,10) abdecken und dann einen Vanilla-Intersect und a . durchführe Vanilla Spatial Join (INTERSECT) der beiden.


Meine Schnelltests mit ArcGIS 10.2.2 for Desktop unter Windows 7 SP1 zeigen, dass Intersect schneller ist als Spatial Join.

Dieser Test wird im IDLE ausgeführt:

import arcpy,time if not arcpy.Exists(r"C:	emp	est.gdb"): arcpy.CreateFileGDB_management(r"C:	emp","test.gdb") if arcpy.Exists(r"C: 	emp	est.gdbfnPoly100"): arcpy.Delete_management(r"C:	emp	est.gdbfnPoly100") if arcpy.Exists(r"C:	emp	est.gdbfnPoly10000"): arcpy .Delete_management(r"C:	emp	est.gdbfnPoly10000") if arcpy.Exists(r"C:	emp	est.gdbfnPoint10000"): arcpy.Delete_management(r"C:	emp	est. gdbfnPoint10000") arcpy.CreateFishnet_management("C:/temp/test.gdb/fnPoly100","0 0","0 1","1","1","10","10","# ","NO_LABELS","#","POLYGON") arcpy.CreateFishnet_management("C:/temp/test.gdb/fnPoly10000","0 0","0 1","0.1","0.1"," 100","100","#","LABELS","#","POLYGON") arcpy.Delete_management(r"C:	emp	est.gdbfnPoly10000") arcpy.Rename_management("C:/temp /test.gdb/fnPoly10000_label","C:/temp/test.gdb/fnPoint10000","FeatureClass") if arcpy.Exists(r"C:	emp	est.gdbSpatialJoinResult"): arcpy.Delete_management(r "C:	emp	est.gdbSpatialJoinResult") start = time.clock() arcpy.SpatialJ oin_analysis("C:/temp/test.gdb/fnPoint10000","C:/temp/test.gdb/fnPoly100", "C:/temp/test.gdb/SpatialJoinResult", "JOIN_ONE_TO_ONE","KEEP_ALL", " ""Shape_Length "Shape_Length" false true true 8 Double 0 0 ,First,#,C:/temp/test.gdb/fnPoly100,Shape_Length,-1,-1;Shape_Area "Shape_Area" false true true 8 Double 0 0 ,First ,#,C:/temp/test.gdb/fnPoly100,Shape_Area,-1,-1""", "INTERSECT","#","#") abgelaufen = (time.clock() - start) print( "Spatial Join dauerte " + str(elapsed) + " Sekunden") if arcpy.Exists(r"C:	emp	est.gdbIntersectResult"): arcpy.Delete_management(r"C:	emp	est.gdb IntersectResult") start = time.clock() arcpy.Intersect_analysis("C:/temp/test.gdb/fnPoint10000 #;C:/temp/test.gdb/fnPoly100 #", "C:/temp/test.gdb/ IntersectResult","ALL","#","INPUT") elapsed = (time.clock() - start) print("Intersect nahm" + str(elapsed) + "seconds")

brachte diese Ergebnisse:

Die räumliche Verbindung dauerte 3,13998451416 Sekunden

Intersect dauerte 2,3185308145 Sekunden

Ich habe meinen Test zuerst ein paar Mal mit dem Intersect und dann ein paar Mal mit dem Spatial Join durchgeführt, und Intersect war immer der Gewinner bei diesen Daten.


Schau das Video: reproject coordinate systems of feature class shapefile ArcGis