Конвертация векторного слоя из MapInfo в Qgis с сохранением раскраски полигонов

MapInfo, MapBasic
wwwisaev
Интересующийся
Сообщения: 27
Зарегистрирован: 25 июл 2014, 15:26
Репутация: 0

Re: Конвертация векторного слоя из MapInfo в Qgis с сохранением раскраски полигонов

Сообщение wwwisaev » 01 мар 2018, 12:19

Я так понимаю , закраска зависит от значений атрибутивной таблицы слоя и нужно связать значения с цветом?

wwwisaev
Интересующийся
Сообщения: 27
Зарегистрирован: 25 июл 2014, 15:26
Репутация: 0

Re: Конвертация векторного слоя из MapInfo в Qgis с сохранением раскраски полигонов

Сообщение wwwisaev » 01 мар 2018, 12:22

Я так понимаю, закраска будет зависеть от данных атрибутивной таблицы, нужно связать нужный цвет с данными полей?

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Конвертация векторного слоя из MapInfo в Qgis с сохранением раскраски полигонов

Сообщение Denis Rykov » 01 мар 2018, 12:52

Да, нужно связать, поэтому сначала я и предложил вам выгрузить стиль из tab в отдельное поле шейпа.
Spatial is now, more than ever, just another column- The Geometry Column.

wwwisaev
Интересующийся
Сообщения: 27
Зарегистрирован: 25 июл 2014, 15:26
Репутация: 0

Re: Конвертация векторного слоя из MapInfo в Qgis с сохранением раскраски полигонов

Сообщение wwwisaev » 01 мар 2018, 12:58

почему то не появилось новое поле, какие были поля, такие и остались
Вложения
Безымянный.png
Безымянный.png (482.05 КБ) 6624 просмотра

wwwisaev
Интересующийся
Сообщения: 27
Зарегистрирован: 25 июл 2014, 15:26
Репутация: 0

Re: Конвертация векторного слоя из MapInfo в Qgis с сохранением раскраски полигонов

Сообщение wwwisaev » 01 мар 2018, 13:01

нужно получается сделать закраску по двум полям- порода и группа

freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: Конвертация векторного слоя из MapInfo в Qgis с сохранением раскраски полигонов

Сообщение freeExec » 01 мар 2018, 13:31

И окажется, что сделать это заново в qgis было бы быстрее.

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

Re: Конвертация векторного слоя из MapInfo в Qgis с сохранением раскраски полигонов

Сообщение Игорь Белов » 01 мар 2018, 13:32

Если MapInfo доступна, то перенос цвета делается просто.
  1. В MapInfo добавим колонку текстового типа. Пусть это будет "info3".
  2. Обновим колонку выражением "ObjectInfo(obj,3)". Для полигонов получатся значения вида "Brush (2, 13421823, 16777215)". Второе число и есть цвет заливки.
  3. Преобразуем TAB в шейп любым способом (Universal Translator, FME, GDAL, просто открыть в QGIS и пересохранить в шейп…).
  4. В QGIS в калькуляторе полей создадим поле текстового типа для цвета заливки. Его надо будет заполнить преобразованными значениями второго числа. Так,"13421823" должно превратиться, скажем, в "204,204,255" или "#ccccff".
  5. В настройках стиля справа от выбора цвета заливки жмём кнопочку и выбираем в пункте "Field type: string" имя нового поля.
img_20180301_131359.png
img_20180301_131359.png (2.49 КБ) 6618 просмотров
Действия в предпоследнем пункте несложные: сначала вытащить второе число из "info3", потом преобразовать в строку RGB. Но всё же приятнее заменить ручные операции пользовательской функцией. Вот вам функция brush2fill:

Код: Выделить всё

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def brush2fill(brush, feature, parent):
	color = int(brush.split(', ')[1])
	return u'#{:06x}'.format(color)
В калькуляторе полей пишем формулу: brush2fill( "info3" ).

Аналогично можно перенести свойства обводки (толщину, цвет).
The purpose of computing is insight, not numbers

freeExec
Гуру
Сообщения: 1195
Зарегистрирован: 23 апр 2011, 10:32
Репутация: 205
Откуда: Ульяновск

Re: Конвертация векторного слоя из MapInfo в Qgis с сохранением раскраски полигонов

Сообщение freeExec » 01 мар 2018, 13:41

У такого способа есть пару минусов:
1) Чтобы сменить цвет придётся дергать данные и менять в них старые значения на новые, да ещё писать обратный преобразователь fill2brush
2) После добавления новых объектов им нужно задавать цвета, а значит нужна ещё одна функция params2brush
3) Если потом кто-то поменяет независимо цвета в исходном tab, то будет просто "смерть", т.к. в худшем случае придётся проделывать пункты 1 и 2 ещё раз.

Т.е. весь этот подход годиться только если нужно разово засунуть в QGIS и забыть это как страшны сон.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Конвертация векторного слоя из MapInfo в Qgis с сохранением раскраски полигонов

