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

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

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

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

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

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

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

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

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

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

Добавлено: 30 мар 2009, 08:13
SS_Rebelious
Что касается подписей, то удобно пользоваться стандартной утилитой "Подписи" (LABELER.MBX), которая подписи одного слоя ПРЕОБРАЗУЕТ В НАДПИСИ (обычные текстовые объекты) и сохраняет его в слой по Вашему выбору. Так как подписи оказываются преобразованы в обычный текст (обычно в новой таблице), соответственно их координаты можно менять тем или иным способом.

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

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

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

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

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

Добавлено: 05 июл 2022, 19:39
MI user
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.