Сдвиг слоев

MapInfo, MapBasic
Ответить
egormishin
Участник
Сообщения: 70
Зарегистрирован: 18 ноя 2013, 07:43
Репутация: 6

Сдвиг слоев

Сообщение egormishin » 03 мар 2017, 08:44

Добрый день! Просьба подсказать существующие способы сдвига нескольких слоев одновременно?
В стандартном наборе Mi есть возможность сдвигать выделенные объекты, т.е можно выделить не более 1-го слоя и сдвинуть его в нужном направление на требуемое расстояние. Может есть такие утилиты, или может быть каким то образом повторяя команду MB, если кто знает как составить такую команду подскажите?
А также в продолжение темы нужно недавно было (уже сделал) поменять границы рамки карты для значительного кол-ва слоев, воспользовался стандартной утилитой "Граница рамки карты" но там неудобство менять приходилось только по одному слою сохраняя его копию, что очень затратно?
Последний раз редактировалось egormishin 06 мар 2017, 09:38, всего редактировалось 1 раз.

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

Re: Сдвиг слоев

Сообщение Игорь Белов » 03 мар 2017, 10:58

Предлагаю решение обеих проблем, основанное на использовании BatchTools и хорошего текстового редактора.
  1. Вычислим/измерим требуемый сдвиг по X и Y.
  2. Экспортируем все TAB в папке в MIF/MID:
    [BatchTools] → [Run MIFexp]
  3. Вычислим новые параметры FalseEasting и FalseNorthing: оригинальные значения минус сдвиг.
  4. Текстовым редактором заменим CoordSys сразу во всех MIF в папке.
  5. Импортируем все MIF/MID в папке:
    [BatchTools] → [Run BatchMIF]
  6. Подготовим новую проекцию. Это оригинальная с границами координат. В файле MAPINFOW.PRJ скопируем оригинальную проекцию в раздел с пользовательскими проекциями, добавим 2000 к номеру проеции, после параметров проекции вставим границы слоёв Bounds. Пример:
    "GK Zone 7 (Pulkovo 1942)\p28407", 8, 1001, 7, 39, 0, 1, 7500000, 0
    превратится в
    "GK Zone 7 (площадь работ)", 2008, 1001, 7, 39, 0, 1, 7500000, 0, 7660000, 6180000, 7670000, 6190000
  7. Конвертируем все TAB в папке в новую проекцию (в другую папку):
    [BatchTools] → [Run BatchProj]
Последний раз редактировалось Игорь Белов 03 мар 2017, 11:42, всего редактировалось 2 раза.
The purpose of computing is insight, not numbers

lam
Гуру
Сообщения: 1018
Зарегистрирован: 01 авг 2012, 13:55
Репутация: 241

Re: Сдвиг слоев

Сообщение lam » 03 мар 2017, 11:09

Игорь Белов писал(а): 4. Текстовым редактором заменим CoordSys сразу во всех MIF в папке.
Если можно, подробнее этот пункт, какой именно текстовый редактор и функцию пакетной замены в нем, Вы использовали?
Спасибо!
Последний раз редактировалось lam 03 мар 2017, 12:04, всего редактировалось 1 раз.

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

Re: Сдвиг слоев

Сообщение Игорь Белов » 03 мар 2017, 11:47

Когда-то использовал MultiEdit, затем jEdit, sed… Хороших текстовых редакторов море.

P. S.
В jEdit быстрее всего нажать последовательно Ctrl-e Ctrl-d, или через меню [Поиск] → [Поиск в директории…]
В Emacs это делается так: M-x find-name-dired RET
The purpose of computing is insight, not numbers

Slinger
Гуру
Сообщения: 879
Зарегистрирован: 17 июн 2010, 23:14
Репутация: 207
Откуда: Москва

Re: Сдвиг слоев

Сообщение Slinger » 03 мар 2017, 15:21

Если всё в План-схеме (хотя и с проекциями тоже работает вроде бы) и неохота заморачиваться с проекциями, то можно сделать следующее:

1) загнать все таблицы в .mif/mid с помощью BatchTools
2) Открыть .mif (или .mif'ы) в текстовом редакторе и добавить строку

TRANSFORM 0, 0, Xshift, Yshift

где Xshift и Yshift - сдвиг по X и Y соответственно. Может быть и отрицательным. Нули в начале строки обязательны. Строку надо добавить до начала объявления объектов. То есть после объявления Delimiter или CoordSys

4) Обратно импортировать в .tab. Во время импорта произойдёт сдвиг. Разумеется, надо перед эти удостовериться, что сдвинутые координаты находятся в пределах границ карты, то бишь в пределах Bounds. В противном случае они все упрутся в невидимую стенку и останутся на одной линии :)

Строку CoordSys можно заменить любым текстовым редактором, имеющим возможность пакетной замены. А-ля Textpad. Либо воспользовать бинарно/текстовым вариантом редактора, а-ля 010editor, позволяющим писать небольшие макросы для таких задач

egormishin
Участник
Сообщения: 70
Зарегистрирован: 18 ноя 2013, 07:43
Репутация: 6

Re: Сдвиг слоев

Сообщение egormishin » 06 мар 2017, 09:34

Спасибо за подсказки, нашел утилиту для сдвига и не только "Re Calc"может кому пригодится главное ничего ненужно не куда конвертировать очень удобно! А вот для увеличения рабочей области наверное только ваши варианты.

Cancer
Участник
Сообщения: 56
Зарегистрирован: 25 фев 2009, 20:55
Репутация: 3
Откуда: Инструментарий для MapInfo
Контактная информация:

Re: Сдвиг слоев

Сообщение Cancer » 13 мар 2017, 16:14

Можно еще с помощью "Инструментария для MapInfo". Мастер трансформации и пределы слоев сам подправит и объекты по толпе слоев перенесет:
https://youtu.be/LXzbMQfZcGg?t=471

egormishin
Участник
Сообщения: 70
Зарегистрирован: 18 ноя 2013, 07:43
Репутация: 6

Re: Сдвиг слоев

Сообщение egormishin » 14 мар 2017, 01:49

Спасибо Cancer хороший вариант!

Ответить

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

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

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