Łączenie wielu rekordów w jedną funkcję za pomocą QGIS?

25

Próbuję utworzyć złączenie / relację w QGIS, w której mam plik kształtu i do tego chciałbym dołączyć do nieprzestrzennego stołu (.csv) zawierającego osoby pracujące w każdym budynku. Mam więc wiele rekordów w tabeli, które chciałbym móc dołączyć do moich pojedynczych funkcji w moim pliku kształtu. Mogę uruchomić sprzężenie tylko w QGIS, w którym pierwszy rekord jest połączony z funkcją shapefile (tj. Budowanie), ale kolejne rekordy są usuwane.

Czy ktoś mógłby mi powiedzieć, jak ukończyć to połączenie / relację w QGIS?

Mick
źródło
Miałem podobne pytanie tutaj gis.stackexchange.com/questions/5797/ ... Wtyczka RT SQL Layer i sugerowane były wtyczki eVis. Użyłem wtyczki eVis, ale nie było to idealne rozwiązanie.
Ando
2
Mam ten sam problem i rzeczywiście łączenie tabel działa. Sztuką jest dołączenie tabel z wieloma wartościami do tabeli z jedną wartością (tutaj, od osoby do budynku, a nie na odwrót). Problem, o ile mi się podoba, polega na tym, że robiąc to, nie możesz wyszukiwać i eksportować wyniku jako pliku georeferencyjnego, który jest błędem (przynajmniej dla mnie). W jakikolwiek sposób obejść ten problem? marc
Jaki efekt końcowy chcesz osiągnąć? Nawet jeśli uda ci się wykonać połączenie, czy chcesz je przedstawić na mapie? Czy statystyki? W zależności od tego można zastosować różne przepływy pracy, ale korzystanie z bazy danych jest zwykle dobrym pomysłem, jeśli chcesz łączyć.
johanvdw

Odpowiedzi:

15

Rozwiązałem ten problem za pomocą QGIS 1.7.0, najpierw zapisując warstwę wektorową jako tabelę wartości rozdzielanych przecinkami (CSV) z polem geometrii przekonwertowanym na dobrze znany tekst. Aby to zrobić, pole warstwy w oknie dialogowym „Zapisz warstwę wektorową jako ...” musi zawierać GEOMETRIA = AS_WKT, aby utworzyć dobrze znane pole tekstowe geometrii z kolumną o nazwie WKT.

Plik geometrii CSV został następnie połączony z tabelą atrybutów nie geometrii w połączeniu jeden do wielu w zakładce połączeń właściwości tabeli atrybutów nie geometrii.

Wynikowe połączenie zostało zapisane jako inny plik CSV geometrii.

Po otwarciu tej tabeli w QGIS każdy rekord atrybutu był reprezentowany przez odpowiednią geometrię wektorową.

Robiąc to wszystko, odkryłem, że Wtyczka tekstowa z ogranicznikami nie jest potrzebna do otwarcia pliku geometrii CSV, jeśli ogranicznikami są przecinki, a pole geometrii WKT nosi nazwę WKT.

Szczegółowe informacje na temat tego, jak to zrobić, znajdują się w moim samouczku na stronie http://georgiawildlife.com/node/2849 .

Greg Kraków
źródło
Dobre podejście, zrobiłem podobną rzecz, używając tylko ogr2ogrdo tworzenia plików CSV z Shapefiles. Następnie prosty skrypt R do scalenia plików we wspólnym polu, którego chciałem i zapisania z powrotem do CSV. Następnie ogr2ogrponownie, aby utworzyć scalony plik kształtu.
vpipkt
1
Może to być najwyżej ocenione, ale na proces przeznaczony do tego odpowiada @underdark poniżej. Jest to hack i wcale nie najlepsza opcja, jest powolny i nieefektywny, co skutkuje większymi plikami i większą liczbą kroków.
nittyjee
10

Połączenia utworzone we właściwościach warstwy dodają kolumny tylko do istniejących operacji. Jeśli warstwa wektorowa ma tylko 160 elementów, łączenie nie może zwiększyć liczby elementów!

Zamiast tego użyj funkcji warstwy wirtualnej. Oferuje prawdziwe sprzężenia SQL / bazy danych. Na przykład zobacz mój ostatni post: Małe wielokrotności dla map przepływu OD przy użyciu warstw wirtualnych

wprowadź opis zdjęcia tutaj

podmrok
źródło
7

W QGIS 1.7 dostępny jest nowy silnik dla połączeń (można go znaleźć we właściwościach wektorowych).

Tabele bez geometrii można teraz dodawać do projektu, jak każdą inną (wektorową) warstwę.

Giovanni Manghi
źródło
7

Począwszy od wersji 2.2 QGIS obsługuje relacje jeden do wielu. Zdefiniuj je jednak we właściwościach projektu, a nie we właściwościach warstwy wektorowej. Następnie powiązane rekordy pojawią się w Tabeli atrybutów warstwy lub Zidentyfikuj wyniki za pomocą formularza.

Zobacz odpowiedź i link do dobrego przewodnika tutaj .

Anna Pestereva
źródło
4

Dołącz do nas w bazie LibreOffice.

Nie można przezwyciężyć faktu, że próbujesz zarządzać relacją 1 do wielu.

W przypadku nieprzestrzennego lub nieprzestrzennego warto się nauczyć. Uważam, że największą sztuczką jest upewnienie się, że pola atrybutów złączenia mają dokładnie takie same warunki.

Otwórz dane przestrzenne jako warstwę w QGIS, a następnie wybierz wszystkie rekordy w tabeli atrybutów w QGIS (wyczyść zaznaczenie, odwróć zaznaczenie) i skopiuj je do nowego arkusza w LibreOffice Calc. Pierwsze pole to WKT, które jest opisem funkcji, która może być powszechnie używana w GIS. Calc wyświetli okno dialogowe do zaimportowania wklejonej tabeli, wybierz rozdzielany tabulatorami, upewnij się, że przecinek nie jest zaznaczony, ponieważ będzie żuć pole WKT na bity. Następnie podświetl tę tabelę w aplikacji Calc, przejdź do bazy, podświetl ikonę Tabele po lewej i wklej. Baza przejdzie przez okno dialogowe, aby zaimportować tabelę. Pole WKT można zachować przez połączenie, a gdy plik jest importowany z powrotem do QGIS jako .csv, są one używane do przeniesienia funkcji. Pamiętaj tylko o projekcji.

W ten sposób będziesz mieć pełną kontrolę nad złączeniem i możesz to zrobić w „odwrotnej kolejności”. Aby wykonać połączenia w bazie, upewnij się, że unikalne pole danych (1) jest kluczem podstawowym, a następnie wskazujesz je na „wiele”, jeśli znasz pojęcie 1 do wielu lub 1 do n. Połączenia są tworzone przez tworzenie relacji | NARZĘDZIA |. Jak już wspomniałem, prawdopodobnie będziesz chciał kogoś skopać, gdy znajdziesz, że pola łączenia zawierają te same informacje, ale do ich reprezentowania użyto innego tekstu lub składni.

hth

BWill
źródło
2

Nie sądzę, aby można było łączyć tabele z relacją 1 do wielu w QGIS. Alternatywnie możesz wypróbować gvSIG. Tutaj możesz zrobić od 1 do wielu linków. Po utworzeniu łącza wybranie obiektu na mapie podświetli wszystkie powiązane rekordy w połączonej tabeli.

Ecodiv
źródło
1
Od czasu wprowadzenia wirtualnych warstw odpowiedź ta nie jest już poprawna.
podmrok