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

Владимир Егоров (Все сообщения пользователя)

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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 21 След.
Не собирается проект под linux, Не могу собрать проект написанный под Windows в ОС Linux (Kubuntu 19)
 
panorama.h (не получается убрать пробел из #include <math.h>, опять движок форума барахлит?):
[CODE]#pragma once
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#pragma GCC diagnostic ignored "-Wsign-conversion"
#pragma GCC diagnostic ignored "-Wsign-compare"
#pragma GCC diagnostic ignored "-Wreturn-type"
#pragma GCC diagnostic ignored "-Wunused-variable"
#define HIDEMAXMIN

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include <ctype.h>
#include <errno.h>
#include <string.h>
#include <dlfcn.h>
#include <pthread.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/time.h>
#include <ma th.h>
#include <cmath>

namespace panorama{
#include <mapapi.h>
#include <vecexapi.h>
#include <maptype.h>
#include <mathapi.h>
#include <maptype.h>
}


#undef HIDEMAXMIN

#pragma GCC diagnostic pop
[/CODE]
Изменено: Владимир Егоров - 30.10.2019 20:42:09
Способ задания объекта
 
Промахнулся веткой
Изменено: Владимир Егоров - 30.10.2019 20:39:36
Не работает выравнивание русского текста
 
[URL=http://www.gisweb.ru/forum/messages/forum7/topic8056/message58863/8056#message58863]Где-то я уже это видел =)[/URL]
[MAPAPI] Ошибки в функциях по привязке/конвертации/оптимизации растров, [MAPAPI] Ошибки в функциях по привязке/конвертации/оптимизации растров
 
На наших устройствах стоит специальная версия gisdesigner, собраная по нашему заказу, и там поведение функции [B]AttachRswWithScalingAndRotationEx [/B] уже другое.

Версия 12.5.* насколько я помню.

Поведение зеркальное - если отдавать два одинаковых пути - функция выполнит привязку, удалит исходный растр, попытается выдать диалог о том что не удалось удалить файл и вернёт ошибку.
Если отдавать разные пути - нормально отработает.

То есть при переходе с 12.5.* на 12.6.* поведение функции [B]AttachRswWithScalingAndRotationEx[/B] было изменено. И никак об этом узнать из описания функции нельзя =(


При этом на устройствах все ок, результат без чёрных квадратов.
На своём хосте на Ubuntu16, когда я поставил пакет 12.5.1.201 без поддержки трансформации растров на лету, я получаю в конце растр с чёрными квадратами за рамкой и падение при зуме с таким stacktrace:
[CODE]1 TRmf::GetRswPointByBorder(int&, int, int, int&, char * *, TPaintControl&, TRmfBlockCache *) 0x7fffb2d8039e
2 MoveRmfPoint(TRANSFORMRMFSHOW&, int, int, int, char *)                                                           0x7fffb2de62fa
3 ShowTransformRmfThread(void *)                                                                                   0x7fffb2ddf328
4 start_thread                                                                                pthread_create.c 333 0x7ffff561b6ba
5 clone                                                                                       clone.S          109 0x7ffff593841d

[/CODE]
В процессе привязки ещё вижу попытки спросить пользователя нужно ли трансформировать растр:

[CODE][09:12:03.249 /W]: MsgBoxCall msg: Карта и растр имеют разные параметры проекции.
/home/vegorov/testsMaps/rsw/spb_test_bind/SPb.rsw.1_TMP.rsw

Трансформировать растр? title: Открытие растра flag: 8227
[09:12:05.167 /W]: MsgBoxCall msg: Карта и растр имеют разные параметры проекции.
/home/vegorov/testsMaps/rsw/spb_test_bind/SPb.rsw

Трансформировать растр? title: Открытие растра flag: 8227
[/CODE]

Привязка по 4 и более точкам на 12.5.* и на 12.6.* работает одинаково и ничего не падает. По крайней мере, если сравнивать 12.5.* на наших устройствах и 12.6.* с сайта.
[MAPAPI] Ошибки в функциях по привязке/конвертации/оптимизации растров, [MAPAPI] Ошибки в функциях по привязке/конвертации/оптимизации растров
 
Здравствуйте.

Я вроде разобрался.

Если вместо [B]LoadRstOptimization[/B] использовать [B]LoadRstOptimizationAndCompress [/B]и открывать растр, который необходимо оптимизировать, на основной карте до вызова функции оптимизации, то у сжатого растра не будет чёрных блоков за рамкой.
[MAPAPI] Ошибки в функциях по привязке/конвертации/оптимизации растров, [MAPAPI] Ошибки в функциях по привязке/конвертации/оптимизации растров
 
Здравствуйте.

У меня тут появились вопросы/замечания по функциям привязки/конвертации/оптимизации растров. Пакет gisdiesigner 12.6.0.
[CODE]//========================================================================
// Привязка растра с масштабированием и поворотом по двум точкам  
//
// hmap        - карта, содержащая векторные данные;
// handle      - диалог визуального сопровождения процесса обработки.
// rswnamein   - имя исходного файла растра
// rswNameOut  - имя выходного файла растра (размер строки д.б. не менее MAX_PATH_LONG байт)
// pointmet1   - Координаты первой точки  в метрах
// pointmet1   - Координаты первой точки в метрах
// pointmet2   - Координаты второй точки  в метрах
// pointmet2   - Координаты второй точки в метрах
// message     - флаг на выдачу сообщений (0\1)
//
//    Диалогу визуального сопровождения процесса обработки посылаются
//    сообщения:
//    -  (WM_PROGRESSBAR) Извещение об изменении состояния процесса
//       WPARAM - текущее состояние процесса в процентах (0% - 100%)
//       Если функция-отклик возвращает WM_PROGRESSBAR, то процесс завершается.
// При ошибке возвращает ноль
//==========================================================­==============
_PICIMP long int _PICAPI AttachRswWithScalingAndRotationEx(HMAP hmap, HMESSAGE handle,
                                            const char* rswnamein, char* rswnameout,
                                            DOUBLEPOINT *pointmet1, DOUBLEPOINT *pointmetnew1,
                                            DOUBLEPOINT *pointmet2, DOUBLEPOINT *pointmetnew2,
                                            int message);
[/CODE]
1) Параметр message  игнорируется. Если Вам действительно хочется не выдавать сообщения, требуется обрамлять вызов AttachRsw... вызовами mapMessageEnable(0); mapMessageEnable(1);
2) Если имя исходного растра равно имени выходного растра - функция отработает, и создаст копию исходного файла в виде резервной копии (*.~rw)
   В комментарии про это ни слова. Ни про резервную копию, ни про то, что можно отдавать одинаковые имена.
3) Если имя исходного растра (к примеру, A.rsw) не равно имени выходного растра (B.rsw), то вызов AttachRsw... выполнит привязку и создаcт файл B.rsw, удалит (!!!) A.rsw, выдаст сообщение
[CODE][11:23:31.849 /D]: MsgBoxCall msg: Ошибка записи файла -
Файл или каталог не существует title: Обработчик ошибок flag: 8208
[/CODE]и вернёт 0 - то есть завершится с ошибкой. Зачем удаляется исходный файл? Почему про это не сказано в комментарии к функции AttachRsw...? Не понятно, в общем.
4) Второй и третий пункты происходят в случае, когда в качестве HMAP отдаётся векторная карта, на которую в качестве растрового слоя добавлен(в цепочку растров) исходный растр.
  То есть при выполнении второго пункта я наблюдаю следующее поведение - исходный растр закрывается, привязывается (создаётся новый файл по сути), который потом открывается(добавляется в цепочку) с настройками по-умолчанию (под картой, прозрачность 100%) - в комментариях про это ни слова. У меня в интерфейсе (UI) в списке слоёв остаётся висеть слой с свойствами (над картой/прозрачность 100%), хотя по факту он уже под картой.
  При выполнении третьего пункта я не знаю что происходит. Удаляется ли из цепочки растров исходный растр (исходный файл ведь удаляется всё таки).



