Здравствуйте.
Какие действия нужно выполнить чтобы для объектов начали генерироваться GUID?
Пример:
Создаю карту:
Добавляю на неё объект и пытаюсь получить GUID:
На выходе:
То есть объект создался, зарегистрировался, commit отработал, а вот GUID не появился. После какой операции над объектом появится GUID? Нужно семантики заполнить перед коммитом ?
Какие действия нужно выполнить чтобы для объектов начали генерироваться GUID?
Пример:
Создаю карту:
Скрытый текст |
---|
static QFileInfo createTmpSit(const QFileInfo& rscPath){ if (!rscPath.exists()){ qWarning() << "классификатор " << rscPath.absoluteFilePath() << " не существует"; return {}; } panorama::CREATESITE createParam{}; createParam.Length = sizeof(panorama::CREATESITE); QUuid sitId = QUuid::createUuid(); QString sitFileName; for (const auto& b: sitId.toRfc4122()){ sitFileName += QString::number((uint8_t)b, 16); } QFileInfo tmpSit = QDir::temp().absoluteFilePath(sitFileName + ".sit"); if (tmpSit.exists()){ qWarning() << "Файл" << tmpSit.absoluteFilePath() << "уже сущесвует"; return {}; } QByteArray koi8r = gis::common::convertStringToKOI8_R(tmpSit.completeBaseName()); std::memcpy(static_cast<void*>(&(createParam.MapName[0])), static_cast<const void*>(koi8r.constData()), qMin(koi8r.length()-1, 31)); if (koi8r.length() > 32){ createParam.MapName[31] = '\0'; }else{ createParam.MapName[koi8r.length()-1] = '\0'; } createParam.MapType = static_cast<int>(gis::common::MapType::TOPOGRAPHIC); createParam.MaterialProjection = static_cast<int>(gis::common::MapProjectionType::GAUSSCONFORMAL); createParam.Scale = 100000; createParam.AxisMeridian = 33.0/180.0 * M_PI; createParam.MainPointParallel = 60.0/180.0*M_PI; QByteArray rscKoi8r = gis::common::convertStringToKOI8_R(rscPath.absoluteFilePath()); QByteArray sitKoi8r = gis::common::convertStringToKOI8_R(tmpSit.absoluteFilePath()); HMAP hmap = mapCreateSite(sitKoi8r.constData(), rscKoi8r.constData(), &createParam); if (hmap == 0){ qWarning() << "Не удалось создать временную карту" << tmpSit.absoluteFilePath(); return {}; } panorama::mapSetAutoObjectGUID(hmap, hmap, 1); mapCloseData(hmap); return tmpSit; } |
Добавляю на неё объект и пытаюсь получить GUID:
Код |
---|
bool panorama::TestGuid::run() const { QFileInfo tmpSit = createTmpSit(m_rscPath); QByteArray tmpSitPath = gis::common::convertStringToKOI8_R(tmpSit.absoluteFilePath()); HMAP sit = mapOpenData(tmpSitPath.constData(), GENERIC_WRITE); if (sit == 0){ qWarning() << "can't open tmp sit:" << tmpSit.absoluteFilePath(); return false; } long guidFlag = mapGetAutoObjectGUID(sit, sit); if (guidFlag == 0){ qWarning() << "auto generate guid for objects do not turned on"; mapCloseData(sit); return false; } HOBJ obj = mapCreateObject(sit); if (obj == 0){ qWarning() << "can't create object on sit"; mapCloseData(sit); return false; } long rc = mapRegisterObjectByKey(obj, "009995006203069101"); if (rc == 0){ qWarning() << "can't register obj by key 009995006203069101"; mapFreeObject(obj); mapCloseData(sit); return false; } rc = mapAppendPointGeo(obj, 60.0/180.0*M_PI, 30.1/180.0*M_PI); if (rc == 0){ qWarning() << "can't append point to obj"; mapFreeObject(obj); mapCloseData(sit); return false; } rc = mapCommitObject(obj); if (rc == 0){ qWarning() << "can't commit obj"; mapFreeObject(obj); mapCloseData(sit); return false; } char guidBuf[37]; guidBuf[0] = '\0'; rc = mapObjectGUID(obj, guidBuf, 37); if (rc == 0){ qWarning() << "can't get GUID from obj"; mapDeleteObject(obj); mapFreeObject(obj); mapCloseData(sit); return false; }else{ qInfo() << "GUID:" << gis::common::parseStringFromKOI8_R(guidBuf); } mapDeleteObject(obj); mapFreeObject(obj); mapCloseData(sit); return true; } |
На выходе:
Код |
---|
can't get GUID from obj "Test get guid for map objects" : fail |
То есть объект создался, зарегистрировался, commit отработал, а вот GUID не появился. После какой операции над объектом появится GUID? Нужно семантики заполнить перед коммитом ?