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

gisu64vcacces.dll access violation

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: Пред. 1 ... 4 5 6 7 8 9 След.
RSS
[ Закрыто ] gisu64vcacces.dll access violation, Application Verifier выдает access violation при загрузке gisu64vcacces.dll
 
Цитата
Повторюсь, трансформирование добавляемой в документ карты выполняется в  том случае, если её параметры проекции, датума и эллипсоида отличаются  от установленных в главной карте документа.

Да, проекции карт отличаются, и согласно комментариям в заголовочнике mapapi.h должно происходить автоматическое трансформирование к проекции карты, переданной в первом аргументе функции mapAppendDataEx.
Но в итоге я получаю карту, объекты которой невидимы. Прикладываю карту до трансформации и после того, как отработала функция mapAppendDataEx, и была на всякий случай закрыта основная карта через mapCloseData (пробовал и mapCloseMap, результат тот же)
Попробуйте открыть карту в папке after_transform через Панорама мини - вы увидете белый экран. Воспользуйтесь поиском, нажмите найти, поиск что-то находит, но ни чего не выделяет и на экране по прежнему белый фон Панорамы Мини.

mapCreateMapPro использовать я не могу по причине того, что она физически создает карту на диске, об этой проблеме я писал выше. Как мне быть в сложившейся непростой ситуации?

Как обстоят дела с функцией ShpLoadFolder? Удалось что-то выяснить?
 
Цитата
Александр Волков написал:
Как обстоят дела с функцией ShpLoadFolder? Удалось что-то выяснить?
Разбираемся. Ответ по функции ShpLoadFolder пока не готов.

Цитата
Александр Волков написал:
Да, проекции карт отличаются, и согласно комментариям в заголовочнике mapapi.h должно происходить автоматическое трансформирование к проекции карты, переданной в первом аргументе функции mapAppendDataEx.
Но в итоге я получаю карту, объекты которой невидимы. Прикладываю карту до трансформации и после того, как отработала функция mapAppendDataEx, и была на всякий случай закрыта основная карта через mapCloseData (пробовал и mapCloseMap, результат тот же)
Попробуйте открыть карту в папке after_transform через Панорама мини - вы увидете белый экран. Воспользуйтесь поиском, нажмите найти, поиск что-то находит, но ни чего не выделяет и на экране по прежнему белый фон Панорамы Мини.
Открыл карту after_transform  в ГИС Панорама Мини x64 версии 12.5.3.
Выполнил сортировку, получил изображение карты after_transform:


Изображение карты before_transform в ГИС Панорама Мини:


Обратите внимание на координаты в строке состояния программы ГИС Панорама Мини на скриншотах карт  after_transform и before_transform.
Значение координаты Y в одной карте 8 миллионов, а в другой карте - 13 миллионов. Производную карту увидеть на месте исходной мы не сможем. Она улетела.  
 
Цитата
Dmitry_ написал:

Открыл карту after_transform  в ГИС Панорама Мини x64 версии 12.5.3.
Выполнил сортировку, получил изображение карты after_transform:
Есть вопросы:
  1. Чем вызвана необходимость сортировки карты, учитывая тот факт, что в карте всего один единственный слой. Что может мешать отображению и перекрывать полигоны, в итоге чего мы видим белый фон?
  2. Что мне делать после отработки функции mapAppendDataEx?
  3. На мой взгляд функция mapAppendDataEx отработала некорректно и в ее реализации есть ошибки - она сохраняет нерабочую карту, которую нельзя использовать повторно без "танцев с бубном" вокруг нее
Цитата
Обратите внимание на координаты в строке состояния программы ГИС Панорама Мини на скриншотах карт  after_transform и before_transform.
Значение координаты Y в одной карте 8 миллионов, а в другой карте - 13 миллионов. Производную карту увидеть на месте исходной мы не сможем. Она улетела.  
Карта действительно "улетела", кто-то неправильно преобразовал координаты, видимо это функция mapAppendDataEx или то, что она вызывает внутри себя. Посмотрите, пожалуйста, скриншот ниже и код функции mapAppendDataEx (Кружком отмечено примерное положение курсора)
 
Скриншот
 
Цитата
Александр Волков написал:
Как обстоят дела с функцией ShpLoadFolder? Удалось что-то выяснить?
В тексте функции импорта данных из SHP ShpLoadFolder поправлена обработка файла настройки SHI.
Обновлены библиотеки для GIS ToolKit версия 12 для платформы "x64" (для Visual C++) - http://gisinfo.ru/download?id=211
 
Цитата
Александр Волков написал:
Карта действительно "улетела", кто-то неправильно преобразовал координаты, видимо это функция mapAppendDataEx или то, что она вызывает внутри себя. Посмотрите, пожалуйста, скриншот ниже и код функции mapAppendDataEx (Кружком отмечено примерное положение курсора)
Для исследования данной ситуации прошу предоставить главную карту, в которую вызовом функции mapAppendDataEx добавляется производная карта after_transform.
 
