ArcPy komut dosyasını kullanarak özellik katmanı kaldırılsın mı?


13

Bir katmanın diğer katmandaki centroidi olması gereken iki katmanı kesmeye çalıştığım bir ArcPy tabanlı komut dosyası var.

Bir katman (aşağıda özellik_layer) diğerinin centroid içerdiğini bilmek gerekir, çünkü arcpy.SelectLayerByLocation_management () aracını kullanıyorum.

Bir Harita Belgem (* .mxd) açık değil, bu yüzden bunu yapabilmek için, Özellik Katmanı Yap'ı kullanmak zorundayım.

Belgeler, program çıktığında özellik katmanının kaybolacağını, ancak aşağıdakine benzer bir döngüde bulunduğum için daha erken kaybolmasını istiyorum.

for feature_class in large_list_of_feature_classes:
    some_function(feature_class)

def some_function():
    feature = "{path to feature class}"
    feature_layer = "feature_layer"
    HUCs_layer = "all_HUCs" #HUCs being Hydrologic Unit Codes

    arcpy.MakeFeatureLayer_management(feature, feature_layer)
    arcpy.MakeFeatureLayer_management(feature, HUCs_layer)      
    arcpy.SelectLayerByLocation_management(HUCs_layer, "HAVE_THEIR_CENTER_IN", feature_layer, selection_type="NEW_SELECTION")

    arcpy.CopyFeatures_management(HUCs_layer, selection_name)

Özellik katmanlarını kaldırmak için bir işlev arıyorum ve bir tane bulamadım.

Oraya bir çeşit sayım yapabileceğimi ya da her birini program kapsamında benzersiz kılmak için bir şey koyabileceğimin farkındayım, ancak özellik katmanlarını kaldırmanın bir yolu yoksa bu ideal değil.

Yanıtlar:


21

Silme aracı , bir özellik katmanının adını TOK'dan kaldırmak için kabul etmelidir.

Verileri diskten kalıcı olarak siler. ArcGIS tarafından desteklenen her türlü coğrafi verinin yanı sıra araç kutuları ve çalışma alanları (klasörler, coğrafi veri tabanları) silinebilir. Belirtilen öğe bir çalışma alanı ise, içerilen tüm öğeler de silinir.

ve Sözdizimi bölümünün altında şu şekilde silinebilecek Veri Türleri listelenir:

Veri Elemanı; Grafik; Katman ; Tablo görünümü


özellik katmanlarının kaldırıldığından emin olmak için neden iki kez silme aracını kullanmam gerektiğini bilmiyorum ve bazen özellik katmanı gerçekten kaldırılmamasına rağmen bu işlev hataları ver, özellik katmanlarını silmeye ve oluşturmaya çalıştığımda bu hatalar oluşuyor Aynı
İsimle

2
Bu gerçekten alakalı değil, ancak coğrafi işlemin çalışma şekli - her katmanın benzersiz bir ada sahip olmasını bekliyor çünkü onlara bu şekilde atıfta bulunuyor.
Jason Scheirer

1
Belki de TOC'den bir katmanı kaldırmak için Silme aracının kullanımı resources.arcgis.com/en/help/main/10.1/index.html#//… adresinde daha iyi belgelenebilir - Layer'ın silinir, ancak katmanlara başka referanslar yapılmaz ve açılış cümlesi "Kalıcı olarak verileri diskten siler", birçok kullanıcıyı bir katmanı kaldırmak için Delete denemekten korkutur.
PolyGeo

7

İçindekilerden bir katmanı kaldırmak için arcpy.mapping.RemoveLayer öğesini çağırabilirsiniz .

Bir harita belgesindeki (.mxd) veri çerçevesi içindeki bir katmanı kaldırma yeteneği sağlar.


Öneri için teşekkürler - Haritalama bağlamının dışında bunu yapacak bir şey aradığımı açıklığa kavuşturmadım - bu sadece bir analiz komut dosyası ve açık bir TOK'm yok (veya en azından bilmiyorum). Jason'ın aşağıdaki önerisi işe yaradı. Teşekkürler! Daha sonra benim için hala yararlı bir işlev olacak.
nicksan

3

Katmanları kaldırmak için kullandığım şey bu.

arcpy.mapping.RemoveLayer ("DataFrame", "Katman Adı")

Veya döngü:

mxd = arcpy.mapping.MapDocument("CURRENT")
for df in arcpy.mapping.ListDataFrames(mxd):
    for lyr in arcpy.mapping.ListLayers(mxd, "", df):
        arcpy.mapping.RemoveLayer(df, lyr)

3

Katmanın kaybolduğundan emin olmak için mxd.save()olmayan bir harita belgesi kullanıyorsanız kullanın CURRENT. Ayrıca, komut dosyanıza bir print ifadesi ekleyin:

mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]

for i in arcpy.mapping.ListLayers(mxd , "TerraColor_SanFrancisco_US_15m.tif"):
    print "Deleting layer", i
    arcpy.mapping.RemoveLayer(df , i)

arcpy.RefreshActiveView()

Sadece silinecek bir katman bulduğundan emin olmak için.


-1

bunu dene:

import arcpy
from arcpy import env
env.workspace = r"F:\Projects\ohad\derech_atankim\gis"   
for mxdname in arcpy.ListFiles("*.mxd"):
    print mxdname 
    mxd = arcpy.mapping.MapDocument(r"F:\Projects\ohad\derech_atankim\gis\\" + mxdname)
    df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
    for lyr in arcpy.mapping.ListLayers(mxd, "", df):
        if lyr.dataSource == r"F:\Projects\ohad\derech_atankim\gis\layers\roads.lyr":
            arcpy.mapping.RemoveLayer(df, lyr)
    mxd.save()
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.