Czytasz połączenie ODBC za pomocą QGIS? [Zamknięte]

16

Mam współpracownika, który zarządza dużą bazą danych MS Access, która zawiera pola X i Y dla różnych lokalizacji, które śledzi. Wcześniej wyeksportowaliśmy dane do CSV i użyliśmy wtyczki tekstowej rozdzielanej QGIS do wykreślenia lokalizacji.

Chcielibyśmy teraz wykreślić te dane bezpośrednio w QGIS, łącząc się z bazą danych MS Access za pośrednictwem połączenia ODBC (w przeciwieństwie do eksportu do CSV).

  1. Czy QGIS może pobierać dane z połączenia ODBC w celu wykreślenia lokalizacji XY?
  2. Czy można go „połączyć na żywo” z połączeniem ODBC, aby po ponownym otwarciu projektu warstwa „replikowała” wszystkie stare i nowo dodane lokalizacje dynamicznie (w przeciwieństwie do eksportu do pliku kształtu, który utworzyłby migawkę w czasie)?
  3. Czy możesz tworzyć tabelaryczne połączenia ODBC, które można łączyć z tabelami przestrzennymi w QGIS?

Możesz to wszystko zrobić w ArcGIS (narzędzie „Dodaj dane XY”), więc byłoby wspaniale, gdyby ta funkcja istniała w QGIS. Po prostu nie mogę znaleźć nigdzie wzmianki o jego istnieniu.

Nie planuję przejść do przestrzennej bazy danych. Jako osoba GIS, tak, wiem, że sensowne jest przejście do przestrzennej bazy danych i tak, korzystałem z PostGIS do zarządzania tego rodzaju danymi. Ale obecnie nie są to opcje. Użytkownik nie jest osobą GIS ani nie chce nim być, a on zarządza własną bazą danych w MS Access i to się nie zmieni. Ciągnę go i ciągnę za niego, wykopując i krzycząc w świat GIS, i chcę, aby było to możliwie jak najłatwiejsze. On może żyć z eksportowaniem do CSV, miałem tylko nadzieję, że istnieje lepsze rozwiązanie UŻYWANIE ODBC DO MS ACCESS i wyświetlanie danych XY w QGIS.

RyanKDalton
źródło
Zatem, o ile wiem, nie możesz zrobić, o co prosisz z QGIS. Zgadzam się, że będzie jakiś użytek w ekwiwalencie ODBC importu CSV, ale dla każdego rodzaju wydajności musiałby to być import, a nie połączenie dynamiczne - podobnie jak wtyczka CSV. Tak więc prawdopodobnie nie będzie żadnej absorpcji, chyba że sam ją wesprzesz / rozwiniesz.
MerseyViking,
@ MV- Ogólnie się z tobą zgadzam i widzę twoje punkty. Jednak w przypadku użytkowników innych niż GIS, którzy są głównie zainteresowani po prostu mapowaniem swoich danych i nie analizowaniem danych, wydajność QGIS nie byłaby tak znaczącym problemem. Wyobrażam sobie, że dynamiczne połączenie „zawsze na żywo” z ich danymi prawie na pewno przewyższy obawy związane z wydajnością (ponownie myśląc o tym z perspektywy użytkowników spoza GIS).
RyanKDalton
Doskonała odpowiedź na podobne pytanie w QGIS 2.4 dostęp .mdb błąd dodania
RyanKDalton

Odpowiedzi:

7

Uwaga: nie próbowałem tego, więc jestem skłonny pokłonić się każdemu, kto ma bezpośrednie doświadczenie.

Możesz połączyć się ze źródłem danych ODBC w oknie dialogowym „dodaj warstwę wektorową”, po prostu wybierz „baza danych” jako typ źródła, a ODBC jako typ bazy danych. QGIS używa sterownika ODBC dla OGR , więc obowiązują te same zastrzeżenia - to znaczy, że będziesz potrzebować tabeli o nazwie GEOMETRY_COLUMNS i tak dalej, więc twój kolega prawdopodobnie będzie musiał zmodyfikować bazę danych.

Nie korzystałem z programu Access krótko po wydaniu wersji 1.0, ale ponieważ nie jest on włączony przestrzennie, prawdopodobnie będzie problem z wydajnością. Prawdopodobnie nie porzucisz programu Access i nie zaczniesz korzystać z bazy danych z włączoną przestrzenią, ponieważ jest to mało opłacalne ekonomicznie, ale jeśli twój współpracownik kiedykolwiek odczuje potrzebę zmiany, zdecydowanie polecam przejście na coś więcej potężny.

MerseyViking
źródło
@ MV- To dobra informacja. Nie zdawałem sobie sprawy, że można dodać dane tabelaryczne za pomocą opcji „dodaj warstwę wektorową”. Masz jednak rację, ponieważ nie jest on włączony przestrzennie, nadal musiałbyś jakoś wyeksportować do formatu przestrzennego. I masz rację, użytkownik nie przełączy się na db włączoną przestrzennie, ponieważ nie jest to ani GIS, ani baza danych. Mają wystarczająco dużo treningu dostępu, by być niebezpiecznym ...
RyanKDalton
7

Dzięki nowym narzędziom „Przetwarzanie” dostępnym w QGIS 2 staje się to nieco łatwiejsze. Chociaż nadal nie znalazłem sposobu na „linkowanie na żywo” danych (tak, że jeśli zmienisz wartości w tabeli MS Access, punkt przesunie się automatycznie), ta metoda wydaje się działać całkiem dobrze.

Podziękowania dla „Christiny” i „Bernda” w sekcji komentarzy na tej stronie (i oczywiście @underdark na blogu) za sposób utworzenia połączenia ODBC z bazą danych MS Access:

Utwórz połączenie ODBC:

W przypadku Win7, wersja 32-bitowa: Przejdź do panelu sterowania / narzędzi administracyjnych / źródeł danych (ODBC)

W przypadku Win7, wersja 64-bitowa: Zamiast używać domyślnego „panelu sterowania / narzędzi administracyjnych / źródeł danych (ODBC)” - w przypadku wersji 64-bitowych należy użyć C: \ Windows \ SysWOW64 \ odbcad32.exe!

  1. Kliknij kartę DSN użytkownika, a następnie „dodaj”
  2. Przewiń w dół do Microsoft Access Driver (* mdb) i kliknij „zakończ”
  3. Nadaj nazwę połączeniu, a następnie wybierz „wybierz”, aby przejść do lokalizacji bazy danych, a następnie kliknij „ok”, aby wyjść z okna dialogowego i ponownie zamknąć okno dsn.

Załaduj warstwę do QGIS:

  1. Idź, aby dodać warstwę wektorową i wybierz opcję bazy danych.
  2. Upewnij się, że w polu „typ” bazy danych znajduje się „ODBC” i kliknij „nowy”
  3. W polu nazwy wpisz nazwę połączenia
  4. Host jest hostem lokalnym
  5. Nazwa bazy danych to nazwa dsn utworzona w kroku 4
  6. Wszystkie pozostałe pola powinny być puste, ale możesz zaznaczyć pole „zapisz hasło”.
  7. Przetestuj połączenie i zanotuj wszelkie błędy. Po pomyślnym zakończeniu kliknij przycisk „OK”, aby wrócić do okna dialogowego „Dodaj warstwę wektorową”
  8. Kliknij „otwórz”, aby otworzyć to połączenie, a jeśli zostaniesz poproszony o hasło, kliknij „ok”. Wybierz warstwę (tabelę z bazy danych), pamiętając, że może nie mieć żadnej geometrii.

Konwertuj dane XY na punkty:

  1. Z tabelą w Spisie treści przejdź do „Przetwarzanie” -> Przybornik -> Geoalgorytmy -> Wektor -> Tworzenie -> „Warstwa punktów z tabeli”.
  2. Wypełnij formularz, jak pokazano poniżej:

Warstwa punktów z tabeli

