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

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

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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 12 ... 29 След.
Привязка растра по одной точке, загрузка изображения в формат RSW, GISToolKit Active C#
 
Здравствуйте!

Объявление функции rswgSetCurrentRasterDialog в файле rswgtapi.h:
[CODE] //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//  Сервисные диалоги редактора растра
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++­++++++++++++++

#ifndef GISLIB
//==========================================================­==============
//  Диалог "Текущий растр" редактора растра
// hMap            - идентификатор документа
// parm            - указатель на структуру типа TASKPARMEX (см. maptype.h)
// rswFileName     - имя файла текущего растра (заполняется функцией)
// sizeRswFileName - размер буфера rswFileName в байтах
// point           - координаты левой верхней точки формы (пиксели экрана)
//
//    При ошибке возвращает ноль
//==========================================================­==============
_RSWGIMP long int _RSWGAPI rswgSetCurrentRasterDialog(HMAP hMap, TASKPARMEX* parm,
                                              WCHAR* rswFileName,
                                              int sizeRswFileName,
                                              POINT* point);
[/CODE]
Перед функцией rswgSetCurrentRasterDialog  стоит директива условной компиляции #ifndef GISLIB.
GISLIB объявляется при сборке библиотек для Gis ToolKit.
Таким образом, функция rswgSetCurrentRasterDialog намеренно исключена из сборки для Gis ToolKit.
привязка растра по двум точкам, как автоматически привязать растр по двум точкам
 
Без пересчета геодезических координат можно попробовать файл привязки TAB (MapInfo), или MAP (OziExplorer).
Формат TAB может быть интересен тем, что в  MapInfo в файле MapInfo.prj хорошо документированы применяемые системы координат.
Для OziExplorer я такой информации не встречал.
Импортирование растра из Ozi Explorer, Импортирование растра по двум точкам из Ozi Explorer
 
Здравствуйте, Андрей!

В функцию анализа файла привязки OZI добавил СК "Долгота / Широта (Mercator WGS84)", EPSG 3857.
Ссылку на архив с обновленной библиотекой выслал на почту. Библиотеку скопируйте в папку с установленной программой.
Если все сработает, добавлю изменения в ГИС.
Привязка растра по одной точке, загрузка изображения в формат RSW, GISToolKit Active C#
 
Здравствуйте!
[QUOTE]Хотела бы уточнить в функциях MAPAPI нашла функции по привязке растра по двум точкам, есть ли функция привязки по одной точке?[/QUOTE]
RSTAPI.H:[CODE] // Установить привязку растра в районе работ(в метрах)
 // hMap       - идентификатор открытой векторной карты
 // number     - номер файла в цепочке
 // location   - координаты юго-западного угла растра(в метрах)
 // При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapSetRstLocation(HMAP hMap, long int number, DOUBLEPOINT *location);
[/CODE]
[QUOTE]И еще для того чтобы вызвать диалог загрузки изображения в формат RSW использую функцию LoadImageToRstEx, но она позволяет загружать только BMP,PCX,TIFF, GeoTIFF. Не нашла функцию которая бы загружала все графические форматы к примеру еще JPEG, PNG ? Видела отдельные функции для JPEG.[/QUOTE]
RSWGTAPI.H, gisrswg.dll:[CODE] //========================================================================
// Диалог загрузки графического изображения в растровую карту(RSW)
// Обрабатываются файлы следующих форматов: BMP, JPEG, PCX, TIFF, GeoTIFF, PNG, GIF
//    В качестве файлов привязки растрового изображения могут применяться следующие данные:
//    - Файл настроек (*.ini),
//    - Файл настроек Фотоплан (*.tpf),
//    - Файл настроек Талка (*.pln),
//    - Файл настроек MapInfo (*.tab),
//    - Файл настроек (world file)(*.tfw;*.jgw;*.bpw;*.pcw;*.j2w;*.sdw;*.nfw;*.wld)
//    - Файл OziExplorer (*.map)
//
//    hmap - карта,содержащая векторные(растровые, матричные) данные;
//    lpszsource - указатель на имя исходного файла
//    sizesource - размер памяти, выделенной по указателю lpszsource (не менее 260 байт)
//    lpsztarget - указатель на имя выходного файла
//    sizetarget - размер памяти, выделенной по указателю lpsztarget (не менее 260 байт)
//    fileLocType- тип применяемого файла привязки растрового изображения
//                 fileLocType может принимать следующие значения:
//                 120 - (*.ini), 121 - Фотоплан (*.tpf), 122 - Талка (*.pln),
//                 123 - world file(*.tfw;*.jgw;*.bpw;*.pcw;*.j2w;*.sdw;*.nfw;*.wld),
//                 124 - MapInfo (*.tab), 125 - OziExplorer (*.map).
//    parm       - параметры прикладной задачи. Структура TASKPARM описана в MAPTYPE.H
//
//    При ошибке возвращает ноль
//==========================================================­==============
_RSWGIMP long int _RSWGAPI DialogLoadImageToRsw(HMAP hmap,
                                            char* lpszsource, long int sizesource,
                                            char* lpsztarget, long int sizetarget,
                                            long int fileLocType, TASKPARM *parm);

