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

Не могу отобразить .rsw на .map.

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Не могу отобразить .rsw на .map.
 
Здравствуйте. Есть такой вопрос. Есть карта .map, которая состоит из нескольких листов. Листы этой карты находятся в разных зонах. При добавление карты .rsw функцией mapOpenRstForMap она отображается не всегда корректно. Проблема в том, что координаты .rsw карты находятся в зоне отличной от .map карты. Эту проблему можно решить, перепривязав .rsw c теми же координатами но в зоне .map карты. Вопрос в том, можно ли как-нибудь корректно отобразить карту неперепривязывая ее (возможно как-либо привязав ее изначально).
Изменено: Владимир Карпов - 18.03.2016 14:23:42
 
Привязать растровую карту Вы можете через задачу "Список данных" ГИС Оператор. Для этого необходимо встать на поле с именем растра, активизировать кнопку "Свойства". Далее выбрав соответствующий пункт меню Вы можете привязать растр по одной или двум точкам.
 
Я привязываю с помощью picexLoadBmpToRstAndCompress и AttachRswWithScalingAndRotationEx. Существует ли решение моей проблемы при привязки с их помощью?
 
Растр помимо привязки (координат юго-западного угла изображения) так же как и карта может содержать параметры проекции и системы координат (СК).
Для того, чтобы изображение растра садилось на свое место на карте с другой зоной, необходимо полное соответствие параметров проекции и СК карты и добавляемого растра.

Как это организовано в ГИС Операторе?:
1. Импортируется файл GeoTIFF в RSW. Привязка растра и параметры СК автоматически заносятся в RSW.
2. При добавлении растра в документ карты анализируются параметры проекции и СК карты и растра.
  Если они отличаются, то выполняется процедура преобразования проекции растра к проекции карты, которая может занимать некоторое время.
  Координаты привязки растра при этом пересчитываются к СК карты.
  Добавление растра в документ карты в ГИС Операторе выполняется функцией mapOpenRstForMap().

В Вашем случае, после импорта графического файла в формат RSW (вызовом функции picexLoadBmpToRstAndCompress) необходимо в растр установить параметры проекции и СК.
Код
//========================================================================
// Загрузка растровых данных из файла BMP в файл RSW
//    BmpName - имя BMP-файла;
//    RstName - имя RSW-файла;
//    meterInElementX - размер в метрах элемента по X
//    meterInElementY - размер в метрах элемента по Y
//    point     - точка привязки растра (в метрах)
//                (положение юго-западного угла растра в районе)
//    Handle - HWND диалога визуального сопровождения процесса обработки.
//    compression - флаг сжатия изображения
//              0 - сжатие к блокам изображения применяться не будет
//              1 - блоки д.б. сжаты по методу LZW
//              2 - блоки д.б. сжаты по методу JPEG (справедливо для 24 битных растров)
//    При ошибке возвращает ноль
//
//    Диалогу визуального сопровождения процесса обработки посылаются
//    сообщения:
//    -  (WM_PROGRESSBAR) Извещение об изменении состония процесса
//       WPARAM - текущее состоние процесса в процентах (0% - 100%)
//       Если функция-отклик возвращает WM_PROGRESSBAR, то процесс завершается.
//
//    -  (WM_ERROR) Извещение об ошибке
//       LPARAM - указатель на структуру ERRORINFORMATION
//       Структура ERRORINFORMATION описана в picexprm.h,
//       WM_PROGRESSBAR и WM_ERROR - в maptype.h
//========================================================================
_PICIMP long int _PICAPI picexLoadBmpToRstAndCompress(HMESSAGE Handle,
const char * BmpName,
const char * RstName,
double* meterInElementX,
double* meterInElementY,
DOUBLEPOINT *point,
int compression);

Параметров  
          double* meterInElementX,
          double* meterInElementY,
          DOUBLEPOINT *point
функции picexLoadBmpToRstAndCompress достаточно для привязки изображения растра.

Координаты привязки растра point, подаваемые на вход функции picexLoadBmpToRstAndCompress, должны соответствовать устанавливаемой в растр проекции и СК.
Для установки параметров проекции и СК необходимо открыть полученный растр в отдельном документе вызовом функции mapOpenData().
Функции, позволяющие установить параметры проекции и СК растра (и многое другое), объявлены в файле rstapi.h.
Как правило, функции принимают на вход дескриптор открытого документа HMAP, который мы получили вызовом функции mapOpenData(), и
номер растра в цепочке (документе), т.к. в документ можно добавить несколько растров.
Номер растра в цепочке (документе) определяется вызовом функции mapGetRstNumberByName.

Например, для установки параметров проекции и СК растра используются функции:
Код
  // Установить данные о проекции растра
_MAPIMP  long int _MAPAPI mapSetRstProjectionData(HMAP hMap, int number,
MAPREGISTEREX* mapregister);

  // Установить параметры эллипсоида растра
_MAPIMP long int _MAPAPI mapSetRstEllipsoidParam(HMAP hMap, long int number,
const ELLIPSOIDPARAM *ellipsoidparam);

  // Установить коэффициенты трансформирования геодезических координат растра
_MAPIMP long int _MAPAPI mapSetRstDatumParam(HMAP hMap, long int number,
const DATUMPARAM *datumparam);

Закрытие документа растра осуществляется вызовом функции mapCloseData().

Если все выполнили правильно, то при добавлении растра в документ карты вызовом функции mapOpenRstForMap() изображение растра должно сесть на свое место.
 
Цитата
Dmitry_ пишет:
Растр помимо привязки (координат юго-западного угла изображения) так же как и карта может содержать параметры проекции и системы координат (СК).
Для того, чтобы изображение растра садилось на свое место на карте с другой зоной, необходимо полное соответствие параметров проекции и СК карты и добавляемого растра.

Правильно ли я понял? Растр (без модификации) не может корректно отображаться на нескольких различных картах?
Изменено: Владимир Карпов - 25.03.2016 16:02:13
 
Цитата
Владимир Карпов пишет:
Растр (без модификации) не может корректно отображаться на нескольких различных картах?
Если карты одинаковы (по Паспорту) - то может, например, все карты в UTM36.
А если растр был "привязан" в UTM36, а Вы хотите его подключить к карте CК42-6, то он "уедет в сторону" - т.е. предварительно его нужно "привязать"/"перепривязать" уже в CК42-6.
 
Цитата
Vitaliy Belenkov пишет:
нескольких различных

Я имел в виду в общем случае.

Cпасибо.
Изменено: Владимир Карпов - 25.03.2016 18:29:35
Страницы: 1
Читают тему (гостей: 1)



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

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