[CODE]//==============================================================================
//    Трансформирование растра                              
// (вычисление коэффициентов пересчета координат методом наименьших квадратов)
//
//   handle    - диалог визуального сопровождения процесса обработки;
//   map       - карта,содержащая векторные данные;
//   parm      - параметры прикладной задачи;
//   namein    - имя исходного растра (MAX_PATH_LONG)
//   nameout   - имя выходного растра (размер выделенной памяти д.б. не менее MAX_PATH_LONG символов)
//   fact      - исходные координаты опоры;
//   teor      - желаемые координаты опоры;
//   count     - количество опорных точек (не меньше 4-х).
//
//   Диалогу визуального сопровождения процесса обработки посылаются сообщения:
//   -  (WM_PROGRESSBAR) Извещение об изменении состояния процесса
//      WPARAM - текущее состояние процесса в процентах (0% - 100%)
//      Если функция-отклик возвращает WM_PROGRESSBAR, то процесс завершается.
// При ошибке возвращает ноль,
//==========================================================­====================
_PICIMP long int _PICAPI RswTransformingBySquareMethod(HMAP map,HMESSAGE handle,
                          TASKPARMEX * parm, const char * namein, char * nameout,
                          long int count,DOUBLEPOINT * fact,DOUBLEPOINT * teor);
