Аналитика

Цифровая фотограмметрия, картография и землеустройство
Текущее время: 28 мар 2024 15:53

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: скрипт формирующий tab
СообщениеДобавлено: 24 ноя 2015 10:43 
Участник
Участник

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


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: скрипт формирующий tab
СообщениеДобавлено: 25 ноя 2015 10:54 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2298
Откуда: Vinnytsia
Скрипт работает корректно, если:
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

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: скрипт формирующий tab
СообщениеДобавлено: 26 ноя 2015 09:11 
Участник
Участник

Зарегистрирован:
24 ноя 2015 09:57
Сообщения: 8
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) :(


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: скрипт формирующий tab
СообщениеДобавлено: 26 ноя 2015 10:03 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2298
Откуда: Vinnytsia
Dmitry_Zolotar писал(а):
Скрипт работает корректно, если:
1)установлен системный разделитель "."...

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: скрипт формирующий tab
СообщениеДобавлено: 26 ноя 2015 10:09 
Участник
Участник

Зарегистрирован:
24 ноя 2015 09:57
Сообщения: 8
Да, всё верно, десятичный разделитель "точка" (Язык и региональные стандарты), но tab получается именно такого вида


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: скрипт формирующий tab
СообщениеДобавлено: 26 ноя 2015 10:39 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2298
Откуда: Vinnytsia
Не заметил пробел в значении масштаба, как он там появился?
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"

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: скрипт формирующий tab
СообщениеДобавлено: 26 ноя 2015 10:44 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2298
Откуда: Vinnytsia
После строки
$Scale=@Text[1].Line[1]
добавьте
$Scale=@StringPart 1 $Scale

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

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: скрипт формирующий tab
СообщениеДобавлено: 26 ноя 2015 13:14 
Участник
Участник

Зарегистрирован:
24 ноя 2015 09:57
Сообщения: 8
Спасибо, всё работает :)


Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 2 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB