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

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

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

Страницы: Пред. 1 ... 40 41 42 43 44 45 46 47 48 49 50 ... 69 След.
Сохранение пользовательских слоев
 
Здравствуйте!
[QUOTE]Анастаия написал:
1) Вы не уточните как именно создать карту по открытой карте. Могу я воспользоваться методом mapCopySite, чтобы скопировать пользовательскую карту с нанесенными объектами?[/QUOTE]
Вы можете использовать функцию mapCopySite, чтобы скопировать карту именно физическим переносом файлов на диске.
Вероятно, Вам лучше подойдет следующий алгоритм:
- создать новую карту (описано ранее);
- скопировать объекты со старой карты на новую с помощью функции mapReadCopyObject (mapapi.h).

Пример реализации копирования объектов можно посмотреть в п.3.6.27 "Копирование объектов на другую карту с изменением системы координат" Руководства программиста ([URL=http://gistoolkit.ru/download/doc/gisdesigner_prog.pdf]http://gistoolkit.ru/download/doc/gisdesigner_prog.pdf[/URL])

[QUOTE]Анастаия написал:
2) Попробовала реализовать свою задумку с помощью метода mapCreateAndAppendSite (создание пользовательской карты по открытой).Код     QString mapName = QFileDialog::getOpenFileName(this, 0, 0, CodecKOI8R->toUnicode("*.map;; *.sit;; *.sitx"));
    std::strncpy(fullname, CodecKOI8R->fromUnicode(mapName).data(), sizeof(fullname));
    mapName = QFileDialog::getOpenFileName(this, 0, 0, CodecKOI8R->toUnicode("*.rsc"));
    std::strncpy(fullrss, CodecKOI8R->fromUnicode(mapName).data(), sizeof(fullrss));
 
    CREATESITE createsite;
    HSITE TmpTest = mapCreateAndAppendSite(hmap, fullname,fullrss, &createsite);
    std::cout<<"TmpTest = "<<TmpTest<<" "<<createsite.MapName<<std::endl;Но в результате этот метод возращает ошибку, т.е 0.[/QUOTE]
Корректность работы функции mapCreateAndAppendSite можно проверить на следующем примере, чтобы не отлаживать Qt-код:
[CODE] HMAP mapHandle = mapOpenData("/tmp/Noginsk/Noginsk.sit");
 assert(mapHandle);

 CREATESITE createSite;
 memset(&createSite, 0, sizeof(createSite));
 HSITE siteHandle = mapCreateAndAppendSite(mapHandle, "/tmp/appended.sitx", "/tmp/Noginsk/topo200t.print.rsc", &createSite);
 assert(siteHandle);

 mapCloseData(siteHandle2);
 mapCloseData(mapHandle);[/CODE]Карту Ногинска можно использовать из инсталляции ГИС Конструктор.

[QUOTE]Анастаия написал:
3) Также Вы не подскажите, где осуществляется привязка карты и файла с классификаторами и как задать эту привязку.  Т.е я открываю карту *.map, а далее я знаю, что все зависимые карты открылись автоматически и я просто могу получить при необходимости указатель на  идентификатор классификатора карты.
4) Также интересует вопрос могу ли я к одной карте подключить несколько файлов ресурсов (*.rsc) ?
[/QUOTE]
Каждая карта создается с одним классификатором, т.е. "привязка" осуществляется на этапе создания.
К базовой карте могут быть добавлены карты, каждая созданная со своим классификатором.
Сохранение пользовательских слоев
 
Здравствуйте!

Специфика временной карты (создается с помощью mapCreateAndAppendTempSite) такова, что ее файлы удаляются после закрытия основной карты (к которой она была добавлена).
Если Вы хотите сохранить на диске созданные Вами объекты, то Вам необходимо создать обычную карту.

