ArcMap mizanpaj göstergelerinin sembol açıklamalarını tablodan mı ayarlıyorsunuz?


Yanıtlar:


7

Sadece ArcMap uygulamasını kullanmaya çalışmak yerine, ArcPy'yi resme getirdim.

Ben sadece test ve yazılabilir classDescription özelliği ayarlanabilir olan UniqueValuesSymbology (arcpy.mapping) sınıfı kullanarak açıkladığınız elde :

İsteğe bağlı olarak bir harita belgesinin göstergesinde görünebilen her bir benzersiz değerin açıklamalarını temsil eden dizelerin veya sayıların listesi. Bu değerlere ArcMap kullanıcı arayüzünde yalnızca Katman Özellikleri iletişim kutusundaki Semboloji sekmesinde görüntülenen bir simgeye sağ tıklayıp Açıklamayı Düzenle seçilerek erişilebilir. ClassDescription listesinin aynı sayıda öğeye sahip olması ve classValues ​​özelliğiyle aynı sırada düzenlenmesi gerekir.

Kod , arama tablosunu bir liste halinde okumak için bir Arama İmleci kullanır ve ardından bu listeyi katmanın semboloji sınıfının classDescription özelliğine yazar. Not arama tablosu satır aynı sayıda ve benzersiz semboloji sınıflandırma değerlerinin aynı sırada OLMALIDIR . Kodumun durumun böyle olmadığını ancak test durumumda bu siparişin manuel olarak olduğundan emin olmasını sağlamak için geliştirilmesi gerekir.

import arcpy

vegDescList = []
vegCodes = arcpy.SearchCursor(r"C:\temp\test.gdb\LookupTable")
for vegCode in vegCodes:
    vegDescList.append(vegCode.Description)

mxd = arcpy.mapping.MapDocument(r"C:\temp\test.mxd")
lyr = arcpy.mapping.ListLayers(mxd,"testFC")[0]
if lyr.symbologyType == "UNIQUE_VALUES":
    lyr.symbology.classDescriptions = vegDescList
mxd.save()

del mxd

Bunun işe yarayıp yaramayacağını görmek için bazı test kodlarını bir araya getirdim ve hiçbir hata oluşturulmamasına rağmen güncellenmiş açıklamalar katmana geri dönmez. Ben haritalama konusunda yeniyim, bu yüzden muhtemelen yanlış yaptığım bir şey.
Michael Stimson

İşe yarıyor mu? MapDocument ("current") ve RefreshActiveView () / RefreshTOC () kullanıyorum dışında çok aynı var ama hiçbir şey güncellenir.
Michael Stimson

1
@ MichaelMiles-Stimson Evet - amaçlandığı gibi güncellendi - Kaçırdığınız şeyin Açıklama değerlerini gösteren İçindekiler değil, Gösterge Düzeni Öğesi olduğundan şüpheleniyorum. Bunlardan birini ekleyin ve Açıklamaları görüntüleyen bir Efsane Öğe Stili seçin ve bence işe yarayacağı netleşecektir.
PolyGeo

Teşekkürler @polygeo! Aynen öyle! Baştan sona yapıyordum sadece yanlış yere bakıyordum.
Michael Stimson

Açıklamaları ve arama kodlarını eşleştirme yapmak sorununu çözdüm, cevabımı görün.
matt wilkie

1

Sembollerinizi "Benzersiz Değerler Birçok Alan" ile sınıflandırabilir ve kod için bir alan ve daha uzun açıklama için ikinci alan seçebilir misiniz? Bu, her öğeyi "[Alan1], [Alan2]" biçiminde bir dize ile etiketlemelidir

Daha küçük alanlarla çalışır, bilmediğim bir sınırlama olmadığı sürece daha uzun dizelerle olacağını hayal ediyorum.

Tek can sıkıcı kısım, kod değerini etiket değerinin başından itibaren silmek ve silmek zorunda kalabileceğinizdir, ancak bu şimdiye kadar olan en kötü şey olmayacaktır.


Bazı durumlarda işe yarayabilecek ilginç bir fikir. Ancak burada çalışmaz, çünkü açıklama tablosu sadece bir tablodur, geometri yoktur. Biri geometri ve açıklamalara katılabilir, ancak bu proje için ekstra iş veya performans hitiyle ilgilenmiyorum.
matt wilkie

1

PolyGeo'nun kodundan çalışarak, tam olarak öğe sayısına ve arama değerleri ile açıklama arasında aynı sipariş eşleşmesine sahip olma sorununu çözmek için buldum. Tam çalışma betiği burada .

# name and path of the lookup table
lookup_table = r"..\default.gdb\vegMajorComm_Lookup"

# change these to match the relevant field names in the lookup table
code = 'VegCode'
description = 'Description'

##...snip...

# build the descriptions dictionary
descriptions = {}
rows = arcpy.SearchCursor(lookup_table)
for item in rows:
    #print item.getValue(code), item.getValue(description)
    descriptions[item.getValue(code)] = item.getValue(description)

# lyr.symbology requires the classValues and classDescriptions to have
# same number of rows and be in same order. So extract only matching 
# elements from the description dictionary
desclist = []
if lyr.symbologyType == "UNIQUE_VALUES":

    #extract matches
    for symbol in lyr.symbology.classValues:
      desclist.append(descriptions[symbol])    

    # assign the descriptions
    lyr.symbology.classDescriptions = desclist

mxd.saveACopy(output_map)
del mxd
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.