Saya mencoba menambahkan alat ke toobar add-in untuk memilih fitur dari kelas fitur yang ada dan menyalinnya ke kelas fitur lain. Saya membutuhkan dua alat, satu untuk satu titik dan satu untuk persegi panjang. Alat tambahan hanya menangani persegi panjang, jadi saya mencoba membuat titik koordinat dari acara onMouseDown dan cukup menggunakan umpan balik X dan Y yang saya dapatkan. Masalahnya adalah saya sepertinya tidak bisa meneruskan koordinat ini ke sesuatu yang berguna untuk mengekstrak fitur. Saya sudah mencoba menggunakan Extents Environment dan kemudian melakukan CopyFeatures sederhana, tapi itu tidak berfungsi karena menyalin seluruh fc dan sepertinya tidak menghormati pengaturan lingkungan yang saya atur.
Dapatkah saya meneruskan koordinat ke alat Pilih oleh Lokasi entah bagaimana atau ada cara lain untuk melewatkan koordinat ke sesuatu untuk diekstraksi sejauh itu?
Inilah yang saya miliki sekarang:
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
diatur? Itu tidak diatur untuk apa pun kecuali string kosong dalam kode ini. Input juga SelectLayerByLocation
harus menjadi referensi ke objek Layer atau nama layer fitur dalam dokumen peta saat ini. ELAtemplate
adalah string yang menunjuk ke shapefile.
fc
diatur dari pilihan kotak kombo. Jadi saya membuatnya global. ELAtemplate
adalah shapefile di sini, tapi saya sudah mencoba menjalankan ini di jendela Python sebagai layer, shapefile atau diseret dari TOC dan tidak ada yang berfungsi.
pointGeom
: arcpy.MakeFeatureLayer_management("nsw_map_units","unit_layer")
mana nsw_map_units
berasal dari TOC. Saya kemudian menggunakannya untuk menjalankan arcpy.SelectLayerByLocation_management('unit_layer',"INTERSECT",pointGeom,"#","ADD_TO_SELECTION")
, tetapi saya tidak punya pilihan. Saya bahkan sudah mencoba secara fisik membuat layer titik.
pointGeom
tidak benar-benar memotong apa pun di dalamnya unit_layer
. Mungkin Anda hanya perlu menyegarkan tampilan?