Последовательность действий:
- создать карту необходимого формата (sit, sitx, map):
можно посмотреть в разделах 3.6.2 "Создание новой карты и плана" и 3.6.3 "Открытие и создание пользовательских карт" Руководства программиста ([URL=http://gistoolkit.ru/download/doc/gisdesigner_prog.pdf]http://gistoolkit.ru/download/doc/gisdesigner_prog.pdf[/URL]);
- нанести на нее необходимые объекты:
в п.2 Вашего сообщения приведен корректный пример;
- закрыть карту для сохранения данных из памяти на диск:
функция mapCloseData().
Перетаскивание карты мышью, Пропажа изображения карты при перестакивании её
 
Здравствуйте!

Вы можете отслеживать перемещение мыши с помощью сигнала QDMapView::SignalMouseMove() и перерисовывать карту:
[CODE]connect(ui.DMapView1, SIGNAL(SignalMouseMove(int,int,int)), this, SLOT(onMouseMoved(int,int,int)));[/CODE][CODE]void MainForm1::onMouseMoved(int x, int y, int modkeys)
{
 qDebug() << "mouse moved";

 int left = 0;
 int top = 0;
 ui.DMapView1->GetMapLeftTop(&left, &top);

 ui.DMapView1->SetMapLeftTop(left + 10, top + 10);
}[/CODE]
Использование mapSelectSampleByNumber, Как подсветить объекты на добавленных картах
 
Здравствуйте!

Контекст поиска связывается с конкретной картой, поэтому, если у Вас к базовой карте прикреплено несколько карт, то для каждой карты нужно создавать собственный контекст (функция mapCreateSiteSelectContext) и указывать в нем объекты этой карты (в частности, с помощью функции mapSelectSampleByNumber).
В целях экономии памяти можно хранить только один контекст и выполнять его перепривязку к другой карте с помощью функции mapClearSelectContextEx (seekapi.h).
Получение граничных точек отображаемой области карты
 
Здравствуйте!

Вы можете проверить, принадлежит ли точка с заданными координатами какому-либо объекту, с помощью функции mapWhatObject (seekapi.h):
[CODE] // Поиск объектов в окрестности точки, заданной прямоугольной рамкой
// Применяется для выбора объекта при нажатии левой кнопки мыши на карте
// hMap - идентификатор открытой карты.
// info - идентификатор объекта в памяти,
//        предварительно созданного функцией mapCreateObject()
//        или mapCreateSiteObject(),
//        в котором будет размещен результат поиска.
// frame - прямоугольная область поиска объекта в системе координат,
//         заданной переменной place (PP_PLANE,PP_GEO, ...)
// Координаты области пересчитываются в пикселы в текущем масштабе
// отображения. В список выбранных могут попасть объекты, которые
// отображаются в текущем масштабе рядом с областью выбора в
// пределах нескольких пикселов.
// Площадные объекты выбираются в пределах рамки
// размером 512х512 пикселов в текущем масштабе изображения
// flag - порядок поиска объектов (WO_FIRST, WO_NEXT...)
// Выбор объекта в "точке" лучше начинать с последнего, то
// есть того, что нарисован поверх остальных (это чуть медленнее
// прямого поиска)
// При поиске с флажками WO_NEXT,WO_BACK параметр info должен
// содержать результат предыдущего поиска.
// Поиск выполнется среди тех объектов,которые видны на экране,
// если не установлен флаг WO_VISUALIGNORE
// place - система координат
// hPaint - идентификатор контекста отображения для многопоточного вызова функции отображения,
// создается функцией mapCreatePaintControl
// Если объект не найден - возвращает ноль,
// иначе - возвращает значение info !

_MAPIMP HOBJ _MAPAPI mapWhatObject(HMAP hMap, HOBJ info, MAPDFRAME *frame,
                                  long int flag, long int place);

_MAPIMP HOBJ _MAPAPI mapWhatObjectEx(HMAP hMap, HOBJ info, MAPDFRAME *frame,
                                    long int flag, long int place, HPAINT hPaint);[/CODE]
Повторяющиеся надписи государств
 
Здравствуйте!

В данном случае такой вид связан с отображением подписи с тенью. Чтобы избежать такого эффекта, Вы можете в том же примере myfirst выбрать подпись, в диалоге информации об объекте перейти на вкладку "Вид", открыть диалог "Параметры" и снять галочку "Тень".
Новые знаки или изменение семантики
 
Здравствуйте!

Ошибку исправили - обновленная версия ГИС Оператор SE доступна для скачивания на нашем сайте:
[URL=https://gisinfo.ru/download/download_linux.htm#9]https://gisinfo.ru/download/download_linux.htm#9[/URL]
Масштабирование карты
 
Здравствуйте!

Вы может установить размер пиксела с помощью функции mapSetScreenPrecisionEx (mapapi.h):
[CODE]// Запросить/Установить точность текущего режима экрана в точках
// на метр (1000 - 100000). При установке возвращает старое
// значение и пересчитывает коэффициент масштабирования экрана
// При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapGetScreenPrecision();
_MAPIMP double _MAPAPI mapGetHorizontalScreenPrecision();
_MAPIMP double _MAPAPI mapGetVerticalScreenPrecision();
_MAPIMP long int _MAPAPI mapSetScreenPrecision(long int value);
_MAPIMP void _MAPAPI mapSetScreenPrecisionEx(double valueHor, double valueVer);[/CODE]
Перетаскивание карты мышью, Пропажа изображения карты при перестакивании её
 
Здравствуйте!

Предлагаю несколько упростить исходный код слота обработки события нажатия клавиши мыши, чтобы не акцентировать внимание на пересчетах координат между виджетами:
[CODE]void MainWindow::mapMousePress(int x, int y, int mod)
{
 qDebug() << "mouse pressed";

 int left = 0;
 int top = 0;
 ui.DMapView1->GetMapLeftTop(&left, &top);

 ui.DMapView1->SetMapLeftTop(left + 100, top + 100);
}[/CODE]В данном случае при каждом нажатии мыши происходит вызов слота - карта смещается на фиксированную величину и перерисовывается корректно.
Подскажите пожалуйста есть ли возможность добавить собственное изображение в классификатор в формате png, jpg, jpeg, bmp?
 
Формат bmp не поддерживает прозрачность.
Есть возможность сделать прозрачным фон исходя из цвета первого пиксела используемого bmp. Для этого нужно выставить флаг TransparentFlag структуры
IMGGRAPHICMARKEX (mapgdi.h):
 [CODE]char TransparentFlag; // Флаг прозрачности фонового цвета
                                // (первый пиксел картинки - левый нижний угол BMP)[/CODE][CODE]parm.TransparentFlag = 1;[/CODE]
Страницы: Пред. 1 ... 40 41 42 43 44 45 46 47 48 49 50 ... 69 След.



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

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