Загрузка подписей из MapInfo в Qgis.
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 18 мар 2022, 06:22
- Репутация: 0
- Откуда: Новая зеландия
Загрузка подписей из MapInfo в Qgis.
Добрый день, есть такая задача у меня, клиент создает слои в MapInfo, в слоях есть подписи, текстовые объекты, далее проект отправляет мне, но у меня Qgis) Если я его там открою, то подписей в нем нет. Моя задача как-то их туда загрузить не беспокоя клиента, желательно средствами Qgis. И вот вопрос: а возможно это вообще? Может кто-то сталкивался уже с таким?
Вот крошечный проект, для желающих помочь:
https://disk.yandex.ru/d/OvpLNZlr7_PURA
Вот крошечный проект, для желающих помочь:
https://disk.yandex.ru/d/OvpLNZlr7_PURA
-
- Гуру
- Сообщения: 4069
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1064
- Ваше звание: программист
- Откуда: Казань
Re: Загрузка подписей из MapInfo в Qgis.
мы выгружали MIF/MID, потом делали простенький парсер, который вытаскивал координаты и текст (у вас там еще и угол поворота), и записывал их в другой MIF/MID. Сделать можно в Питоне или R, а если точек немного (сотня или около), то просто в текстовом редакторе - Text заменить на Line, а надпись, фонт (если он меняется) и угол утащить в другой файл. Только разобраться с поворотом (направлением и центром).
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 18 мар 2022, 06:22
- Репутация: 0
- Откуда: Новая зеландия
-
- Завсегдатай
- Сообщения: 328
- Зарегистрирован: 24 мар 2022, 05:54
- Репутация: 141
- Ваше звание: хм, сам не знал
- Откуда: Томск
Re: Загрузка подписей из MapInfo в Qgis.
Mif/mid - обменный текстовый формат MapInfo, довольно популярный еще с 90-х. Есть спецификации. Открывается любым текстовым редактором. В таких системах, как ArcInfo, QGIS, подпись - это стилизация, автоподписывание из семантических (или вычисляемых) атрибутов, из поля таблицы проще говоря. А в MapInfo (и нескольких других ГИС/CAD системах) есть тип геометрии - Text, с графическими атрибутами содержания подписи, угла поворота и т.п. Вот такие подписи и приходят в MIF:
Data
Text
"Подпись 1" // Содержание подписи
1226.83684 931.389644 1332.80148 954.93734 //охват - левый низ правый верх
Font ("Arial",0,0,0)
Angle 42 //угол поворота
Конвертору в, к примеру, esri shp, надо из охвата подписи вычислить верхний левый угол (якорь подписи, точку), а в семантику сохранить содержание подписи и угол поворота. Тогда, настройками стилей в QGIS, можно повторить примерно так же, как в MapInfo. Такая конвертация делается, к примеру, средствами самого MapInfo. Из доступных вариантов также конвертор ESRI ArcMap, простая досовская утилитка, ее минус - игнорит угол поворота подписи. Если у Вас повернутых нет, можете воспользоваться таким. Файл avmifshp.exe, запускается из cmd-консоли так:
avmifshp.exe TEXT text_4b text_sh
где TEXT - тип геометрии MIF, text_4b - файл mif (только имя, без расширения), text_sh - имя шейпа для сохранения.
Data
Text
"Подпись 1" // Содержание подписи
1226.83684 931.389644 1332.80148 954.93734 //охват - левый низ правый верх
Font ("Arial",0,0,0)
Angle 42 //угол поворота
Конвертору в, к примеру, esri shp, надо из охвата подписи вычислить верхний левый угол (якорь подписи, точку), а в семантику сохранить содержание подписи и угол поворота. Тогда, настройками стилей в QGIS, можно повторить примерно так же, как в MapInfo. Такая конвертация делается, к примеру, средствами самого MapInfo. Из доступных вариантов также конвертор ESRI ArcMap, простая досовская утилитка, ее минус - игнорит угол поворота подписи. Если у Вас повернутых нет, можете воспользоваться таким. Файл avmifshp.exe, запускается из cmd-консоли так:
avmifshp.exe TEXT text_4b text_sh
где TEXT - тип геометрии MIF, text_4b - файл mif (только имя, без расширения), text_sh - имя шейпа для сохранения.
- Вложения
-
- avmifshp.zip
- (86.37 КБ) 157 скачиваний
-
- Завсегдатай
- Сообщения: 328
- Зарегистрирован: 24 мар 2022, 05:54
- Репутация: 141
- Ваше звание: хм, сам не знал
- Откуда: Томск
Re: Загрузка подписей из MapInfo в Qgis.
QGIS читает ваш крошечный пример, в семантике есть поле Подпись, в котором "Электрокабели наземные высокого напряжения", это надо подписать на карте? Тогда сразу в Свойства слоя - Подписи - Обычные подписи. Если в геометрии TAB "спрятано" что то еще - попробуйте сконвертировать TAB в MIF
-
- Гуру
- Сообщения: 4069
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1064
- Ваше звание: программист
- Откуда: Казань
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 18 мар 2022, 06:22
- Репутация: 0
- Откуда: Новая зеландия
Re: Загрузка подписей из MapInfo в Qgis.
Благодарю за такой развернутый ответ. Да, это и есть text. Что бы точно не осталось расхождений в понимании, вот скрин. Моя задача это автоматизировать, что бы оператор из КУГИС загружал файлы "Tab" и эта информация не терялась. Ну, если это возможно.
- Вложения
-
- Безымянный.png (107.53 КБ) 3427 просмотров
-
- Гуру
- Сообщения: 4069
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1064
- Ваше звание: программист
- Откуда: Казань
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 18 мар 2022, 06:22
- Репутация: 0
- Откуда: Новая зеландия
Re: Загрузка подписей из MapInfo в Qgis.
Вот пока что, такой же вывод) Возможно использовать Argis или mapinfo в пакетном режиме, для конвертации? Вот я этим сейчас занят, если найду решение отпишусь.gamm писал(а): ↑04 апр 2022, 11:02насколько я помню, gdal (который внутри qgis) просто игнорирует все эти тексты.
-
- Завсегдатай
- Сообщения: 328
- Зарегистрирован: 24 мар 2022, 05:54
- Репутация: 141
- Ваше звание: хм, сам не знал
- Откуда: Томск
Re: Загрузка подписей из MapInfo в Qgis.
В MapInfo точно были способы (либо штатные инструменты, либо самописные утилиты) для конвертации аннотаций в точечный слой с нужными полями. Гуглите. Сейчас не подскажу, лет 15 назад в нем работал. Так то тема полезная, кому еще пригодится.
-
- Гуру
- Сообщения: 4069
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1064
- Ваше звание: программист
- Откуда: Казань
Re: Загрузка подписей из MapInfo в Qgis.
текст - это не аннотации. У аннотаций нет координат (она в координатах листа), и они превращаются в слой через меню. А вот скриптик написать на Мапвасике для вытаскивания текстов - не проблема, можно и запросами вытащить в Мапинфе, через SQL запрос. Все коды и функции описаны в мануалах Мапвасика, они есть в свободном доступе. Ниже две функции, которые все вытаскивают, что есть в выложенном файле (см. приложенный текст с прокруткой, там пример).
Дальше сами разбирайтесь, с точкой поворота и прочим.
Дальше сами разбирайтесь, с точкой поворота и прочим.
Код: Выделить всё
ObjectInfo(<obj>, N)
OBJ_INFO_TYPE 1
OBJ_INFO_TEXTFONT 2
OBJ_INFO_TEXTSTRING 3
ObjectGeography(obj,N)
Define OBJ_GEO_MINX 1
Define OBJ_GEO_MINY 2
Define OBJ_GEO_MAXX 3
Define OBJ_GEO_MAXY 4
Define OBJ_GEO_CENTROID 5
Define OBJ_GEO_TEXTANGLE 7
>>>>>>>>>>>>>>>> Было
Text
"ВЛ 6 кВ 3 пр."
2119464 530705.26 2119533.88 530718.48
Font ("D431",0,0,0)
Angle 3.4
Text
"каб. 0,4 кВ на эстакаде"
2119281.87 530823.2 2119412.03 530836.43
Font ("D431",0,0,0)
>>>>>>>>>>>>>>>> Запрос
Fields {ObjectInfo(obj,2),ObjectInfo(obj,3),ObjectGeography(obj,1),ObjectGeography(obj,2),ObjectGeography(obj,3),ObjectGeography(obj,4),ObjectGeography(obj,7)}
Tables {ЛэпТК_anno}
Where {}
Group {}
Order {}
Into {test}
>>>>>>>>>>>>>>>> Выхлоп запроса
Font ("D431",0,0,0),ВЛ 6 кВ 3 пр.,2119464,530705.28,2119534.5,530722.62,3.4
Font ("D431",0,0,0),каб. 0,4 кВ на эстакаде,2119281.87,530823.2,2119412.03,530836.43,0
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 18 мар 2022, 06:22
- Репутация: 0
- Откуда: Новая зеландия
Re: Загрузка подписей из MapInfo в Qgis.
Коллеги), всем большое спасибо за комментарии, жаль баллов репутации нет, что бы отблагодарить. Буду пробовать) если найду подходящее решение тогда отпишусь
-
- Завсегдатай
- Сообщения: 328
- Зарегистрирован: 24 мар 2022, 05:54
- Репутация: 141
- Ваше звание: хм, сам не знал
- Откуда: Томск
Re: Загрузка подписей из MapInfo в Qgis.
Имея такой выхлоп в виде txt файла, дальше можно вообще не парится, однократно открыть его в QGIS как csv-файл (слой из текста с разделителями) и настроить как подпись. При изменении TXT источника обновится и карта в QGIS. Единственное препятствие - разделитель полей (запятая). Если запятую заменить на другой уникальный, тогда: Пример проекта QGIS с настройками
-
- Новоприбывший
- Сообщения: 7
- Зарегистрирован: 18 мар 2022, 06:22
- Репутация: 0
- Откуда: Новая зеландия
Re: Загрузка подписей из MapInfo в Qgis.
Всем доброго дня, думаю я нашел решение, которое меня устраивает, это преобразование через GDAL формат "LIBKML",
Вот код на питоне:
В результате в папке "geo_copy" получается файл geo.kml, где есть нужная мне инфа. Правда поле "name" кракрозябрами ) но уже можно работать.
Вот код на питоне:
Спойлер
from osgeo import ogr
import os
work_dir = 'some_dir'
src_filename = os.path.join(work_dir, 'geo.tab')
dst_filename = os.path.join(work_dir, 'geo_copy')
src_format = 'MapInfo File'
dst_format = 'LIBKML'
in_ds = ogr.GetDriverByName(src_format).Open(src_filename)
out_ds = ogr.GetDriverByName(dst_format).CopyDataSource(in_ds, dst_filename)
import os
work_dir = 'some_dir'
src_filename = os.path.join(work_dir, 'geo.tab')
dst_filename = os.path.join(work_dir, 'geo_copy')
src_format = 'MapInfo File'
dst_format = 'LIBKML'
in_ds = ogr.GetDriverByName(src_format).Open(src_filename)
out_ds = ogr.GetDriverByName(dst_format).CopyDataSource(in_ds, dst_filename)
-
- Гуру
- Сообщения: 4069
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1064
- Ваше звание: программист
- Откуда: Казань
Re: Загрузка подписей из MapInfo в Qgis.
там не кракозябры, там другая кодировка (типа UTF-8). Проще всего вывалить исходный файл в MIF/MID, и поменять кодировку. Например во встроенном редакторе FAR (Alt/F4), выделить все (Ctrl/A), вырезать (Shift/Del), поменять кодировку (Shift/F8), вставить (Ctrl/V). Можно порыться в Питоне, может там есть параметры для кодировки, хотя для надписей не уверен.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя