ArcGIS Sorgu Tablosu Yap aracını kullanarak alanları kalıcı olarak yeniden sıralamak ister misiniz?


15

Gelen Yanıt için ArcGIS Desktop kullanılarak dosya coğrafi veritabanında olduğu (sürekli) yeniden sıralama alanları? Sorgu Tablosu Yap aracının tablo ve özellik sınıflarındaki alanları kalıcı olarak yeniden sıralamak için kullanılabileceği belirtildi.

Ancak, bu araç için iletişim kutusunu açtığımda, alanların yeniden sıralanmasını sağlayan hiçbir yeri göremiyorum. Tüm görebildiğim alanlar, onay kutuları kullanılarak ancak aynı sırayla alanların taşınabileceği veya bırakılabileceğidir.

Birisinin adımları daha ayrıntılı olarak tanımlayabileceğini varsayarak, lütfen?

Sorgu Tablosu Yap aracı iletişim kutusu

Yanıtlar:


13

Sorgu Tablosu Yap aracını, Python Snippet Olarak Kopyala , Python penceresini ve Kopyalama Özellikleri aracını kullanarak bunu nasıl yapacağımı anladım .

Çıktıda görünmesini istediğim alanları çekmek için Sorgu Tablosu Yap aracını çalıştırdıktan sonra, Python Snippet Olarak Bu kodu Geoprocessing | Sonuçlar penceresini ArcMap'in Python penceresine yerleştirin.

arcpy.MakeQueryTable_management("'C:/avhome/data/WAregional/wa regional.mdb/schools'","QueryTable","USE_KEY_FIELDS","#","schools.OBJECTID #;schools.Shape #;schools.CODE #;schools.NAME #;schools.TYPE #;schools.Y11STUDENT #;schools.Y12STUDENT #;schools.COORDGEOCO #;schools.ID #","#")

ve düzenlemek için düzenleyin:

arcpy.MakeQueryTable_management("'C:/avhome/data/WAregional/wa regional.mdb/schools'","QueryTable2","USE_KEY_FIELDS","#","schools.OBJECTID #;schools.Shape #;schools.Y12STUDENT #;schools.Y11STUDENT #;schools.NAME #","#")

Yeni QueryTable2 Şekil alanını korur (böylece CopyFeatures bunu yapabilirsiniz) ve NAME, YR11STUDENT & YR12STUDENT alanlarını yeniden sıraladı. Ayrıca birkaç alanı daha bırakma fırsatını kullandım.

Son adım, QueryTable2'de araç iletişim kutusu aracılığıyla yaptığım Özellikleri Kopyala aracını, alanların kalıcı olarak yeniden sıralandığı yeni bir özellik sınıfı oluşturmak için kullanmaktır.


2
Not: Alan adları ve takma adların listesini içeren bir liste girerek alanlarınızın adlarını değiştirmek için MakeQueryTable'ı da kullanabilirsiniz ([[fieldname1, alias1], [fieldname2, alias2] ...])
ndimhypervol

1
Feature sınıfını Feature sınıfına ve ardından Python Snippet Olarak Kopyala'ya çalıştırdığınızda aynı işlevsellik ortaya çıkar.
Alex Tereshenkov

2

Birleştirme Aracı ile alanları kalıcı olarak kolayca yeniden sıralayabilirsiniz. Tablolar ve özellik sınıflarıyla çalışır. Yeniden sıralama, python komut dosyası aracılığıyla ve hatta Araç iletişim kutusu ile yapılabilir (Bir alanı kaldırarak ve iletişim kutusuna yeniden ekleyerek). Her ne kadar diyalog yoluyla yeniden sipariş vermek mükemmel bir yaklaşım değildir.

Birleştirme aracını bir kez kullanmanız ve sonra Python Snippet Olarak Kopyala'yı kullanmanız ve ardından alan siparişlerini manuel olarak değiştirmeniz ve python kodunu python pencerelerine yapıştırmanız önerilir .

Alanları yeniden sıralamak için Birleştirme Aracı'nı kullanan bir python betiği ( buradan kopyalanır )

import arcpy

