Estou tentando adicionar uma ferramenta a um toobar de suplemento para selecionar recursos de uma classe de recurso existente e copiá-los para outra classe de recurso. Preciso de duas ferramentas, uma para um ponto e outra para um retângulo. As ferramentas de suplemento lidam apenas com retângulos, então estou tentando gerar a coordenada do ponto fora do evento onMouseDown e simplesmente usar o feedback X e Y que recebo. O problema é que não consigo passar essas coordenadas para algo útil para extrair os recursos. Eu tentei usar extensões de ambiente e, em seguida, executar um CopyFeatures simples, mas isso não está funcionando, pois copia todo o fc e parece não respeitar as configurações de ambiente definidas.
Posso passar coordenadas para a ferramenta Selecionar por local de alguma forma ou existe outra maneira de passar coordenadas para algo a ser extraído nessa extensão?
Isto é o que eu tenho agora:
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
definido? Não está definido para nada além de uma sequência vazia neste código. Além disso, a entrada SelectLayerByLocation
deve ser uma referência a um objeto Camada ou o nome de uma camada de feição no documento de mapa atual. ELAtemplate
é uma string apontando para um shapefile.
fc
é definido a partir de uma seleção de caixa de combinação. Então, eu fiz isso global. ELAtemplate
é um shapefile aqui, mas tentei executá-lo na janela do Python como uma camada, shapefile ou arrastada do sumário e nenhum deles funciona.
pointGeom
: de arcpy.MakeFeatureLayer_management("nsw_map_units","unit_layer")
onde nsw_map_units
vem o sumário. Eu então uso isso para executar arcpy.SelectLayerByLocation_management('unit_layer',"INTERSECT",pointGeom,"#","ADD_TO_SELECTION")
, mas não tenho seleção. Eu até tentei criar fisicamente uma camada de pontos.
pointGeom
que não cruze nada unit_layer
. Talvez você precise apenas atualizar a exibição?