отображение более миллиона точек с использованием QGIS

9

Я пытаюсь нанести на карту CSV с более чем миллионом точек в США без метаданных. Я никогда не пытался отобразить столько данных и хочу знать, какие шаги мне следует предпринять. Я знаю, что это слишком много данных для QGIS, поэтому я попытался разбить их на 100 000 строчных CSV, но потом получил много файлов, с которыми я не знал, что делать. Я думаю, что было бы лучше объединить точки по блоку переписи, но не знаете лучший способ сделать это, используя Javascript (я никогда не использовал Python) или инструменты командной строки? Какие-либо предложения?

user63623
источник
2
Используя PostGIS, вы можете легко загрузить CSV в базу данных, а затем преобразовать столбцы широты и долготы в геометрию, и все готово! Затем вы можете выполнять все операции суммирования / агрегирования по блокам переписи в PostGIS ... что вы собираетесь делать с Turf?
DPSSpatial
2
Привет, добро пожаловать в ГИС стека обмена. Я бы порекомендовал вам взглянуть на PostgreSQL / PostGIS, пространственно включенный механизм баз данных, который прекрасно взаимодействует с QGIS. После того, как ваши данные загружены в базу данных, присоединиться и объединиться, например, в переписные участки или выполнить кластеризацию по ним будет относительно тривиально.
Рафаэль
Я думаю, что комментарий Рафаэля пока лучший «ответ». 1 миллион баллов - это тривиально работать после их загрузки в PostGIS, и инструменты интерфейса QGIS-PostGIS очень хороши.
Александр
Спасибо @mapBaker и @raphael! Я не думал об использовании Postgis таким образом. Я импортировал CSV в QGUS. Есть ли способ конвертировать это в PostGIS?
user63623
@raphael, знаете ли вы хороший способ конвертировать X, Y в геометрию в PostGIS, когда существует более 1 миллиона записей? Я пытался повторить это с помощью метода ST_MakePoint, но память взорвалась - может ли ST_GeomFromText использовать существующие столбцы X и Y?
DPSSpatial

Ответы:

9

Я бы порекомендовал использовать PostgreSQL / PostGIS, так как он изначально поддерживается QGIS, имеет несколько удобных встроенных функций для соединения с другими пространственными данными (такими как участки переписи), а использование базы данных должно ограничивать проблемы с памятью с большими наборами данных. Мой рекомендуемый набор шагов ниже. Для выполнения команд SQL вы можете использовать PGAdmin или QGIS, первая из которых даст вам более информативные ошибки в запросах, а вторая позволит вам загружать результаты запросов в виде слоев на карте. Для доступа к последнему перейдите Database > DB Manager > DB Managerи нажмите на вторую кнопку.

  1. Начните настройку PostGIS , а также быстрые установщики
  2. Создайте таблицу в своей базе данных, используя CREATE TABLEкоманду ( пример ) либо в окне SQL QGIS, либо в окне SQL PGAdmin
  3. Импортируйте ваш csv с помощью команды COPY sql или встроенной функции импорта PGAdmin, щелкнув правой кнопкой мыши по вашей таблице в PGAdmin и нажав Import...(последний вариант может быть деликатным, поэтому я рекомендую COPY для больших наборов данных).
  4. Добавьте столбец геометрии в таблицу, выполнив следующий SQL-запрос в PGAdmin или в окне QGIS SQL.

    ALTER TABLE some_table ADD COLUMN geom geometry(Point,4326);
    
  5. Создайте геометрию точек, используя что-то вроде

    UPDATE yourtable SET geom = ST_SetSRID(ST_MakePoint( x, y), 4326);
    
  6. Показать подмножество данных, используя SELECTоператор с чем-то вродеLIMIT 50000

  7. Или присоединитесь к данным переписи с чем-то вроде

    ВЫБЕРИТЕ c.gid, c.geom
    ОТ ПЕРЕПИСИ c
    ВНУТРЕННИМ СОЕДИНЕНИЕМ ваших данных НА ST_Within (yourdata.geom, c.geom)

Ссылки на функции:
ST_Within
ST_MakePoint
ST_SetSRID

Рафаэль
источник
Спасибо за ответ. Я попытался шаг 3, но я не могу редактировать таблицу в QGIS. Есть ли другой способ добавить столбец без использования плагина?
user63623
@ user63623 Я обновил свой ответ, добавив дополнительный шаг, который должен решить вашу проблему.
Рафаэль
спасибо, я думаю, что шаг между 1 и 2 отсутствует, когда вы импортируете CSV-слой в QGIS, вам нужно сохранить его как файл shp для создания базы данных. Правильно? Это зависает, когда я пытаюсь это все же. Я также пытался использовать PGAdmin, но не могу найти функцию импорта.
user63623
В PGAdmin вы сначала должны СОЗДАТЬ свою таблицу, используя SQL-запрос, подобный следующему: stackoverflow.com/questions/9826833/create-table-in-postgresql , со всеми вашими столбцами из csv, правильно определенными. Затем вы можете щелкнуть правой кнопкой мыши имя таблицы>, Import...чтобы получить доступ к мастеру импорта, или использовать команду COPY postgresql.org/docs/current/static/sql-copy.html Я обновлю ответ
Raphael
3

Недавно я работал с набором данных в 1,4 миллиона точек, импортированных из CSV. Я убедился, чтобы удалить все ненужные поля в CSV. Для меня это работало нормально, хотя для выполнения некоторых процессов потребовалось немного времени. (QGIS 2.12, 64-битная Windows 7, 8 ГБ ОЗУ)

HDunn
источник
2

Кандидат в R, в псевдокоде:

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")

В результате вы получите файл filepoints.tab в рабочем каталоге, который вы можете прочитать с помощью QGIS. Или выберите «ESRI Shapefile», чтобы создать файл filepoints.shp или любой другой формат, который вам нужен. QGIS использует GDAL так же, как и rgdal, так что есть много совпадений. Есть аналогичные механизмы Python.

Поскольку у вас нет метаданных, вы можете иметь набор после назначения координат (x) для установки proj4string (x) <- CRS («+ proj = что-то + и т. Д.»), Но мы можем только догадываться о ваших данных.

mdsumner
источник