def reorder_fields(table, out_table, field_order, add_missing=True):
    """ 
    Reorders fields in input featureclass/table
    :table:         input table (fc, table, layer, etc)
    :out_table:     output table (fc, table, layer, etc)
    :field_order:   order of fields (objectid, shape not necessary)
    :add_missing:   add missing fields to end if True (leave out if False)
    -> path to output table
    """
    existing_fields = arcpy.ListFields(table)
    existing_field_names = [field.name for field in existing_fields]

    existing_mapping = arcpy.FieldMappings()
    existing_mapping.addTable(table)

    new_mapping = arcpy.FieldMappings()

    def add_mapping(field_name):
        mapping_index = existing_mapping.findFieldMapIndex(field_name)

        # required fields (OBJECTID, etc) will not be in existing mappings
        # they are added automatically
        if mapping_index != -1:
            field_map = existing_mapping.fieldMappings[mapping_index]
            new_mapping.addFieldMap(field_map)

    # add user fields from field_order
    for field_name in field_order:
        if field_name not in existing_field_names:
            raise Exception("Field: {0} not in {1}".format(field_name, table))

        add_mapping(field_name)

    # add missing fields at end
    if add_missing:
        missing_fields = [f for f in existing_field_names if f not in field_order]
        for field_name in missing_fields:
            add_mapping(field_name)

    # use merge with single input just to use new field_mappings
    arcpy.Merge_management(table, out_table, new_mapping)
    return out_table

KULLANIM:

new_field_order = ["field2", "field3", "field1"]
reorder_fields(in_fc, out_fc, new_field_order)

Bunu yapmak için kullandığınız kesin adımları araç iletişim kutusundan listeleyebilir misiniz? Şu anki 10.3.1 testimden sonra saha haritalama paneli yeniden sipariş vermeye izin vermiyor gibi görünüyor. Ayrıca, bu cevabın başka bir soruya daha iyi yerleştirileceğini düşünüyorum ( gis.stackexchange.com/questions/32119/… ) çünkü bu özellikle Sorgu Tablosu Yap aracının kullanımı ile ilgilidir.
PolyGeo

Evet, bunu soru başlığında fark ettim. Ancak bu gönderi, alanları en kolay şekilde yeniden sıralaması gereken gelecekteki ziyaretçileri destekleyebilir.
Farid Cheraghi

Yeniden sıralama, alanın kaldırılması ve iletişim kutusuna yeniden eklenmesiyle yapılabilir. Mükemmel bir yaklaşım olsa.
Farid Cheraghi

1
Bu cevaba, şimdi en iyi cevap olduğunu düşündüğüm diğer soruya oy verdim, ancak burada bir “yinelenen cevap” olduğu ve burada sorulan soruya doğrudan bir cevap olmadığı için, ikinci bir oylamanın uygun olacağını düşünmüyorum.
PolyGeo

@FaridCher, kodu paylaştığınız için teşekkürler. Python'da alanları gerçekten hızlı bir şekilde yeniden sipariş etmek gerekiyordu ve harika çalıştı. Muhteşem.
Alex Tereshenkov

1

Bunu bir tablodaki özniteliklerin sırasını değiştirerek ve alanların sırasını yeniden düzenlemeye çalışırken, bu basit çözümü ArcMap 10,1'de buldum ...

  1. İçindekiler tablosunda değiştirmek istediğiniz özelliği sağ tıklayın
  2. Özellikler'i tıklayın
  3. Alanlar sekmesini tıklayın
  4. bir alana tıkla
  5. "yukarı taşı" veya "aşağı taşı" okunu tıklayın
  6. Uygula, tamam

resim açıklamasını buraya girin


3
İyi denemeydi. Ancak maalesef bu yalnızca harita belgesine eklediğiniz katman için geçerlidir. Feature sınıfında alanlar tanımlanmış sırada olacaktır. Teknik olarak, veritabanlarındaki alanların "sırası" yoktur, ancak son kullanıcı olarak bir harita belgesine bir özellik sınıfı eklerken ve bir nitelik tablosu açarken siparişinizle ilgili alanlara bakın.
Alex Tereshenkov

1

Tamamen model üreticisi içinde nispeten sağlam bir şekilde yapmak için bir yöntemim var. Kurulumu biraz sıkıcıdır, ancak en azından daha büyük bir model oluşturucu analizinin bir parçası olarak eklenebilir:

Çözme aracı - erime alanı olarak ObjectID . Kalan (İstatistikler) alanlarını istediğiniz sırada ekleyin ve İstatistik Türü açılır listesinden (İlk) seçeneğini belirleyin. Aşağıdaki örnekte SaltMarsh_Pct alanını , alanlar listesinde aşağı doğru form 6'ya taşıdım .

Modeli yeniden sıralanan alanlarla çözme

Genellikle sonuçları kopyalarım ve her alanı yeniden adlandırırım (kopya işlevsel olarak gereksizdir ve yeniden adlandırma orada da yapılabilir, ancak pul pul)

Her alanı yeniden adlandırmak için Alanı Değiştir aracını kullanın

Alan adlarını orijinaline geri döndürme (FIRST kaldırılıyor)

Hep birlikte bir modelde şöyle görünüyor:

Yeniden sipariş vermek için örnek model

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.