Загрузка подписей из MapInfo в Qgis.

Не знаете, где задать вопрос? Задавайте здесь.
kto
Новоприбывший
Сообщения: 7
Зарегистрирован: 18 мар 2022, 06:22
Репутация: 0
Откуда: Новая зеландия

Загрузка подписей из MapInfo в Qgis.

Сообщение kto » 04 апр 2022, 05:19

Добрый день, есть такая задача у меня, клиент создает слои в MapInfo, в слоях есть подписи, текстовые объекты, далее проект отправляет мне, но у меня Qgis) Если я его там открою, то подписей в нем нет. Моя задача как-то их туда загрузить не беспокоя клиента, желательно средствами Qgis. И вот вопрос: а возможно это вообще? Может кто-то сталкивался уже с таким?

Вот крошечный проект, для желающих помочь:
https://disk.yandex.ru/d/OvpLNZlr7_PURA

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

Re: Загрузка подписей из MapInfo в Qgis.

Сообщение gamm » 04 апр 2022, 06:43

мы выгружали MIF/MID, потом делали простенький парсер, который вытаскивал координаты и текст (у вас там еще и угол поворота), и записывал их в другой MIF/MID. Сделать можно в Питоне или R, а если точек немного (сотня или около), то просто в текстовом редакторе - Text заменить на Line, а надпись, фонт (если он меняется) и угол утащить в другой файл. Только разобраться с поворотом (направлением и центром).

kto
Новоприбывший
Сообщения: 7
Зарегистрирован: 18 мар 2022, 06:22
Репутация: 0
Откуда: Новая зеландия

Re: Загрузка подписей из MapInfo в Qgis.

Сообщение kto » 04 апр 2022, 07:06

gamm писал(а):
04 апр 2022, 06:43
мы выгружали MIF/MID, потом делали простенький парсер
Благодарю за ответ. Но я же новичок) Что есть mif/mid? Я пробовал конвертировать утилитой org2org, но там такого нет формата.

AlexRomantsov
Завсегдатай
Сообщения: 291
Зарегистрирован: 24 мар 2022, 05:54
Репутация: 135
Откуда: Томск

Re: Загрузка подписей из MapInfo в Qgis.

Сообщение AlexRomantsov » 04 апр 2022, 07:36

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 - имя шейпа для сохранения.
Вложения
avmifshp.zip
(86.37 КБ) 147 скачиваний

AlexRomantsov
Завсегдатай
Сообщения: 291
Зарегистрирован: 24 мар 2022, 05:54
Репутация: 135
Откуда: Томск

Re: Загрузка подписей из MapInfo в Qgis.

Сообщение AlexRomantsov » 04 апр 2022, 07:47

QGIS читает ваш крошечный пример, в семантике есть поле Подпись, в котором "Электрокабели наземные высокого напряжения", это надо подписать на карте? Тогда сразу в Свойства слоя - Подписи - Обычные подписи. Если в геометрии TAB "спрятано" что то еще - попробуйте сконвертировать TAB в MIF

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

Re: Загрузка подписей из MapInfo в Qgis.

Сообщение gamm » 04 апр 2022, 09:01

kto писал(а):
04 апр 2022, 07:06
Что есть mif/mid? Я пробовал конвертировать утилитой org2org, но там такого нет формата.
1) там есть, это текстовый формат. MIF - геометрия, MID - атрибутика
2) можно из Мапинфы или QGIS

kto
Новоприбывший
Сообщения: 7
Зарегистрирован: 18 мар 2022, 06:22
Репутация: 0
Откуда: Новая зеландия

Re: Загрузка подписей из MapInfo в Qgis.

Сообщение kto » 04 апр 2022, 09:04

Благодарю за такой развернутый ответ. Да, это и есть text. Что бы точно не осталось расхождений в понимании, вот скрин. Моя задача это автоматизировать, что бы оператор из КУГИС загружал файлы "Tab" и эта информация не терялась. Ну, если это возможно.
Вложения
Безымянный.png
Безымянный.png (107.53 КБ) 3160 просмотров

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

Re: Загрузка подписей из MapInfo в Qgis.

Сообщение gamm » 04 апр 2022, 11:02

kto писал(а):
04 апр 2022, 09:04
Ну, если это возможно.
насколько я помню, gdal (который внутри qgis) просто игнорирует все эти тексты.

