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

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

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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 29 След.
[ Закрыто] gisu64vcacces.dll access violation, Application Verifier выдает access violation при загрузке gisu64vcacces.dll
 
[QUOTE]Александр Волков написал:
В архиве 2 папки и скриншоты - результаты импорта с новым и старым GTK
[/QUOTE]
Добрый день!
Тестовые данные shp_import.zip скачали. В понедельник займемся данным вопросом.

[QUOTE]Александр Волков написал:

Потом из L1 генерю L2 и т.д. несколько уровней.
Таким образом я получаю набор карт разной деталлизации: количество точек в полигонах и ломаных в объектах уменьшается с каждым последующим уровнем, соответственно рендеру становится сильно легче все отображать.

В клиентском приложении, которое должно отображать карту, я загружаю всю пирамиду и на отрисовку выбираю самый подходящий по детализации уровень для текущего масштаба - это позволяет достаточно быстро отображать карту на любых масштабах, не ухудшая ее визуальное восприятие.

Недавно возникла необходимость обновлять кое какие данные в карте, и скорее всего это будет происходить довольно часто. Для того, чтобы не трогать основную карту, которая не меняется, а это целая большая пирамида, я подумал, почему бы нам не генерить дополнительную карту с слоем, который мы хотим обновлять, и не добавлять бы его к базовой карте на этапе загрузки.
Решил воспользоваться функцией mapAppendDataEx, ее использование сейчас приводит к падению приложения, притом падение происходит где-то сильно дальше по коду, как буд-то кто-то попортил память. Если использование данной функции закомментарить, все ок (раньше код был без этой функции).
[/QUOTE]
Если не возражаете, пару наблюдений...
При создании производной карты в неё не заносятся параметры датума и эллипсоида.
В Вашем случае параметры проекции, датума и эллипсоида у исходной и производных карт должны совпадать.
При несовпадении параметров проекции (датума, эллипсоида) у добавляемой карты с документом, в который она добавляется, будет выполнено
трансформирование добавляемой карты налету (в памяти).

Предлагаю для создания и добавления производной карты L0,L1... *.SITX применять современную функцию mapCreateAndAppendSiteForMap.
Новая карта сразу создается с параметрами проекции, датума и эллипсоида по исходной карте.
[CODE] // Создать пользовательскую карту по открытой карте
 // hmap -  идентификатор открытой векторной карты
 // mapname - полное имя файла карты
 // rscname - полное имя файла ресурсов
 // issitx  - признак создания карты типа SITX
 // При ошибке возвращает ноль

_MAPIMP HSITE _MAPAPI mapCreateAndAppendSiteForMap(HMAP hmap,
                                            const char * mapname,
                                            const char * rscname);

_MAPIMP HSITE _MAPAPI mapCreateAndAppendSiteForMapUn(HMAP hmap,        
                                                    const WCHAR * mapname,
                                                    const WCHAR * rscname,
                                                    long int issitx = 0);[/CODE]
