Расположение подписей

MapInfo, MapBasic
Ответить
Qwe1
Интересующийся
Сообщения: 36
Зарегистрирован: 28 мар 2009, 20:02
Репутация: 0

Расположение подписей

Сообщение Qwe1 » 28 мар 2009, 20:06

Подскажите, пожалуйста, можно ли подписи перемещать относительно исходного их местоположения программным способом? Подписи созданы из значений столбцов таблицы оператором "Set Map Layer tabName Label <...>". Или это возможно только путем создания новых текстовых объектов, к примеру в косметическом слое?

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Расположение подписей

Сообщение Boris » 29 мар 2009, 01:55

Подписи существуют только тот сеанс, в котором вы их создали. При сохранении в рабочий набор подвинутые подписи сохраняются в рабочем наборе. Положение подписей в рабочем наборе прописывается строкой с координатами - значит в принципе менять положение подписей можно.
Но самый простой и дешевый способ создания правильных подписей - это создание дублирующей таблицы (или таблицы, которая содержит только ключевое поле для связи с первой таблицей), которая будет содержать ТОЧКИ в нужных вам местах. Их и подписывайте, хотите из дублирующей таблицы, хотите через запрос, связывающий точки с необходимыми подписями в исходной таблицей. Точки создавать и двигать - минутное дело.
Да, еще если сохранили рабочий набор с "подвинутыми" подписями, а таблицу упаковали после добавления или удаления строк, то подписи после открытия рабочего набора заменятся непредсказуемым образом. Положение сохранят - а текст заново считают из таблицы, но название это будет от другой записи. :shock:

Qwe1
Интересующийся
Сообщения: 36
Зарегистрирован: 28 мар 2009, 20:02
Репутация: 0

Re: Расположение подписей

Сообщение Qwe1 » 29 мар 2009, 02:09

Спасибо!
Мне подписывать нужно узлы в полигонах или полилиниях. Сейчас я так и делаю: создаю слой с точечными объектами по координатам узлов, потом просто добавляю этот новый слой на карту и включаю подписи у этого слоя. Но надо "растащить" подписи, чтобы не было каши из цифр. Когда включаешь "линию" или "стрелку" в опциях подписей, а потом вручную по кругу растаскиваешь подписи, получается красиво: нет наложений, все читается и линии/стрелки, когда точек (узлов) много уточняют подпись, хотя бы визуально. Вот как бы это реализовать? У меня в голове крутится мысль с текстовыми объектами, может есть проще решение? Правда как именно выстраивать даже текстовые объекты вокруг полигонов или полилиний, пока что, представляю смутно. А рабочие наборы меня не очень интересуют!

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Расположение подписей

Сообщение Boris » 29 мар 2009, 06:40

Интересно как вы тогда сохраняете ваши растащенные подписи, если не в рабочем наборе. Или ваша работа только на один раз?
------
Вместо того, что бы таскать подписи - таскайте точки. От них подписи никуда уже не денутся.
------
Даже если рабочий набор вас не интересует, оттащите одну подпись и сохраните рабочий набор.
Затем откройте р.набор в любом текстовом редакторе и посмотрите синтаксис при этой подписи - он и будет синтаксисом для команды MapBasic'а
------
Расстановка подписей или надписей, в которые подписи превращаются одной командой из меню Tools, большая задача. Бесплатного софта не видел, лет 5 назад слышал, что есть платный, и он прилично стоил.
------
Задача должна очень того стоить, если вы взялись за ее программирование. Она предельно нелинейна и многовариантна. И все равно ручной красоты в расстановке подписей автоматизацией добиться не удастся.
------
Если вам кажется, что я отвечаю немного или совсем не о том, попробуйте еще расширить описание постановки задачи.

Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

Re: Расположение подписей

Сообщение SS_Rebelious » 30 мар 2009, 08:13

Что касается подписей, то удобно пользоваться стандартной утилитой "Подписи" (LABELER.MBX), которая подписи одного слоя ПРЕОБРАЗУЕТ В НАДПИСИ (обычные текстовые объекты) и сохраняет его в слой по Вашему выбору. Так как подписи оказываются преобразованы в обычный текст (обычно в новой таблице), соответственно их координаты можно менять тем или иным способом.
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

Qwe1
Интересующийся
Сообщения: 36
Зарегистрирован: 28 мар 2009, 20:02
Репутация: 0

Re: Расположение подписей

Сообщение Qwe1 » 30 мар 2009, 15:09

2 Boris
а) Да, на один раз.
б) Синтаксис посмотрел, можно для каждой подписи задавать свои координаты, как для текстовых объектов. Вроде, есть и функции для перемещения по подписям и т.п. Главное, будь то подпись или текстовый объект - это правильно задавать им координаты, чтобы было как при ручной расстановке. Таскать точки - та же история. Надо знать куда таскать.
2 SS_Rebelious
Ок, но все равно, менять координаты для текстовых объектов надо по определенным правилам, учитывать положение граней полигона и т.п.

yurik1989
Новоприбывший
Сообщения: 14
Зарегистрирован: 31 май 2021, 14:58
Репутация: 0
Откуда: Минск

Re: Расположение подписей

Сообщение yurik1989 » 05 июл 2022, 16:11

SS_Rebelious, подскажите, как преобразовать быстро большое количество подписей в надписи функцией Labeler, а то приходится кликать на каждую подпись

Аватара пользователя
MI user
Участник
Сообщения: 63
Зарегистрирован: 14 янв 2013, 17:08
Репутация: 33
Откуда: Оренбург

Re: Расположение подписей

Сообщение MI user » 05 июл 2022, 19:39

yurik1989, если ещё актуально, то вот команды MapBasic, которые преобразуют объекты таблицы в надписи в центре объекта:

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

dim w as integer
w = frontwindow()
set coordsys window w
update building set obj = CreateText(w, CentroidX(obj), CentroidY(obj), building.COL1, 0,0,0)
Порядок действий:
1) Сделайте копию таблицы с объектами. Новое название должно быть коротким и без пробелов. В примере кода таблица называется "building".
2) Закройте все слои и откройте только эту таблицу.
3) Слово "building" замените в двух местах на название созданной копии таблицы из п .1
4) Узнайте порядковый номер колонки, в которой содержится нужная семантика. Например - это будет колонка №3. Тогда замените .COL1 на .COL3.
5) Установите нужный стиль и размер шрифта. Этим шрифтом будут созданы надписи.
6) Откройте окно MapBasic.
7) Вводите (copy/paste) команды по одной и нажимайте Enter.

Ответить

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

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

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