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

Александр Савелов (Все сообщения пользователя)

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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 69 След.
Как получить список карт добавленных через QDMapDataList::Execute() ?
 
Добрый день!

Для уточнения причины данного поведения приведите, пожалуйста, пример исходного кода добавления карт mptz/sitz и карт с линиями маршрута движения.
Не удается получить идентификатор пользовательской карты hsite формата mptz по имени
 
Добрый день!

Для получения пути к основной карте после открытия упакованного проекта формата mptz можно воспользоваться следующим кодом:[CODE]HSITE siteHandle = mapGetSiteIdent(mapHandle, 0);

WCHAR siteFileName[MAX_PATH_LONG];
mapGetSiteFileNameUn(mapHandle, siteHandle, siteFileName, sizeof(siteFileName));
[/CODE]Здесь mapHandle - это идентификатор открытого проекта карт формата mptz.
QDMapView - часть карты отображается как сплошной черный фон
 
Добрый день!

Данное поведение может быть вызвано недостаточными размерами внутреннего буфера изображения ГИС-ядра. Для увеличения размера буфера можно воспользоваться функцией mapSetMaxScreenImageSize() (mapapi.h) (данная функция должна вызываться до открытия данных):[CODE] // Установить предельные размеры буфера изображения (не влияет на расчет разрешения экрана)
 // Функция должна вызываться до открытия данных
 // Чтобы оставить ширину или высоту без изменения соответствующий параметр
 // должен быть равен 0
 // Если экран компьютера, на котором выполняется программа, имеет большие
 // размеры, то установленные значения будут автоматически увеличены до
 // размеров экрана
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSetMaxScreenImageSize(long int width, long int height);
[/CODE]Пример вызова данной функции можно посмотреть в разделе 3.9.37.2 "Порядок подключения к геопорталу" руководства программиста ГИС Конструктор ([URL=https://gistoolkit.com/download/doc/gisdesigner_prog.pdf]https://gistoolkit.com/download/doc/gisdesigner_prog.pdf[/URL]).
Не удается получить идентификатор пользовательской карты hsite формата mptz по имени
 
Добрый день!

На текущий момент обработка файлов формата mptz реализована ГИС-ядром следующим образом:
- отдельного идентификатора для файла mptz не предусмотрено - данные из состава упакованного проекта (карты, растры, матрицы) добавляются по отдельности в цепочки открытых данных.
Например, при открытии некоторого упакованного проекта noginsk.mptz, в состав которого входит карта, растр и матрица, будут добавлены следующие элементы:
"/tmp/noginsk.mptz - noginsk.sitz" (в цепочку открытых карт);
"/tmp/noginsk.mptz - noginsk.rsw" (в цепочку открытых растров);
"/tmp/noginsk.mptz - noginsk.mtw" (в цепочку открытых матриц);
- имя каждого элемента упакованного проекта при открытии формируется по шаблону "<путь-к-файлу-mptz> - <имя-файла-из-состава>";
- получить имя открытого файла можно с помощью соответствующих функций для каждой из цепочек (например, mapGetSiteFileNameUn() - для карт, mapGetRstNameUn() - для растров, mapGetMtrNameUn() - для матриц). В частности, при необходимости определения, принадлежат ли открытые данные проекту mptz, можно выполнить проверку на наличие в начале имени открытых данных пути к файлу mptz.
Не получается нарисовать линию на своей карте, получается нарисовать линии на временной карте, но не получается на карте *.map
 
Добрый день!

Отсутствие созданных объектов на добавленной многолистовой карте может быть связано с тем, что координаты этих объектов не попадают в границы рамки карты. В данном случае можно наносить объекты на пользовательскую карту (которая не имеет рамки) формата sitx (например, с помощью функции mapCreateAndAppendSite()).

Более подробно создание и добавление пользовательской карты можно посмотреть в разделе 3.9.3 "Открытие и создание пользовательских карт" руководства программиста ГИС Конструктор ([URL=https://gistoolkit.com/download/doc/gisdesigner_prog.pdf]https://gistoolkit.com/download/doc/gisdesigner_prog.pdf[/URL]). Также примеры использования функции mapCreateAndAppendSite() можно посмотреть в тестовых примерах mapinfo и mapobj из состава инсталляции ГИС Конструктор.
Как "центровать камеру" в определенных координатах в QDMapView
 
Добрый день!

Для изменения положения левого-верхнего угла карты можно воспользоваться функцией SetMapLeftTop() класса QDMapViewWindow (родительский класс QDMapView) (qdmwina.h):[CODE] // Запросить/установить верхнюю левую позицию начала отображения
 void GetMapLeftTop(int *left, int *top);
 void SetMapLeftTop(int left, int top);
[/CODE]Для расчета положения левого-верхнего угла карты относительно центра экрана можно использовать функции width() и height() класса QWidget (родительский класс QDMapView), которые возвращают в данном случае размеры клиентского окна карты.

Пример использования данных функций можно посмотреть в функции MainForm1::Action_RotateVectorObject() тестового примера myfirst из состава инсталляции ГИС Конструктор.
Не получается нарисовать линию на своей карте, получается нарисовать линии на временной карте, но не получается на карте *.map
 
Добрый день!

На основе предоставленного исходного кода подготовили пример, выполняющий следующее:
- открытие многолистовой карты из состава инсталляции ГИС Конструктор;
- добавление к ней новой многолистовой карты и нанесение на ней графического объекта типа "Пунктирная линия".

Функционирование данного примера проверено на текущей версии ГИС Конструктор, доступной на нашем сайте ([URL=https://gisinfo.ru/download/download_linux.htm#5]https://gisinfo.ru/download/download_linux.htm#5[/URL]):
[CODE]#include <assert.h>

#include <QString>

#include "mapapi.h"

int main()
{
 mapOpenDiagnostics(WTEXT("/tmp/diagnostics.log"));

 const WCHAR *baseMapFileName = WTEXT("/usr/share/gisdesigner/examples/Data/Топографические карты/N-38/N-38-2.map");
 HMAP baseMapHandle = mapOpenDataUn(baseMapFileName);
 assert(baseMapHandle);

 const WCHAR *newMapFileName = WTEXT("/tmp/out/track.map");
 const WCHAR *mainname = WTEXT("track");

 long error = 0;
 HMAP newMapHandle = mapCreateSiteForMap(newMapFileName, mainname, 1, baseMapHandle, baseMapHandle, &error);
 assert(newMapHandle);
 mapCloseData(newMapHandle);

 long isAppended = mapAppendAnyData(baseMapHandle, newMapFileName);
 assert(isAppended);

 HSITE addedSiteHandle = mapGetSiteIdentByNameUn(baseMapHandle, newMapFileName);
 assert(addedSiteHandle);

 HOBJ hObj = mapCreateSiteObject(baseMapHandle, addedSiteHandle);
 assert(hObj);

 long isRegistered = mapRegisterDrawObject(hObj, 9, LOCAL_LINE);
 assert(isRegistered);

 mapAppendSemanticUn(hObj, 9, QString("Маршрут движения").utf16(), 0);

 IMGDOT parm;
 parm.Thick = PIX2MKM(10);
 parm.Color = 0;
 parm.Dash  = 5;
 parm.Blank = 5;

 long isDrawAppended = mapAppendDraw(hObj, IMG_DOT, reinterpret_cast<char*>(&parm));
 assert(isDrawAppended);

 mapSetObjectPress(hObj, 1);

 mapAppendPointPlane(hObj, 6130000, 8520000);
 mapAppendPointPlane(hObj, 6180000, 8520000);
 mapAppendPointPlane(hObj, 6180000, 8580000);

 long isCommited = mapCommitWithPlace(hObj);
 assert(isCommited);

 mapFreeObject(hObj);

 mapCloseData(baseMapHandle);
 mapCloseDiagnostics();
}
[/CODE]
Не получается нарисовать линию на своей карте, получается нарисовать линии на временной карте, но не получается на карте *.map
 
Добрый день!

Спасибо за предоставленный пример - в результате анализа исходного кода, вероятно, не выполняется добавление созданной карты с основной.
Это может произойти, если на вход функции mapAppendAnyData() вторым параметром передается не полный путь к карте, а ее имя (переменная mainname без расширения карты):
[CODE]// Добавить данные к открытой карте (карту, растр, матрицу)
// hMap -  идентификатор открытых данных  
// name - имя открываемого файла (MAP, SITX, SIT, MTW, MTQ, RSW, MPT) в кодировке UNICODE  
// mode - режим чтения/записи (GENERIC_READ, GENERIC_WRITE или 0)  
// transform - признак трансформирования пользовательской карты  
//             к ранее открытым данным (если проекции разные):  
//             0 - не трансформировать данные (преобразовывать "на лету"),  
//             1 - трансформировать данные при открытии и сохранить карту  
//                 в новой проекции,  
//            -1 - задать вопрос пользователю.  
// В серверной версии (-1) обрабатывается, как 0.  
// password - пароль доступа к данным из которого формируется 256-битный код  
//            для шифрования данных (при утрате данные не восстанавливаются)  
// size     - длина пароля в байтах !!!  
// Передача пароля необходима, если при создании карты он был указан.  
// Если пароль не передан, а он был указан при создании,  
// то автоматически вызывается диалог scnGetMapPassword из mapscena.dll (gis64dlgs.dll)  
// Если выдача сообщений запрещена (mapIsMessageEnable()), то диалог  
// не вызывается, а при отсутствии пароля происходит отказ открытия данных  
// Возвращает идентификатор типа данных (FILE_MAP - для векторной  
// карты, FILE_RSW - для растра, FILE_MTW - для матрицы, FILE_MTL - для  
// матрицы слоев, FILE_MTQ - для матрицы качеств), данные добавляются в  
// список последними, если данные уже были открыты, число открытых данных  
// (карт, растров, матриц) не меняется  
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapAppendAnyData(HMAP hMap, const WCHAR *name, long int mode = 0, long int transform = -1);_MAPIMP long int _MAPAPI mapAppendDataUn(HMAP hMap, const WCHAR *name, long int mode = 0);[/CODE]

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

- включить ведение журнала диагностики с помощью вызова функции mapOpenDiagnostics() (mapapi.h) перед работой с данными. Например:
mapOpenDiagnostics(WTEXT("/tmp/diagnostics.log"));

- выполнить действие, приводящее к проблеме;

- отключить ведение журнала диагностики с помощью функции mapCloseDiagnostics() (mapapi.h).

GeoTif to Rsw
 
Добрый день!

[QUOTE]Nokken Weizen написал:
Пробовал пользоваться этим методом, но на выходе растр не формировался (picexLoadRasterToRswUn).[/QUOTE]
Для уточнения причины возникшей проблемы, пожалуйста, сформируйте диагностический журнал работы приложения. Для этого необходимо выполнить следующие действия:

- включить ведение журнала диагностики с помощью вызова функции mapOpenDiagnostics() (mapapi.h) перед работой с данными. Например:
mapOpenDiagnostics(WTEXT("/tmp/diagnostics.log"));

- выполнить действие, приводящее к проблеме;

- отключить ведение журнала диагностики с помощью функции mapCloseDiagnostics() (mapapi.h).

[QUOTE]Nokken Weizen написал:
Подскажите еще пожалуйста чем нужно инициализировать handle[/QUOTE]
Пример заполнения функции обратного вызова типа MSGHANDLER можно посмотреть в исходном файле qdxfdlg.cpp диалога импорта из формата Dxf из состава ГИС Конструктор (файл /usr/share/gisdesigner/examples/Sdk/dxftomap/qdxfdlg.cpp, функция MessageHandlerDxf()).

Не получается нарисовать линию на своей карте, получается нарисовать линии на временной карте, но не получается на карте *.map
 
Добрый день!

Приведите, пожалуйста, для анализа исходный код с использованием функции mapCreateSiteForMap() для создания постоянной карты и добавления на нее объектов.
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 69 След.



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

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