アドインのツールバーにツールを追加して、既存のフィーチャクラスからフィーチャを選択し、それらを別のフィーチャクラスにコピーしようとしています。ポイント用と長方形用の2つのツールが必要です。アドインツールは四角形のみを処理するため、onMouseDownイベントからポイント座標を生成し、取得したXおよびYフィードバックを使用しようとしています。問題は、これらの座標を機能の抽出に役立つものに渡すことができないように見えることです。環境エクステントを使用してから単純なCopyFeaturesを実行しようとしましたが、fc全体をコピーし、設定した環境設定を反映していないため、機能しません。
位置選択ツールに何らかの方法で座標を渡すことはできますか、またはその範囲で抽出するために座標を何かに渡す別の方法はありますか?
これは私が今持っているものです:
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
設定されていますか?このコードでは、空の文字列以外は何も設定されていません。また、への入力はSelectLayerByLocation
、レイヤーオブジェクトへの参照または現在のマップドキュメントのフィーチャレイヤーの名前である必要があります。ELAtemplate
シェープファイルを指す文字列です。
fc
コンボボックスの選択から設定されます。だから私はそれをグローバルにしました。 ELAtemplate
ここではシェープファイルですが、これをPythonウィンドウでレイヤー、シェープファイルとして実行するか、目次からドラッグしてみましたが、どれも機能しません。
pointGeom
: arcpy.MakeFeatureLayer_management("nsw_map_units","unit_layer")
どこnsw_map_units
TOCから来ています。その後、それを使用してを実行しますがarcpy.SelectLayerByLocation_management('unit_layer',"INTERSECT",pointGeom,"#","ADD_TO_SELECTION")
、何も選択されません。物理的にポイントレイヤーを作成することも試みました。
pointGeom
実際に交差しない限り、それが機能しない理由はわかりませんunit_layer
。おそらく、ビューを更新するだけですか?