Аналитика
http://www.geosystema.net/forum/

скрипт формирующий tab
http://www.geosystema.net/forum/viewtopic.php?f=1&t=19592
Страница 1 из 1

Автор:  aero36 [ 24 ноя 2015 10:43 ]
Заголовок сообщения:  скрипт формирующий tab

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

Автор:  Dmitry_Zolotar [ 25 ноя 2015 10:54 ]
Заголовок сообщения:  Re: скрипт формирующий tab

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

Автор:  aero36 [ 26 ноя 2015 09:11 ]
Заголовок сообщения:  Re: скрипт формирующий tab

tab получился следующего вида...
Код:
!table
!version 300
!charset WindowsCyrillic

Definition Table
File "D:\temp\bmp001.bmp"
Type "RASTER"
  (-2344.3935091384,1485.35003167487)  (0,Trunc(149.78548807915*300/(500 0.000*0.025400438)+0.5))  Label "SW"
  (-2344.3935091384,1635.13551975402)  (0,0)  Label "NW"
  (-2221.65238898573,1635.13551975402)  (Trunc(122.74112015267*300/(500 0.000*0.025400438)+0.5),0)  Label "NE"
  (-2221.65238898573,1485.35003167487)  (Trunc(122.74112015267*300/(500 0.000*0.025400438)+0.5),Trunc(149.78548807915*300/(500 0.000*0.025400438)+0.5))  Label "SE"
CoordSys NonEarth Units "m"
Units "m"

Digitals его понимает без проблем, другое ПО не понимает строки вида Trunc(122.74112015267*300/(500 0.000*0.025400438)+0.5) :(

Автор:  Dmitry_Zolotar [ 26 ноя 2015 10:03 ]
Заголовок сообщения:  Re: скрипт формирующий tab

Dmitry_Zolotar писал(а):
Скрипт работает корректно, если:
1)установлен системный разделитель "."...

Автор:  aero36 [ 26 ноя 2015 10:09 ]
Заголовок сообщения:  Re: скрипт формирующий tab

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

Автор:  Dmitry_Zolotar [ 26 ноя 2015 10:39 ]
Заголовок сообщения:  Re: скрипт формирующий tab

Не заметил пробел в значении масштаба, как он там появился?
aero36 писал(а):
(-2344.3935091384,1485.35003167487)  (0,Trunc(149.78548807915*300/(500 0.000*0.025400438)+0.5))  Label "SW"
  (-2344.3935091384,1635.13551975402)  (0,0)  Label "NW"
  (-2221.65238898573,1635.13551975402)  (Trunc(122.74112015267*300/(500 0.000*0.025400438)+0.5),0)  Label "NE"
  (-2221.65238898573,1485.35003167487)  (Trunc(122.74112015267*300/(500 0.000*0.025400438)+0.5),Trunc(149.78548807915*300/(500 0.000*0.025400438)+0.5))  Label "SE"

Автор:  Dmitry_Zolotar [ 26 ноя 2015 10:44 ]
Заголовок сообщения:  Re: скрипт формирующий tab

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

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

Автор:  aero36 [ 26 ноя 2015 13:14 ]
Заголовок сообщения:  Re: скрипт формирующий tab

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

Страница 1 из 1 Часовой пояс: UTC + 2 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/