_RSWGIMP long int _RSWGAPI DialogLoadImageToRswUn(HMAP hmap,
                                            WCHAR* lpszsource, long int sizesource,
                                            WCHAR* lpsztarget, long int sizetarget,
                                            long int fileLocType, TASKPARM *parm);

[/CODE]
привязка растра по двум точкам, как автоматически привязать растр по двум точкам
 
[URL=http://gis-lab.info/qa/tfw.html]Формат файла географической регистрации (world-файл)[/URL]
Delphi XE5 . Установить прозрачность растра.
 
[CODE]
 // Установить прозрачный цвет растра (для 16-,24-,32-битных растров)
 //  hMap   - идентификатор открытой векторной карты
 //  number - номер файла в цепочке
 //  color  - значение прозрачного цвета в формате RGB (от 0 до 0x00FFFFFF)
 // При установке IMGC_TRANSPARENT (0xFFFFFFFF) прозрачный цвет не используется
 // При ошибке возвращает IMGC_TRANSPARENT

_MAPIMP COLORREF _MAPAPI mapSetRstTransparentColor(HMAP hMap, long int number, COLORREF color);
[/CODE]

Функция mapSetRstTransparentColor применяется только для 16-,24-,32-битных растров.
Для 16- и 256-цветных растров (4 и 8 бит соответственно) используются функции:
[CODE]// Установить видимость цвета (для 16- и 256-цветных растров)
 //  hMap   - идентификатор открытой векторной карты
 //  number - номер файла в цепочке
 //  index  - индекс цвета в палитре растра(начиная с 0)
 //  value: 1 - включить отображение цвета с данным индексом
 //         0 - отключить отображение цвета с данным индексом
 //  Сохранение видимости цветов в INI-файле (не заносится в заголовк файла растра)
 //  При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapSetVisibilityColor(HMAP hMap, long int number,
long int index, long int value);

 // Установить видимость цвета (для 16- и 256-цветных растров)
 //  hMap   - идентификатор открытой векторной карты
 //  number - номер файла в цепочке
 //  index  - индекс цвета в палитре растра(начиная с 0)
 //  value: 1 - включить отображение цвета с данным индексом
 //         0 - отключить отображение цвета с данным индексом
 //  Сохранение видимости цветов в заголовке файла растра(а также в INI-файле)
 //  При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapSetVisibilityColorInRstFile(HMAP hMap, long int number,
long int index, long int value);
[/CODE]
Для определения размера элемента растра в битах используйте функцию:
[CODE]
 // Запросить размер элемента растра в битах
 // hMap       - идентификатор открытой векторной карты
 // number     - номер файла в цепочке
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetRstElementSize(HMAP hMap, long int number);
[/CODE]
Ваш растр создан с какой характеристикой? 4, 8, 16, или 24 бит на пиксель?
delphi xe5. Не работает преобразование растра.
 
В функции LoadBmpToRstByPlace в качестве разрешения растра устанавливается значение по умолчанию - 20000 т./м, что соответствует 508 т./д.
Очевидно, что это значение не соответствует загружаемому изображению.
Размер элемента (пикселя) растра рассчитывается по формуле:  MeterInElement = Scale / Precision ;
MeterInElement - размер элемента (пикселя) растра в метрах,
Scale          - масштаб,
Precision      -  разрешения растра ( т./м).

Для импорта растра предлагаю использовать функцию picexLoadBmpToRstAndCompress:
[CODE]
//==========================================================­==============
// Загрузка растровых данных из файла 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);

