Estoy tratando de agregar una herramienta a una barra de complementos para seleccionar entidades de una clase de entidad existente y copiarlas en otra clase de entidad. Necesito dos herramientas, una para un punto y otra para un rectángulo. Las herramientas de complemento solo manejan rectángulos, por lo que estoy tratando de generar la coordenada de punto del evento onMouseDown y simplemente uso los comentarios X e Y que obtengo. El problema es que parece que no puedo pasar estas coordenadas a nada útil para extraer las características. Intenté usar extensiones de entorno y luego hacer un simple CopyFeatures, pero eso no funciona, ya que copia todo el fc y no parece respetar la configuración del entorno que configuré.
¿Puedo pasar las coordenadas a la herramienta Seleccionar por ubicación de alguna manera o hay otra forma de pasar las coordenadas a algo para extraer en esa medida?
Esto es lo que tengo ahora:
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
establece? No se establece en nada más que una cadena vacía en este código. Además, la entrada SelectLayerByLocation
debe ser una referencia a un objeto de Capa o el nombre de una capa de entidades en el documento de mapa actual. ELAtemplate
es una cadena que apunta a un archivo de forma.
fc
se establece desde una selección de cuadro combinado. Así que lo hice global. ELAtemplate
es un archivo de forma aquí, pero he intentado ejecutar esto en la ventana de Python como una capa, un archivo de forma o arrastrado desde el TOC y ninguno de ellos funciona.
pointGeom
: de arcpy.MakeFeatureLayer_management("nsw_map_units","unit_layer")
dónde nsw_map_units
viene el TOC. Luego lo uso para correr arcpy.SelectLayerByLocation_management('unit_layer',"INTERSECT",pointGeom,"#","ADD_TO_SELECTION")
, pero no obtengo ninguna selección. Incluso he intentado crear físicamente una capa de puntos.
pointGeom
que en realidad no se cruzara con nada unit_layer
. ¿Quizás solo necesita actualizar la vista?