ArcMap / ArcPy Kullanarak Çok Katmanlı Sembolojiyi Değiştirme?


10

ArcMap veya ArcCatalog'da birden çok katman için sembolojiyi değiştirmenin bir yolu var mı? Birden çok katmanın sembolojisini aynı anda değiştirmek istiyorum.


3
ApplySymbologyFromLayer kullanarak gerçekten basit bir komut dosyası yapabilirsiniz . Tek yapmanız gereken katmanları iletişim kutusuna sürükleyip bırakmaktır.
Roy

Birden çok katmandan oluşan bir lyr dosyası oluşturup içine sürüklerseniz (veya veri ekle düğmesinden eklerseniz), lyr'e kaydedilen tüm semboloji ve etiketleme ayarlarını uygular. Mevcut katmanlara uygulamadığınızı ancak bu yöntemle tekrar getirdiğinizi unutmayın.
Brad Nesom

@ BradNesom- Öneri için teşekkürler ama özellikle zaten TOC içinde olan çoklu katmanların sembolojisini değiştirmekten bahsediyorum. Temel olarak TOC içindeki bir (mevcut) katmandan TOC'deki diğer birçok (mevcut) katmana semboloji "Şablonu" uygulamak.
RyanKDalton

2
Neden bu işlevin ArcMap için yerleşik olmadığını
şaşırtıyor

neden sadece tüm katmanları bir araya getirip o katmanın rengini değiştirmiyorsunuz?
Robert

Yanıtlar:


11

Düzenle Elinizdeki görevi tamamlamak için ESRI tarafından sağlanan bu komut dosyasını kullanabilirsiniz (aşağıdaki ile aynı fikir):

import arcpy
arcpy.ApplySymbologyFromLayer_management("in_layer", "in_symbology_layer")

in_layer: Sembolojinin uygulanacağı katman.
Özellik Katmanı; Raster Katmanı; TIN Katmanı; Ağ Analiz Katmanı

in_symbology_layer: Bu katmanın sembolojisi Giriş Katmanına uygulanır.
Özellik Katmanı; Raster Katman; TIN Katman; Ağ Analizi Katmanı

Veya bunu bağımsız komut dosyası oluşturma biçiminde genişletin (IDLE düşünün):

import arcpy
from arcpy import env

# Set the current workspace
env.workspace = "path/to/workspace"

# Set layer to apply symbology to
inputLayers = ["in_layer_first.lyr","in_layer_second.lyr","in_layer_third.lyr"]

# Set layer that output symbology will be based on
symbologyLayer = "in_symbology_layer.lyr"

# Apply the symbology from the symbology layer to the input layer
for layer in inputLayers:
    arcpy.ApplySymbologyFromLayer_management (layer, symbologyLayer)

Özünde, tasarım / stile göre sürdürdüğünüz bir semboloji katmanı (in_symbology_layer) oluşturursunuz. Ardından, bu katman sembolojisini içindekiler tablosunda listelendiği gibi diğer katmanlarınızın her birine kopyalayın.


Önceki Cevap

İçindekiler / katman listenizdeki geçerli bir katmandan bir stil kullanabilir ve bunu diğer katmanlarınıza uygulayabilirsiniz.

Sonraki her katman için (amaçladığınız stil katmanının altında)> sağ tıklayın> özellikler> semboloji> stili diğer katmandan içe aktarın


Merhaba Michael, Cevabınız için teşekkürler ama aynı anda birden fazla katman için yapmak istiyordum.
Ramakrishna Billakanti

Ramakrishna, cevabımı, arcpy ile daha iyi bir çözüm bulmanızı umarak düzenledim.
Michael Markieta

13

Aynı sorunu yaşadım ve başka bir çözüm buldum. Basit ve gerçekten pratik, bir * .lyr dosyası oluşturulmasına bile gerek yok.

ArcGIS ModelBuilder editör kutusunda aşağıdaki süreci tasarladım:

  1. Veri türünü 'katman' olarak tanımlayan bir değişken oluşturun. Özelliklerinde “değerler listesi” ve “Model parametresi” olarak ayarlanmıştır. (İsteğe bağlı: Nesneyi daha kolay tanımlamak için “Sembolize edilecek katmanlar” olarak yeniden adlandırın).
  2. Veri türünü 'katman' olarak tanımlayan bir değişken oluşturun. Özelliklerinde “Model parametresi” olarak ayarlanmıştır. (İsteğe bağlı: “Semboloji Katmanı” olarak yeniden adlandırın).
  3. Genellikle 'C: \ Program Files \ ArcGIS \ Desktop10.2 \ ArcToolbox \ Toolboxes \ Data Management Tools.tbx \ Layers and Table Views' içinde “Katmandan Semboloji Uygula” aracını ekleyin. (İsteğe bağlı: Çıktı nesnesini “Sembolize Katmanlar” olarak yeniden adlandırın).
  4. 'Sembolojiyi Katmandan Uygula' aracının Özellikleri'nde Ön Koşullar olarak işaretleyin: “Sembolize edilecek katmanlar” ve “Semboloji Katmanı”.
  5. “Sembolize edilecek katmanlar” ı Giriş Katmanı olarak ayarlayan araca bağlayın.
  6. “Semboloji Katmanı” nı Giriş Katmanı olarak ayarlayan araca bağlayın.
  7. Model düzenleyici penceresini kaydedin ve kapatın.
  8. Modeli açtığınızda bir tablo görünecektir.
  9. Semboloji şablonu olarak kullanılacak katmanı, harita projesinin içindekiler tablosundan (TOC) sürükleyin ve ilgili tablo alanına bırakın. 'Değerleri kontrol et' düğmesini tıklayın.
  10. İçindekiler'in birden çok katmanını seçin, sürükleyip ilgili tablo alanına bırakın. 'Değerleri kontrol et' düğmesini tıklayın.
  11. Çalıştır.
  12. Harita görüntüsünü yenilemek için F5'e tıklayın.

