Daha çox

ArcPy istifadə edərək seçilmiş xüsusiyyətlərin atribut cədvəli göstərilir?


Arcpy istifadə edərək seçilmiş xüsusiyyətlərin atribut cədvəlini göstərmək üçün bir yol varmı? Bəlkə Xəritəçəkmə modulundadır?

Bəzi xüsusiyyətləri seçib sonra yalnız seçilmiş xüsusiyyətlər üçün atribut cədvəlini göstərən bir Əlavə düyməsinə sahib olmaq istərdim.

Bunun CİS insanları üçün ilkin göründüyünü başa düşürəm, amma iş üçün xüsusi bir tələbin ehtiyaclarını ödəməyə çalışıram.

İndi bunu tkinter istifadə edərək yalnız lazımi atributları göstərməklə edə bilərəm, amma bir az qarışıqdır və sabit deyil. Bilirəm, sabitlik məsələsi ArcGIS-ə paralel olaraq tkinter istifadə ilə bilinən bir məsələdir. Beləliklə ... Ümid edirəm atribut cədvəlini avtomatlaşdırılmış "üzərində şirkət loqosu olan səliqəli kiçik düymə" şəklində gətirə bilərəm.


Python-da birbaşa COM interop vasitəsilə ArcObjects istifadə etməkdən başqa bunu necə edəcəyimə əmin deyiləm - çətin ki, ən xoş yanaşma. .NET-də bunu etmək daha asandır, lakin sadəlik üçün SDK istəsəniz və yükləmək mümkün deyil - inanıram ki, ArcGIS Desktop yükləmə mediası ilə gəlir? Əlbətdə ki, mütləq bir EDN lisenziyası ilə, amma inşallah əsas Masaüstü lisenziyasına daxil olacaqdır.

Bunu .NET-də etmək üçün Düyməli Əlavə yaratmalısınız. Düymənin içərisində seçilmiş xüsusiyyətləri və bunları ehtiva edən təbəqələri əldə etməlisiniz, sonra bir TableWindow yaradın, ona qat və tətbiq təyin edin və pəncərəni göstərin. ESRI şablonlarından başqa hər şeyi yaratdıqdan sonra yazmaq üçün təxminən 60 satır kod var. SDK-sınız yoxdursa, bunu hələ də edə bilərsiniz, amma əlavə olaraq inkişafın SDK-ya ehtiyacı olduğunu düşünürəm ki, kömək üçün şablonlardan heç biri olmadan ArcObjects genişləndirmə marşrutuna (ICommand və s. Uzanaraq) getməlisiniz.

Əlavə marşrutu ilə gedə bilsəniz, aşağıdakı kod xəritədəki seçimləri olan bütün təbəqələr üçün atribut cədvəlini açacaq və hamısını ShowTableWindowForAllSelected () çağırarkən yalnız seçimlərini göstərmək üçün konfiqurasiya edəcəkdir:

