Ładowanie danych OpenStreetMap do QGIS?

36

W QGIS 1.8 użyłem wtyczki openstreetmap do żądania danych z serwera lub otworzyłem plik .osm XML, który wytworzył 3 warstwy (wielokąty, polilinie i punkty) w QGIS.

To było świetne (daj lub weź 64-bitowy błąd, który ma duży wpływ na świeżo zmapowany obszar, nad którym pracuję), ale jak to zrobić w QGIS 2.x?

Nie mogę znaleźć żadnej zaktualizowanej dokumentacji na ten temat.

W menu wektorowym próbowałem importować z serwerów osm, otrzymuję plik .osm, ale utknąłem. Istnieje opcja menu służąca do ładowania pliku XML, ale tworzy on przestrzenną bazę danych, która najwyraźniej ma tabele inne niż geometria, gdy próbuję dodać go jako warstwę przestrzenną. Jeśli otworzę tabelę atrybutów, zobaczę identyfikatory węzłów, sposoby i tak dalej, ale nie jestem w stanie wymyślić, jak z nich korzystać.

Próbowałem także dodać warstwę wektorową z pliku XML .osm. Dostaję okno gpsbabel, które nic nie pokazuje, a na koniec komunikat o nieprawidłowym źródle danych w QGIS.

Laurent S.
źródło
2
Tom, napisałem instrukcje krok po kroku, jak uzyskać dane OSM w QGIS. Mam nadzieję, że dla początkujących jest to proste. qgistutorials.com/en/docs/downloading_osm_data.html
przemyślenia przestrzenne
Oto przyzwoity styl (z ładnymi instrukcjami instalacji): github.com/yannos/Beautiful_OSM_in_QGIS Jest przeznaczony dla PostGIS (nie Spatialite).
kontextify
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie. - Z recenzji
csk

Odpowiedzi:

40

Aktualizacja dla QGIS 3.x : Stary importer OSM z QGIS 2 został upuszczony w QGIS 3 z powodu wielu nierozwiązanych błędów. Wtyczka QuickOSM umożliwia również odczytanie plików surowych OSM. Zamiast tego możesz użyć warstwy użytkownika - Dodaj warstwę - Dodaj warstwę wektorową. W takim przypadku dane OSM są otwierane za pomocą GDAL zgodnie z dokumentacją http://gdal.org/drv_osm.html


W QGIS 2.x są 3 kroki

  1. Pobierz plik OSM, możesz go uzyskać za pomocą josm lub overpass lub dowolnego innego źródła. To musi być poprawny plik XML. Możesz go również pobrać z qgis Vector> OpenStreetMap> Pobierz menu OSM , ale czasami nie daje to rezultatu. Polecam korzystanie z wiaduktu turbo .
  2. Wektor> OpenStreetMap> Importuj topologię z XML , to, jak powiedziałeś, stworzy przestrzenną bazę danych z tabelami nie geometrii. Myślę, że to topologia.
  3. Na koniec możesz pobrać dane przez Vector> OpenStreetMap> Eksportuj topologię do Spatialite , tutaj musisz podać plik db wykonany powyżej i tak jak w qgis 1.8 będziesz miał opcję wyboru punktów, linii lub wielokątów . Poniżej w sekcji wyeksportowanych tagów możesz załadować wszystkie tagi zawarte w pliku i wybrać tylko te, których potrzebujesz. Jest to dodatkowa funkcja niż w 1.8.

Warstwa zostanie dodana do mapy, jeśli chcesz wszystkie węzły, możesz powtórzyć krok 3 z innymi opcjami.

http://wiki.openstreetmap.org/wiki/QGIS#QGIS2_OpenStreetMap_Vectors

neogeomat
źródło
4
To wydaje się niezwykle skomplikowane, ale działa. Dla jasności po kroku 3 nadal musisz dodać warstwę przestrzenną, połączyć się z utworzoną bazą danych i wybrać warstwę utworzoną w kroku 3, aby w końcu zobaczyć wynik. Dzięki za pomoc!
Laurent S
Dla mnie warstwy zostały automatycznie utworzone i dodane. Połączenie z bazą danych zostało ustanowione w kroku 2 (chyba że odznaczyłeś to).
AndreJ
15

Zauważyłem, że pobieranie danych OSM za pomocą wtyczki i przeprowadzanie importu i eksportu jest bardzo uciążliwe. Dlatego napisałem inne rozwiązanie: http://anitagraser.com/2014/05/31/a-guide-to-googlemaps-like-maps-with-osm-in-qgis/

Podsumowanie:

Surowe pliki OSM mogą być dość duże. Dlatego zdecydowanie lepiej jest pobrać skompresowany binarny format .pbf zamiast formatu XML .osm. Jako źródło pobierania polecam Geofabrik .

W pierwszym etapie wstępnego przetwarzania: wyodrębnieniu interesującego nas obszaru, możemy użyć Osmozy:

