Daha çox

Arc Python əlavə et - dinamik birləşmə doldurun

Arc Python əlavə et - dinamik birləşmə doldurun


İlk python əlavə etməyə çalışıram. Nə etmək istərdim, bir xüsusiyyət sinifinə baxmaq, şəhər sahəsinə baxmaq. İstifadəçi bir şəhər seçdikdə, bir sonrakı açılan qutunun LABELTEXT sahəsindəki həmin şəhərdəki bütün dəyərləri doldurmasını və bir LABELTEXT -in o pis uşağa yaxınlaşdırılmasını istədiyim zaman istəyirəm.

Şəhərin ComboClass2 sinfinə necə qaytarılacağını və ya şəhərin nəticəsinə əsasən süzülməsi üçün sorğu necə qurulacağını bilmirəm.

sinif ComboBoxClass1 (obyekt): "" "addin2_addin.combobox (ComboBox)" "üçün tətbiq ___ __ (özünü): self.editable = True self.enabled = True self.dropdownWidth = 'WWWWWWWWWWWWW' self.width = 'WWWW' def onSelChange (özünü, seçimi): qat = arcpy.mapping.ListLayers (mxd, "block_cards", df) [0] a = arcpy.SelectLayerByAttribute_management (qat, "NEW_SELECTION", "town = '" + select + "'" "'") bir df.extent = layer.getSelectedExtent () arcpy.RefreshActiveView () def onFocus (öz -özünə, fokuslanmış) qaytarın: qlobal mxd mxd = arcpy.mapping.MapDocument (' cari ') qlobal df df = arcpy.mapping. ListDataFrames (mxd, "Layers") [0] qat = arcpy.mapping.ListLayers (mxd, "block_cards", df) [0] arcpy.SelectLayerByAttribute_management (qat, "CLEAR_SELECTION") self.items = [] dəyərlər = [satır [0] arcpy.da.SearchCursor (qat, ["şəhər"])] üçün sıralanmış (set (dəyərlər)) üçün unikalVal üçün: self.items.append (uniqueVal) sinif ComboBoxClass2 (obyekt): "" "İcra addin2_addin.combobox (ComboBox) üçün "" "de f __init __ (özünü): self.editable = Həqiqi özünü.enabled = Əsl özünü.dropdownWidth = 'WWWWWW' self.width = 'WWWWWW' def onSelChange (özünü, seçimi): qat = arcpy.mapping.ListLayers (mxd, "block_cards) ", df) [0] arcpy.SelectLayerByAttribute_management (qat," NEW_SELECTION "," town = '" + ComboBoxClass1.onSelChange () +"' AND LABELTEXT = '" + selection +"' ") df.extent = layer.getSelectedExtent () arcpy.RefreshActiveView () def onFocus (özünəməxsus): qlobal mxd mxd = arcpy.mapping.MapDocument ('cari') qlobal df df = arcpy.mapping.ListDataFrames (mxd, "Layers") [0] qat = arcpy.mapping.ListLayers (mxd, "block_cards", df) [0] arcpy.SelectLayerByAttribute_management (qat, "CLEAR_SELECTION") self.items = [] dəyərlər = [satır [0] arcpy.da.SearchCursordakı satır üçün (qat) , ["LABELTEXT"])] unikalVal üçün sıralanmışdır (set (dəyərlər)): self.items.append (uniqueVal)

Cavablara görə hər kəsə təşəkkür edirəm. geonetdən daha yaxşıdır. Aşağıdakı kodla manyak kimi görünə bildim.