kto
Новоприбывший
Сообщения: 7
Зарегистрирован: 18 мар 2022, 06:22
Репутация: 0
Откуда: Новая зеландия

Re: Загрузка подписей из MapInfo в Qgis.

Сообщение kto » 05 апр 2022, 05:21

gamm писал(а):
04 апр 2022, 11:02
насколько я помню, gdal (который внутри qgis) просто игнорирует все эти тексты.
Вот пока что, такой же вывод) Возможно использовать Argis или mapinfo в пакетном режиме, для конвертации? Вот я этим сейчас занят, если найду решение отпишусь.

AlexRomantsov
Завсегдатай
Сообщения: 291
Зарегистрирован: 24 мар 2022, 05:54
Репутация: 135
Откуда: Томск

Re: Загрузка подписей из MapInfo в Qgis.

Сообщение AlexRomantsov » 05 апр 2022, 06:14

В MapInfo точно были способы (либо штатные инструменты, либо самописные утилиты) для конвертации аннотаций в точечный слой с нужными полями. Гуглите. Сейчас не подскажу, лет 15 назад в нем работал. Так то тема полезная, кому еще пригодится.

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

Re: Загрузка подписей из MapInfo в Qgis.

Сообщение gamm » 05 апр 2022, 07:07

текст - это не аннотации. У аннотаций нет координат (она в координатах листа), и они превращаются в слой через меню. А вот скриптик написать на Мапвасике для вытаскивания текстов - не проблема, можно и запросами вытащить в Мапинфе, через 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


kto
Новоприбывший
Сообщения: 7
Зарегистрирован: 18 мар 2022, 06:22
Репутация: 0
Откуда: Новая зеландия

Re: Загрузка подписей из MapInfo в Qgis.

Сообщение kto » 05 апр 2022, 09:36

Коллеги), всем большое спасибо за комментарии, жаль баллов репутации нет, что бы отблагодарить. Буду пробовать) если найду подходящее решение тогда отпишусь

AlexRomantsov
Завсегдатай
Сообщения: 291
Зарегистрирован: 24 мар 2022, 05:54
Репутация: 135
Откуда: Томск

Re: Загрузка подписей из MapInfo в Qgis.

Сообщение AlexRomantsov » 05 апр 2022, 10:42

gamm писал(а):
05 апр 2022, 07:07
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
Имея такой выхлоп в виде txt файла, дальше можно вообще не парится, однократно открыть его в QGIS как csv-файл (слой из текста с разделителями) и настроить как подпись. При изменении TXT источника обновится и карта в QGIS. Единственное препятствие - разделитель полей (запятая). Если запятую заменить на другой уникальный, тогда:
Снимок.JPG
Снимок.JPG (86.05 КБ) 2941 просмотр
Снимок2.JPG
Снимок2.JPG (15.76 КБ) 2941 просмотр
Пример проекта QGIS с настройками
из txt подписи текст в карту.zip
(10.06 КБ) 175 скачиваний

kto
Новоприбывший
Сообщения: 7
Зарегистрирован: 18 мар 2022, 06:22
Репутация: 0
Откуда: Новая зеландия

Re: Загрузка подписей из MapInfo в Qgis.

Сообщение kto » 20 апр 2022, 10:22

Всем доброго дня, думаю я нашел решение, которое меня устраивает, это преобразование через GDAL формат "LIBKML",

Вот код на питоне:
Спойлер
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)
В результате в папке "geo_copy" получается файл geo.kml, где есть нужная мне инфа. Правда поле "name" кракрозябрами ) но уже можно работать.

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

Re: Загрузка подписей из MapInfo в Qgis.

Сообщение gamm » 20 апр 2022, 11:48

kto писал(а):
20 апр 2022, 10:22
Правда поле "name" кракрозябрами
там не кракозябры, там другая кодировка (типа UTF-8). Проще всего вывалить исходный файл в MIF/MID, и поменять кодировку. Например во встроенном редакторе FAR (Alt/F4), выделить все (Ctrl/A), вырезать (Shift/Del), поменять кодировку (Shift/F8), вставить (Ctrl/V). Можно порыться в Питоне, может там есть параметры для кодировки, хотя для надписей не уверен.

Ответить

Вернуться в «Я новичок!»

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

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