mapowanie ponad miliona punktów za pomocą QGIS


9

Próbuję zmapować plik CSV z ponad milionem punktów Lat / Lon w USA bez metadanych. Nigdy nie próbowałem mapować tylu danych i chcę wiedzieć, jakie kroki powinienem podjąć. Wiem, że to za dużo danych dla QGIS, więc spróbowałem podzielić je na 100 000 linii CSV, ale potem dostałem wiele plików, z którymi nie wiedziałem, co zrobić. Myślę, że najlepiej byłoby agregować punkty według bloku spisu, ale nie wiem, jak to zrobić za pomocą Javascript (nigdy nie korzystałem z Pythona) lub narzędzi wiersza poleceń? Jakieś sugestie?


2
Za pomocą PostGIS możesz łatwo załadować CSV do bazy danych, a następnie przekonwertować kolumny lat / lon na geometrię i gotowe! Następnie możesz wykonać wszystkie podsumowania / agregacje według bloku spisu, które chcesz w PostGIS ... co chcesz zrobić z Turfem?
DPSSpatial

2
Cześć, witamy w GIS stackexchange. Polecam rzucić okiem na PostgreSQL / PostGIS, silnik bazy danych włączony przestrzennie, który ładnie współpracuje z QGIS. Po wczytaniu danych do bazy danych łączenie i agregowanie na przykład na podstawie spisów powszechnych lub grupowanie na nich będzie stosunkowo proste.
raphael

Myślę, że jak dotąd komentarz Rafaela jest najlepszą „odpowiedzią”. Praca z milionem punktów jest banalna, gdy zostaną załadowane do PostGIS, a narzędzia interfejsu QGIS-PostGIS są bardzo dobre.
Alexander

Dzięki @mapBaker i @raphael! Nie myślałem o takim użyciu Postgis. Zaimportowałem CSV do QGUS. Czy istnieje możliwość przekonwertowania go na PostGIS?
user63623,

@ Raphael, czy znasz dobry sposób na konwersję X, Y na geometrię w PostGIS, gdy istnieje> 1 milion rekordów? Próbowałem replikować to przy użyciu metody ST_MakePoint, ale pamięć została zbombardowana - czy ST_GeomFromText może wykorzystywać istniejące kolumny X i Y?
DPSSpatial

Odpowiedzi:


9

Polecam korzystanie z PostgreSQL / PostGIS, ponieważ jest on natywnie obsługiwany przez QGIS, ma kilka przydatnych wbudowanych funkcji do łączenia z innymi danymi przestrzennymi (np. Traktami spisowymi), a użycie bazy danych powinno ograniczyć problemy z pamięcią przy dużych zestawach danych. Mój zalecany zestaw kroków znajduje się poniżej. Aby wykonać polecenia SQL, możesz użyć PGAdmin lub QGIS, ten pierwszy dostarczy więcej informacji o błędach w zapytaniach, drugi pozwoli załadować wyniki zapytań jako warstwy na mapie. Aby uzyskać dostęp do tego ostatniego, przejdź do Database > DB Manager > DB Manageri kliknij drugi przycisk.

  1. Rozpocznij konfigurowanie PostGIS , także szybkich instalatorów
  2. Utwórz tabelę w bazie danych za pomocą CREATE TABLEpolecenia ( przykład ) w oknie SQL QGIS lub w oknie SQL PGAdmin
  3. Zaimportuj plik csv za pomocą polecenia COPY sql lub wbudowanej funkcji importowania PGAdmin, klikając prawym przyciskiem myszy tabelę w PGAdmin i klikając Import...(to ostatnie może być delikatne, więc zaleciłbym COPY dla większych zestawów danych).
  4. Dodaj kolumnę geometrii do tabeli, wykonując następujący kod SQL w oknie PGAdmin lub QGIS SQL.

    ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);
    
  5. Utwórz geometrie punktów za pomocą czegoś podobnego

    UPDATE yourtable SET geom = ST_SetSRID(ST_MakePoint( x, y), 4326);
    
  6. Wyświetl podzbiór danych, używając SELECTinstrukcji z czymś podobnymLIMIT 50000

  7. Lub dołącz do danych spisu z czymś takim

    WYBIERZ c.gid, c.geom
    Z spisu c
    WEWNĘTRZNE DOŁĄCZ yourdata ON ST_Within (yourdata.geom, c.geom)

Odnośniki funkcji:
ST_Within
ST_MakePoint
ST_SetSRID


Dziękuję za odpowiedź. Próbowałem krok 3, ale nie mogę edytować tabeli w QGIS. Czy istnieje inny sposób dodania kolumny bez użycia wtyczki?
user63623,

@ user63623 Zaktualizowałem swoją odpowiedź, dodając dodatkowy krok, który powinien rozwiązać Twój problem.
raphael

dzięki, myślę, że brakuje kroku między 1 a 2. Kiedy importujesz warstwę csv do QGIS, musisz zapisać ją jako plik shp, aby utworzyć bazę danych. Dobrze? Jednak zawiesza się, gdy próbuję tego. Próbowałem również przy użyciu PGAdmin, ale nie mogę znaleźć funkcji importowania.
user63623,

W PGAdmin należy najpierw utworzyć tabelę przy użyciu zapytania SQL, takiego jak: stackoverflow.com/questions/9826833/create-table-in-postgresql , z poprawnie zdefiniowanymi wszystkimi kolumnami z pliku csv. Następnie kliknij prawym przyciskiem myszy tablename>, Import...aby uzyskać dostęp do kreatora importu, lub użyj polecenia COPY postgresql.org/docs/current/static/sql-copy.html Zaktualizuję odpowiedź
raphael

3

Ostatnio pracowałem z zestawem danych 1,4 miliona punktów zaimportowanym z pliku CSV. Upewniłem się, że usunąłem niepotrzebne pola w pliku csv. Działa to dla mnie dobrze, chociaż niektóre procesy zajmowały trochę czasu. (QGIS 2.12, 64-bitowy Windows 7, 8 Gb RAM)


2

Fwiw kandydata R, w pseudokodzie:

library(rgdal) ## for spatial export
library(readr) ## for fast file read

x <- read_csv("file.csv") 
names(x)  ## some as yet unknown columns

coordinates(x) <- c("x", "y")  ## your coordinate names may be different

writeOGR(x, ".", layer = "filepoints", driver = "MapInfo File")

Otrzymasz plik filepoints.tab w katalogu roboczym, który możesz czytać za pomocą QGIS. Lub wybierz „ESRI Shapefile”, aby utworzyć filepoints.shp lub inny potrzebny Ci format. QGIS używa GDAL podobnie jak rgdal, więc nakłada się wiele. Istnieją analogiczne mechanizmy Pythona.

Ponieważ nie masz żadnych metadanych, możesz mieć zestaw po przypisaniu współrzędnych (x), aby ustawić proj4string (x) <- CRS („+ proj = coś + itd.”), Ale możemy tylko zgadywać dla twoich danych.

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.