Страница 1 из 1

Стиль слоя на основе внешних данных

Добавлено: 19 июл 2017, 19:14
fort
Есть набор данных OSM в QGIS. В нем есть слой с полигонами зданий. У нашего городского провайдера на сайте есть список домов, в которых он присутствует. Мне нужно раскрасить полигоны этих домов на карте другим цветом. Да, провайдеров будет несколько.
Кое-что я уже попробовал. Создал новый shape-слой providers с полями id,provider и osmid. Далее добавил в таблицу этого слоя несколько строк. Значения osmid копировал из слоя building_polygon.shp для конкртеного дома, значение provider указывал в соответсвии со списом адресов провайдера. Далее для слоя building_polygon создал связь со слоем providers по полю osmid. Теперь для слоя building_polygon стало доступно поле provider. Теперь в качестве стиля для слоя building_polygon можно использовать стиль "Уникальные значения", в качестве поля выбрать providers_provider и задать разные цвета для разных значений полей.

В принципе получается то что и хотелось. Но непонятно как реализовать это для всех домов из списка. Сам список домов я могу привести к любому виду и руками (csv, например), но копировать для каждого адреса поле osmid в отдельную таблицу это уже слишком много ручной работы. Хочется найти более элегантное решение. Есть подозрения что подобную задачу можно решить несколькими способами, и придуманный мной не самый простой.

Сейчас думаю импортировать список домов целиком в таблицу нового слоя и попробовать настроить связь с ним слоя building_polygon по полям A_STRT и A_HSNMBR. Но прийдется унифицировать названия улиц.

Re: Стиль слоя на основе внешних данных

Добавлено: 19 июл 2017, 20:09
trir

Re: Стиль слоя на основе внешних данных

Добавлено: 24 июл 2017, 12:20
tsarev
Самое простое - сделать связь списков по адресам.
Второй вариант - получить координаты центров домов из списка провайдера и наложить на полигоны Ваших домов.
Ряд объектов выпадет, т.к. конфигурация дома может быть Г-образной.
Для проверки можно получить центроиды полигонов OSM и сравнить с центроидами объектов провайдеров.

Re: Стиль слоя на основе внешних данных

Добавлено: 24 июл 2017, 14:36
fort
tsarev писал(а):Самое простое - сделать связь списков по адресам.
Хотел так сделать. Создал новый слой из списка домов (без геометрии), загрузил в QGIS. Но связь между слоями, похоже, настраивается только по 1 полю, а мне нужно по двум полям(улица и номер дома).
Пока выгрузил список всех домов города в текстовый файл и убрал все колонки кроме omsid, a_strt и a_hsnmbr.
Теперь в одном списке есть все дома города с полем osmid, в другом - дома провайдера, но без поля osmid. Осталось из первого списка получить значения osmid для второго. Затем его можно будет загрузить в QGIS и по полю osmid связать со слоем зданий osm.
tsarev писал(а):Второй вариант - получить координаты центров домов из списка провайдера и наложить на полигоны Ваших домов.
Это сложно звучит, даже не знаю как такое можно реализовать.

Re: Стиль слоя на основе внешних данных

Добавлено: 24 июл 2017, 14:51
trir
Во первых - не факт, что нужный дом есть в OSM и у нег есть все нужные параметры. Но если он есть и все параметры заданы правильно - его можно получить через Overpass API

Re: Стиль слоя на основе внешних данных

Добавлено: 24 июл 2017, 15:02
freeExec
Если делать по уму, то нужно геокодировать адреса, хотя они там представлены ущербно для этого, а далее сопоставить по геометрической вложенности. Но блин, там же 20 домов, за неделю можно было вручную протыкать 200 домов.
П.С. Привязка к osm_id чревата, он не постоянен. Завтра при детализации дома он может оказаться забором на парковке.

Re: Стиль слоя на основе внешних данных

Добавлено: 24 июл 2017, 15:16
fort
trir писал(а):Но если он есть и все параметры заданы правильно - его можно получить через Overpass API
Добавлю в копилку решений как еще один способ. Изначально хотелось сделать все максимально просто.
freeExec писал(а): Но блин, там же 20 домов, за неделю можно было вручную протыкать 200 домов.
После приведения списка в формат csv получилоссь более 600. Конечно, способ тоже рабочий, но пока не рассматривается.
freeExec писал(а):П.С. Привязка к osm_id чревата, он не постоянен. Завтра при детализации дома он может оказаться забором на парковке.
Внезапно :shock: для меня. Это ставит под сомнение всю затею связи слоев по этому полю.

Re: Стиль слоя на основе внешних данных

Добавлено: 24 июл 2017, 16:08
freeExec
Поэтому в таких случаях и делают связь АдресОСМ <=> АдресВнешний. Поднимают локальный геокодер и гоняют по нему не привязываясь к ID.