Python / ArcPy kullanarak ArcGIS Desktop'ta şekil dosyası veya özellik sınıfı ekleniyor mu?


20

Python ile ArcGIS Desktop'ta (genel olarak ArcMap kullanarak) çeşitli görevleri otomatikleştirmeye çalışıyorum ve mevcut haritaya bir şekil dosyası eklemenin bir yoluna ihtiyacım var. (Ve sonra bir şeyler yapın, ama bu başka bir hikaye).

Şimdiye kadar en fazla bir eklemektir katman aşağıdakileri uygulayarak geçerli haritaya dosyası ( "addLayer" bir katman dosya nesnedir):

def AddLayerFromLayerFile(addLayer):
 import arcpy
 mxd = arcpy.mapping.MapDocument("CURRENT")
 df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
 arcpy.mapping.AddLayer(df, addLayer, "AUTO_ARRANGE")
 arcpy.RefreshActiveView()
 arcpy.RefreshTOC()
 del mxd, df, addLayer

Ancak, ham verilerim her zaman şekil dosyaları olacak, bu yüzden bunları açabilmem gerekiyor. (Eşdeğer olarak: bir şekil dosyasını açmadan bir katman dosyasına dönüştürün, ancak bunu yapmamayı tercih ederim).

Yanıtlar:


30

İşte bulduğum şey:

import arcpy
from arcpy import env

# get the map document
mxd = arcpy.mapping.MapDocument("CURRENT")

# get the data frame
df = arcpy.mapping.ListDataFrames(mxd,"*")[0]

# create a new layer
newlayer = arcpy.mapping.Layer(path_to_shapefile_or_feature_class)

# add the layer to the map at the bottom of the TOC in data frame 0
arcpy.mapping.AddLayer(df, newlayer,"BOTTOM")

Bu kodun yeni katmanı içine koyacağı veri çerçevesi (değişken df), harita belgesindeki ilk veri çerçevesidir. Ayrıca bu kodun verileri İçindekiler bölümünün altına yeni bir katman olarak eklediğini unutmayın. "AUTO_ARRANGE" ve "TOP" olan diğer düzenleme seçeneklerini de kullanabilirsiniz.


2
Veri çerçevesini belirtmek için başka bir seçenek de etkin veri çerçevesini kullanmaktır: df = arcpy.mapping.ListDataFrames (mxd) [0] yerine df = mxd.activeDataFrame kullanmaktır - ayrıca, listdataframe çağrısında "*" gerekmez .
jbalk

10

Özellik Katmanı Yap (Veri Yönetimi) http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000006p000000.htm

Ben sadece ArcMap Python penceresinde denedim ve doğrudan benim haritaya ekler (benim veri çerçevesi almak ve AddLayer aramak zorunda değildi).

arcpy.MakeFeatureLayer_management('r:/temp/a.shp','test') alt metin


Hemen pencerede harika çalışıyor ... ama aynı kodu bir komut dosyasında denediğimde ve çalıştırdığımda hiçbir şey olmuyor! (Kod hata iletileri olmadan çalışır, ancak hiçbir şey ToC görünür) Ayrıca, katman ToC kaldırırsanız, sonra hemen pencerede kodu yeniden deneyin ve bir "dosya zaten var" türü hata alıyorum. "Test" katmanı dosyası nereye kaydedilir?
Tom W

SP1'i kurdunuz mu?
Jason Scheirer

1
@ Tom W: Python ve arcpy ile hemen hemen bir çaylağım. Ancak bir katman dosyasının fiziksel olarak oluşturulduğunu düşünmüyorum. Bir katman dosyası istiyorsanız, bunu yapmanız ve katman adını parametre olarak iletmeniz gerekir: arcpy.SaveToLayerFile_management('test', 'r:/temp/evilmonkey.lyr', 'ABSOLUTE') Katmanı kaydetmek istemiyorsanız ve sadece gitmesini istiyorsanız arcpy.Delete_management('test'),.
Jay Cummins

@ Tom W: yorumunuzu tekrar okuyun. ArcMap'e ayrı bir python kabuğundan katman eklemeye mi çalışıyorsunuz (hemen pencereden değil)? Bunu yapabileceğini düşünmedim (ama bu konuda otorite değilim ... belki de yapabilirsin).
Jay Cummins

1
@Tom W: Bu katman hatasını biliyorum, bu yüzden SP1'in yüklü olduğundan emin oluyordum. Açıkladığınız gibi katmanı TOK'ya eklemek için, komut dosyanızın türetilmiş bir çıktı özelliği katmanına sahip olması ve değeri, yaptığınız katmanın adına ayarlamanız gerekir. ArcMap'teki GP araçları, TOC'yi GP araçlarındaki sahte katmanlardan (geçici FC'ler vb.) Korumaya çalışır, böylece komut dosyası aracının yeni özellik katmanınızın tamamlandığında TOC'de kalacağına dair parametrelerini tanımlamanız gerekir. Katmanın diskte yaşadığı yer büyük olasılıkla FC'nin veri kaynağıdır, bu nedenle bir Özellik Sınıfı çalışma alanınızdaki katmanla aynı adı almıştır.
Jason Scheirer
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.