ShpLoadFolder корректно отработала, спасибо за исправления.

Цитата
Для исследования данной ситуации прошу предоставить главную карту, в которую вызовом функции mapAppendDataEx добавляется производная карта after_transform.

Отправил в личном сообщении ссылку.

В архиве пирамида карт (m50.sit самая детальная) и немного исходников.
Выкорчевал исходники непосредственно отображающие карту. "Из коробки" это не заработает, но немного поковырявшись можно будет собрать рабочий проект, если конечно это необходимо.
При загрузке парсится файл map.mdesc, загружается пирамида карт и т.п.

Просьба обратить внимание на такой момент (я его уже описывал). В новой версии GTK при отображении карты возникают подвисания при первой отрисовке каждого из уровней пирамиды. Если пробежаться по всем уровням и отрисовать хотя бы один раз каждый - все становится нормально. Далее можно прыгать куда угодно по карте и переключать масштабы и все будет ОК. Ранее такого не наблюдалось, все хорошо и быстро работало.
Изменено: Александр Волков - 21.02.2018 10:47:51
 
Цитата
Александр Волков написал:
Отправил в личном сообщении ссылку.

В архиве пирамида карт (m50.sit самая детальная) и немного исходников.
Выкорчевал исходники непосредственно отображающие карту. "Из коробки" это не заработает, но немного поковырявшись можно будет собрать рабочий проект, если конечно это необходимо.
При загрузке парсится файл map.mdesc, загружается пирамида карт и т.п.
Тесты выполняются с картами из полученного архива.

Рассмотрим вариант добавления карты m100.sit в airbases.map в ГИС Панорама Мини:

Откраваем в ГИС Панорама Мини карту airbases.map. Её проекция - Цилиндрическая Меркатора (EPSG: 3395).
Добавляем в документ крту m100.sit в СК-42, проекция равноугольная Гаусса-Крюгера.  
Программа обнаруживает отличие параметров проекции и СК этих карт и задает вопрос:



Если нажать ДА, то добавляемая карта будет трансформирована. Файл исходной карты скопируется в папку COPY. На её месте разместится файл преобразованной карты.
Если нажать НЕТ, то добавляемая карта будет преобразована налету. Новая карта физически создаваться не будет.
Если нажать ОТМЕНА, то добавление карты выполнено не будет.

Отвечаем НЕТ - добавляемая карта преобразуется к системе координат документа  налету:



