На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты
АРХИВ ФОРУМА...
здесь вы можете ознакомиться с материалами форума до 08.06.2008

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

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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 26 След.
Уточнение по работе mapRegisterObject + mapAvailableSemanticCode
 
Здравствуйте!
Цитата
Александр Лазарев написал:
1. Наличие настроенных семантик сильно влияет на отображение объекта? (допустим отсутствует или некорректное значение текста шрифта или его цвет)
Есть семантики, которые влияют на внешний вид, и которые не влияют. Если для семантики, влияющей на внешний вид, Вы успешно присвоили значение объекту, то скорее всего это значение корректно.
Цитата
Александр Лазарев написал:
2. Каким образом я могу посмотреть наверняка, какие семантики прописаны для объектов в классификаторе, чтобы проверить процедуру создания их на карте?
Семантики, которые можно назначить объекту, можно запросить из классификатора. Например, получение списка семантик по ключу объекта:
Код
  HRSC rscHandle = mapGetRscIdent(mapHandle, mapHandle);
  assert(rscHandle);

  long objectIncode = mapGetRscObjectKeyIncode(rscHandle, "312625000214");
  assert(objectIncode);

  long semanticCount = mapGetRscSemanticObjectCount(rscHandle, objectIncode, ALL_SEMANTIC);
  std::cout << "semantic count: " << semanticCount << std::endl;
  
  long semanticCodes[1024];
  memset(semanticCodes, 0, sizeof(semanticCodes));
  long isListFormed = mapGetRscSemanticObjectCodeList(rscHandle, objectIncode, semanticCodes, sizeof(semanticCodes)/sizeof(long));
  assert(isListFormed);

  for (int semanticNumber = 0; semanticNumber < semanticCount; semanticNumber++)
    std::cout << "semantic code: " << semanticCodes[semanticNumber] << std::endl;

Цитата
Александр Лазарев написал:
3. На что следует обратить внимание, если создаваемый объект не отображается на карте? (допустим линейный, все точки добавлены и семантики по-умолчанию, из списка, полученного выше, в наличии)
Можно выполнить следующие действия:
- установить вид отображения карты "Нормальный с узлами" - в этом случае будет явно отображаться метрика объекта, и Вы сможете оценить ее корректность;

- убедиться в правильности установленных для объекта параметров в классификаторе: возможно, у Вас некорректно задан вид объекта или его размеры (в этом случае он отображается очень мелко, и его не видно на карте). Это удобнее всего сделать, открыв Ваш классификатор в задаче "Редактор классификатора" в одном из настольных продуктов для Windows (например, ГИС Панорама Мини).

mapAvailableSemanticList & mapAvailableSemanticCode возвращают разные наборы.
 
Здравствуйте!

В реализации функции mapAvailableSemanticList допущена ошибка, связанная с неправильным анализом буфера семантик.
В частности, если реализовать заполнение и обход следующим образом, то список семантик получится идентичным полученному с помощью функции
mapAvailableSemanticCode:
Код
  int availableSemanticList[1024];
  memset(availableSemanticList, 0, sizeof(availableSemanticList));
  long availableSemanticCount = mapAvailableSemanticList(objectHandle, (long int*)availableSemanticList, sizeof(availableSemanticList)/sizeof(int));
  std::cout << "availableSemanticCount: " << availableSemanticCount << std::endl;

  int semanticNumber = 0;
  while (availableSemanticList[semanticNumber])
  {
    std::cout << "semantic code: " << availableSemanticList[semanticNumber] << std::endl;
    semanticNumber++;
  }
Функцию mapAvailableSemanticList исправим - спасибо!
Сохранение пользовательских слоев
 
Здравствуйте!

Цитата
Анастасия написал:
Далее добавляю объектКод    HOBJ hObj = mapCreateSiteObject(hmap, hsite, IDDOUBLE2);   // создаём пустой объект на карте (контейнер)
   std::cout viewMap->Repaint();  Но на саму карту он не добавляется. Я этого не вижу. Хотя результат работы методов не равен 0.В результате работы данного кода объекты добавляются на основную карту и сохраняются на ней, а мне необходимо, чтобы они на пользовательской карте сохранялись.
Каким образом Вы проверяете, что объект был нанесен именно на базовую карту?
Если визуально, то необходимо убедиться, что отображение производится только пользовательской карты, а не базовой карты с прикрепленным к ней набором пользовательских слоев.