[/CODE]1) Откуда брать TASKPARMEX? На данный момент я отдаю туда nullptr.
2) Если имя исходного растра равно имени выходного растра, то исходный растр заменяется на пустой rsw файл (туда что-то записывается, он занимает 11.6 kB), функция возвращает 0 - произошла ошибка. В комментарии про это ни слова.


[CODE]//========================================================================
//    Оптимизировать файл растровой карты с возможным сжатием изображения
//    handle         - диалог визуального сопровождения процесса обработки.
//    name           - имя файла растровой карты
//    newname        - имя файла оптимизированной растровой карты
//    compressnumber - номер алгоритма сжатия блоков изображения
//                     0 - не использовать сжатие
//                     1 - алгоритм сжатия LZW
//    flagborder     - флаг использования рамки растровой карты
//                     0 - включать в формируемый файл все блоки изображения
//                     1 - не включать в формируемый файл блоки изображения,
//                         не входящие в область, ограниченную рамкой
//    При ошибке возвращает ноль
//
//    Диалогу визуального сопровождения процесса обработки посылаются
//    сообщения:
//    -  (WM_PROGRESSBAR) Извещение об изменении состония процесса
//       WPARAM - текущее состоние процесса в процентах (0% - 100%)
//       Если функция-отклик возвращает WM_PROGRESSBAR, то процесс завершается.
//
//    -  (WM_ERROR) Извещение об ошибке
//       LPARAM - указатель на структуру ERRORINFORMATION
//       Структура ERRORINFORMATION описана в picexprm.h,
//       WM_PROGRESSBAR и WM_ERROR - в maptype.h
//==========================================================­==============
_PICIMP long int _PICAPI LoadRstOptimization(HMESSAGE handle,
                                   const char* name, const char* newname,
                                   long int compressnumber,
                                   long int flagborder);
[/CODE]
Так как сконвертированые растры после привязки получаются большими (не сжатыми), я хочу их сжать.

1) Параметр compressnumber может быть равным 2 - тогда будет использоваться алгоритм сжатия JPEG с параметром сжатия 60
2) После оптимизации (не важно, по LZW или Jpeg, не важно, каким из двух предыдущих способов был привязан растр) не важно, используете вы mapShowRstByBorder после открытия или нет - сжатый растр отображается целиком - не только блоки внутри рамки, но и блоки вне рамки, которых физически нет - в секции описатели блоков файла RSW (на бинарном уровне, в соответствии с описанием формата с сайта) просто нет некоторых блоков (их там и не должно быть, их не было в исходном растре) - пары смещение размер забиты нулями. При этом запись "Рамка" корректно заполнена, а флаг отключения рамки выставлен в 0 - то есть рамка не используется, но при этом я делаю вызов mapShowRstByBorder после каждого добавления нового растра в цепочку растров. И всё равно вокруг рамки (снаружи) либо чёрные блоки, либо блоки с артефактами.


Последовательность действий следующая - берётся изображение (jpg), выбирается целевая векторная карта, параметры СК которой будут использоваться как параметры СК растра.
Изображение загружается в rsw с помощью [B]picexLoadRasterToRsw[/B] - в процессе работы этой функции сначала изображение загружается в rsw, затем rsw оптимизируется (может быть, сжимается, может быть, нет, не смотрел).
Потом я выставляю этому растру проекцию и привязку в центр целевой карты ([B]mapSetRstProjectionData[/B], [B]mapSetRstLocation[/B]).

Полученный растр пользователь может добавить в цепочку растров на целевую карту, и, при желании, привязать.

Если пользователь привязывает карту - сначала выполняется привязка по 2 или 4+ точкам (два способа описанные вначале, [B]AttachRsw[/B]..., [B]RswTransformingBySquare[/B]...),
потом запускается оптимизация ([B]LoadRstOptimization[/B]), которая почему-то ломает отрисовку растров - появляются чёрные блоки за рамкой.

Все описанные особенности, кроме чёрных блоков за рамкой, я могу обойти. А вот чёрные блоки за рамкой после оптимизации - не могу.
Ошибка сегментации при поиске на RU-SPE с вашего сайта
 
[CODE]void gisserver::search::Context::clear()
{
   DLOG(LOG_NAME, 2, "clear");
   _layers.clear();
   if (isValid()){
       mapDeleteSelectContext(_select);
       _select = 0;
       mapFreeObject(_info);
       _info = 0;
       _map = 0;
       _type = SearchType::FULL;
   }
}[/CODE]Вы пытаетесь удалить объект с карты, а не освободить ресурсы.
[CODE] // Удалить объект карты
// Предыдущее состояние объекта сохраняется в резервных
// файлах и может быть восстановлено
// info  - идентификатор объекта карты в памяти
// Признак удаления записывается в памяти и в файле
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapDeleteObject(HOBJ info);


 // Удалить описание объекта векторной карты из памяти
 // info - идентификатор объекта карты в памяти
 // Для сохранения объекта на карте необходимо
 // до вызова mapFreeObject(...) выполнить функцию
 // mapCommitObject(...)
 // При ошибке возвращает ноль

_MAPIMP void _MAPAPI mapFreeObject(HOBJ info);
[/CODE]
Возможно, из-за этого и происходит падение.
Изменено: Владимир Егоров - 17.07.2019 10:45:41
Ошибка сегментации при поиске на RU-SPE с вашего сайта
 
Да вроде не падало ничего. Речь про 11-ую версию?

Посмотрел старые исходники, функция поиска такая:

[CODE]gisserver::search::ResultList
gisserver::search::Context::search(const QString &query)
{
   if (!isValid()){
       return {};
   }
   setQuery(query);
   ResultList results;
   long ret = mapSeekSelectObject(_map, _info, _select, WO_FIRST );
   while (ret != 0){
       results << getCurrentResult();
       ret = mapSeekSelectObject(_map, _info, _select, WO_NEXT );
   }
   return results;
}
[/CODE]Весь cpp файл: [URL=https://paste.ubuntu.com/p/GhpZcQKBKK/]Ссылка на Ubuntu Pastebin[/URL]
Выделение объектов карты компоненты Гис Конструктор
 
А что будет если заработает генерация GUID "из коробки", а у нас при создании объекта есть такой код:
[CODE] QUuid newObjId;
   if (extObjId.isNull()){
       newObjId = QUuid::createUuid();
   }else{
       newObjId = extObjId;
   }
   ...
   ...

   long newObjNumber = m_site.getEditableSheet()->createObject(newObjId,
                                                              objInfo,
                                                              metric,
                                                              semantics,
                                                              sign);



   createObject(...){
   ...
   QByteArray objIdKoi8r = gis::common::convertStringToKOI8_R(
                                      gis::common::convertGUIDtoString(objId));
   long rc = mapAppendSemantic(newObj->descriptor(), OBJECTGUID,
                               objIdKoi8r.constData(),
                               objIdKoi8r.size());
   ...
   }
[/CODE]И есть возможность задавать GUID снаружи, то есть сервис сначала генерирует GUID и сохраняет у себя, потому отправляет запрос сервису по работе с картами по созданию объекта на некотором слое (sit файле) с указанием GUID, который должен быть у этого объекта.

Если mapAppendSemantic заменяет семантику при наличии таковой в списке семантик объекта, то всё ок.
А если игнорирует, то у нас сломаются почти все сервисы (наносящие данные на карту), которые полагаются на возможность задавать GUID снаружи до создания объекта, ведь теперь при создании объекта GUID будут генерироваться и добавляться в виде семантики в список семантик объекта.
mapCreateSiteUn не работает
 
Я кстати как-то на этом форуме видел, что мои символы, скопированные из QtCreator и вставленные сюда были заменены на нечто подобное движком форума. Вот, даже нашёл тему - [URL=http://gisweb.ru/forum/messages/forum12/topic9471/message71210/9471-preobrazovaniya-prostranstvennykh-pryamougolnykh-koordinat#message71210]ссылка[/URL]. И я в той теме в последнем сообщении потом добавил, что там имелось в виду
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 21 След.



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

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