Рассмотрим вариант добавления карты m100.sit в airbases.map вызовом функции mapAppendDataEx в тестовом примере MapViewer для Visual Studio C++ ( http://gisinfo.ru/download?id=208 ).
Для этого немного модифицировал функцию-отклик на пункт меню "File -> Append -> Site".
Заменил вызов функции mapOpenSiteForMap на mapAppendDataEx и добавил команду на перерисовку окна карты в требуемой точке.
Код
//---------------------------------------------------------------------------
// Добавить пользовательскую карту
//---------------------------------------------------------------------------
void CMapView::OnFileAppendSite()
{
    CFileDialog   theDlg(true, TEXT("*.sit"), NULL, OFN_SHOWHELP|OFN_FILEMUSTEXIST|OFN_NOCHANGEDIR,
                       TEXT("Карты обстановки(*.sit)|*.sit|Все файлы (*.*)|*.*||"));
    
    HSITE hSite;
        
    if(theDlg.DoModal()==IDOK)
    {
//      if(GetHMAP()) hSite=::mapOpenSiteForMap(GetHMAP(), theDlg.GetPathName(),0);

  // Добавить данные к открытой карте (карту, растр, матрицу)
  // hMap -  идентификатор открытых данных
  // name - имя открываемого файла (MAP, SIT, MTW, MTQ, RSW, MPT)
  // mode - режим чтения/записи (GENERIC_READ, GENERIC_WRITE или 0)
  // Возвращает идентификатор типа данных (FILE_MAP - для векторной
  // карты, FILE_RSW - для растра, FILE_MTW - для матрицы, FILE_MTL - для
  // матрицы слоев, FILE_MTQ - для матрицы качеств), данные добавляются в
  // список последними, если данные уже были открыты, число открытых данных
  // (карт, растров, матриц) не меняется
  // transform - признак трансформирования пользовательской карты
  //             к ранее открытым данным (если проекции разные):
  //             0 - не трансформировать данные (преобразовывать "на лету"),
  //             1 - трансформировать данные при открытии и сохранить карту
  //                 в новой проекции,
  //            -1 - задать вопрос пользователю.
  // В серверной версии (-1) обрабатывается, как 0.
  // При ошибке возвращает ноль

   HMAP hMap = GetHMAP();
   if (hMap)
    { 
     char nameA[MAX_PATH_LONG] = {0};
     UnicodeToString(theDlg.GetPathName(), nameA, sizeof(nameA));
          // 0 - не трансформировать данные (преобразовывать "на лету"),
     if (mapAppendDataEx(hMap, nameA, GENERIC_READ, 0) != 0)
       {
             // Перерисовка карты

             // Координаты точки базовой карты airbases.map 
             DOUBLEPOINT point;
           point.X = 1722116.224;
        point.Y = 8218367.890;

        // Переместить центр экрана в заданную точку
             // point - координаты в метрах
             ViewPlanePoint(&point);
       }
      else 
       {
             AfxMessageBox(TEXT("Error while open Site"));
       }
   }
   }
}
//---------------------------------------------------------------------------
Откраваем в тестовом примере MapViewer.exe карту airbases.map.


Добавляем в документ крту m100.sit в СК-42, проекция равноугольная Гаусса-Крюгера.  


Отработала функция CMapView::OnFileAppendSite() и обе карты совместились.
При вызове функции mapAppendDataEx в качестве аргумента transform необходимо подавать значение 0, тогда добавляемая карта будет преобразована "на лету" (в памяти).
Значение 0 для параметра transform эквивалентно ответу НЕТ при добавлении карты в ГИС Панорама Мини.
После добавления карты в документ его габариты меняются, поэтому необходимо выполнить действия по перерисовке карты в требуемой точке.
 
Дмитрий, вы использовали неправильную последовательность.

Сначала надо открыть карту m100.sit, и к ней уже добавить airbases.map.

Преобразование на лету работает, но если вы сделаете так:

1. Открываем m100.sit
2. Добавляем к ней  airbases.map передавая 1 в transform: mapAppendDataEx(hMap, nameA, GENERIC_READ, 1)
3. Закрываем MapView
4. Меняем код: передаем в transform 0: mapAppendDataEx(hMap, nameA, GENERIC_READ, 0)
5. Собираем
6. Открываем m100.sit
7. Добавляем к ней  airbases.map

Вы данные airbases.map на экране не увидете.

Отсортировав карту и открыв ее в Панорама Мини вы всетаки увидете данные карты, но с кривыми координатами, как в моих предыдущих сообщениях.
Видимо проблема в сохранении карты
 
Помимо предыдущего вопроса остался еще один, я о нем уже писал 2 раза, но вы на него ни чего не ответили.

Цитата
15.02.2018 12:08:30
Рендер пирамиды карт стал подтормаживать при переходе на новый масштаб.  Если пройтись по всем масштабам и отрисовать хотя бы раз каждый - все  начинает нормально работать. Т.е. такое ощущение, что при первой  отрисовки каждой из карт происходит какая то инициализация, приводящая к  довольно ощутимому подвисанию.


Цитата
21.02.2018 10:46:33
Просьба обратить внимание на такой момент (я его уже описывал). В новой версии GTK при отображении карты возникают подвисания при первой отрисовке каждого из уровней пирамиды. Если пробежаться по всем уровням и отрисовать хотя бы один раз каждый - все становится нормально. Далее можно прыгать куда угодно по карте и переключать масштабы и все будет ОК. Ранее такого не наблюдалось, все хорошо и быстро работало.

Чтобы не быть голословным, я собрал пример на MapViewer - портировал туда наш код работы с картой. Смотрите файлы:
map_engine.hpp
map_engine.cpp
MapView.h
MapView.cpp
MapDoc.h
MapDoc.cpp

Пример собирается в VisualStudio 2015. Собирать в другой студии не стоит, т.к. пример тянет зависимости, собранные в 15ой студии. Зависимости идут вместе с примером.
В архиве 2 папки: TestVC_old_gtk и TestVC_new_gtk. Сто старым и новым GTK соответственно. Код абсолютно одинаковый, разница только в библиотеках.
Запустите MapViewer.exe, далее File->Open, укажите файл к map.mdesc (файлы из архива с картой, который я вам уже присылал).
Загрузится карта. В данном примере можно двигать карту мышью (зажав левую кнопку), и менять ее масштаб (используя колесо прокрутки на мышке)
Покрутите колесико на обоих примерах, увидете ощутимую разницу. На старой версии GTK карта просто "летает", на новой пока вы не прокрутите до упора масштабы вверх/вниз все будет очень тормозить. После того как прокрутите все масштабы все нормализуется.
В чем причина? Можно это как то исправить?

Ссылку на архив отправляю Дмитрию личным сообщением
Страницы: Пред. 1 ... 4 5 6 7 8 9 След.
Читают тему (гостей: 1)



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

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