Şəxsi IEnumerable GetFeatureClassesWithSelectedFeatures () {IEnumFeature seçimi = ArcMap.Document.ActiveView.FocusMap.FeatureSelection kimi IEnumFeature; seçim.Reset (); IF xüsusiyyət; Siyahı siniflər = yeni Siyahı(); while ((xüsusiyyət = seçim.Next ())! = boş) {IFeatureClass fClass = xüsusiyyət.FeatureClass kimi sinif; if (fClass! = null &&! classes.Contains (fClass)) {classes.Add (fClass); }} siniflərə qayıtmaq; } xüsusi IEnumerable GetFeatureLayersWithSelectedFeatures () {// yalnız xüsusiyyət təbəqələri üçün sayıcı alın UID uid = new UIDClass (); uid.Value = typeof (IFeatureLayer) .GUID.ToString ("B"); IEnumLayer layerEnum = ArcMap.Document.ActiveView.FocusMap.get_Layers (uid: uid); // bunları bir lüğətə yükləyin, xüsusiyyət sinif qatındaEnEn.Reset (); Lay qat; Lüğət təbəqələr = yeni lüğət(); while ((qat = layerEnum.Next ())! = null) {IFeatureLayer fLayer = (IFeatureLayer) qat; qat.Add (fLayer, fLayer.FeatureClass); } // seçilmiş xüsusiyyətlərlə xüsusiyyət sinifləri əldə edin və IEnumerable xəritədəki xüsusiyyət qatlarına qoşulun fClasses = GetFeatureClassesWithSelectedFeatures (); IEnumerable layerWithSelectedFeatures = layer.Join (fClasses, layerEntry => layerEntry.Value, fClass => fClass, (layerEntry, fClass) => layerEntry.Key) .Distinct () return layerWithSelectedFeatures; } xüsusi boşluq ShowTableWindowForAllSelected () {ITableWindow2 attrWindow = null; // ITableWindow2 windowFinder = yeni TableWindowClass (); IEnumerable qat = GetFeatureLayersWithSelectedFeatures (); foreach (qatlardakı IFeatureLayer qat) {// attrWindow = windowFinder.FindViaLayer (qat); əgər (foundWindow == boş) {foundWindow = yeni TableWindowClass (); foundWindow.Layer = qat; foundWindow.Application = ArcMap.Application; foundWindow.TableSelectionAction = esriTableSelectionActions.esriSelectFeatures; foundWindow.ShowAliasNamesInColumnHeadings = true; } əgər (! foundWindow.IsVisible) foundWindow.Show (true); // pəncərə göründükdən və ya biraz qəribə bir şəkildə davranandan sonra bunu etmək lazım görünür foundWindow.ShowSelected = true; }}

Düyməyə hər basıldıqda yenisini açmaq əvəzinə mövcud atribut pəncərələrindən istifadə etmək istəyirsinizsə, 'windowFinder' istifadə edərək iki sətirdən şərh çıxartın.


Ağırlıqlı cəm və ağırlıqlı örtük alətləri ilə əlaqəli məsələlər

Ağırlıqlı bir cəmi və ya üst üstə yerləşdirə bilmirəm, çünki hüceyrə ölçüsü dəstim olmadığı mesajını alıram - amma əslində bunu təyin etmişəm. Budur bütün prosesim üçün piton (bir modeldən kopyalandı) - və onu qurduğumu görə bilərsiniz. Bu problemi olan hər kəs varmı?

. # Proses: Cinayət, Kernel Sıxlığını çağırır

. arcpy.gp.KernelDensity_sa (PolytoPointCensus, "ZCrimeCalls", ZCrimeCalls, "50", "5280", "SQUARE_MAP_UNITS", "DENSITIES", "PLANAR")

. # Proses: Yoxsulluğun Kernel Sıxlığı

. arcpy.gp.KernelDensity_sa (PolytoPointCensus__3_, "ZPovRate", ZPoverty_Rate, "50", "5280", "SQUARE_MAP_UNITS", "DENSITIES", "PLANAR")

. # Proses: Kütləvi Mülk Kernel Sıxlığı

. arcpy.gp.KernelDensity_sa (PolytoPointCensus__2_, "ZPublicHousing", ZPublic_Hoving, "50", "5280", "SQUARE_MAP_UNITS", "DENSITIES", "PLANAR")

. arcpy.env.mask = "Little Rock Bələdiyyə Sərhədləri"

. arcpy.gp.WeightedSum_sa ("C: SpatialAnalysisClassProject LR911Calls.gdb ZCrimeCalls VALUE 0.33C: SpatialAnalysisClassProject LR911Calls.gdb ZPovertyRate VALUE 0.33C: SpatialAnsis DƏYƏR 0.33 ", Weighte_ZCri1)

Çalışma vaxtı xətası Traceback (son zəng): "& ltstring & gt" faylı, sətir 36, & ltmodule & gt File "c: program files (x86) arcgis desktop10.4 arcpy arcpy geoprocessing _base.py", sətir 506 , & ltlambda & gt return lambda * args: val (* gp_fixargs (args, True)) ExecuteError: ERROR 010050: Hücre ölçüsü təyin edilməyib. İcra edilmədi (WeightedSum).

DanPatterson_Re tərəfindən yorğun

Model, parametrləri və funksiyaları yenidən tənzimləmədən bir skriptə bir model ixrac etdiyiniz zaman baş verən biraz sıradan çıxmışdır. Problemin ssenarinin alt hissəsində olduğunu düşünürəm. Bu sətirləri altına yaxın şərh edərdim

və bunu altındakı yuxarıya yaxınlaşdırın. arcpy idxal edin. arcpy.env.cellSize = "50"

Pitonda o qədər də böyük deyiləm. amma bu kimi? Əgər belədirsə, yenə də uğursuz oldu. Mən də tək alətləri çalıştırdığımda uğursuz olur. Və cavabınız üçün təşəkkür edirəm!

. # Proses: Cinayət, Kernel Sıxlığını çağırır

. arcpy.gp.KernelDensity_sa (PolytoPointCensus, "ZCrimeCalls", ZCrimeCalls, "50", "5280", "SQUARE_MAP_UNITS", "DENSITIES", "PLANAR")

. # Proses: Yoxsulluğun Kernel Sıxlığı

. arcpy.gp.KernelDensity_sa (PolytoPointCensus__3_, "ZPovRate", ZPoverty_Rate, "50", "5280", "SQUARE_MAP_UNITS", "DENSITIES", "PLANAR")

. # Proses: Kütləvi Mülk Kernel Sıxlığı

. arcpy.gp.KernelDensity_sa (PolytoPointCensus__2_, "ZPublicHousing", ZPublic_Hoving, "50", "5280", "SQUARE_MAP_UNITS", "DENSITIES", "PLANAR")

. arcpy.env.mask = "Little Rock Bələdiyyə Sərhədləri"

. arcpy.gp.WeightedSum_sa ("C: SpatialAnalysisClassProject LR911Calls.gdb ZCrimeCalls VALUE 0.33C: SpatialAnalysisClassProject LR911Calls.gdb ZPovertyRate VALUE 0.33C: SpatialAnsis DƏYƏR 0.33 ", Weighte_ZCri1)

Çalışma vaxtı xətası Traceback (son zəng): "& ltstring & gt" faylı, sətir 35, & ltmodule & gt File "c: program files (x86) arcgis desktop10.4 arcpy arcpy geoprocessing _base.py", sətir 506 , & ltlambda & gt return lambda * args: val (* gp_fixargs (args, True)) ExecuteError: ERROR 010050: Hücre ölçüsü təyin edilməyib. İcra edilmədi (WeightedSum).

DanPatterson_Re tərəfindən yorğun

kernel sıxlığının nömrələrə ehtiyacı var, yəni KernelDensity ("rec_sites.shp", "NONE", 45, 1200, "SQUARE_KILOMETERS")

Arcmapın hansı versiyası? sintaksisinizi kömək faylı ilə müqayisə edin. Kömək sənədlərində tapılan arcpy sintaksisinizlə başlayacağam və model nəticəsini atlayacağam.

Yardım sənədindəki sintaksisdən istifadə etdim və demək olar ki, eyni şeyi aldım. Maraqlıdır, başqa birisi ağırlıqlı cəm alətini işlədərkən problem yaşayır? Cəhd edə bilərsiniz? 10.4 istifadə edirəm

. WSumTableObj = WSTable ([[inRaster1, "VALUE", 0.33], [inRaster2, "VALUE", 0.33],