Mengubah Simbologi Beberapa Lapisan menggunakan ArcMap / ArcPy?

10

Apakah ada cara untuk mengubah simbologi untuk banyak lapisan di ArcMap atau ArcCatalog. Saya ingin mengubah simbologi beberapa lapisan sekaligus.

Ramakrishna Billakanti
sumber
3
Anda bisa membuat alat skrip yang sangat sederhana menggunakan applySymbologyFromLayer . Yang harus Anda lakukan adalah drag dan drop layer ke dalam kotak dialog.
Roy
Jika Anda membuat file lyr dari beberapa layer dan menariknya (atau menambahkannya dari tombol add data), file itu akan menerapkan semua simbologi, dan memberi label pengaturan yang disimpan dalam lyr. Perhatikan bahwa Anda tidak menerapkannya pada lapisan yang ada tetapi bawa lagi dengan metode ini.
Brad Nesom
@ BradNesom- Terima kasih atas sarannya tetapi saya secara khusus berbicara tentang mengubah simbologi dari beberapa lapisan yang sudah ada di TOC. Pada dasarnya menerapkan "Templat" simbologi dari satu lapisan (yang ada) di TOC ke banyak lapisan lain (yang ada) di TOC.
RyanKDalton
2
Ini membuat saya heran mengapa fungsi ini tidak ada di dalam ArcMap ...
jbaums
mengapa tidak hanya menggabungkan semua layer menjadi satu, dan kemudian mengubah warna dari satu layer itu?
Robert

Jawaban:

11

Sunting Anda dapat menggunakan skrip ini yang disediakan oleh ESRI untuk menyelesaikan tugas yang ada (ide yang sama seperti di bawah ini):

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

in_layer: Lapisan di mana simbologi akan diterapkan.
Lapisan Fitur; Lapisan Raster; Lapisan TIN; Lapisan Analisis Jaringan

in_symbology_layer: Simbologi dari layer ini diterapkan ke Layer Input.
Lapisan Fitur; Lapisan Raster; Lapisan TIN; Lapisan Analisis Jaringan

Atau perluas ini dalam bentuk skrip mandiri (pikirkan IDLE):

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)

Intinya, Anda membuat layer simbologi (in_symbology_layer) yang Anda pertahankan sehubungan dengan desain / gaya. Kemudian Anda menyalin lapisan simbologi ke masing-masing lapisan Anda yang lain seperti yang tercantum dalam daftar isi Anda.


Jawaban Sebelumnya

Anda dapat menggunakan gaya dari lapisan saat ini di daftar isi / lapisan dan menerapkannya ke lapisan lain.

Untuk setiap lapisan berikutnya (di bawah lapisan gaya yang Anda tuju)> klik kanan> properti> simbologi> gaya impor dari lapisan lain

Michael Markieta
sumber
Halo Michael, Terima kasih atas jawabannya, tetapi saya ingin melakukannya untuk beberapa lapisan sekaligus.
Ramakrishna Billakanti
Ramakrishna, saya telah mengedit jawaban saya dengan harapan Anda menemukan solusi yang lebih baik melalui arcpy.
Michael Markieta
13

Saya memiliki masalah yang sama dan saya menemukan solusi lain. Ini sederhana dan sangat praktis, bahkan tidak perlu membuat file * .lyr.