Notlar: Aynı anda farklı türde geometrilerin katmanlarını kullanırsanız muhtemelen çalışmaz. Aynı ada sahip bir kerede katmanlar kullanırsanız iyi çalışmaz. Vektör olmayan katmanlarla denemedim.

Model oluşturucudaki adımlar.

Modeli çalıştırırken izlenecek adımlar.

Modelin pythonuna dışa aktarılan komut dosyası:

 # Import arcpy module
import arcpy

# Script arguments
Layers_to_symbolize = arcpy.GetParameterAsText(0)

Symbology_Layer = arcpy.GetParameterAsText(1)

# Local variables:
Symbolized_Layers = Layers_to_symbolize

# Process: Apply Symbology From Layer
arcpy.ApplySymbologyFromLayer_management(Layers_to_symbolize, Symbology_Layer)

1
En azından ArcGIS 10.2 için, 6. adım "
Symbology Layer'ı

Python kullanıyordum ve iyi koşan döngü için güzel bir şey yaptım, ancak sembolojimi güncellemedi. Önce .mdx belgesini açmanız, df'yi ayarlamanız, sembolojiyi güncellemeniz, sonra sembolojiyi değiştirmeniz gerekiyor. Daha sonra Model Builder'ı kullanarak (aslında Python betiğimi bu şekilde oluşturdum) cevap 2'yi gördüm. Bu WAY daha kolay ve daha az zaman harcayan bir şeydi, ayrıca artık başka bir veri seti için bunu yapabilmem için kaydedilmiş bir aracım var.
Heidi Kilisesi

1
Model Oluşturucu'da 'Katmandan Semboloji' aracını koymak yerine, Araç Kutusunda sağ tıklayıp Batch
Sir Adelaide

8

@Aaron'un mesajından hemen önce, @Roy'daki bilgileri, am ArcToolbox komut dosyasına dahil edebileceğim kendi çözümümü oluşturmak için kullandım. Aşağıya bakınız:

# Import modules
import arcpy

#Get the current Map Document
mxd = arcpy.mapping.MapDocument("CURRENT")

# Script arguments
Template_Layer = arcpy.GetParameterAsText(0)
LayerList = arcpy.GetParameterAsText(1)
Layers_to_Symbolize = LayerList.split(";")

# Process: Apply Symbology From Layer
for UpdateLayer in Layers_to_Symbolize:
    arcpy.AddMessage("Updating: " + UpdateLayer)
    arcpy.ApplySymbologyFromLayer_management(UpdateLayer,Template_Layer)

# Refresh the Table of Contents to reflect the change
arcpy.RefreshTOC()

#Delete the MXD from memory
del mxd

Bu kavramı, araç çubuğundaki 10.1 Python Eklentisi için potansiyel bir araç olarak görebiliyordum.


4

Aşağıda bağlantılı araç kutusunu kullanarak birden çok katman sembolojisini tek seferde etkinleştirmenin oldukça basit bir yolunu buldum. Bu araç kutusunu ekledikten sonra, tek semboloji katmanını sürükleyip bırakın ve ardından sembolojiyi (hedefler) uygulamak istediğiniz tüm katmanları sürükleyip bırakın. Coğrafi türün eşleştirilmesine ilişkin genel kurallar (çizgiler, noktalar, polisler) büyük olasılıkla burada geçerlidir. Araç çalıştıktan sonra hiçbir şey olmadıkça görünür. Ekranınızı yenileyin (F5) - ekran eşleşen semboloji ile güncellenir. Özelliklerini görüntülemek için bir katmanı tıklayın ve "Tamam" ı tıklayın, TOK sembolü güncellenecektir.

Araç kutusu için Zip dosyasını buradan indirin.

Bu daha kolaysa komut dosyası:

import arcpy

# Script arguments
Target_Layers = arcpy.GetParameterAsText(0)
if Target_Layers == '#' or not Target_Layers:
Target_Layers = "LayersToBeChanged" # provide a default value if unspecified

Symbology_Layer = arcpy.GetParameterAsText(1)
if Symbology_Layer == '#' or not Symbology_Layer:
Symbology_Layer = "SymbologyLayer" # provide a default value if unspecified

# Local variables:
Output_Symbology = Symbology_Layer

# Process: Apply Symbology From Layer (3)
arcpy.ApplySymbologyFromLayer_management(Target_Layers, Symbology_Layer)
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.