Uzyskiwanie listy odrębnych wartości z pola shapefile przy użyciu QGIS?

18

Mam plik kształtu, którego funkcje mogę filtrować, podając klauzulę where w oknie dialogowym zapytania. Fx Mam pole o nazwie „city_name” i wpisując „city_name =" London "w klauzuli gdzie wyświetlany jest tylko Londyn. Chciałbym teraz pobrać wszystkie wartości z „city_name” z tabeli atrybutów.

Coś w tym stylu:

select distinct city_name from [attribute table]

Znalazłem kilka narzędzi w QGIS, najwyraźniej zajmujących się SQL, a także rzuciłem okiem na różne wtyczki. Ale nie mogę połączyć się z bazą danych lub nazwą tabeli ... jaka baza danych lub która tabela w takim przypadku?

Na koniec chcę wyeksportować listę wyników i użyć jej do dalszego przetwarzania.

Używam QGIS 1.8.

Raffael
źródło

Odpowiedzi:

32

Zaktualizuj odpowiedź (wersja QGIS> = 2.14)

Od QGIS 2.14 można używać instrukcji SQL na dowolnej załadowanej warstwie wektorowej za pomocą warstw wirtualnych .

  1. Po załadowaniu warstwy do QGIS, przejdź do Warstwa> Dodaj warstwę> Dodaj / Edytuj warstwę wirtualną ;
  2. W oknie dialogowym Utwórz warstwę wirtualną wprowadź instrukcję SQL w polu Zapytanie. Coś jak:

    WYBIERZ ODLEGŁOŚĆ nazwa miasta od nazwy warstwy

  3. Dla geometrii ustaw Bez geometrii

  4. Kliknij Ok, a tabela załaduje się do QGIS z pożądanymi unikalnymi wartościami.

Uwaga: ta tabela zostanie zaktualizowana, jeśli nowe wartości zostaną dodane do kolumny city_name.

Starsza odpowiedź (wersja QGIS <2.14)

Masz kilka możliwości zrobienia tego, o co prosisz.

  1. Zaimportuj plik shapefile do bazy danych Spatialite lub Postgis, a następnie możesz przeszukać tabelę przy użyciu pełnych instrukcji SQL;
  2. Użyj narzędzia Dissolve (Vector> Narzędzia geoprzetwarzania> Dissolve), aby rozpuścić pliki kształtu za pomocą pola „nazwa_miejsca”. Chociaż jest to dziwna metoda, plik dbf wynikowego pliku shapefile zapewni potrzebną listę;
  3. Spójrz na wtyczkę statystyk grupy (1.6) , możesz użyć „city_name” jako pola klasyfikacji i naciśnij „Oblicz”. Obliczy niektóre statystyki dotyczące każdego miasta, a następnie możesz skopiować wynik i wyodrębnić listę miast.

Właśnie zauważyłem, że w wektorze> Narzędzia analityczne znajduje się narzędzie Lista unikatowych wartości , które jest dokładnie tym, czego potrzeba do tego zadania. Tak łatwe ... bez obejść i bez wtyczek.

Alexandre Neto
źródło
6

Użyj QGIS DB Manager i uzyskaj dostęp do pliku shapefile poprzez „wirtualne warstwy”

Następnie możesz użyć okna SQL i napisać zapytanie:

wprowadź opis zdjęcia tutaj

DPSSpatial
źródło
1
To jest teraz (QGIS 2.14+) poprawna odpowiedź.
Alexandre Neto
0

Spróbuj dołączyć coś takiego:

where city_name is NOT NULL or not equal to NULL
czarnuch
źródło
Spróbuj zajrzeć
nigellaw
1
spowoduje to, że QGIS wyświetli wszystkie funkcje z nazwą miasta. ale chcę wyeksportować wartości city_name.
Raffael
-1

Użyj konstruktora zapytań w QGIS, przejdź do pola nazwy miasta w polach w kreatorze zapytań. Idź do wartości, dodaj wszystko. Usuń wszelkie wartości null.

Zbuduj skrypt podobny do nazwy miasta = „Londyn” i nazwy miasta = „Paryż”, dopóki nie uzyskasz pełnej listy nazw i uruchom skrypt. Teraz wszystkie nazwy miast są wybrane. Możesz wyeksportować wybrane jako plik kształtu i zaimportować do bazy danych postgresql.

Aby użyć zaplecza Postgresql do QGIS, zainstaluj stos Postgresql z Geoserver, Postgresql i bazą danych z obsługą Postgis w Postgresql. Musisz podłączyć QGIS do serwera. Rozejrzyj się trochę, a zrozumiesz.

chwytak
źródło