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

Dmitry_ (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Dmitry_
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 19 20 21 22 23 24 25 26 27 28 29 След.
Проьблема при импорте растров с привязкой TAB
 
[QUOTE]Алексей пишет:
Проблема при импорте растра с привязкой в формате TAB с числом точек 3 почему-то идет искажение масштаба, при двух точек в файле TAB вообще не импортируется (пример отправлен на общий ящик).
[/QUOTE]
Здравствуйте, Алексей.
Ваше письмо не получили. Попрошу Вас продублировать пример на ящик kbpanorama@yandex.ru.
Растры
 
[QUOTE]Timur Prutskov пишет:
2) Как сделать привязку растра по двум точкам с поворотом?
Нашел две функции для этого. Метод TMapRst::SetLocation2 в GisTool и функция AttachRswWithScalingAndRotation в MapAPI.
[/QUOTE]
В методе TMapRst::SetLocation2 обнаружили ошибку. Исправим.


[QUOTE]AttachRswWithScalingAndRotation выполняется без сообщений об ошибке, но привязку растра не выполняет. Вызываю так:
.........
Что делаю не так? Код обоих примеров отправлен вам электронной почтой.
[/QUOTE]
Исправленный проект с вызовом функции AttachRswWithScalingAndRotation выслал на Ваш ящик.
Функция AttachRswWithScalingAndRotation отрабатывает.

[CODE]extern "C" long int _export WINAPI AttachRswWithScalingAndRotation(
HMAP hmap, HWND 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, Handle, MapView->MapRsts->MapRsts[1]->RstFileName.c_str(),
       &old1, &new1, &old2, &new2, 0);

  MapView->MapRsts->MapRsts[1]->SaveRaster();
  MapView->Repaint();
}
//---------------------------------------------------------------------------
[/CODE]
Причина оказалась в параметре функции HWND handle. Если handle приходил нулевой, то функция прекращала работу.

[CODE]// handle - идентификатор окна диалога для обработки сообщений о ходе процесса
//    Диалогу визуального сопровождения процесса обработки посылаются
//    сообщения:
//    -  (WM_PROGRESSBAR) Извещение об изменении состояния процесса (#define WM_PROGRESSBAR  0x590)
//       WPARAM - текущее состояние процесса в процентах (0% - 100%)
//       Если функция-отклик возвращает WM_PROGRESSBAR, то процесс завершается.
[/CODE]
Чрезмерный контроль переменной handle из функции AttachRswWithScalingAndRotation уберу.
Изменено: Dmitry_ - 30.09.2009 19:37:58
Растры
 
[QUOTE]Timur Prutskov пишет:
1) Можно ли сделать так, чтобы растр располагался между картой местности и пользовательскими картами?[/QUOTE]
У растра и у пользовательской карты есть свойство "Отображение над/под картой". Но скомбинировать Ваш вариант не получится.

[QUOTE]Timur Prutskov пишет:
4) В файле Mappicex.h объявлена функция LoadJpegToRswAndCompress, которая преобразует jpeg-файл в растр, но в gispictr.dll такой функции нет, в других библиотеках ядра ГИС вроде тоже. Из какой библиотеки ее вызывать?[/QUOTE]
Функция LoadJpegToRswAndCompress для GIS ToolKit недоступна. Предлагаю Вам воспользоваться нашим примером для загрузки файла JPEG в растровую карту.
[CODE]
// 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);
[/CODE]
Масштабирование растров, порядок их отображения
 
Здравствуйте, Александр.

Для растягивания растра предлагаю воспользоваться функцией из библиотеки MAPPICEX, которая объявлена в файле MAPPICEX.H:
[CODE]
// Привязка растра с масштабированием по двум точкам  
// hMap        - карта, содержащая векторные данные;
// rswName     - имя файла растра
// pointMet1   - Координаты первой точки  в метрах
// pointMetNew1- Новые координаты первой точки в метрах
// pointMet2   - Координаты второй точки  в метрах
// pointMetNew2- Новые координаты второй точки в метрах
// message     - флаг на выдачу сообщений (0\1)
// При ошибке возвращает ноль
long int WINAPI _export AttachRswWithScaling(HMAP hMap, char* rswName,
                                            DOUBLEPOINT *pointMet1, DOUBLEPOINT *pointMetNew1,
                                            DOUBLEPOINT *pointMet2, DOUBLEPOINT *pointMetNew2,
                                            int message);
[/CODE]


[QUOTE]
Можно ли масштабировать растр без сохранения пропорций? Например, только по оси X?
[/QUOTE]В нашей системе размер пикселя растра в метрах один для оси X и для оси Y.
Для решения Вашей задачи предлагаю следующую функцию из библиотеки MAPPICEX, которая также объявлена в файле MAPPICEX.H:
[CODE]Трансформирование растра
// (вычисление коэффициентов пересчета координат методом наименьших квадратов)
//
//   handle    - диалог визуального сопровождения процесса обработки;
//   map       - карта,содержащая векторные данные;
//   parm      - параметры прикладной задачи;
//   namein    - имя исходного растра;
//   nameout   - имя выходного растра;
//   fact      - исходные координаты опоры;
//   teor      - желаемые координаты опоры;
//   count     - количество опорных точек (не меньше 4-х).
//
//   Диалогу визуального сопровождения процесса обработки посылаются сообщения:
//   -  (WM_PROGRESSBAR) Извещение об изменении состояния процесса
//      WPARAM - текущее состояние процесса в процентах (0% - 100%)
//      Если функция-отклик возвращает WM_PROGRESSBAR, то процесс завершается.
// При ошибке возвращает ноль,
//==========================================================­====================
long int WINAPI _export RswTransformingBySquareMethod(HMAP map,HMESSAGE handle,
                          TASKPARMEX * parm,char * namein,char * nameout,
                          long int count,DOUBLEPOINT * fact,DOUBLEPOINT * teor);
[/CODE]

[QUOTE]При открытии нескольких растров (например одной и той же области, но с разной детализацией) при отрисовке они рисуются на карте в порядке их открытия. Можно ли как-нибудь программно менять их порядок отрисовки? Например, как в Visio, по правой кнопке в меню два пункта "На задний план" и "На передний план", что-то типо этого.
[/QUOTE]

Посмотрите функцию из RstApi.h:
[CODE] // Поменять очередность отображения растров (rst) в цепочке
 // Последний растр в цепочке отображается в последнюю очередь
 // Нумерация растров в цепочке начинается с 1 и заканчивается номером mapGetRstCount(..)
 //   oldNumber - номер файла в цепочке
 //   newNumber - устанавливаемый номер файла в цепочке
 //  При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapChangeOrderRstShow(HMAP hMap, long int oldNumber,
                                                         long int newNumber);
[/CODE]
Выгрузка в TIFF
 
[QUOTE] Алексей пишет:
Почему на второй картинке такой муар?[/QUOTE]
Причин может быть несколько:
1. В документе помимо растра находится  карта, или матрица, или 8-ми битный растр с палитрой, отличной от исходного раста.
  В этом случае программа формирует палитру выходного 8-ми битного Tiff'a (256 цветов) из цветов палитры, входящих в документ карт, матриц и т.д.
2. Разрешение выходного Tiff'a не соответствует исходному растру. В диалоге "Сохранение карты в формате..." по умолчанию стоит значение 300 точек на дюйм. Не берусь по выложенным картинкам оценить отличие в разрешении изображений, но судя по объему файлов, оно (разрешение) разное.

Режим Файл/Сохранить как..->Tiff позволяет сохранить изображение растра без искажений:
1. Открываем документ, состоящий из растра(или из мозаики однотипных растров).
2. Активизируем режим Файл/Сохранить как..->Tiff.
3. Выбираем область сохранения -> По растру.
4. В списке [I]Копирование масштаба и разрешения[/I] указываем тот растр, на чьи параметры мы ориентируемся.
Выгрузка в TIFF
 
[QUOTE]А при сохранение размера файла - 8 бит на пиксель происходит искажение картинки, что не приемлемо - так идет пересчет цвета.
[/QUOTE]
Открываем в документ только 8-ми битные растры (с условием, что палитра у растров одинаковая). При сохранении изображения документа в 8-ми битный TIFF будет скопирована палитра растров. В этом случае искажений картинки по цветности быть не должно.
Выгрузка в TIFF
 
[QUOTE]А как выгрузить несколько растров одним файлов (одним файлом). Есть сшитый растр - несколько файлов RSW, не нужное закрыто областью отображения. Как сделать общий TIFF файл без пересчета цвета (цветовая гамма у всех растров одинакова)?[/QUOTE]
Воспользуйтесь режимом Файл\Сохранить как->Tiff. В диалоге установите КОЛИЧЕСТВО БИТ НА ПИКСЕЛЬ равным 24 б/п. Формируемый файл TIFF получится без искажений.
Проьблема при импорте растров с привязкой TAB
 
[QUOTE]XENA пишет:
Возможно ли создание задачи в ГИС Панораме подобной редактору
Ozi Explorer [/QUOTE]
Здравствуйте, XENA.
Создание подобного режима в ГИС Панораме возможно, но в ближайших планах его нет.
Проьблема при импорте растров с привязкой TAB
 
[QUOTE]Алексей пишет:
Вот только у меня ничего не копируется (данные о проекции в паспорте карты и растра присутствуют), то есть при выборе Файл - Экспорт в - Графика (BMP, TIFF ...) сохраняется в прямоугольных координатах и с типом системы NonEarth, а не с типом проекции (паспорт карты Топографическая 42 года с указанием номера зоны, тип электронной карты - sit)? Версия программы 10.2.2 от 23.01.2009 г.
[/QUOTE]
Здравствуйте, Алексей.
Вы правы. Программа сохранения параметров проекции(для СК42 проекции Гаусса-Крюгера) в файл TAB была реализована 25-го января 2009г.
И, конечно, в версию 10.2.2 от 23.01.2009 г. не вошла. Предлагаю подождать выхода следующей версии - 10.2.3.
Проьблема при импорте растров с привязкой TAB
 
[QUOTE]Виктор Федосеев пишет:
Вообще, неплохо бы было, если бы в таком случае программа выдавала предупреждение о некорректности информации о СК... [/QUOTE]
Сообщение будет сильно надоедать, т.к. файл TAB при загрузке растров читается несколько раз (для инициализации диалога, после конвертирования изображения...). А вот в журнал (файл LOG) соответствующую запись поместить можно.
Страницы: Пред. 1 ... 19 20 21 22 23 24 25 26 27 28 29 След.



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

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