Сообщение Denis Rykov » 01 мар 2018, 13:57

Я ведь предложил всё то же самое, только без использования MapInfo:

Код: Выделить всё

$ ogr2ogr -f "ESRI Shapefile" -sql "select *, OGR_STYLE from EXTRACT_POLYGON" EXTRACT_POLYGON.shp EXTRACT_POLYGON.tab

$ ogrinfo -al -geom=NO EXTRACT_POLYGON.shp
INFO: Open of `EXTRACT_POLYGON.shp'
      using driver `ESRI Shapefile' successful.

Layer name: EXTRACT_POLYGON
Metadata:
  DBF_DATE_LAST_UPDATE=2018-03-01
Geometry: Polygon
Feature Count: 1
Extent: (2470584.152000, 2583348.628000) - (2486538.445000, 2604102.155000)
Layer SRS WKT:
...
blank: String (1.0)
OGR_STYLE: String (111.0)
OGRFeature(EXTRACT_POLYGON):0
  blank (String) = (null)
  OGR_STYLE (String) = BRUSH(fc:#000000,bc:#ffffff,id:"mapinfo-brush-1,ogr-brush-1");PEN(w:1px,c:#000000,id:"mapinfo-pen-2,ogr-pen-0")
Кстати, MapServer понимает символику в таком виде. Поэтому слой с таким полем может быть загружен, например, в NextGIS Web и отрисован в с помощью MapServer рендерера без ручной настройки цветов. Проверяли - работает.
Spatial is now, more than ever, just another column- The Geometry Column.

wwwisaev
Интересующийся
Сообщения: 27
Зарегистрирован: 25 июл 2014, 15:26
Репутация: 0

Re: Конвертация векторного слоя из MapInfo в Qgis с сохранением раскраски полигонов

Сообщение wwwisaev » 01 мар 2018, 14:19

Спасибо, все получилось, есть еще вопрос: после закрытия и сохранения проекта, когда открываю заново все красится в черный цвет и в атрибутивной таблице в том поле где был цвет пусто, это каждый раз нужно делать эти операции? И возможно ли открыть этот проект в некстГис мобайл, с сохранением цветов, либо сконвертировать в какой нибудь формат, важна раскраска?
Вложения
Безымянный.png
Безымянный.png (583.78 КБ) 6591 просмотр

wwwisaev
Интересующийся
Сообщения: 27
Зарегистрирован: 25 июл 2014, 15:26
Репутация: 0

Re: Конвертация векторного слоя из MapInfo в Qgis с сохранением раскраски полигонов

Сообщение wwwisaev » 01 мар 2018, 14:26

После выполнения запроса, как вы предложили для Qgis, ничего не меняется почему то в атрибутивной таблице

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

Re: Конвертация векторного слоя из MapInfo в Qgis с сохранением раскраски полигонов

Сообщение Игорь Белов » 01 мар 2018, 14:31

Настраиваете стиль отображения слоя. В диалоге свойств внизу слева есть кнопочка [Стиль]. Жмёте и выбираете [Сохранить стиль] → [QGIS Layer Style File]. Сохраняете файл в ту же папку и с тем же именем (у него будет расширение QML). Впредь QGIS будет открывать слой с нужными настройками отображения.
Вложения
img_20180301_142141.png
img_20180301_142141.png (3.7 КБ) 6585 просмотров
The purpose of computing is insight, not numbers

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Конвертация векторного слоя из MapInfo в Qgis с сохранением раскраски полигонов

Сообщение Denis Rykov » 01 мар 2018, 15:07

wwwisaev писал(а):
01 мар 2018, 14:26
После выполнения запроса, как вы предложили для Qgis, ничего не меняется почему то в атрибутивной таблице
Потому что в моём примере создаётся новый файл, вот в нём и появляется новое поле.
Spatial is now, more than ever, just another column- The Geometry Column.

wwwisaev
Интересующийся
Сообщения: 27
Зарегистрирован: 25 июл 2014, 15:26
Репутация: 0

Re: Конвертация векторного слоя из MapInfo в Qgis с сохранением раскраски полигонов

Сообщение wwwisaev » 02 мар 2018, 09:56

Проверьте пожалуйста, по моему все так, но выходит ошибка, а через раз выполняется алгоритм, но новый shp так и не создается
Вложения
2.png
2.png (208.01 КБ) 6540 просмотров
1.png
1.png (300.89 КБ) 6540 просмотров

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Конвертация векторного слоя из MapInfo в Qgis с сохранением раскраски полигонов

Сообщение Denis Rykov » 02 мар 2018, 10:08

Я выполнял команду из консоли (не из QGIS). Но если вам так удобнее, то пожалуйста:
Вложения
Screenshot from 2018-03-02 14-03-55.png
Screenshot from 2018-03-02 14-03-55.png (101.07 КБ) 6538 просмотров
Spatial is now, more than ever, just another column- The Geometry Column.

Ответить

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя