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

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

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

Страницы: Пред. 1 ... 11 12 13 14 15 16 17 18 19 20 21 ... 53 След.
Аварийное завершение программы при отрисовке образцов iml-значков
 
Здравствуйте!

В данном случае в библиотеке rscarmy.iml64 отсутствует реализация функции char * Koi82Win(char * text, int length) переконвертирования символа из кодировки KOI8-R в кодировку CP1251.
Для разрешения данной проблемы можно включить реализацию данной функции в состав Вашего приложения (например, в отдельном исходном файле).
В результате при линковке библиотеки rscarmy.iml64 символ будет разрешен за счет этого включенного кода.
Привожу реализацию данной функции (в данном случае она просто по таблице соответствия двух кодировок заменяет один символ на другой):
[CODE]char Koi82WinIndex[256] =
{
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xB0,0x20,0x20,0x20,
0xE0,0xE1,0xE2,0xB8,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
0xB0,0x20,0x20,0xA8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0xFE,0xE0,0xE1,0xF6,0xE4,0xE5,0xF4,0xE3,0xF5,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,
0xEF,0xFF,0xF0,0xF1,0xF2,0xF3,0xE6,0xE2,0xFC,0xFB,0xE7,0xF8,0xFD,0xF9,0xF7,0xFA,
0xDE,0xC0,0xC1,0xD6,0xC4,0xC5,0xD4,0xC3,0xD5,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,
0xCF,0xDF,0xD0,0xD1,0xD2,0xD3,0xC6,0xC2,0xDC,0xDB,0xC7,0xD8,0xDD,0xD9,0xD7,0x20
};

// ---------------------------------------------------------
//  Преобразование из KOI-8 в WIN (0x80 - 0xFF)
// ---------------------------------------------------------
char * Koi82Win(char * text,int length)
{
 unsigned char *point = (unsigned char *)text;
 unsigned char a;

 while (((a = *point) != 0) && (length-- > 0))
 {
   *(point) = Koi82WinIndex[a]; point++;
 }

 return text;
}[/CODE]Спасибо!
Выделение объекта не визульными компонентами. Контроль за границами пользовательской карты, Выделение объекта не визульными компонентами. Контроль за границами пользовательской карты
 
Здравствуйте!

1. [QUOTE]Елена написал:
Как выглядит использование sit с рамкой[/QUOTE]
Если у Вашей карты есть рамка, то Вы можете использовать функцию mapCommitWithPlace (mapapi.h) для контроля попадания объекта в рамку (вернет "-2" если объекта не попал в рамку):
[CODE] // Сохранить данные об объекте в файле с выбором листа
// или делением объекта по листам (при необходимости)
// info  - идентификатор объекта карты в памяти
// Для объектов пользовательских карт (обстановки)
// достаточно mapCommitObject() - там один лист и нет границ.
// Предыдущее состояние объекта сохраняется в резервных
// файлах и может быть восстановлено
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapCommitWithPlace(HOBJ info);[/CODE]Дополнительно привожу небольшой пример использования:
[CODE]#include <assert.h>

#include "mapapi.h"

