Tôi đang cố gắng thêm một công cụ vào một toobar bổ trợ để chọn các tính năng từ một lớp tính năng hiện có và sao chép chúng sang một lớp tính năng khác. Tôi cần hai công cụ, một cho một điểm và một cho một hình chữ nhật. Các công cụ bổ trợ chỉ xử lý các hình chữ nhật, vì vậy tôi đang cố gắng tạo tọa độ điểm khỏi sự kiện onMouseDown và chỉ cần sử dụng phản hồi X và Y tôi nhận được. Vấn đề là dường như tôi không thể chuyển các tọa độ này cho bất kỳ thứ gì hữu ích để trích xuất các tính năng. Tôi đã thử sử dụng các phạm vi Môi trường và sau đó thực hiện một CopyFeatures đơn giản, nhưng nó không hoạt động vì nó sao chép toàn bộ fc và dường như không tôn trọng các cài đặt môi trường tôi đã đặt.
Tôi có thể chuyển tọa độ cho công cụ Chọn theo Vị trí bằng cách nào đó hoặc có cách nào khác để chuyển tọa độ sang thứ gì đó để trích xuất theo phạm vi đó không?
Đây là những gì tôi có bây giờ:
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
? Nó không được đặt thành bất cứ thứ gì ngoại trừ một chuỗi trống trong mã này. Ngoài ra, đầu vào SelectLayerByLocation
phải là một tham chiếu đến một đối tượng Lớp hoặc tên của một lớp đối tượng trong tài liệu bản đồ hiện tại. ELAtemplate
là một chuỗi chỉ vào một shapefile.
fc
được thiết lập từ một lựa chọn hộp tổ hợp. Vì vậy, tôi đã làm cho toàn cầu. ELAtemplate
là một shapefile ở đây, nhưng tôi đã thử chạy nó trong cửa sổ Python dưới dạng một lớp, shapefile hoặc được kéo từ TOC và không ai trong số chúng hoạt động.
pointGeom
: arcpy.MakeFeatureLayer_management("nsw_map_units","unit_layer")
nơi nsw_map_units
xuất phát từ TOC. Sau đó tôi sử dụng nó để chạy arcpy.SelectLayerByLocation_management('unit_layer',"INTERSECT",pointGeom,"#","ADD_TO_SELECTION")
, nhưng tôi không có lựa chọn nào. Tôi thậm chí đã cố gắng tạo ra một lớp điểm.
pointGeom
không thực sự giao nhau unit_layer
. Có lẽ bạn chỉ cần làm mới quan điểm?