відображення понад мільйон точок за допомогою QGIS


9

Я намагаюся зіставити CSV з понад мільйонам Lat / lon точок у США без метаданих. Я ніколи не намагався зіставити стільки даних і хочу знати, які кроки я повинен зробити. Я знаю, що це занадто багато даних для QGIS, тому я спробував розділити їх на 100000 ліній CSV, але потім отримав багато файлів, з якими я не знав, що з цим робити. Я думаю, що може бути найкращим чином зібрати точки за допомогою блоку перепису, але не знаю найкращого способу зробити це за допомогою Javascript (я ніколи не використовував Python) або інструменти командного рядка? Будь-які пропозиції?


2
Використовуючи PostGIS, ви можете легко завантажити CSV в базу даних, а потім перетворити стовпці lat / lon в геометрію, і все буде зроблено! Тоді ви можете зробити все підсумовування / агрегування за блоком перепису, який ви хочете провести в PostGIS ... що ви шукаєте робити з Turf?
DPSSpace

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?
DPSSpace

Відповіді:


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 Гб оперативної пам'яті)


2

Fwiw з кандидата на 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 = щось + тощо"), але ми можемо лише здогадуватися про ваші дані.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.