Algılama ArcPy kullanarak programlı olarak katılın?


10

ArcMap projesinden başlatılan bazı Python kodlarım var. Kodumun çalışması için kullanıcının projede oluşturmuş olabileceği tüm birleştirmeler kaldırılmalıdır. Ne yazık ki, bir birleştirmeyi kaldıran kod… arcpy.RemoveJoin_management ("layer1", "layer2")… ayrıca uygulamam için kritik olan bazı katman özelliklerini (vurgulanan alanlar, salt okunur alanlar, vb.)

Birleşimler ArcMap'te katmanı sağ tıklayıp “Birleşimleri Kaldır” seçilerek kaldırılırsa, katman özellikleri olduğu gibi kalır.

Bir birleşimin kodumdan var olduğunu algılayabilirsem, koddan çıkacağım ve kullanıcının kodu çalıştırmayı denemeden önce birleştirmelerini el ile kaldırması gerektiğini belirten bir ileti görüntüleyeceğim. Peki… Bir Katılım programlı olarak tespit edilebilir mi?


ArcJ aracılığıyla RemoveJoin yapmanın nasıl sorunlara neden olduğu konusunda biraz kayboldum. Salt okunur bir alanı mahvetmek nasıl oluyor? Ayrıca ArcMap'te Birleştirmeyi Kaldır aracını kullanmak aynı sorunlara neden oluyor mu?
Nathanus

Belki bununla başa çıkmanın başka bir yolu, python kodunuzu birleşimlere duyarsız yapmak olabilir mi?
Dan S.

@ Nathanus - ArcMap'te Join Join el kitabını katman özelliklerimi bozmaz, GP aracı yapar. ESRI Yardımı'ndan ilgili bir alıntı aşağıdadır: "Bu araçlar, sahne arkasındaki gerçek birleştirme işlemini Verilere Katıl iletişim kutusundan biraz farklı bir şekilde gerçekleştirdiğinden, bu iletişim kutusundaki birleştirme işleviyle ilgili beklenmedik sorunlarla karşılaşırsanız araçları kullanın. "
BrianPeasley

@ Dan S. - Kodumda insert imleçleri ve benzeri kullanıyorum. Kodumu birleştirmek için duyarsız yapma hakkında nasıl bir fikrim yok.
BrianPeasley

1
iyi, sormaya değerdi. ;) forums.esri.com/Thread.asp?c=93&f=1729&t=293173 , sütun adlarını tablo adının önüne ekleyerek birleştirilmiş tablodaki değerleri güncelleyebileceğinizi ima ediyor gibi görünüyor; belki de bir ek üzerinde çalışır?
Dan S.

Yanıtlar:


8

Arcpy.Layer sınıfında bir hasJoin özelliği çok kötü . Alan adlarına bakarak katılmak için test yapabileceğinizi düşünüyorum. İşte bir dosya coğrafi veritabanındaki veriler için basit bir kavram kanıtı:

import arcpy, arcpy.mapping as arc

def joinCheck(lyr):
  fList = arcpy.Describe(lyr).fields
  for f in fList:
    if f.name.find(lyr.datasetName) > -1:
      return True
  return False

arcpy.env.workspace = r'<path_to_your_gdb>'
mxd = arc.MapDocument(r'<path_to_your_mxd>')
lyrs = arc.ListLayers(mxd)
for lyr in lyrs:
  # ignore group layers
  if not lyr.isGroupLayer:
    hasJoin = joinCheck(lyr)
    if hasJoin:
      print '\nFound a join: %s.' % lyr.datasetName
    else:
      print '\nNo join found on %s.' % lyr.datasetName

Bu umut verici görünüyor! Ne yaptığının etini anlamıyorum: "eğer f.name.find (lyr.datasetName)> -1:" ama birkaç gün içinde deneyeceğim ve rapor vereceğim (kar yağmak üzereyim) güç kaybetti!) ... Teşekkürler!
BrianPeasley

Yardımcı olduğuma sevindim. Python dizeleri için yerleşik bulma yöntemine bakın: docs.python.org/library/string.html ve aynı zamanda kavisli alan nesneleri dokümanı: help.arcgis.com/tr/arcgisdesktop/10.0/help/index.html#/ Alan /… Bu kodu verilerinizle denemek ve çalışıp çalışmadığını görmek söyleyebilirim.
Derek Swingley

2
Ben buna çok benzer bir işlev kullanarak sona erdi ve harika çalışıyor ... Belgemdeki her katman için, alanlar listesinde döngü ve alan adında bir "nokta" olup olmadığını belirlemek için Python kullanın.
BrianPeasley

Alan adı yaklaşımındaki "nokta", Katman
Aamir Suleman

1

GP nesneleriyle bunu yapmak için kurşun geçirmez bir yol olmadığını, ArcObjects ve comtypes kullanmanız gerektiğini düşünüyorum. ESRI forumlarından, standart GP araçları / nesneleriyle birleşimleri kontrol etmenin zorlukları hakkında bazı tartışmalar: https://geonet.esri.com/thread/20317


ArcObjects ve comtypes bu proje için bir çözüm olmayacak, onlar benim için yabancı ve bu proje dün olacak. Beni o forum dizisine yönlendirdiğin için teşekkürler! Ben fikir denemek için oraya sundu gidiyorum "... çek fieldname.split herhangi olmadığını (".) Bunlardan ilk Üyelik tablo olurdu 2 parça neden olacaktır "!
BrianPeasley
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.