Как быть, если границы зон переписи населения изменились?

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Albaricoque
Новоприбывший
Сообщения: 3
Зарегистрирован: 11 фев 2019, 17:07
Репутация: 0
Откуда: Москва

Как быть, если границы зон переписи населения изменились?

Сообщение Albaricoque » 11 фев 2019, 17:28

Добрый день. Работаю с панельными данными, временной промежуток в 10 лет, и на самом "детализированном" уровне: полигоны в гис примерно соответствуют 1 зданию (census block). Данные переписи населения. Проблема в том, что за 10 лет границы многих полигонов изменились (например, если на месте поля построили здания, то поле, раньше бывшее одним полигоном, разбивается на несколько, которые примерно соответствуют зданиям). По сути, у меня сейчас два шеипфаила с полигонами, и мне бы хотелось, чтобы QGis их сравнил между собой, выделив полигоны, которые:
1. не изменились
2. были объединены в 1 большой полигон
3. были разделены на несколько полигонов
Есть идеи, как это можно сделать? Желательно в Qgis. Заранее спасибо!

trir
Гуру
Сообщения: 5278
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1014
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Как быть, если границы зон переписи населения изменились?

Сообщение trir » 11 фев 2019, 17:47

если полигон не изменился, ST_Difference вернёт пустую геометрию

gamm
Гуру
Сообщения: 4048
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Как быть, если границы зон переписи населения изменились?

Сообщение gamm » 12 фев 2019, 07:41

снесите ID полигонов на достаточно детальный растр (GDAL rasterize), и постройте перекрестную таблицу двух растров (затащив растры в R, Python, или еще куда). С векторами намаетесь, если полигонов много - а выгода минимальная, при современных мощностях компьютеров.

Dmitry Stasev
Участник
Сообщения: 67
Зарегистрирован: 13 мар 2018, 08:59
Репутация: 22
Откуда: MO

Re: Как быть, если границы зон переписи населения изменились?

Сообщение Dmitry Stasev » 12 фев 2019, 09:24

Если про Qgis и нужен анализ изменений то Вам может помочь виртуальный слой и составление в нем правильных
SQL запросов с использованием пространственных функций (что и советовал trir)
https://www.gaia-gis.it/spatialite-3.0. ... 0.html#p12
https://www.gaia-gis.it/spatialite-3.0. ... 0.html#p14
Но если нет понимания процессов выборки данных sql запросом, то это очень тернистый путь )
Плюс все операции с геометриями любят топологически-валидные геометрии.
И если наборы объемные то это может быть очень долго!

На днях делал скрипт, который должен был получить разницу между 2 наборами данных
Из рабочего набора 5тыс вычитал шаблон 30тыс геометрий.
Запрос "в лоб" не отработал и за 14 часов.
Пришлось бить набор в цикле пачками по 100 объектов, потом по габариту пачки вырезать пересекающиеся геометрии из шаблона, затем их вычитать, а потом результаты клеить )))
На отладку алгоритма ушло 1,5 дня. Хотя потом он отработал за 12 минут.
Так что смотрите сами, возможно лучше сразу смотреть на растры.

PS
--
Для этих танцев с бубном потребовался еще PyQGIS

tsarev
Завсегдатай
Сообщения: 406
Зарегистрирован: 14 авг 2006, 16:21
Репутация: 25

Re: Как быть, если границы зон переписи населения изменились?

Сообщение tsarev » 12 фев 2019, 10:22

а я бы сделал так:
берем два полигональных слоя и для каждого слоя определяем центр полигона и площадь полигона.
Затем берем центроиды первого слоя и долбим ими полигоны второго слоя.
Смотрим в какой полигон попал центроид (площадь полигона).
Потом делаем наоборот.

trir
Гуру
Сообщения: 5278
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1014
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Как быть, если границы зон переписи населения изменились?

Сообщение trir » 12 фев 2019, 10:42

На днях делал скрипт, который должен был получить разницу между 2 наборами данных
Из рабочего набора 5тыс вычитал шаблон 30тыс геометрий.
Запрос "в лоб" не отработал и за 14 часов.
Пришлось бить набор в цикле пачками по 100 объектов, потом по габариту пачки вырезать пересекающиеся геометрии из шаблона, затем их вычитать, а потом результаты клеить )))
На отладку алгоритма ушло 1,5 дня. Хотя потом он отработал за 12 минут.
а сразу в БД загрузить, построить индекс?

gamm
Гуру
Сообщения: 4048
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Как быть, если границы зон переписи населения изменились?

Сообщение gamm » 12 фев 2019, 11:32

Dmitry Stasev писал(а):
12 фев 2019, 09:24
Запрос "в лоб" не отработал и за 14 часов.
в растр его, работает на порядок быстрее, чем вектор в MSSQL со всеми индексами и пр. За секунды ...

Dmitry Stasev
Участник
Сообщения: 67
Зарегистрирован: 13 мар 2018, 08:59
Репутация: 22
Откуда: MO

Re: Как быть, если границы зон переписи населения изменились?

Сообщение Dmitry Stasev » 12 фев 2019, 12:03

trir писал(а):
12 фев 2019, 10:42
БД загрузить, построить индекс?
Тут БД нужна, я на удаленке на виртуалке. Там есть рабочий постгре, но он боевой и туда так просто не запустят. Да и опыт зато какой приобрел )))
gamm писал(а):
12 фев 2019, 11:32
в растр его, работает на порядок быстрее, чем вектор в MSSQL со всеми индексами и пр. За секунды ...
К сожалению с растрами плотно не работал.

trir
Гуру
Сообщения: 5278
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1014
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Как быть, если границы зон переписи населения изменились?

Сообщение trir » 12 фев 2019, 12:10

Тут БД нужна, я на удаленке на виртуалке.
а даные себе скачать? или поднять ещё один постгре?
если там есть БД - почему данные не там?

Albaricoque
Новоприбывший
Сообщения: 3
Зарегистрирован: 11 фев 2019, 17:07
Репутация: 0
Откуда: Москва

Re: Как быть, если границы зон переписи населения изменились?

Сообщение Albaricoque » 13 фев 2019, 12:44

Ох, спасибо всем за советы, попробую разобраться (ну да, я сходу не совсем поняла суть некоторых предложений, но всё ещё впереди). Также обнаружилось, что даже те полигоны, которые по сути одинаковые, формально разные, потому что были перерисованы даже те полигоны, которые не изменились. Чуть шире там, чуть длиннее здесь - и вот уже для программы они разные. На данный момент пытаюсь заиметь таблицу с кодами полигонов, в которой обозначено, какой полигон был разбит на несколько (и есть код старого полигона и новых). Идея попробовать с кодами сопоставить это всё с гисе, но, возможно, это тупиковый путь... Я за эти полигоны так держусь, потому что меня интересует информация, к нем прикрепленная, например, как изменилось количество машин в каждом полигоне за 10 лет

gamm
Гуру
Сообщения: 4048
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Как быть, если границы зон переписи населения изменились?

Сообщение gamm » 13 фев 2019, 13:59

Albaricoque писал(а):
13 фев 2019, 12:44
Я за эти полигоны так держусь, потому что меня интересует информация, к нем прикрепленная, например, как изменилось количество машин в каждом полигоне за 10 лет
тем более никакие полигоны вам не нужны. Сносите на растр свои машины (или что там еще есть), и вычитайте растры. Потом собирайте разницу в любые новые полигоны, и раскрашивайте, как новогоднюю елку..

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot] и 9 гостей