_PICIMP long int _PICAPI picexLoadBmpToRstAndCompressUn(HMESSAGE Handle,
const WCHAR *BmpName,
const WCHAR *RstName,
double* meterInElementX,
double* meterInElementY,
DOUBLEPOINT *point,
int compression);
[/CODE]

Точка привязки растра point:
DOUBLEPOINT point;
point.x =  x_min;
point.y =  y_min;

// height - высота изображения в элементах (пикселях)
// width  - ширина изображения в элементах (пикселях)

// размер элемента (пикселя) растра в метрах  по X и Y
double meterInElementX = (x_max - x_min)/height;
double meterInElementY, = (y_max - y_min)/width;

// вызов функции
picexLoadBmpToRstAndCompress(0, BmpName, RstName, &meterInElementX, &meterInElementY, &point, 0);
Установка соответствия кодов
 
Здравствуйте.
Для загрузки линейных и площадных объектов предлагаю воспользоваться режимами "Создать линейный объект из файла *.csv" и "Создать площадной объект из файла *.csv" соответственно.
Режимы находятся в панели "Обработка файлов обменных форматов" геодезического редактора.
Все строки файла *.csv рассматриваются как метрика одного объекта.

Пример файла *.csv, сформированного по Вашим данным:
[CODE]6181896.089 7459638.890
6182096.079 7459698.909
6182246.089 7459688.899
6182356.108 7459618.850
6182416.128 7459548.811
6182436.138 7459508.792
6182496.187 7459388.724
6182526.206 7459338.694
6182616.284 7459188.606
6182686.314 7459128.577
6182906.372 7459038.509[/CODE]
Delphi XE 5. Импорт растра из BMP
 
Описание алгоритма получения полноценного растра из графического файла BMP:

1. Конвертируем изображение растра из файла BMP в файл RSW.
  Используем одну из функций, объявленных в файле mappicex.h: picexLoadBmpToRstAndCompress, picexLoadBmpToRstAndCompressJPEG, LoadBmpToRstByPlace...
  В результате выполнения функции импорта получаем на диске файл RSW.

2. Открываем полученный растр RSW в отдельном документе вызовом функции mapOpenData() из mapapi.h.
  В результате выполнения функции получаем идентификатор (дескриптор) HMAP открытого документа. В документе у нас открыт только один растр.

3. Заполняем структуры MAPREGISTEREX, ELLIPSOIDPARAM, DATUMPARAM параметрами проекции и системы координат.

4. Устанавливаем параметры проекции и СК (системы координат) в растр RSW вызовом функций: mapSetRstProjectionData, mapSetRstEllipsoidParam, mapSetRstDatumParam.
  Функции, позволяющие установить параметры проекции и СК растра (и многое другое), объявлены в файле rstapi.h.
  Как правило, функции принимают на вход дескриптор открытого документа HMAP, который мы получили вызовом функции mapOpenData() (см. п.2), и номер растра в цепочке (документе), т.к. в документ можно добавить несколько растров.
  Номер растра в цепочке (документе) определяется вызовом функции mapGetRstNumberByName.

5. Закрываем документ с растром для освобождения ресурсов и памяти:
[CODE]// Закрыть все данные электронной карты
 // hmap -  идентификатор открытых данных
 // Идентификатор HMAP становится недействительным !

 _MAPIMP void _MAPAPI mapCloseData(HMAP hMap);[/CODE]

