Özellik ile ModelBuilder Kullanıcı Girişi ile Çıkarma?


11

ModelBuilder kullanarak, bir kullanıcının bir şekil dosyasını ayıklamak için kullanılacak değeri veya değerleri seçmesine izin verecek bir araç oluşturmak istiyorum.

"Parcel_Type" alanı ile bir parsel katman var. Kullanıcının ayıklanacak parsel tipini seçmesini istiyorum. Eğer kullanıcı "EL" tipi parselleri çıkarmak istiyorsa o zaman değişken olarak sadece "EL" girmesi gerekecektir. "EL" ve "CDD" tiplerini istiyorsa, bunları çok değişkenli olarak girmesi gerekir. Bu modelle tek insan etkileşimi olurdu.

Peki bu değişkenleri modelimde nasıl kullanabilirim?

Yanıtlar:


14

Bu tür bir işlem neredeyse her zaman bir WHERE Cümlesi yazmayı içerir, bu yüzden en azından biraz Python kullanmanın uygun olduğunu düşünüyorum.

Ayrıca ModelBuilder, IMO ile yapmak mümkün olsa da, özel doğrulama ve parametre ayarları üzerinde daha fazla kontrol ile bir Python komut dosyası oluşturmak daha iyi bir kullanıcı deneyimi sağlayabilir - örneğin, Alan ve MultiValue * parametreleri açılır menülerini oluşturarak bunları yazmak yerine değerleri seçebilirsiniz.

* Muhtemelen, aslında MultiValue parametreleri hakkında emin değilim

Ancak, bu başka bir konu için daha gelişmiş bir egzersiz olduğundan, sadece WHERE yan tümcesini oluşturmak için Python kullanarak ModelBuilder yaklaşımına bağlı kalacağım:

  1. Yeni bir model oluştur
  2. Girdi Özellik Katmanı , Alan ve Çoklu Değer parametreleri için değişkenler oluşturun (boş tuvali sağ tıklatın ve Değişken Ekle'yi tıklatın ) .
  3. Bunların her birini sağ tıklayın ve Model Parametresi'ni seçin
  4. Tuvale Değer Hesapla (Veri Yönetimi) aracı ekleyin . 3 değişkeni ön koşul olarak bağlayın (sadece bu durumda göstermek için, ancak diğer durumlarda yürütme sırasında bir fark yaratabilir).
  5. Ayarlamak için Değeri Hesapla aracını çift tıklayın:

    5a. Aşağıdakileri Kopyala / İfade kutusuna yapıştırın (değişken adlarınızla eşleşecek şekilde ayarlayın):

    buildWhereClauseMultiValue(r"%Feature Layer%","%Field%","%Values%")

    5b. Aşağıdakileri kopyalayıp Kod Bloğu kutusuna yapıştırın :

    import arcpy
    
    def buildWhereClauseMultiValue(table, field, values):
        """Takes a semicolon-delimited list of values and constructs a SQL WHERE
        clause to select those values within a given field and table."""
    
        # Add DBMS-specific field delimiters
        fieldDelimited = arcpy.AddFieldDelimiters(arcpy.Describe(table).path, field)
    
        # Split multivalue at semicolons and strip quotes
        valueList = [value[1:-1] if (value.startswith("'") and value.endswith("'")) else value for value in values.split(';')]
    
        # Determine field type
        fieldType = arcpy.ListFields(table, field)[0].type
    
        # Add single-quotes for string field values
        if str(fieldType) == 'String':
            valueList = ["'%s'" % value for value in valueList]
    
        # Format WHERE clause in the form of an IN statement
        whereClause = "%s IN(%s)" % (fieldDelimited, ', '.join(valueList))
        return whereClause
    

    5c. Çıktı veri türünü bir SQL İfadesi olarak ayarlayın .

    5d. Tamam'ı tıklatın ve Çıktı Hesapla aracından çıktı değişkenini sağ tıklatın ve "WHERE Yan tümcesi" gibi daha açıklayıcı bir adla yeniden adlandırın.

  6. Tuvale Özniteliklere Göre Katman Seç (Veri Yönetimi) aracı ekleyin . Özellik Katmanı ve WHERE Yan tümcesi değişkenlerini Özniteliğe Göre Katman Seç aracına bağlayın.
  7. Tuvale bir Kopyalama Özellikleri (Veri Yönetimi) aracı ekleyin . Özniteliğe Göre Katman Seçme aracının çıktısını Kopyalama Özellikleri aracına bağlayın. Çıktı Özelliği Sınıfı değişkenini sağ tıklatın ve Model Parametresini ve (isteğe bağlı olarak) Ekrana Ekle seçeneklerini kontrol edin.

    Bu noktada şöyle görünmelidir: Model Branda

  8. Model -> Model Özellikleri menüsü altında iyi bir ad ve etiket verin ve kaydedin ve kapatın.

  9. Model iletişim kutusunu açmak için ArcToolbox'ta modeli çift tıklayın. Parametrelerinizi girin ve Tamam'ı tıklayın. Seçilen özellikleri yeni bir özellik sınıfına dışa aktarmalı ve haritaya eklemelidir (çıktı özelliği sınıfında "Ekrana Ekle" seçeneğini işaretlediyseniz).

    Model İletişim Kutusu

NOTLAR:

  • Her zaman değerleri kodlayabilir ve kullanıcının özellik katmanı veya alan parametreleri gibi değişmesini istemediğiniz değişkenleri "parametreleştiremez". Ben sadece genel / yeniden kullanılabilir araçlar sahip gibi bu yüzden bu model parametreleri yaptı. Aslında yapacağım şey, genel modeli sürükleyip yeni bir modele bırakmak ve daha sonra önceden tanımlanmış parametrelerinizi ayarlamaktır - bu şekilde birkaç farklı önceden tanımlanmış "sarıcı" modelini yapabilirsiniz, ancak işi yapan sadece bir temel modeliniz vardır, bu yüzden işlevselliğini değiştirmeniz gerekirse, yalnızca tek bir yerde değiştirmeniz gerekir.

  • Benim gibi şanslıysanız , modeli doğrulamanız ve yalnızca doğrulamadan sonra kaldırmak için bazı kukla veriler sağlamanız gerekmeyecek (tüm model öğelerinin nasıl boş / beyaz olduğunu unutmayın, yani "çalışmaya hazır değil" - ancak model iletişim kutusundaki parametreleri doldurduktan sonra yine de çalıştırabildim).


3

GUI gereksinimleriniz @ blah238 tarafından gösterilen kesin iletişim kutusu için değilse, bu iş akışını elde etmek için Seç adlı basit bir coğrafi işlem aracını da kullanabilirsiniz.

Bulmak için Ara penceresini kullanın veya ArcToolbox> Analiz Araçları> Çıkart> Seç'e gidin.

Seç (Analiz) aracı, bir özellik sınıfından herhangi bir alanı (öznitelik) kullanılarak özellikleri ayıklamak sağlar.

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.