Dalam kotak editor ArcGIS ModelBuilder, saya merancang proses di bawah ini:

  1. Buat variabel, tentukan tipe data menjadi 'lapisan'. Dalam propertinya ditetapkan sebagai "daftar nilai" dan "Parameter model". (Opsional: Ubah nama objek menjadi "Lapisan untuk dilambangkan", menjadi identifikasi yang lebih mudah).
  2. Buat variabel, tentukan tipe data menjadi 'lapisan'. Dalam propertinya ditetapkan sebagai "Parameter model". (Opsional: Ganti nama menjadi "Symbology Layer").
  3. Tambahkan Alat "Terapkan Simbologi Dari Lapisan", biasanya dalam 'C: \ Program Files \ ArcGIS \ Desktop10.2 \ ArcToolbox \ Toolboxes \ Data Management Tools.tbx \ Layers and Table Views'. (Opsional: Ganti nama objek keluaran menjadi "Lapisan Simbol").
  4. Dalam Properties alat 'Terapkan Symbology From Layer' centang sebagai Prasyarat: "Layers to melambangkan" dan "Symbology Layer".
  5. Hubungkan "Layers to symbolize" ke alat pengaturannya sebagai Input Layer.
  6. Hubungkan "Symbology Layer" ke alat pengaturannya sebagai Input Layer.
  7. Simpan dan tutup jendela model editor.
  8. Membuka model, sebuah tabel akan muncul.
  9. Seret layer untuk digunakan sebagai templat simbologi, dari daftar isi (TOC) proyek peta dan letakkan di bidang tabel masing-masing. Klik tombol 'periksa nilai'.
  10. Pilih beberapa lapisan TOC, seret dan letakkan di bidang tabel masing-masing. Klik tombol 'periksa nilai'.
  11. Menjalankannya.
  12. Klik F5 untuk menyegarkan tampilan peta.

Catatan: Ini mungkin tidak akan berfungsi jika Anda menggunakan sekaligus lapisan dari berbagai jenis geometri. Ini tidak berfungsi dengan baik jika Anda menggunakan sekaligus lapisan dengan nama yang sama. Saya tidak mencoba dengan lapisan non-vektor.

Langkah-langkah dalam pembangun model.

Langkah saat menjalankan model.

Script yang diekspor ke python model adalah:

 # 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)
danalif
sumber
1
Setidaknya untuk ArcGIS 10.2, langkah 6 harus membaca "Hubungkan" Layer Symbology "ke alat pengaturannya sebagai Symbology Layer "
jbaums
Saya telah menggunakan Python dan membuat loop yang bagus, tetapi itu tidak memperbarui simbologi saya. Saya memang menemukan bahwa Anda harus terlebih dahulu membuka dokumen .mdx, mengatur df, memperbarui simbologi, kemudian mengubah simbologi. Saya kemudian melihat jawaban 2, menggunakan Model Builder (yang awalnya saya membuat skrip Python saya). Ini adalah WAY lebih mudah dan lebih sedikit waktu intensif, ditambah saya sekarang memiliki alat yang disimpan sehingga saya dapat melakukan ini untuk dataset lain.
Gereja Heidi
1
Daripada meletakkan alat 'Symbology from Layer' di Model Builder, Anda bisa klik kanan di Toolbox dan berjalan sebagai Batch
Sir Adelaide
8

Tepat sebelum pesan @ Harun, saya menggunakan informasi dari @Roy untuk membuat solusi saya sendiri yang bisa saya masukkan ke dalam skrip am ArcToolbox. Lihat di bawah:

# 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

Saya bisa melihat konsep ini sebagai alat potensial untuk 10.1 Python Add-in di bilah alat.

RyanKDalton
sumber
4

Saya telah datang dengan cara yang cukup sederhana untuk mengaktifkan simbologi beberapa layer sekaligus menggunakan toolbox yang ditautkan di bawah ini. Setelah Anda menambahkan kotak alat ini, seret dan lepas lapisan simbologi tunggal dan kemudian seret dan letakkan semua lapisan yang ingin Anda terapkan simbologi (target). Aturan umum tentang pencocokan tipe geografis (garis, titik, polis) kemungkinan berlaku di sini. Setelah alat berjalan, itu akan muncul karena tidak ada yang terjadi. Segarkan layar Anda (F5) - layar akan diperbarui dengan simbologi yang cocok. Klik pada layer untuk melihat propertinya dan klik "OK" dan simbol TOC akan diperbarui.

Unduh file Zip untuk kotak alat di sini.

Inilah skripnya jika itu lebih mudah:

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)
pengguna21466
sumber