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

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

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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 412 След.
Масштабирование карты согласно выделенной зоне
 
[CODE]// -----------------------------------------------------------------
// Функция изменения масштаба по координатам фрагмента в метрах
// Возвращает: 0 - масштаб не изменился, 1 - масштаб изменился
// -----------------------------------------------------------------
int TMapWindow::ChangeScaleByFrame(DFRAME * dframe)
{
 // Габариты окна в пикселах
 RECT   rect = GetClientRect();

 double x1   = dframe->X1;
 double y1   = dframe->Y1;
 double x2   = dframe->X2;
 double y2   = dframe->Y2;

 DOUBLEPOINT center;
 center.X    = (x1 + x2)/2.0;
 center.Y    = (y1 + y2)/2.0;

 mapPlaneToPicture((HMAP)MapDoc, &x1, &y1);
 mapPlaneToPicture((HMAP)MapDoc, &x2, &y2);

 int dw = ROUND(x2 - x1);
 if (dw < 0)
   dw = -dw;
 else
   if (dw == 0)
     dw = 1;

 int dh = ROUND(y1 - y2);
 if (dh < 0)
   dh = -dh;
 else
   if (dh == 0)
     dh = 1;

 // Расчет коэффициента изменения масштаба
 double change  = (double)(rect.RT - rect.LT - 64) / (double)dw;
 double change2 = (double)(rect.DN - rect.UP - 64) / (double)dh;

 if (change > change2)
   change = change2;

 double scale = mapGetRealShowScale((HMAP)MapDoc);
 scale = scale/ change;

 // Установить курсор в центр окна
 SetProcess(IDP_SCALECENTRE, 1);

 // Установить масштаб для показа объекта в рамках окна
 int ret = SetMapScale(scale, 1);

 // Установить окно в центр габаритов объекта
 ViewPlanePoint(¢er);

 return ret;
}[/CODE]
Как получить из кода его номер из классификатора
 
[CODE] // Запросить внутренний код (порядковый номер) объекта
 // по внешнему коду, локализации  и порядковому номеру среди аналогичных
 // объектов(с 1)
 // hRsc - идентификатор классификатора карты
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetRscObjectCodeByNumber(HRSC hRsc, long int excode, long int local, long int number = 1);
[/CODE]
Импорт / Экспорт в S-57, Предложения и замечания, Продолжение Архивных тем
 
Хорошо бы конкретные примеры на почту с пожеланиями - что изменить.
Поочередно - по степени важности или частоте применения.
Формально сохранение контуров объектов не противоречит стандарту. Вряд ли это экономит объем данных.
Может это влияет на решение каких-то Ваших задач?
Это не обсуждение необходимости придерживаться общепринятых подходов, а поиск приоритетов.
Получение изображения объекта из классификатора
 
[CODE] colors_number = sitapi.mapGetSiteColorsCount(map_handle, map_handle)
  sitapi.mapGetSitePalette(tmp_map, tmp_map, colorref, colors_number)

map_handle, tmp_map ?[/CODE]
Проблема с отрисовкой векторного объекта на HDC
 
[QUOTE]Антон написал:
Добрый день, не получается нарисовать объекты из IMGLIBRARY ( примитив №250). Допустим, я хочу нарисовать объект LIGHTS_P, он состоит из одного примитива IMG_LONG ( Структура типа LONG ). Что значит значение Value в этой структуре? Из описания я не понял что значат структуры IMG_DOUBLE, IMG_LONG. И в некоторых объектах различаются отображения примитивов от изображений тех же самых объектов на карте.
 [/QUOTE]
Исходные тексты всех программируемых знаков приведены в sdk -
[URL=https://gisinfo.ru/download/?id=310]https://gisinfo.ru/download/?id=310[/URL]

sdk15.zip\imlapi\s57navy
[CODE]// Огни
int _fastcall Lights(const POLYDATA4D* pdata, const IMGDRAW* draw, const IMGCONTEXT* context, int test, FRAME* border);

// Параметры для построения огней
IMLPARM ImlLights =
{
 IMLIDENT, 1,
               1, 0, 0, 0,                // Передавать семантику
 {{ IMG_LONG, "Mark border", "Габариты знака в мкм на карте", 0, 0 },
 }
};[/CODE]
Получение изображения объекта из классификатора
 
Функции в библиотеке одинаковые для разных платформ.
Описание прототипов для python одинаковое для разных платформ.
Если какой-то функции нет в текущей версии rscapi.py или другом файле - их можно добавить в текстовом редакторе.

[URL=https://gisinfo.ru/download/?id=310]https://gisinfo.ru/download/?id=310[/URL]
- тут добавлена функция mapGetRscObjectParameters
Получение изображения объекта из классификатора
 
В наборе прототипов скриптов (mapapi.py) есть указанная функция -
[CODE]# Вывести изображение условного знака в XImage (массив)
# Описание структуры XIMAGEDESC в maptype.h
# rect - фрагмент для вывода отображения
# func - функция отображения объекта
# parm - параметры изображения
# colors - количество цветов
# palette - палитра
# text - необходимый текст
# local - локализация
# При ошибке в параметрах возвращает ноль

   mapPaintExampleObjectByFuncToXImagePro_t = mapsyst.GetProcAddress(acceslib,ctypes.c_int,'mapPaintExampleObjectByFuncToXImagePro', maptype.HMAP, ctypes.POINTER(maptype.XIMAGEDESC), ctypes.POINTER(maptype.RECT), ctypes.c_int, ctypes.c_char_p, ctypes.c_int, ctypes.POINTER(maptype.COLORREF), maptype.PWCHAR, ctypes.c_int, ctypes.c_int)
   def mapPaintExampleObjectByFuncToXImagePro(_hMap: maptype.HMAP, _imagedesc: ctypes.POINTER(maptype.XIMAGEDESC), _rect: ctypes.POINTER(maptype.RECT), _func: int, _parm: ctypes.c_char_p, _colors: int, _palette: ctypes.POINTER(maptype.COLORREF), _text: mapsyst.WTEXT, _local: int, _erase: int) -> int:
       return mapPaintExampleObjectByFuncToXImagePro_t (_hMap, _imagedesc, _rect, _func, _parm, _colors, _palette, _text.buffer(), _local, _erase)[/CODE]
Особенности написания скриптов с функциями MAPAPI описаны в Help -

[URL=https://help.gisserver.ru/v15/russian/mapscena/index.html?runpy.html]https://help.gisserver.ru/v15/russian/mapscena/index.html?runpy.html[/URL]
[URL=https://help.gisserver.ru/v15/russian/mapscena/index.html?python_script_struct.html]https://help.gisserver.ru/v15/russian/mapscena/index.html?python_script_struct.html[/URL]

Все базовые функции имеют прототипы на python (или могут быть дополнены) и алгоритм на C++ может быть полностью воспроизведен.

Например:
[CODE]# Запросить текущую палитру карты (с учетом яркости/контрастности)
# hMap   - идентификатор открытой основной карты
# hSite  - идентификатор открытой пользовательской карты
# colors - указатель на структуру COLORREF первого цвета в палитре
# count  - количество цветов (не более 256)
# При ошибке возвращает ноль

   mapGetSitePalette_t = mapsyst.GetProcAddress(acceslib,ctypes.c_int,'mapGetSitePalette', maptype.HMAP, maptype.HSITE, ctypes.POINTER(maptype.COLORREF), ctypes.c_int)
   def mapGetSitePalette(_hMap: maptype.HMAP, _hSite: maptype.HSITE, _colors: ctypes.POINTER(maptype.COLORREF), _count: int) -> int:
       return mapGetSitePalette_t (_hMap, _hSite, _colors, _count)
[/CODE][CODE]# Запросить параметры отображения (принтерного)объекта по внутреннему коду объекта
# hRsc - идентификатор классификатора карты
# incode - внутренний код объекта
# При ошибке возвращает ноль

   mapGetRscPrintObjectParameters_t = mapsyst.GetProcAddress(acceslib,ctypes.c_char_p,'mapGetRscPrintObjectParameters', maptype.HRSC, ctypes.c_int)
   def mapGetRscPrintObjectParameters(_hRsc: maptype.HRSC, _incode: int) -> ctypes.c_char_p:
       return mapGetRscPrintObjectParameters_t (_hRsc, _incode)

# Запросить параметры отображения объекта по внутреннему коду
# hRsc - идентификатор классификатора карты
# incode - внутренний код объекта
# При ошибке возвращает ноль

   mapGetRscObjectParameters_t = mapsyst.GetProcAddress(acceslib,ctypes.c_char_p,'mapGetRscObjectParameters', maptype.HRSC, ctypes.c_int)
   def mapGetRscObjectParameters(_hRsc: maptype.HRSC, _incode: int) -> ctypes.c_char_p:
       return mapGetRscObjectParameters_t (_hRsc, _incode)
[/CODE]
Функции mapGetMapInfoEx и mapGetWorkSystemParameters заполняют структуру MAPREGISTEREX по-разному
 
Эти функции не заполняют параметры, а копируют в одном случае параметры карты (mapGetMapInfoEx), которые были установлены при ее создании,
а в другом случае (mapGetWorkSystemParameters) параметры рабочей системы пересчета, которые были установлены программно (mapSetWorkSystemParametersEx),
а если не были, то некоторые условные начальные значения.

С установленными рабочими параметрами связан ряд функций - mapPlaneToWorkSystemPlane, mapGeoWGS84ToWorkSystemGeo и т.д.
Они все являются устаревшими, поскольку более универсальная группа функций - mapCreateUserSystemParametersPro, mapUserGeoToGeoWGS84, mapUserPlaneToGeoWGS84Pro и т.п.
Незакрытый #pragma pack?
 
Спасибо за сообщение!
В конце mapsyst.h есть команда -
[CODE]#if defined(BUILD_DLL64) && defined(LINUXAPI)
#pragma pack(pop)
#endif
[/CODE]Но она не симметрична верхней команде. Мы внесем изменение, чтобы команды были рядом и симметрично.
Установка GIS WebServer
 
Цитата
Александр Паршин написал:
"В GISWebServerSE включена сборка библиотеки GISWebToolKit" -
1) мы эту сборку можем использовать в своих PHP-модулях, которые будет подключать через include-директивы к модулям GIS WebServer?
2) если можем, то она обладает тем же функционалам, что и сам GISWebToolKit или значительно меньшим? По телефону сказали, что значительно меньшим, чем сам GISWebToolKit , продаваемый отдельно
В соответствии с лицензией на GISWebToolKit - это инструментарий, который может использоваться без ограничений на количество разрабатываемых web-приложений.
А лицензия на GIS WebServer предполагает ОДИН экземпляр сервера, который разработчик может модифицировать, но не тиражировать без приобретения дополнительной лицензии или дополнительного соглашения.
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 412 След.



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

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