RyanKDalton
źródło
Jeśli masz problemy z tym podejściem, sprawdź błąd dodawania dostępu QGIS 2.4 .mdb
RyanKDalton
Wielkie dzięki za pomoc w podłączeniu dostępu MS do QGIS. Używam trzyliterowych kodów kraju jako warstwy łączenia i działało to bardzo dobrze
Gdybym miał tabelę z linią lub wielokątem, jak mógłbym wtedy wygenerować mapę?
MichaelR
5

Chociaż nadal jestem zainteresowany wiadomością, czy są dostępne inne opcje, natknąłem się na wiadomość, w której wspomniano, że jest to możliwe przy użyciu wtyczki eVis .

Dokumentacja opisuje w sekcji Połączenie z bazą danych, w jaki sposób można połączyć się z połączeniem MS Access lub ODBC, aby utworzyć lokalizacje punktów XY z bazy danych, bez tworzenia statycznej migawki. Po prostu wpisałem „select * from”, a eVis wyświetliło okno dialogowe z pytaniem o nazwę warstwy i pola XY.

Niestety nie wydaje się to tworzyć połączenia „na żywo” z bazą danych MS Access, ponieważ przy następnym otwarciu projektu QGIS jest zdezorientowany („nie można otworzyć jednej lub więcej warstw projektu”). Rozwiązaniem tego jest jednak utworzenie predefiniowanego zapytania XML, które użytkownik może wybrać.

Chociaż nie jest to idealne rozwiązanie, jest to o jeden krok lepszy niż eksport do CSV. Myślę, że w przyszłości byłoby wspaniale zobaczyć rozszerzenie wtyczki z tekstem rozdzielanym, aby akceptować połączenia ODBC w tym celu.

RyanKDalton
źródło
Ach! Naprawdę warto wiedzieć. W grę wchodzi kilka obręczy, ale przynajmniej powinna to być jednorazowa konfiguracja. Czy przeładuje dane, jeśli zmienisz widok w QGIS? A może po prostu buforuje go, dopóki ręcznie nie uruchomisz ponownie zapytania?
MerseyViking
@ MV- Z tego, co mogę stwierdzić podczas eksperymentów, eVis wydaje się tworzyć buforowaną warstwę w QGIS. Na przykład po załadowaniu warstwy eVis usunąłem jeden z rekordów z bazy danych Access DB, odświeżyłem ekran QGIS i punkt „usunięty” pozostał. Ale kiedy utworzyłem nową buforowaną warstwę, usunięty punkt nie był wyświetlany (zgodnie z oczekiwaniami). Przesuwanie i powiększanie nie miały wpływu na wyświetlanie buforowanej warstwy.
RyanKDalton
4

alternatywnym podejściem byłoby przeniesienie danych do Postgis. plik csv można odczytać bezpośrednio za pomocą polecenia kopiowania postgresql. następnie możesz utworzyć punkty z pól xy.

następnie jeśli chcesz korzystać z niektórych raportów lub innych funkcji dostępu, możesz połączyć się z Postgis z dostępem.

korzyścią byłoby umieszczenie danych przestrzennych tam, gdzie należą, w bazie danych przestrzennych, a następnie użycie odbc z powrotem w celu uzyskania dostępu do danych nieprzestrzennych, jeśli z jakiegoś powodu nadal chcesz mieć dostęp do swoich danych.

istnieją świetne samouczki dla postgis / postgresql dotyczące dostępu do połączenia w postgresonline.com. samouczki na temat importowania do postgis / postgresql, które ci sami autorzy znajdą na bostongis.org

/ Nicklas

Nicklas Avén
źródło
0

Istnieje kilka produktów do konwersji, które mogą konwertować dane z dostępem do MS na Postgres lub SQLite iz powrotem. Bardzo szybko przenieś dane z jednej strony na drugą. Korzystanie z jednej z tych aplikacji może dać opcję uruchomienia QGIS na migawce danych.

AndrewM
źródło
1
czy możesz zasugerować takie narzędzie?
Jens