Цитата
Анастасия написал:
Как мне получить идентификатор созданной ранее пользовательской карты?
Функции создания пользовательских карт обычно возвращают идентификатор созданной карты (HSITE).
Если нужно получить идентификатор пользовательской карты, добавленной к главной, то можно воспользоваться семейством функций mapGetSiteIdent (sitapi.h):
Код
  // Определить идентификатор открытой пользовательской карты
  // по ее номеру в цепочке
  // hMap   - идентификатор открытой карты
  // number - номер пользовательской карты в цепочке
  // Если number == 0, возвращается идентификатор фоновой
  // (базовой) карты, равный hMap (он может применяться вместо HSITE)!
  // При ошибке возвращает ноль

_MAPIMP HSITE _MAPAPI mapGetSiteIdent(HMAP hMap, long int number);

  // Определить идентификатор открытой пользовательской карты
  // по имени файла паспорта
  // hMap - идентификатор открытой карты
  // name - имя файла паспорта пользовательской карты
  // При ошибке возвращает ноль

_MAPIMP HSITE _MAPAPI mapGetSiteIdentByName(HMAP hMap, const char *name);
_MAPIMP HSITE _MAPAPI mapGetSiteIdentByNameUn(HMAP hMap, const WCHAR *name);
Зависание при конвертации DIR-файла
 
Здравствуйте!

Проблему воспроизвели - в ближайшее время обновим инсталляцию ГИС Конструктор для МСВС 3.0.
Спасибо!
ГИС Конструктор для Qt Designer x64 (версия 11, Qt 4, Qt 5, платформа x64, ОС "Astra Linux Special Edition", релиз "Смоленск"), где скачать последнюю 11?
 
Здравствуйте!

На данный момент мы поддерживаем ГИС Конструктор только версии 12, поэтому исключили из раздела "Скачать" версию 11.
mapAvailableSemanticList & mapAvailableSemanticCode возвращают разные наборы.
 
Здравствуйте!
Цитата
Александр Лазарев написал:
1. Правильно ли я создаю слой?
2. Правильно ли я создаю объект для этого слоя?
Концептуально, функции используются правильно (детали записи значений в параметры не анализировал).

Цитата
Александр Лазарев написал:
3. Почему могут отличаться наборы кодов семантик, как указано в комментарии в коде?
Вы не могли бы немного разгрузить пример, чтобы можно было сфокусироваться именно на участке кода, относящемся к вопросу (в идеале, чтобы его можно было воспроизвести как тестовый пример).
Сохранение пользовательских слоев
 
Здравствуйте!
Цитата
Анастаия написал:
1) Вы не уточните как именно создать карту по открытой карте. Могу я воспользоваться методом mapCopySite, чтобы скопировать пользовательскую карту с нанесенными объектами?
Вы можете использовать функцию mapCopySite, чтобы скопировать карту именно физическим переносом файлов на диске.
Вероятно, Вам лучше подойдет следующий алгоритм:
- создать новую карту (описано ранее);
- скопировать объекты со старой карты на новую с помощью функции mapReadCopyObject (mapapi.h).

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

Цитата
Анастаия написал:
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.
Корректность работы функции mapCreateAndAppendSite можно проверить на следующем примере, чтобы не отлаживать Qt-код:
Код
  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);
Карту Ногинска можно использовать из инсталляции ГИС Конструктор.

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

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

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

Вы можете отслеживать перемещение мыши с помощью сигнала QDMapView::SignalMouseMove() и перерисовывать карту:
Код
connect(ui.DMapView1, SIGNAL(SignalMouseMove(int,int,int)), this, SLOT(onMouseMoved(int,int,int)));
Код
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);
}
Использование mapSelectSampleByNumber, Как подсветить объекты на добавленных картах
 
Здравствуйте!

Контекст поиска связывается с конкретной картой, поэтому, если у Вас к базовой карте прикреплено несколько карт, то для каждой карты нужно создавать собственный контекст (функция mapCreateSiteSelectContext) и указывать в нем объекты этой карты (в частности, с помощью функции mapSelectSampleByNumber).
В целях экономии памяти можно хранить только один контекст и выполнять его перепривязку к другой карте с помощью функции mapClearSelectContextEx (seekapi.h).
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 26 След.



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