sinif ComboBoxClass1 (obyekt): "" "addin2_addin.combobox (ComboBox)" "üçün tətbiq ___ __ (özünü): self.editable = True self.enabled = True self.dropdownWidth = 'W' * 16 self.width = ' W ' * 16 mxd = arcpy.mapping.MapDocument ("CARİ") self.mxd = arcpy.mapping.MapDocument ("CARİ") self.df = arcpy.mapping.ListDataFrames (mxd) [0] defSelChange (özünü, seçim): qat = arcpy.mapping.ListLayers (self.mxd, "block_cards", self.df) [0] a = arcpy.SelectLayerByAttribute_management (qat, "NEW_SELECTION", "town = '{}'". format (seçim) )) self.df.extent = layer.getSelectedExtent () arcpy.RefreshActiveView () def onFocus (self, focused): layer = arcpy.mapping.ListLayers (self.mxd, "block_cards", self.df) [0] arcpy .SayLayerByAttribute_management (qat, "CLEAR_SELECTION") self.items = sıralanmış (siyahı (set (filter (Yoxdur, [satır [0] arcpy.da.SearchCursor (qat, ["şəhər"]))))))) sinif ComboBoxClass2 (obyekt): "" "addin2_addin.combobox (ComboBox) üçün tətbiq" "__ ___ __ (özünü): self.edita ble = True self.enabled = True self.dropdownWidth = 'W' * 6 self.width = 'W' * 6 mxd = arcpy.mapping.MapDocument ("CARİ") self.mxd = arcpy.mapping.MapDocument ('cari ') self.df = arcpy.mapping.ListDataFrames (mxd) [0] def onSelChange (self, selection): layer = arcpy.mapping.ListLayers (self.mxd, "block_cards", self.df) [0] arcpy. SelectLayerByAttribute_management (qat, "NEW_SELECTION", "town = '{}' AND LABELTEXT = '{}'". Format (combobox.value, selection)) self.df.extent = layer.getSelectedExtent () arcpy.RefreshActiveView () def onFocus (özünü, odaklanmış): qat = arcpy.mapping.ListLayers (self.mxd, "block_cards", self.df) [0] arcpy.SelectLayerByAttribute_management (qat, "CLEAR_SELECTION") ifadəsi = "şəhər = '{}'" .format (combobox.value) self.items = çeşidlənmiş (siyahı (set (filter (yox), [satır [0] arcpy.da.SearchCursordakı satır üçün (qat, ["LABELTEXT"], burada_clause = ifadə)])) ))

ComboboxClass1 dəyərinizdən dəyər əldə etmək üçün həmin sinif üçün config.xml -ə baxmalısınız və dövrdən sonra nə varsa istinad etməlisiniz. Birdən çox combobox-unuz olduğuna görə, Əlavəni qurduqdan sonra bu siniflərin unikal adlara malik olduğundan əmin olmaq istərdiniz.

EDIT:

Deyilənə görə, combobox -dan tapşırıqları yerinə yetirmək istəmirsiniz. Bunun əvəzinə, istifadəçinin iki kombinasiya qutusundan dəyərlər seçməsini və sonra sorğunu icra etmək üçün bir düyməyə sahib olmasını istəyə bilərsiniz. Buna görə əlavə etmək sihirbazına qayıdaraq onu işə salmaq üçün bir düymə yaradardım.

Bunu belə edərdim:

idxal arcpy idxal pythonaddins sinif Query (obyekt): "" "addin2_addin.button (Button) üçün tətbiq" "" __ ___ __ (self): self.enabled = True self.checked = False self.mxd = arcpy.mapping.MapDocument ( 'current') self.df = self.mxd.activeDataFrame self.layer = arcpy.mapping.ListLayers (self.mxd, "block_cards", self.df) [0] def onClick (self): # select arcpy.SelectLayerByAttribute_management (self.layer, "NEW_SELECTION", "town = '{}' AND LABELTEXT = '{}'". format (combobox.value, combobox_1.value)) #bunların özünəməxsus adlar olduğunu fərz etsək self.df.extent = self .layer.getSelectedExtent () arcpy.RefreshActiveView () sinif ComboBoxClass1 (object): "" "addin2_addin.combobox (ComboBox)" "üçün tətbiq __ __ __ (özünü): self.editable = True self.enabled = True self.dropdownWidth = 'W' * 16 self.width = 'W' * 16 def onSelChange (öz -özünə, seçim): mxd = arcpy.mapping.MapDocument ('cari') qat = arcpy.mapping.ListLayers (mxd, "block_cards", df ) [0] arcpy.SelectLayerByAttribute_management (l ayer, "CLEAR_SELECTION") self.mxd = arcpy.mapping.MapDocument ('current') self.df = self.mxd.activeDataFrame self.layer = arcpy.mapping.ListLayers (self.mxd, "block_cards", self.df) ) [0] arcpy.RefreshActiveView () def onFocus (self, focus): layer = arcpy.mapping.ListLayers (self.mxd, "block_cards", df) [0] self.items = sıralanmış (siyahı (set (filter) Yox, [satır [0] arcpy.da.SearchCursor (qat, ["şəhər"])])))) ComboBoxClass2 sinif (obyekt): "" "addin2_addin.combobox (ComboBox)" "üçün tətbiq __init __ (özünü): self.editable = True self.enabled = True self.dropdownWidth = 'W' * 6 self.width = 'W' * 6 self.mxd = arcpy.mapping.MapDocument ('cari') self.layer = arcpy.mapping.ListLayers (self.mxd, "block_cards", self.df) [0] defSelChange (öz, seçim): arcpy.SelectLayerByAttribute_management (self.layer, "CLEAR_SELECTION") arcpy.RefreshActiveView () defc özünü, fokuslanmış): self.items = sıralanmış (siyahı (ayarla (filtr (Yoxdur, [satır [0] arcpy.da.SearchCursordakı satır üçün (özünü.layer, ["LABELTEXT"]))])) ))