C:\Users\anita_000\Geodata\OSM_Noirmoutier>..\bin\osmosis.bat --read-pbf pays-de-la-loire-latest.osm.pbf --bounding-box left=-2.59 bottom=46.58 right=-1.44 top=47.07 --write-xml noirmoutier.osm

Chociaż QGIS może również ładować pliki .osm, zauważyłem, że wydajność i dostęp do atrybutów znacznie się poprawią, jeśli plik .osm zostanie przekonwertowany na spatialite.

C:\Users\anita_000\Geodata\OSM_Noirmoutier>ogr2ogr -f "SQLite" -dsco SPATIALITE=YES noirmoutier.db noirmoutier.osm

W QGIS możemy ładować punkty, linie i wieloboki za pomocą Add Layer SpatiaLite. Podczas ładowania tabel przestrzennych pojawiają się pewne problemy:

  • Nie ma wielokąta lądowego. Zamiast tego istnieją elementy linii „wybrzeża”.
  • Brakuje większości wielokątów rzecznych. Zamiast tego istnieją elementy linii „brzeg rzeki”.

Tworzenie brakujących wielokątów rzecznych nie jest wielkim problemem:

  1. wybierz wszystkie linie, w których droga wodna = brzeg rzeki.
  2. użyj narzędzia Poligonizacja z przybornika przetwarzania, aby automatycznie utworzyć wielokąty z obszarów zamkniętych wybranymi liniami brzegów rzeki. (Uwaga: Przetwarzanie domyślnie działa tylko na wybrane funkcje, ale to ustawienie można zmienić w ustawieniach Przetwarzania).

Tworzenie wielokąta lądowego (lub wielokąta morskiego, jeśli wolisz, z jakiegoś powodu) jest nieco bardziej zaangażowane, ponieważ przez większość czasu linia brzegowa nie będzie zamknięta z tego prostego powodu, że często wycinamy kawałek ziemi z głównego kontynentu . Dlatego zanim będziemy mogli korzystać z narzędzi Poligonizowania, musimy zamknąć obszar. Aby to zrobić, sugeruję najpierw wybrać linię brzegową za pomocą „other_tags” LIKE '% „natural” => „coastline”% ”i utworzyć nową warstwę z tego wyboru (zapisz wybór jako…) i edytuj ją (nie zapomnij aby włączyć przyciąganie!), aby dodać linie, aby zamknąć obszar. Następnie poligonizuj.

podmrok
źródło
Jeśli prowadzisz dość niezawodny komputer i chcesz, aby etap ogr2ogr został ukończony przed następną epoką lodowcową, dodaj --config OGR_SQLITE_SYNCHRONOUS OFF.
scruss
6

Jeśli nie podoba ci się wtyczka, pobierz potrzebne dane OSM za pomocą Overpass API i dodaj wynik do QGIS za pomocą Add Vector Layer( All filesfiltr enabeling ).

QGIS 2.0 korzysta z importera ogr2ogr OSM GDAL 1.10, który wykonuje dobrą robotę.

Obsługa relacji wydaje się obecnie lepsza niż wtyczka.

Po prostu upewnij się, że pobierasz całkowicie sposoby i relacje , czyli wszystkie węzły tych dróg i wszystkich członków relacji ze wszystkimi ich węzłami.

AndreJ
źródło
4

Wiesz, nie musisz umieszczać danych w SpatialLite. Możesz po prostu:

  1. Pobierz dane (Vector> OpenStreetMap> Pobierz dane, tworzy plik .osm)
  2. Załaduj dane (plik .osm) jako warstwę wektorową (Warstwa> Dodaj warstwę wektorową). Po wybraniu pliku pojawi się pytanie, które warstwy chcesz dodać (ponieważ GDAL tworzy osobne pliki dla każdego typu: Point, Line, MultiLine, MultiPolygon, GeomCollection). Wybierz, co chcesz i załaduj.
neuhausr
źródło
Działa to w jakiś sposób, ale wydaje się, że nie rozdziela warstw na podstawie znaczników. Zasadniczo więc drogi i rzeki kończą się w tej samej warstwie linii, co nie jest tak naprawdę pomocne, jeśli chcesz przeprowadzić analizę uzyskanych danych.
Laurent S
Z pytania nie wynikało jasno, co robiłeś z danymi po ich zaimportowaniu. Możesz oczywiście wybrać dowolne funkcje z danych w QGIS. Jak wspomniano powyżej, jeśli wiesz, że chcesz tylko niektórych danych (i nie jest to zbyt duży obszar), pobieranie danych za pomocą Overpass prawdopodobnie byłoby lepsze, ponieważ możesz wstępnie wybrać tylko niektóre funkcje. Uważam, że Overpass Turbo to przyjazny dla użytkownika sposób na tworzenie zapytań. Oto przykład wszystkich autostrad w obwiedni: overpass-turbo.eu/s/2VX
neuhausr