Как быть, если границы зон переписи населения изменились?
-
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 11 фев 2019, 17:07
- Репутация: 0
- Откуда: Москва
Как быть, если границы зон переписи населения изменились?
Добрый день. Работаю с панельными данными, временной промежуток в 10 лет, и на самом "детализированном" уровне: полигоны в гис примерно соответствуют 1 зданию (census block). Данные переписи населения. Проблема в том, что за 10 лет границы многих полигонов изменились (например, если на месте поля построили здания, то поле, раньше бывшее одним полигоном, разбивается на несколько, которые примерно соответствуют зданиям). По сути, у меня сейчас два шеипфаила с полигонами, и мне бы хотелось, чтобы QGis их сравнил между собой, выделив полигоны, которые:
1. не изменились
2. были объединены в 1 большой полигон
3. были разделены на несколько полигонов
Есть идеи, как это можно сделать? Желательно в Qgis. Заранее спасибо!
1. не изменились
2. были объединены в 1 большой полигон
3. были разделены на несколько полигонов
Есть идеи, как это можно сделать? Желательно в Qgis. Заранее спасибо!
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Как быть, если границы зон переписи населения изменились?
если полигон не изменился, ST_Difference вернёт пустую геометрию
-
- Гуру
- Сообщения: 4057
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Как быть, если границы зон переписи населения изменились?
снесите ID полигонов на достаточно детальный растр (GDAL rasterize), и постройте перекрестную таблицу двух растров (затащив растры в R, Python, или еще куда). С векторами намаетесь, если полигонов много - а выгода минимальная, при современных мощностях компьютеров.
-
- Участник
- Сообщения: 67
- Зарегистрирован: 13 мар 2018, 08:59
- Репутация: 22
- Откуда: MO
Re: Как быть, если границы зон переписи населения изменились?
Если про 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
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
-
- Завсегдатай
- Сообщения: 406
- Зарегистрирован: 14 авг 2006, 16:21
- Репутация: 25
Re: Как быть, если границы зон переписи населения изменились?
а я бы сделал так:
берем два полигональных слоя и для каждого слоя определяем центр полигона и площадь полигона.
Затем берем центроиды первого слоя и долбим ими полигоны второго слоя.
Смотрим в какой полигон попал центроид (площадь полигона).
Потом делаем наоборот.
берем два полигональных слоя и для каждого слоя определяем центр полигона и площадь полигона.
Затем берем центроиды первого слоя и долбим ими полигоны второго слоя.
Смотрим в какой полигон попал центроид (площадь полигона).
Потом делаем наоборот.
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Как быть, если границы зон переписи населения изменились?
а сразу в БД загрузить, построить индекс?На днях делал скрипт, который должен был получить разницу между 2 наборами данных
Из рабочего набора 5тыс вычитал шаблон 30тыс геометрий.
Запрос "в лоб" не отработал и за 14 часов.
Пришлось бить набор в цикле пачками по 100 объектов, потом по габариту пачки вырезать пересекающиеся геометрии из шаблона, затем их вычитать, а потом результаты клеить )))
На отладку алгоритма ушло 1,5 дня. Хотя потом он отработал за 12 минут.
-
- Гуру
- Сообщения: 4057
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Как быть, если границы зон переписи населения изменились?
в растр его, работает на порядок быстрее, чем вектор в MSSQL со всеми индексами и пр. За секунды ...
-
- Участник
- Сообщения: 67
- Зарегистрирован: 13 мар 2018, 08:59
- Репутация: 22
- Откуда: MO
Re: Как быть, если границы зон переписи населения изменились?
Тут БД нужна, я на удаленке на виртуалке. Там есть рабочий постгре, но он боевой и туда так просто не запустят. Да и опыт зато какой приобрел )))trir писал(а): ↑12 фев 2019, 10:42БД загрузить, построить индекс?
К сожалению с растрами плотно не работал.gamm писал(а): ↑12 фев 2019, 11:32в растр его, работает на порядок быстрее, чем вектор в MSSQL со всеми индексами и пр. За секунды ...
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Как быть, если границы зон переписи населения изменились?
а даные себе скачать? или поднять ещё один постгре?Тут БД нужна, я на удаленке на виртуалке.
если там есть БД - почему данные не там?
-
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 11 фев 2019, 17:07
- Репутация: 0
- Откуда: Москва
Re: Как быть, если границы зон переписи населения изменились?
Ох, спасибо всем за советы, попробую разобраться (ну да, я сходу не совсем поняла суть некоторых предложений, но всё ещё впереди). Также обнаружилось, что даже те полигоны, которые по сути одинаковые, формально разные, потому что были перерисованы даже те полигоны, которые не изменились. Чуть шире там, чуть длиннее здесь - и вот уже для программы они разные. На данный момент пытаюсь заиметь таблицу с кодами полигонов, в которой обозначено, какой полигон был разбит на несколько (и есть код старого полигона и новых). Идея попробовать с кодами сопоставить это всё с гисе, но, возможно, это тупиковый путь... Я за эти полигоны так держусь, потому что меня интересует информация, к нем прикрепленная, например, как изменилось количество машин в каждом полигоне за 10 лет
-
- Гуру
- Сообщения: 4057
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Как быть, если границы зон переписи населения изменились?
тем более никакие полигоны вам не нужны. Сносите на растр свои машины (или что там еще есть), и вычитайте растры. Потом собирайте разницу в любые новые полигоны, и раскрашивайте, как новогоднюю елку..Albaricoque писал(а): ↑13 фев 2019, 12:44Я за эти полигоны так держусь, потому что меня интересует информация, к нем прикрепленная, например, как изменилось количество машин в каждом полигоне за 10 лет
Кто сейчас на конференции
Сейчас этот форум просматривают: Amazon [Bot] и 23 гостя