Combobox sinif adlarını config.xml-də keçmişdə qurduğum Əlavə kimi tapa bilərsiniz:

Keçmişdə yaratdığım, əlaqəsiz xüsusiyyətlər tapan və 2 combobox istifadə edən bir Əlavənin nümunəsidir. Mükəmməl olmaya bilər, ancaq 2 kombinasiya qutusu və düymədən istifadə nümunəsini göstərir:

idxal arcpy idxal pythonaddins sinif Query (obyekt): "" "FindUnconnectedFeatures_addin.button (Düymə)" "üçün həyata keçirilmə __init __ (özünü): self.enabled = True self.checked = Yanlış def onClick (özünü): mxd = arcpy. mapping.MapDocument ('Cari') df = mxd.activeDataFrame targ = arcpy.mapping.ListLayers (mxd, combobox.value) [0] source = arcpy.mapping.ListLayers (mxd, combobox_1.value) [0] sel = ' INTERSECT ' # yeri ilə seç arcpy.SelectLayerByLocation_management (targ, sel, source) arcpy.SelectLayerByAttribute_management (targ,' SWITCH_SELECTION ') class SourceLayer (object): "" FindUnconnectedFeatures_1 Combo "(___adin.combob)" " ): self.items = [] self.editable = True self.enabled = True self.dropdownWidth = 'W' * 12 self.width = 'W' * 12 def onSelChange (öz, seçim): pass def onEditChange (özünü, mətn): pass def onFocus (özünü, fokuslanmış): diqqət mərkəzindədirsə: self.mxd = arcpy.mapping.MapDocument ('cari') self.df = self.mxd.activeDataFrame lyrs = [l.name for l in arcpy.mapping.ListLayers (self.mxd, '*', self.df) if not l.isBroken and l.supports ('DATASOURCE')] self.items = sorted (lyrs) del self.mxd def onEnter ( self): pass def refresh (self): pass class TargLayer (object): "" "FindUnconnectedFeatures_addin.combobox (ComboBox) üçün tətbiq" "" __ ___ __ (özünü): self.items = [] self.editable = Əsl mənlik. effektiv = True self.dropdownWidth = 'W' * 12 self.width = 'W' * 12 def onSelChange (özünü, seçimi): pass def onEditChange (özünü, mətn): pass def onFocus (özünü, fokuslanmış): diqqət mərkəzindədirsə: self.mxd = arcpy.mapping.MapDocument ('cari') self.df = self.mxd.activeDataFrame lyrs = [l.name in l in arcpy.mapping.ListLayers (self.mxd, '*', self.df) yoxsa l.isBroken və l.supports ('DATASOURCE')] self.items = sorted (lyrs) del self.mxd def onEnter (self): pass def refresh (self): pass

Videoya baxın: String Text with Sequential Number Using Python in ArcGIS Bangla - বল