На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Растры

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Растры
 
Здравствуйте! Ответьте пожалуйста на несколько вопросов.

1) Можно ли сделать так, чтобы растр располагался между картой местности и пользовательскими картами?



2) Как сделать привязку растра по двум точкам с поворотом?
Нашел две функции для этого. Метод TMapRst::SetLocation2 в GisTool и функция AttachRswWithScalingAndRotation в MapAPI.

При вызове SetLocation2 появляется сообщение: "Функция AttachRswWithScalingAndRotation не найдена в библиотеке GISPICEX.DLL". Вызываю таким образом:

Код
TDOUBLEPOINT old1,new1,old2,new2;

old1.X = 0;
old1.Y = 0;
new1.X = 6050000;
new1.Y = 9388287;
old2.X = 0;
old2.Y = 880;
new2.X = 6050000;
new2.Y = 9398186;

// После вызова функции появляется сообщение об ошибке:
// Функция AttachRswWithScalingAndRotation не найдена в библиотеке GISPICEX.DLL.
MapView->MapRsts->MapRsts[1]->SetLocation2( old1, new1, old2, new2);
MapView->MapRsts->MapRsts[1]->SaveRaster();

MapView->Repaint();

AttachRswWithScalingAndRotation выполняется без сообщений об ошибке, но привязку растра не выполняет. Вызываю так:

Код
typedef struct DOUBLEPOINT   // КООРДИНАТЫ ТОЧКИ (ПЛАВАЮЩАЯ МЕТРИКА)
{
  union { double x; double X; };
  union { double y; double Y; };

  void operator  = (double value)  {         x  = value;   y  = value;  }
   int operator != (double value)  { return (x != value || y != value); }
   int operator == (double value)  { return (x == value && y == value); }
}
  DOUBLEPOINT;
//---------------------------------------------------------------------------
extern "C" long int  _export WINAPI AttachRswWithScalingAndRotation(
   HMAP hmap, int handle, char* rswname,
    DOUBLEPOINT *pointmet1, DOUBLEPOINT *pointmetnew1,
   DOUBLEPOINT *pointmet2, DOUBLEPOINT *pointmetnew2,
    int message);
//---------------------------------------------------------------------------
void __fastcall TForm1::btnAttachRswWithScalingAndRotationClick(TObject *Sender)
{
   DOUBLEPOINT old1,new1,old2,new2;

   old1.X = 0;
   old1.Y = 0;
   new1.X = 6050000;
   new1.Y = 9388287;
   old2.X = 0;
   old2.Y = 880;
   new2.X = 6050000;
   new2.Y = 9398186;

    // Функция возвращает 0 и не выполняет привязку растра.
   AttachRswWithScalingAndRotation(
      MapView->FMap, 0, MapView->MapRsts->MapRsts[1]->RstFileName.c_str(),
        &old1, &new1, &old2, &new2, 0);

   MapView->MapRsts->MapRsts[1]->SaveRaster();
   MapView->Repaint();
}
//---------------------------------------------------------------------------

Что делаю не так? Код обоих примеров отправлен вам электронной почтой.



3) Как сохранить изменения способа отображения и прозрачности растра?
Я изменяю способ отображения и прозрачность растра так:

Код
TMapRst *MapRst = MapView->MapRsts->MapRsts[1];

// Делаю растр полупрозрачным и располагаю над картой
MapRst->RstView = 3;
MapRst->RstViewOrder = 1;
MapRst->SaveRaster();
MapView->Repaint();

После этого изображение растра меняется. Но если закрыть растр, а потом открыть снова, он будет непрозрачным и расположенным над картой. То есть, изменения не сохраняются в файл растра. Что сделать, чтобы сохранялись?



4) В файле Mappicex.h объявлена функция LoadJpegToRswAndCompress, которая преобразует jpeg-файл в растр, но в gispictr.dll такой функции нет, в других библиотеках ядра ГИС вроде тоже. Из какой библиотеки ее вызывать?
 
Метод TMapRst::SetLocation2 должен работать корректно. Проверим на примерах.
Подскажите, какую версию GIS ToolKIt используете?
Методом MapRst->SaveRaster сохраняются изменения в растре, которые вызваны его редактированием и они сохраняются непосредственно в файл растра. Все остальные настройки (прозрачность, порядок отображения) хранятся в ini файла документа, который может содержать список карт, растров, матриц. Параметры документа сохраняются и восстанавливаются MApView->SaveMapState (RestoreMapState)
 
Использую GIS ToolKit версии 10.0.2
 
Цитата
Timur Prutskov пишет:
1) Можно ли сделать так, чтобы растр располагался между картой местности и пользовательскими картами?
У растра и у пользовательской карты есть свойство "Отображение над/под картой". Но скомбинировать Ваш вариант не получится.

Цитата
Timur Prutskov пишет:
4) В файле Mappicex.h объявлена функция LoadJpegToRswAndCompress, которая преобразует jpeg-файл в растр, но в gispictr.dll такой функции нет, в других библиотеках ядра ГИС вроде тоже. Из какой библиотеки ее вызывать?
Функция LoadJpegToRswAndCompress для GIS ToolKit недоступна. Предлагаю Вам воспользоваться нашим примером для загрузки файла JPEG в растровую карту.
Код
 
// C++Builder 6
TJPEGImage * jp = 0;
  try
  {
   jp = new TJPEGImage();
   jp->LoadFromFile(InputName);
  }
  __finally  { }

  long int height = jp->Height;
  COLORREF* palette = 0;
  long int colorcount = 0;
  long int nbits = 24;

  Graphics::TBitmap * Bm = 0;
  try
  {
   Bm = new Graphics::TBitmap();
   Bm->Assign(jp);
  }
  __finally
  {
   if (jp)  {  delete jp;  jp = 0; }
  }
  HMAP HMap = mapCreateRst(OutputName.c_str(), Bm->Width, Bm->Height, nbits,
                           palette, colorcount, Scale, PrecisionMeters);
  int RstNumber = 1;
  if (Point)
     // Установить привязку растра в районе работ(в метрах)
     mapSetRstLocation(HMap, RstNumber, (DOUBLEPOINT*)Point);

  // Установить степень видимости растра
  mapSetRstView(HMap, RstNumber, 0);
  for (int i = 0; i < height; i++ )
     {
       // Запись прямоугольного участка растра
       if (mapPutRstFrame(HMap, RstNumber, (char*)Bm->ScanLine[i],
                                0, i, Bm->Width, 1, 1, Bm->Width*nbits / (2*4)) == 0)
         {
          // ...
         }
     }

  // ...
  if (Bm) delete Bm;

  // Записать изменения растра в файл
  mapSaveRst(HMap,RstNumber);
  // Установить степень видимости растра
  mapSetRstView(HMap, RstNumber, 1);
  mapCloseData(HMap);
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности