ModelBuilder ile bir coğrafi işlem oluşturma anlamaya çalışıyorum, ama neden ModelBuilder ile bir coğrafi işlem oluştururken özellik sınıfları yerine özellik katmanları kullanmanın önemli olduğunu bilmiyorum. Birisi nedenini açıklayabilir mi?
ModelBuilder ile bir coğrafi işlem oluşturma anlamaya çalışıyorum, ama neden ModelBuilder ile bir coğrafi işlem oluştururken özellik sınıfları yerine özellik katmanları kullanmanın önemli olduğunu bilmiyorum. Birisi nedenini açıklayabilir mi?
Yanıtlar:
Modeller, boyutlarına ve karmaşıklıklarına bağlı olarak birçok alt işlem çıktı katmanına sahip olabilir. Sabit diskinize yazılan dosyaları ortadan kaldırmak için bazı araçlar özellik katmanlarını kullanmanızı sağlar (örneğin Özellik Seçimini Yinele veya Özniteliğe Göre Seç ). Özellik katmanları geçicidir ve modeliniz bittikten sonra da devam etmez.
Bkz. Özellik Katmanı Yap
Özellik Sınıflarının aksine ModelBuilder'daki Özellik Katmanlarına başvurmak istemenizin birkaç nedeni vardır. İlk olarak farklılıkları anlamak faydalı olacaktır.
Bu arka plan göz önüne alındığında, "Özellik Katmanı Yap" aracını ham verilerden ve diğer coğrafi işleme araçlarından bir geçiş aracı olarak kullanmak istemenizin bazı nedenleri aşağıda verilmiştir.
ArcCatalog'dan bir Model çalıştırmak veya Modelinizi ArcGIS dışında çalıştırılabilecek bir Python betiğine aktarmak istiyorsanız, ham kaynak verilerinizin "Katmanlar" a dönüştürülmesi için "Özellik Katmanları" kullanmanız gerekir. Bu, ArcMap oturumunuza "veri ekleme" ile benzerdir.
Katmanları kullanmak, ModelBuilder işleminde ilerlerken verilerinizin alt kümelenmesini kolaylaştırır. "A" özelliğine sahip tüm verileri bir yöntemle, "B" özelliğine sahip tüm verileri başka bir yöntemle işlemek istediğinizi varsayalım. Ham verilerinize bir kez referans verebilir, ardından Özellik Katmanlarını kullanarak verileri iki "şubeye" bölebilir ve her kümesi bağımsız olarak işleyebilir, ancak tek kaynak veri kümesini etkileyebilir / güncelleyebilirsiniz.
Geçici katmanları modellerinize dahil etmek de işlem süresini azaltır. İşleme açısından, diske yazmakla karşılaştırıldığında belleğe yazmak çok daha verimlidir. Benzer şekilde, in_memory çalışma alanına geçici veriler yazabilirsiniz , bu da daha hesaplama açısından etkilidir.
ArcGIS'teki birçok işlem girdi olarak geçici katmanlar gerektirir . Örneğin, Yere Göre Katman Seç (Veri Yönetimi) , uzamsal ilişkileri başka bir seçim özelliğiyle paylaşan bir katmanın özelliklerini seçmenizi sağlayan çok güçlü ve kullanışlı bir araçtır. "HAVE_THEIR_CENTER_IN" veya "BOUNDARY_TOUCHES" vb. Gibi karmaşık ilişkiler belirleyebilirsiniz.
Düzenle:
Meraktan ve özellik katmanlarını ve bellek içi çalışma alanını kullanarak farklılıkları işlemek için, 39.000 noktanın 100 metrelik tamponlanmış olduğu aşağıdaki hız testini göz önünde bulundurun:
import arcpy, time
from arcpy import env
# Set overwrite
arcpy.env.overwriteOutput = 1
# Parameters
input_features = r'C:\temp\39000points.shp'
output_features = r'C:\temp\temp.shp'
###########################
# Method 1 Buffer a feature class and write to disk
StartTime = time.clock()
arcpy.Buffer_analysis(input_features,output_features, "100 Feet")
EndTime = time.clock()
print "Method 1 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)
############################
# Method 2 Buffer a feature class and write in_memory
StartTime = time.clock()
arcpy.Buffer_analysis(input_features, "in_memory/temp", "100 Feet")
EndTime = time.clock()
print "Method 2 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)
############################
# Method 3 Make a feature layer, buffer then write to in_memory
StartTime = time.clock()
arcpy.MakeFeatureLayer_management(input_features, "out_layer")
arcpy.Buffer_analysis("out_layer", "in_memory/temp", "100 Feet")
EndTime = time.clock()
print "Method 3 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)
Yöntem 2 ve 3'ün yöntem 1'den eşdeğer ve kabaca 3 kat daha hızlı olduğunu görebiliriz. Bu, özellik katmanlarını daha büyük iş akışlarında ara adımlar olarak kullanma gücünü gösterir.
in_memory
alanına yazılan veriler, yine de verilerdir (örneğin özellik sınıfları ve tabloları) hala (potansiyel olarak çok) yer kaplar. Öte yandan Özellik Katmanları, verilerin bir alt görünümüdür ve verilerin bir alt kümesini seçmenize ve verileri yalnızca bir alt kümesini almak için çoğaltmak yerine sonraki işlemlerde kullanmanıza olanak tanır. Özellik Katmanları neredeyse hiç yer kaplamaz. Bunları "meta veri içeren işaretçiler" olarak düşünmeyi seviyorum, örneğin bazı verilere işaret ediyor ve nasıl sorgulanacağını / nasıl oluşturulacağını açıklıyorlar.
in-memory
çalışma alanı temelde bu şekilde düşünmek isterseniz, bellekte oturan bir dosya coğrafi veritabanı olduğunu okudum .