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.