Альтернативный вариант создания карты:
Создание производной карты L0,L1... *.SITX выполняется функцией mapCreateMapPro.
В новую карту необходимо установить параметры Datum и параметры эллипсоида, запрошенные ранее в исходной карте.
Карту добавляем в документ вызовом функции mapOpenSiteForMapPro.
[CODE] HSITE hSit = 0;
     HMAP fmap = mapCreateMapPro(filenameSit, filenameRsc, &mapregex, &listreg,
                            &sheet, sheetname, 0, 0);
     if (fmap != 0)
       {
        // Установить параметры DATUM и Ellipsoid
        mapSetSiteDatum(fmap, fmap, &datum);
        mapSetSiteEllipsoidParameters(fmap, fmap, &ellipsoid);

        mapSaveSite(fmap, fmap, 1);
        mapCloseData(fmap);

        // Создать пользовательскую карту по открытой карте
        hSit = mapOpenSiteForMapPro(HMap, (filenameSit, 0, 0, 0, 0);
       }[/CODE]В качестве теста, получите сначала полную копию исходной карты - отключите все манипуляции с объектами (например, фильтрацию).
Прочитали объект в исходной карте и сохранили его в производной.

Настораживает появление папки Copy. Функции ГИС-ядра не создают папку с названием "Copy".
[ Закрыто] gisu64vcacces.dll access violation, Application Verifier выдает access violation при загрузке gisu64vcacces.dll
 
Библиотека gisu64vcacces.lib содержит список имен функций, экспортируемых библиотекой gisu64vcacces.dll.
Файл \testvc12.zip\TestVC\lib\gisu64vcacces.lib из примера датирован февралем 2016-го, а файл gislib12x64vc.zip\gislib12x64vc\MS Visual Studio\gisu64vcacces.lib из архива библиотек GTK-12 - июнем 2017-го.
За полтора года в ядро (gisu64vcacces.dll) были добавлены новые функции, отсюда и разница в размере файлов *.lib.

Библиотеки для GIS ToolKit версии 12 для платформы "x64" (для Visual C++) ([URL=http://gisinfo.ru/download?id=211]http://gisinfo.ru/download?id=211[/URL]) собраны единообразно, с одинаковыми опциями проектов.
Работоспособность библиотек проверяется запуском контрольного примера mapviewer для Visual Studio C++ ( [URL=http://gisinfo.ru/download?id=208]http://gisinfo.ru/download?id=208[/URL] ).
В архиве есть готовый модуль \testvc12.zip\TestVC\readyvc_x64\MapViewer.exe. Исходные тексты примера позволяют собрать его самостоятельно.
Распаковывается архив gislib12x64vc.zip, все необходимое для работы примера (библиотеки GIS ToolKit, библиотеки программируемых знаков, классификаторы, база кодов EPSG)  берется из папки gislib12x64vc.zip\gislib12x64vc\gislib12x64vc\. В данном случае все прозрачно и никакой мешанины быть не может.

Пример mapviewer не использует файлы gislink.h и libgislink12x64vc.lib.
Предлагаю на время файлы gislink.h и libgislink12x64vc.lib из Вашего проекта убрать. Вернемся к ним после того, как заработает приложение.
Тестироваться можно на карте \Example\Data\Noginsk.sitx из состава GIS ToolKit.

Проблему выгрузки библиотек под контролем анализатора Application Verifier можно обойти.
Для освобождения ресурсов ГИС-ядра, не выгружая библиотек GTK, закрываем данные (карты) и вызываем функцию mapCloseMapAccess перед закрытием приложения.

Функция находится в библиотеке gisu64vcacces.dll, а объявлена в mapapi.h:  
[CODE]// Освободить ресурсы ядра перед закрытием приложения
_MAPIMP  long int _MAPAPI mapCloseMapAccess();[/CODE]
[ Закрыто] gisu64vcacces.dll access violation, Application Verifier выдает access violation при загрузке gisu64vcacces.dll
 
[QUOTE][URL=http://gisweb.ru/forum/user/2686/]Александр Волков[/URL] написал:
Коллеги! Вы что издеваетесь надо мной?!!!!!
В архиве по ссылке [URL=http://gisinfo.ru/download?id=208]http://gisinfo.ru/download?id=208[/URL] [B]нет *.dll файлов!!!!!!!!![/B][/QUOTE]
Пожалуйста, прочитайте внимательнее:

[QUOTE]Объявление API-функций восстановлено, обновленные библиотеки размещены на нашем сайте: [URL=http://gisinfo.ru/download?id=211]http://gisinfo.ru/download?id=211[/URL]
[/QUOTE]
[QUOTE]Контрольный пример mapviewer ( [URL=http://gisinfo.ru/download?id=208]http://gisinfo.ru/download?id=208[/URL] ) для Visual Studio C++ ...
[/QUOTE]
По ссылке  [URL=http://gisinfo.ru/download?id=208]http://gisinfo.ru/download?id=208[/URL] размещен архив с исходными текстами тестового приложения.
Описание контрольного примера mapviewer для Visual Studio C++ из файла testvc12.zip\TestVC\readme.txt[CODE]Пример использования библиотек GTK в MS VS 2008 (C++)

 Для сборки проекта необходимо распаковать архив и запустить  
Microsoft Visual Studio 2008.

Сборка включает в себя три проекта.
Все проекты основаны на одних и тех же исходных текстах.
Исходные тексты адаптированы таким образом, чтобы все проекты могли быть собраны
как в unicode, так и в ansi
(см. опции проекта Property->ConfigurationProp.->General->Character Set)

Для работы разместить в приведенных ниже директориях соответсвующие комплекты DLL:
ready11_x32 - GTK11 (gis*.dll)  
          архив библиотек gislib11.zip - http://gisinfo.ru/download?id=101;
ready12_x32 - GTK12 (gisu*.dll)
          архив библиотек gislib12x32.zip - http://gisinfo.ru/download?id=179;
readyvc_x64 - GTK12VC (gisu64vc*.dll)
          архив библиотек gislib12x64vc.zip - http://gisinfo.ru/download?id=211;
[/CODE]
[ Закрыто] gisu64vcacces.dll access violation, Application Verifier выдает access violation при загрузке gisu64vcacces.dll
 
Действительно, при слиянии библиотек потерялось 3 API-функции по импорту данных из SHP.
Выяснили отсутствие функции в пятницу, 9-го февраля. Объявление API-функций восстановлено, обновленные библиотеки размещены на нашем сайте: [URL=http://gisinfo.ru/download?id=211]http://gisinfo.ru/download?id=211[/URL]
Функции по импорту данных из SHP находятся в библиотеке gisu64vcvectr.dll (gisu64vectr.dll) и объявлены в h-файле vectrapi.h:[CODE] // Импорт из ShapeFile набора данных
 //   handle  - окно визуального сопровождения процесса обработки
 //   mapname - имя файла (полный путь) создаваемой карты
 //             Если имя не указано - сформируется по имени первого SHP в списке
 //             Если карта с указанным (или сформированным) именем не существует
 //                 - будет создана
 //             Если карта уже существует и clear = 1 - выполняется перезапись
 //             (предварительное удаление старых объектов)
 //   clear   - 0/1 предварительно чистить существующую карту?
 //   rscname - имя файла (полный путь) классификатора (может = 0, если карта
 //             уже существует), обязан быть, если карты еще нет
 //   shiname - имя файла настроек(полный путь) 0 - для набора данных,
 //             сформированных средствами "Панорама"
 //   scale   - знаменатель масштаба создаваемой карты (может = 0, если карта
 //             уже существует)
 //   shppath - путь к папке с набором данных
 //   charset - таблица кодировки таблицы DBF (0 - ANSI,1 - UTF-8, 2-OEM,
 //                                     -1 - неизвестно, опр. автоматически)
 //   sort    - выполнить итоговую сортировку карты (0,1)
 //   clear   - выполнить предварительную очистку карты (0,1)
 //   Возврат:  1 - нормальное завершение, 0 - загрузка не выполнена, -1 - выполнено с ошибками
 //   Ошибки, выявленные после создания (или открытия карты) пишутся в LOG карты

_MAPIMP long int WINAPI ShpLoadFolder(HMESSAGE handle,const char *mapname,const char *rscname,const char *shiname,
                long int scale,const char *shppath,long int charset,long int sort,long int clear = 0);


 //   Импорт из ShapeFile набора данных с дополнительным параметром "onlyconfig"
 //   handle  - окно визуального сопровождения процесса обработки
 //   mapname - имя файла (полный путь) создаваемой карты
 //             Если имя не указано - сформируется по имени первого SHP в списке
 //             Если карта с указанным (или сформированным) именем не существует
 //                 - будет создана
 //             Если карта уже существует и clear = 1 - выполняется перезапись
 //             (предварительное удаление старых объектов)
 //   clear   - 0/1 предварительно чистить существующую карту?
 //   rscname - имя файла (полный путь) классификатора (может = 0, если карта
 //             уже существует), обязан быть, если карты еще нет
 //   shiname - имя файла настроек(полный путь) 0 - для набора данных,
 //             сформированных средствами "Панорама"
 //   scale   - знаменатель масштаба создаваемой карты (может = 0, если карта
 //             уже существует)
 //   shppath - путь к папке с набором данных
 //   charset - таблица кодировки таблицы DBF (0 - ANSI,1 - UTF-8, 2-OEM,
 //                                     -1 - неизвестно, опр. автоматически)
 //   sort    - выполнить итоговую сортировку карты (0,1)
 //   clear   - выполнить предварительную очистку карты (0,1)
 //   onlyconfig - загружать только настроенные слои (0,1)
 //
 //   Возврат:  1 - нормальное завершение, 0 - загрузка не выполнена, -1 - выполнено с ошибками
 //   Ошибки, выявленные после создания (или открытия карты) пишутся в LOG карты

_MAPIMP long int WINAPI ShpLoadFolderEx(HMESSAGE handle,const char *mapname,const char *rscname,const char *shiname,
                                       long int scale,const char *shppath,long int charset,long int sort,
                                       long int clear,long int onlyconfig);

 //   Импорт из OSM ShapeFile набора данных на восточное полушарие
 //   handle  - окно визуального сопровождения процесса обработки
 //   mapname - имя файла (полный путь) создаваемой карты
 //             Если имя не указано - сформируется по имени первого SHP в списке
 //             Если карта с указанным (или сформированным) именем не существует
 //                 - будет создана
 //             Если карта уже существует и clear = 1 - выполняется перезапись
 //             (предварительное удаление старых объектов)
 //   rscname - имя файла (полный путь) классификатора (может = 0, если карта
 //             уже существует), обязан быть, если карты еще нет
 //   shiname - имя файла настроек(полный путь) 0 - для набора данных,
 //             сформированных средствами "Панорама"
 //   scale   - знаменатель масштаба создаваемой карты (может = 0, если карта
 //             уже существует)
 //   shppath - путь к папке с набором данных
 //   charset - таблица кодировки таблицы DBF (0 - ANSI,1 - UTF-8, 2-OEM,
 //                                     -1 - неизвестно, опр. автоматически)
 //   sort    - выполнить итоговую сортировку карты (0,1)
 //   Возврат:  1 - нормальное завершение, 0 - загрузка не выполнена, -1 - выполнено с ошибками
 //   Ошибки, выявленные после создания (или открытия карты) пишутся в LOG карты

_MAPIMP long int WINAPI OSMShpLoadFolderEx(HMESSAGE handle,const char *mapname,const char *rscname,const char *shiname,
                long int scale,const char *shppath,long int charset,long int sort,int source);[/CODE]
Далее. Файлы  gislink.h и libgislink12x64vc.lib в состав стандартной поставки не входят.
Указанные файлы передаются по дополнительному соглашению. В архиве gislib12x64vc.zip их быть не должно.
Предложение прежнее: используйте для сборки своего приложения файлы gislink.h и libgislink12x64vc.lib, переданные Вам ранее.

А теперь самое интересное. Библиотеки GTK-12 x64 собираются в Embarcadero® C++Builder® XE7.
Контрольный пример mapviewer ([URL=http://gisinfo.ru/download?id=208]http://gisinfo.ru/download?id=208[/URL]) для Visual Studio C++ с библиотеками GTK-12 VC x64 без анализатора запускается и работает.
При подготовке тестовой сборки мы подбирали опции проектов библиотек для их работы под анализатором Application Verifier.
Не меняя исходных текстов удалось добиться корректной загрузки модулем, собранным в Visual C++, библиотек ядра под контролем анализатора Application Verifier:
gisu64vcacces.dll, gisu64vcpicex.dll, gisu64vcvecex.dll, gisu64vc3dtools.dll, gisu64vcgps.dll, gisu64vcmath.dll, gisu64vcmtrex.dll, gisu64vcpasp.dll, gisu64vcs57.dll, gisu64vcselec.dll, gisu64vcthem.dll, gisu64vcvectr.dll, gisu64vcforms.dll, gisu64vcjpgview.dll, gisu64vcrswg.dll, gisu64vcprint.dll, gisu64vcaddress.dll, gisu64vcformse.dll.
Тесты выполнялись с модулями, собранными в Visual Studio 2008, 2012 и 2015.

Проблему, возникающую при выгрузке библиотек, собранных в XE7, под контролем анализатора Application Verifier, устранить не удалось.
Без анализатора библиотеки GTK-12 VC x64 загружаются и выгружаются корректно.
Изменено: Dmitry_ - 12.02.2018 19:14:19
Задача "Легенда карты" что должно вернуться в качестве TWinControl в lparam при AW_GETPANELSTATE?, Не присваивается parent
 
Посмотрите опции проектов у легенды и выполняемого модуля.
Параметры PACKAGES у данных проектов должны быть идентичны.
[ Закрыто] gisu64vcacces.dll access violation, Application Verifier выдает access violation при загрузке gisu64vcacces.dll
 
На почту отправил ссылку на тестовые библиотеки.
Загрузка библиотек ядра (gisu64vcacces, gisu64vcvecex, gisu64vcpicex) под контролем анализатора Application Verifier выполняется, но проблема возникает при их выгрузке.
Задача "Легенда карты" что должно вернуться в качестве TWinControl в lparam при AW_GETPANELSTATE?, Не присваивается parent
 
Поясните, как организовано приложение.
Какие библиотеки используете в качестве ядра?
Исходные тексты легенды карты из какого SDK берете?
[ Закрыто] gisu64vcacces.dll access violation, Application Verifier выдает access violation при загрузке gisu64vcacces.dll
 
[QUOTE]Vitaliy Belenkov написал:
Дмитрий, а уже есть и 2017 :-)
[/QUOTE]
Виталий, к счастью, прогресс не стоит на месте :)

[QUOTE]Александр Волков написал:
Дмитрий, а можно собрать ядро GisToolKit в Visual Studio? Или набор библиотеек gisu64vcvecex/gisu64vcacces используют что-то из платформы Embarcadero?
[/QUOTE]
Александр, пока сборку библиотек ядра в Visual Studio выполнять не планируем.
Исходные тексты библиотек ядра написаны на С++ и адаптированы под компилятор Embarcadero C++Builder XE7.
Потребуется адаптация исходных текстов к компилятору Visual C++.
[ Закрыто] gisu64vcacces.dll access violation, Application Verifier выдает access violation при загрузке gisu64vcacces.dll
 
Здравствуйте, Александр!

Нам удалось выработать критерии сборки библиотеки gisu64vcvecex.dll для её корректной загрузки модулем, собранным в Visual Studio 2008 (2015), под управлением
анализатора Microsoft Application Verifier. Для завершения сборки библиотек GTK-12 для Visual C++ нам нужно ещё несколько дней.
Работа с растрами, вырезание ломаной, Работа с растрами, вырезание ломаной
 
Здравствуйте!

Предлагаю применить рамку растра.
Рамка растра - контур произвольной формы, ограничивающий изображение растровой карты.
Изображение растра, невошедшее в область, образованную рамкой, не отображается.

Алгоритм такой:
1. Сначала загружаем растровое изображение в RSW
2. Создаем замкнутый объект - будущую рамку растра
3. Устанавливаем в растр-RSW рамку - замкнутый объект.

Функции для установки рамки растра, объявленные в файле RSTAPI.H:
[CODE] // Установить рамку растра по метрике замкнутого объекта
 // Замкнутый объект должен иметь не менее 4-х точек
 // hMap       - идентификатор открытых данных
 // number     - номер файла в цепочке
 // info       - замкнутый объект карты
 // После выполнения функции отображение растра ограничится заданной областью
 // При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapSetRstBorder(HMAP hMap, long int number, HOBJ info);

 // Установить рамку растра по метрике замкнутого объекта
 // Замкнутый объект должен иметь не менее 4-х точек
 // hMap       - идентификатор открытых данных
 // number     - номер файла в цепочке
 // info       - замкнутый объект карты
 // flagSubject- флаг использования подобъектов объекта при установке рамки растра (0/1)
 //              0 - в качестве рамки растра устанавливается контур объекта
 //              1 - в качестве рамки растра устанавливается контур объекта с подобъектами
 // После выполнения функции отображение растра ограничится заданной областью
 // При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapSetRstBorderEx(HMAP hMap, long int number, HOBJ info,
                                          long int flagSubject);[/CODE]
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 29 След.



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

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