скрипт формирующий tab

Помогите со скриптом, формирующим tab файл привязки MapInfo для выделенного объекта.
Было бы весьма полезным например для создания tab-а рамки после выгрузки карты в bmp.

Скрипт работает корректно, если:
1)установлен системный разделитель “.”
2)рамка карты прямоугольная и ее стороны параллельны осям координат
3)за пределам рамки карты нет объектов, у которых тип слоя - “Рамка и легенда”

$DPI=300 $BMPFN=D:\temp\bmp001.bmp $TabFN=D:\temp\bmp001.tab $Header=@Map.GetProperties @Text[1].Text $Header $Scale=@Text[1].Line[1] $Scale=@StringPart 1 $Scale $XY1=@Text[1].Line[2] $XY2=@Text[1].Line[3] $XY3=@Text[1].Line[4] $XY4=@Text[1].Line[5] $X1=@StringPart 1 $XY1 $Y1=@StringPart 2 $XY1 $X2=@StringPart 1 $XY2 $Y2=@StringPart 2 $XY2 $X3=@StringPart 1 $XY3 $Y3=@StringPart 2 $XY3 $X4=@StringPart 1 $XY4 $Y4=@StringPart 2 $XY4 $Width1=$Y4-$Y1 $Width2=$Y3-$Y2 $Height1=$X2-$X1 $Height2=$X3-$X4 @if $Height1<>$Height2 then @Break Рамка не прямоугольная @if $Width1<>$Width2 then @Break Рамка не прямоугольная $Coef=$DPI/($Scale*0.025400438) $Height=@Calc Trunc($Height1*$Coef+0.5) $Width=@Calc Trunc($Width1*$Coef+0.5) @Map.SaveToTIF $DPI 24 $BMPFN @Text[1].Clear @Text[1].Add !table @Text[1].Add !version 300 @Text[1].Add !charset WindowsCyrillic @Text[1].Add @Text[1].Add Definition Table @Text[1].Add File "$BMPFN" @Text[1].Add Type "RASTER" @Text[1].Add ($Y1,$X1) (0,$Height) Label "SW" @Text[1].Add ($Y2,$X2) (0,0) Label "NW" @Text[1].Add ($Y3,$X3) ($Width,0) Label "NE" @Text[1].Add ($Y4,$X4) ($Width,$Height) Label "SE" @Text[1].Add CoordSys NonEarth Units "m" @Text[1].Add Units "m" @Text[1].Save $TabFN

З.Ы. Первое ограничение можно обойти используя замены разделителей %Library.ReplaceComma и %Library.ReplaceDot. Второе и третье обходится использованием функции @Map.CreateLayout

tab получился следующего вида…

[code]!table
!version 300
!charset WindowsCyrillic

Definition Table
File “D:\temp\bmp001.bmp”
Type “RASTER”
(-2344.3935091384,1485.35003167487) (0,Trunc(149.78548807915300/(500 0.0000.025400438)+0.5)) Label “SW”
(-2344.3935091384,1635.13551975402) (0,0) Label “NW”
(-2221.65238898573,1635.13551975402) (Trunc(122.74112015267300/(500 0.0000.025400438)+0.5),0) Label “NE”
(-2221.65238898573,1485.35003167487) (Trunc(122.74112015267300/(500 0.0000.025400438)+0.5),Trunc(149.78548807915300/(500 0.0000.025400438)+0.5)) Label “SE”
CoordSys NonEarth Units “m”
Units “m”[/code]
Digitals его понимает без проблем, другое ПО не понимает строки вида Trunc(122.74112015267300/(500 0.0000.025400438)+0.5) :frowning:

Да, всё верно, десятичный разделитель “точка” (Язык и региональные стандарты), но tab получается именно такого вида

Не заметил пробел в значении масштаба, как он там появился?

После строки
$Scale=@Text[1].Line[1]
добавьте
$Scale=@StringPart 1 $Scale

я проигнорировал тот факт, что первая строка результата @Map.GetProperties кроме масштаба содержит еще и имя карты. Скрипт исправил

Спасибо, всё работает :slight_smile: