Аналитика http://geosystema.net/forum/ |
|
скрипт формирующий tab http://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/ |