int main()
{
 // Открыть карту
 HMAP mapHandle = mapOpenData("/tmp/N-38-2.map");
 assert(mapHandle);

 // Нанести объект вне за рамкой карты
 HOBJ objectHandle = mapCreateObject(mapHandle);
 assert(objectHandle);

 long objectCode = 61220000;
 int objectLocal = LOCAL_LINE;
 long isRegistered = mapRegisterObject(objectHandle, objectCode, objectLocal);
 assert(isRegistered);

 mapAppendPointPlane(objectHandle, 5900000, 9000000);
 mapAppendPointPlane(objectHandle, 5900001, 9000001);

 long isCommited = mapCommitWithPlace(objectHandle);
 assert(isCommited == -2);

 // Нанести объект, попадающий в рамку карты
 mapUpdatePointPlane(objectHandle, 6000000, 8550000, 1);
 mapUpdatePointPlane(objectHandle, 6100000, 8550000, 1);

 isCommited = mapCommitWithPlace(objectHandle);
 assert(isCommited > 0);

 mapFreeObject(objectHandle);
 mapCloseData(mapHandle);
 mapCloseMapAccess();

 return 0;
}[/CODE]2. Если Вы хотите скрыть рамку карты, то можно отключить видимость соответствующего объекта ("Рамка листа").
Более подробно об этом можно посмотреть в разделе 3.6.11 "Управление составом отображения объектов электронной карты" Руководства программиста ГИС Конструктор ([URL=http://gistoolkit.ru/download/doc/gisdesigner_prog.pdf]http://gistoolkit.ru/download/doc/gisdesigner_prog.pdf[/URL]).
mapEditWms
 
Здравствуйте!

Мы исправили внутреннюю ошибку, не связанную с обработкой параметра Handle. Поэтому, думаю, что некорректное поведение не зависит от его заполнения.
Если Вы пришлете пример заполнения значения этого параметра, мы можем посмотреть его на корректность.
mapCreateSiteUn не работает
 
Здравствуйте!

Прошу меня поправить, если я ошибаюсь: мне кажется, что такой способ задания кодов переменных (нотация &#11956;) применим только к HTML-разметке.
Если его использовать для формирования пути классу QDir, то просто создастся каталог с именем "&#11956;".
Вот модифицированный код тестового примера:

[CODE]#include <assert.h>
#include <dirent.h>

#include <QDebug>
#include <QDir>
#include <QString>

int main()
{
 // Создать каталог
 QDir tmpDir("/tmp/");
//  bool isCreated = tmpDir.mkdir(QString::fromUtf8("⺴"));
//  assert(isCreated);
 // Здесь я намеренно допустил ошибку и не написал ";" в конце, чтобы сохранить численное значения символа
 bool isCreated = tmpDir.mkdir(QString::fromUtf8("⺴"));

 // Обойти каталог "/tmp"
 DIR *dirp = NULL;
 struct dirent *direntp = NULL;

 dirp = opendir("/tmp");
 assert(dirp);

 while ((direntp = readdir(dirp)) != NULL)
 {
   qDebug() << direntp->d_name;
 }

 return 0;
}[/CODE]Здесь в конце я добавил низкоуровневое чтение содержимого каталога /tmp после создания в нем каталога.
В выводе получается имя каталога "&#11956;".

Если раскомментировать код создания каталога с именем, заданным как "⺴" (при этом кодировка исходников в utf8), то получим ошибку создания каталога (предполагаю из-за того, что такой символ не предусмотрен текущей локалью).

Просьба меня поправить, если я ошибаюсь - спасибо!
mapEditWms
 
Здравствуйте!

Проблему воспроизвели и исправили - изменения войдут в следующую версию ГИС Конструктор (планируется к выпуску к концу этого месяца).
На данный момент формирование строки можно выполнить вручную.

Например, строка подключения к геопорталу "Google Спутник" имеет следующий вид:[CODE]WMTS#Type=UTMS&IP=http://khms0.google.com/kh/v=821&src=app&s=&ID1=GoogleSat&Name1=Google Спутник&Projection=GoogleMapsCompatible[/CODE]Здесь параметры строки имеют следующие значения:

IP – URL адрес строки подключения к геопорталу.
ID1 – идентификатор слоя на геопортале (должен быть уникален), может задаваться
вручную.
Name1 – имя слоя на геопортале, может задаваться вручную.
Projection или Matrix – код проекции геопортала или тип матрицы.
ApiKey – ключ доступа к геопорталу.
Autent – параметры авторизации пользователя на геопортале (Basic имя пользователя:пароль
в кодировке BASE64).

Тип данных геопорталов:
WMS# – картинка.
WMTS# – тайлы.

Дополнительный параметр Type:
UTMS -формат данных при получении использует свой нестандартный алгоритм.
NOCAP – при подключении к геопорталу запрос GetCapabilities игнорируется.
TMS – при запросе GetCapabilities данные выдаются по стандарту подключения TMS.
TMSGEO – размер картинок у гепопортала не может превышать 256 на 256 пикселей и
данные запрашиваются по стандарту WMS.

Описание процесса ручного формирования строки подключения к геопорталу также внесем в Руководство программиста ГИС Конструктор.
QDMapConvertor, QDMapConvertor множественный выбор SXF
 
Здравствуйте!

На данный момент интерфейсом класса QDMapConvertor предусмотрен импорт/экспорт только одного файла формата SXF/DIR.
При необходимости импорта набора SXF-файлов можно воспользоваться импортом по файлу DIR.
mapCreateSiteUn не работает
 
Здравствуйте!

Вы не могли уточнить несколько вопросов, чтобы мы могли воспроизвести у себя такое же поведение:
- какая локаль установлена на системе, где Вы выполняете тестирование примера?
- в качестве имени каталога Вы используете символы, не входящие в текущую локаль (например, ru_RU.UTF-8 )?
- модифицируйте, пожалуйста, следующий пример создания каталога с помощью Qt (пока без использования MAPAPI) Вашим именем каталога, который удается создать (чтобы мы имели общий исходный код, от которого можно в дальнейшем отталкиваться):
[CODE]#include <assert.h>

#include <QDir>
#include <QString>

int main()
{
 // Создать каталог
 QDir tmpDir("/tmp/");
 bool isCreated = tmpDir.mkdir(QString::fromUtf8("⺴"));
 assert(isCreated);

 return 0;
}[/CODE]Спасибо!
Проецирование растра
 
Здравствуйте!

Обновленную версию ГИС Конструктор планируем выпустить к концу этого месяца.
Выделение объекта не визульными компонентами. Контроль за границами пользовательской карты, Выделение объекта не визульными компонентами. Контроль за границами пользовательской карты
 
Здравствуйте!

Для решения данной задачи можно создать пользовательскую карту с рамкой, соответствующей рамке карты Ногинска.
Для этого необходимо использовать функцию mapCreateMap (mapapi.h):
[CODE]// Создать новый район (новую векторную карту)
// mapname - полное имя файла карты
// rscname - полное имя файла ресурсов
// Возвращает идентификатор открытой векторной карты
// Структуры MAPREGISTER и LISTREGISTER описаны в mapcreat.h
// При ошибке возвращает ноль

_MAPIMP HMAP _MAPAPI mapCreateMapEx(const char * mapname, const char * rscname,
                                   MAPREGISTEREX * mapreg, LISTREGISTER * listreg);
_MAPIMP HMAP _MAPAPI mapCreateMap(const char *mapname, const char *rscname,
                                 MAPREGISTER *map, LISTREGISTER *sheet);[/CODE]При заполнении структуры LISTREGISTER необходимо указать рамку карты Ногинска.
Для того, чтобы создать пользовательскую карту с рамкой, в поле FlagRealPlace структуры MAPREGISTER (или MAPREGISTEREX) (mapcreat.h) необходимо задать соответствующее значение (например, "-1" для создания карты SIT c рамкой):
[CODE]typedef struct MAPREGISTEREX
{
 ...
 int         FlagRealPlace          ; // Вид карты: 0 - MAP (многолистовая с рамками),
                                      // 1 - SIT (безразмерный лист), 2 - SITX (один файл), -1 - SIT c рамкой, -2 - SITX с рамкой
 ...
}
 MAPREGISTEREX;[/CODE]Примеры создания карты можно посмотреть в разделе 3.6.2 "Создание новой карты и плана" Руководства программиста ГИС Конструктор ([URL=http://gistoolkit.ru/download/doc/gisdesigner_prog.pdf]http://gistoolkit.ru/download/doc/gisdesigner_prog.pdf[/URL]).
Myfirst and Mapinfo, Myfirst and Mapinfo Scale
 
Здравствуйте!

У тестовых примеров mapinfo и myfirst немного разное назначение, поэтому комбинирование подходов к программированию из них дает некорректный результат.

Пример mapview предназначен для того, чтобы показать, как можно управлять отображением карты без использования графического компонента QDMapView.
Так здесь реализована отрисовка карты напрямую с помощью функции mapPaintToXImage низкоуровневого интерфейса MAPAPI:

[CODE]// Отобразим фрагмент карты в памяти
if (mapPaintToXImage(hMap, &Ximagedesc, 0, 0, &RectDraw))
{
 // Отобразим фрагмент карты на экран
 QImage image((uchar *)bits, cw, ch, QImage::Format_RGB32);
 p->drawImage(cx, cy, image, 0, 0, cw, ch);
}[/CODE]
Пример myfirst наоборот показывает, как работать с картой при помощи компонента QDMapView. Так здесь этот компонент сразу добавлен на ui-форму с помощью Qt Designer.

Чтобы эффективно реализовать Вашу задачу, необходимо выбрать один из предложенных подходов.
Страницы: Пред. 1 ... 11 12 13 14 15 16 17 18 19 20 21 ... 53 След.



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

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