Ich versuche, einer Add-In-Symbolleiste ein Tool hinzuzufügen, um Features aus einer vorhandenen Feature-Class auszuwählen und in eine andere Feature-Class zu kopieren. Ich brauche zwei Werkzeuge, eines für einen Punkt und eines für ein Rechteck. Add-In-Tools verarbeiten nur Rechtecke. Daher versuche ich, die Punktkoordinate aus dem onMouseDown-Ereignis zu generieren und einfach das X- und Y-Feedback zu verwenden, das ich erhalte. Das Problem ist, dass ich diese Koordinaten scheinbar nicht an irgendetwas Nützliches übergeben kann, um die Features zu extrahieren. Ich habe versucht, Umgebungsbereiche zu verwenden und dann einfache CopyFeatures auszuführen, aber das funktioniert nicht, da es den gesamten fc kopiert und die von mir festgelegten Umgebungseinstellungen nicht zu berücksichtigen scheint.
Kann ich Koordinaten irgendwie an das Werkzeug Nach Standort auswählen übergeben, oder gibt es eine andere Möglichkeit, Koordinaten an etwas zu übergeben, das in diesem Umfang extrahiert werden kann?
Das habe ich jetzt:
import arcpy
import pythonaddins
arcpy.overWriteOutput = True
# Replace this with the SDE layer once it's available.
global ELAtemplate, fc
ELAtemplate = r'C:\Data\nsw_map_units.shp'
fc = ""
class DefineUnitsbyPoint(object):
"""Implementation for DefineUnitsbyPoint.tool (Tool)"""
def __init__(self):
self.enabled = True
self.shape = "Rectangle" # Use onMouseDown to get initial extent of the rectangle.
def onMouseDownMap(self, x, y, button, shift):
# fc can be assigned from a combo box selection in another class
global ELAtemplate, fc
if fc == "":
pythonaddins.MessageBox('Choose a layer to select from.', 'Choose a Layer', 0)
else:
mxd = arcpy.mapping.MapDocument("CURRENT")
pointGeom = arcpy.PointGeometry(arcpy.Point(x,y), mxd.activeDataFrame.spatialReference)
arcpy.SelectLayerByLocation_management(ELAtemplate, "INTERSECT", pointGeom, "", "ADD_TO_SELECTION")
arcpy.CopyFeatures(ELAtemplate, fc)
fc
eingestellt? In diesem Code ist nichts anderes als eine leere Zeichenfolge festgelegt. Außerdem muss die Eingabe SelectLayerByLocation
ein Verweis auf ein Ebenenobjekt oder der Name eines Feature-Layers im aktuellen Kartendokument sein. ELAtemplate
ist eine Zeichenfolge, die auf ein Shapefile zeigt.
fc
wird aus einer Kombinationsfeldauswahl festgelegt. Also habe ich das global gemacht. ELAtemplate
ist hier ein Shapefile, aber ich habe versucht, dies im Python-Fenster als Ebene, Shapefile oder aus dem Inhaltsverzeichnis gezogen auszuführen, und keines davon funktioniert.
pointGeom
: arcpy.MakeFeatureLayer_management("nsw_map_units","unit_layer")
wo nsw_map_units
aus dem TOC kommt. Ich benutze das dann, um zu laufen arcpy.SelectLayerByLocation_management('unit_layer',"INTERSECT",pointGeom,"#","ADD_TO_SELECTION")
, aber ich bekomme keine Auswahl. Ich habe sogar versucht, eine Punktebene physisch zu erstellen.
pointGeom
sich nichts darin überschneidet unit_layer
. Vielleicht müssen Sie nur die Ansicht aktualisieren?