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

Автоматическая классификация

Добавлено: 10 окт 2019, 12:26
Игорь Лебедь
Есть хаотичный слой MapInfo, состоящий из типичных, но не классифицированных объектов.
Например:
зелёные точки
красные точки
синие точки
толстые красные линии
тонкие красные линии
полигоны
подписи 14 шрифт
подписи 16 шрифт

Надо их классифицировать автоматом (по оформлению) и присвоить каждой типовой группе объектов произвольный номер в таблицу атрибутов. Есть ли для этого автоматический инструмент в этом древнем зле?

Re: Автоматическая классификация

Добавлено: 10 окт 2019, 13:56
Игорь Белов
Похоже, Вы хотите делать это в MapInfo. Про автоматические инструменты не знаю, по памяти опишу свой древнющий опыт решения врукопашную.

Добавим в таблицу три колонки и заполним их соответственно значениями
ObjectInfo(Obj, 1)
ObjectInfo(Obj, 2)
ObjectInfo(Obj, 3)
В первую запишутся типы геометрий.
Во второй окажутся стили символа для точки, линии, обводки для полигона, шрифт для текста.
Третья - стиль заливки для полигона, строка содержимого для текста.

Стили линий в скобках содержат тип линии, толщину, цвет (порядок точно не помню).
Стили заливок в скобках содержат тип заливки, цвет заливки, цвет фона.
Размер шрифта не существует. Тексты в карте заданы ограничивающим прямоугольником, и программа вычисляет величину шрифта динамически, исходя из геометрических размеров (с хитрым учётом угла поворота) и текущего масштаба окна карты.

Делаем SQL query, в котором в строку Group by записываем названия этих трёх колонок. Результирующая таблица будет содержать все наличные сочетания. Удобно её сохранить, придумать номера для каждого сочетания и, осуществляя последовательно выбороки, присваивать эти номера четвёртому добавленному полю.

Re: Автоматическая классификация

Добавлено: 10 окт 2019, 14:53
Игорь Лебедь
Спасибо! Но ручной способ уже был понятен. Утилит под MI множество, думал, есть готовая.
Всё-таки вопрос про размер шрифта - "Font ("Arial",256,0,7293567,5777215)" - это вылезает в файле .mid, и как бы из этого получить всё-таки размер шрифта, может, как-то обратной пропорцией от диагонали прямоугольника? И угол поворота текста тоже бы неплохо было получить в атрибут, есть ли такая возможность? viewtopic.php?f=17&t=25160#p168583

Вообще странно, что шрифт не имеет размера (не сохраняется в файле), потому что если ткнуть в подпись в открытом на редактирование файле tab, а в нём же и оформление сохраняется, то там в свойствах шрифта стоит конкретная цифра. Не перевычисляет же мапинфо размер шрифта относительно размера описанного прямоугольника и угла поворота каждый раз при открытии файла?
То, что размер шрифта меняется при масштабировании, это понятно. Но если размер прямоугольника хранится в файле, стало быть, по нему косвенно можно выгрузить в атрибут размер подписи?

Re: Автоматическая классификация

Добавлено: 10 окт 2019, 15:07
trir

Re: Автоматическая классификация

Добавлено: 10 окт 2019, 17:31
lam
Выложите фрагмент "хаотичного слоя в MapInfo"

Re: Автоматическая классификация

Добавлено: 10 окт 2019, 20:02
gamm
Игорь Лебедь писал(а):
10 окт 2019, 12:26
Есть хаотичный слой MapInfo, состоящий из типичных, но не классифицированных объектов.
когда нам геологи вывалили подобный мусор вместо базы (они руками стили меняли), мы написали за пару часов парсер MID/MIF, распарсили, и попросили так больше не делать. Судя по всему, знатокам Питона нужно еще меньше времени, чтобы сделать подобное ...

Re: Автоматическая классификация

Добавлено: 10 окт 2019, 20:55
Игорь Белов
gamm писал(а):
10 окт 2019, 20:02
мы написали за пару часов парсер MID/MIF
Тоже некогда развлекался таким образом. Теперь предпочитаю заставлять GDAL/OGR вытаскивать стили объектов:

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

ogr2ogr -f "ESRI Shapefile" -sql "SELECT *, OGR_STYLE FROM layer WHERE OGR_GEOMETRY='LINESTRING'" layer_l.shp layer.TAB