[CODE]
 char * bmpName = "D:\\image.bmp";
 char * rswName = "D:\\raster.rsw";

 double x_min = 100;   // значения привязки условные !
 double y_min = 100;
 double x_max = 200;
 double y_max = 200;

 DFRAME frame;
 frame.X1 = x_min;
 frame.Y1 = y_min;

 frame.X2 = x_max;
 frame.Y2 = y_max;

 //    Конвертор Bmp -> Rsw
 if (LoadBmpToRstByPlace(0, 0, bmpName, rswName, 500, &frame) != 0)
   {
    // Открыть данные с автоматическим определением их типа
    HMAP hMap = mapOpenData(rswName, 0);
    if (hMap)
      {
       // Запросить номер растра в цепочке по имени файла
       int numberRsw = mapGetRstNumberByName(hMap, rswName);
       if (numberRsw != 0)
         {
          MAPREGISTEREX mapreg;
          memset(&mapreg, 0, sizeof(MAPREGISTEREX));
          mapreg.Length = sizeof(MAPREGISTEREX);

          ELLIPSOIDPARAM ellipsoid;
          memset(&ellipsoid, 0, sizeof(ELLIPSOIDPARAM));

          DATUMPARAM datum;
          memset(&datum, 0, sizeof(DATUMPARAM));

          // Код EPSG указал первый попавшийся
          long int epsgcode = 4326; // WGS 84 (Lat/Lon)

          // Запросить параметры проекции и системы координат по коду EPSG
          // Если код EPSG задает геодезическую систему координат,
          // то устанавливается проекция Широта\Долгота и соответствующие
          // параметры эллипсоида и датум
          // Если код EPSG задает плоскую прямоугольную систему координат,
          // то все параметры устанавливаются из базы EPSG
          // epsgcode  - код EPSG, для СК-42 зоны 2-32 : 28402-28432, для СК-95 зоны 4-32: 20004-20032
          // mapreg    - параметры системы координат и проекции
          // datum     - параметры пересчета с эллипсоида рабочей системы координат
          //             к WGS-84
          // ellipsoid - параметры пользовательского эллипсоида для рабочей
          //             системы координат
          // Для геодезических систем координат возвращает 2,
          // для плоских прямоугольных возвращает 1.
          // При ошибке возвращает 0

          if (mapGetParametersForEPSG(epsgcode, &mapreg, &datum, &ellipsoid) != 0)
            {
             // Установить данные о проекции растра
             if (mapSetRstProjectionData(hMap, numberRsw, &mapreg) != 0 &&
                 // Установить параметры эллипсоида растра
                 mapSetRstEllipsoidParam(hMap, numberRsw, &ellipsoid) != 0 &&
                 // Установить коэффициенты трансформирования геодезических координат растра
                 mapSetRstDatumParam(hMap, numberRsw, &datum) != 0)
               {
                // установка параметров проекции и СК выполнена

                // Записать изменения растра в файл
                // hMap       - идентификатор открытой векторной карты
                // number     - номер файла в цепочке
                // При ошибке возвращает ноль

                mapSaveRst(hMap, numberRsw);

               }
              else
               {
                // Ошибка установки параметров проекции и СК
                // MessageBox(...);
               }
            }
         }

       // Закрыть все данные электронной карты
       // hmap -  идентификатор открытых данных
       // Идентификатор HMAP становится недействительным !

       mapCloseData(hMap);
      }
   }
[/CODE]
Delphi XE 5. Импорт растра из BMP
 
Для установки параметров проекции и системы координат растра используются функции, которые объявлены в файле rstapi.h:
[CODE]
// Установить данные о проекции растра
_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);[/CODE]
Но перед вызовом данных функций необходимо верно заполнить структуры MAPREGISTEREX, ELLIPSOIDPARAM, DATUMPARAM параметрами проекции и системы координат.
Если указанные структуры заполнены неверно, то функции установки вернут 0.

Если известен для устанавливаемой проекции код EPSG, то логично для заполнения структур (MAPREGISTEREX, ELLIPSOIDPARAM, DATUMPARAM) воспользоваться функцией, объявленной в файле mapapi.h:
[CODE]
 // Запросить параметры проекции и системы координат по коду EPSG
 // Если код EPSG задает геодезическую систему координат,
 // то устанавливается проекция Широта\Долгота и соответствующие
 // параметры эллипсоида и датум
 // Если код EPSG задает плоскую прямоугольную систему координат,
 // то все параметры устанавливаются из базы EPSG
 // epsgcode  - код EPSG, для СК-42 зоны 2-32 : 28402-28432, для СК-95 зоны 4-32: 20004-20032
 // mapreg    - параметры системы координат и проекции
 // datum     - параметры пересчета с эллипсоида рабочей системы координат
 //             к WGS-84
 // ellipsoid - параметры пользовательского эллипсоида для рабочей
 //             системы координат
 // Для геодезических систем координат возвращает 2,
 // для плоских прямоугольных возвращает 1.
 // При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapGetParametersForEPSG(long int epsgcode,
MAPREGISTEREX  *mapreg,
DATUMPARAM     *datum,
ELLIPSOIDPARAM *ellipsoid);[/CODE]
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 12 ... 29 След.



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

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