Скрипт работает корректно, если:
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