Wybierz różne wartości z pojedynczej kolumny tabeli atrybutów (lub warstwy)


16

Czy istnieje sposób na wybranie odrębnych wartości z kolumny w ArcMap? Mam dane zarówno w formacie GDB, jak i SHP. Szukałem sposobów wyboru za pomocą SQL, QueryLayers, ModelBuilder i indywidualnych skrzynek narzędziowych i pojawia się, ponieważ wszystkie opcje wyboru zawsze WYBIERZ * Z nazwy tabeli GDZIE ...

W SQL napisałbym SELECT DISTINCT columnName FROM tableName.

Odpowiedzi:


17

Możesz też uruchomić narzędzie ArcToolBox Częstotliwość (Narzędzia analizy >> Statystyka >> Częstotliwość), która wyświetli tabelę z unikalnymi wartościami i liczbą wyświetleń.

Lub możesz napisać skrypt Pythona, który pobiera SearchCursor na polu, a następnie zbudować listę wszystkich wartości formularza

if value not in myList:
    myList.append(value)

3
Jeśli nie masz licencji ArcInfo, skorzystaj z tego

3
To niesamowite, ile funkcji, które kiedyś wymagały funkcji ArcInfo, można teraz zaimplementować przy użyciu dość prostego kodu / modułów Pythona. Wspaniale!
— RyanKDalton

Dzięki Dan, to załatwiło sprawę. Moja licencja nie obsługuje przybornika Częstotliwość.
— Steve

12

Użyj rozumienia listy w języku Python.

import arcpy
fldName = 'val_fld'
fcName = 'feature_class.shp'
#set creates a unique value iterator from the value field
myList = set([row.getValue(fldName) for row in arcpy.SearchCursor(fcName)]) 

W przypadku dużych zestawów danych metodą efektywną pod względem pamięci byłoby użycie wyrażenia generatora .

myList = set((row.getValue(fldName) for row in arcpy.SearchCursor(fcName,fields=fldName))

1
Ponieważ jesteś zainteresowany tylko jednym polem, dla lepszej wydajności fieldsmyList = set([row.getValue(fldName) for row in arcpy.SearchCursor(fcName, fields=fldName)])
— podałbym

Dobry pomysł. Byłbym ciekawy przetestować różnicę wydajności. W przypadku źródeł danych SDE jest to prawdopodobnie znaczące, ale dla plików kształtów i geobaz danych plików byłbym zaskoczony, gdyby było to znaczące.
— tharen

To jest świetne. Miałem link, który ładnie to pokazał, ale pewnego dnia się zepsuł. Mam nadzieję, że będzie to miało miły czas.
— Justin

4

Jeśli Twoje dane są w formacie PGDB, możesz wykonać następujące czynności w oknach dialogowych konstruktora zapytań (zapytanie definicji, wybierz według atrybutów, wyrażeń w przyborniku itp.) Za pomocą podzapytania:

WYBIERZ * Z nazwy tabeli GDZIE ...

column_to_test_for_unique_values IN 
(SELECT column_to_test_for_unique_values
FROM table_name
GROUP BY column_to_test_for_unique_values HAVING
Count(column_to_test_for_unique_values)=1)

Zwróci to rekordy, dla których wartości w wartości column_to_test_for_unique_values ​​są unikalne.


1
Możesz także użyć DISTINCT zamiast osobistej geobazy.
— Jakub Sisak GeoGraphics


1

Jeśli twoje dane są w SDE (przestrzennym silniku bazy danych), możesz użyć obiektu ArcSDESQLExecute Pythona i Arcpy. Za pomocą tej „metody” można przekazać złożony kod SQL.

# set up executor for sql
executor = arcpy.ArcSDESQLExecute(sde_connection_sql)

# sql statements
select_max = """select max(LOAD_ID) from SDE.FEATURE_CLASS"""

# get load id
result_max_id = executor.execute(select_max)

0

Lub użyj skryptu Python, aby wyeksportować do pliku CSV, a następnie użyj interfejsu API Python innej bazy danych (powiedzmy SpatiaLite), aby odczytać plik csv i wykonać odpowiednie zapytanie SQL z tego samego skryptu. W przypadku dużego stołu może to być być nieco szybsze niż tworzenie własnej listy - dunno.

Jakkolwiek to zrobisz, jest to wciąż irytująca „funkcja” ArcGIS.


0

A co z używaniem distinctw podzapytaniu (poniżej jest klasa funkcji FGDB):

"STATE_NAME" = (select distinct "STATE_NAME" from EsriUsaCountiesDetailed)

Z pomocy (10.0) zauważ, że ma to ograniczenia:

Pokrycia, pliki kształtów i inne źródła danych oparte na plikach innych niż baza danych nie obsługują podkwerend.


2
„DISTINCT” działa tylko z Personal GDB, a nie File GDB.
— Jakub Sisak GeoGraphics

0

Jak sugeruje Justin. Zwykle robię podsumowanie w polu, które chcę, a następnie wybieram odrębne w dbf, uruchamiam małe obliczenia, aby kategoryzować każdą odrębną wartość, a następnie łączę ją z powrotem z oryginałem.
To długa droga i musisz fenagel z ulubionymi metodami kakulacji. ale ...
Cokolwiek załatwi sprawę.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.