Экспорт ориентиров
Метаданные
Класс CPosLandmarkEncoder позволяет получать данные из внутреннего представления ориентиров. Данный класс можно использовать для экспорта ориентиров из базы данных в локальные файлы. При создании инстанции данного класса необходимо указать MIME-тип. Для выгрузки ориентиров в XML-файлы можно использовать MIME-тип: "application/vnd.nokia.landmarkcollection+xml".
Следующий фрагмент кода демонстрирует, как выгрузить все базы данных ориентиров в XML-файлы
Необходимо включить следующие заголовочные файлы:
- epos_cposlmdatabasemanager.h
- epos_cposlandmarkencoder.h
- bautils.h - для BAFLUTILS
В MMP-файле должны быть указаны следующие библиотеки:
- eposlmdbmanlib.lib
- eposlandmarks.lib
- bafl.lib - для BaflUtils
// RFs используется для некоторых проверок
RFs rFs;
User::LeaveIfError( rFs.Connect() );
CleanupClosePushL( rFs );
// каталог для выгрузки
_LIT( KBackupFolder, "C:\\LmBackup\\" );
// проверка существования каталога
TFileName backupFolder( KBackupFolder );
BaflUtils :: EnsurePathExistsL( rFs, backupFolder );
// переменная используется для формирования имени файла
_LIT( KReplace, "_" );
TBuf<1> replaceStr( KReplace );
// менеджер баз данных ориентиров
CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager :: NewL();
CleanupStack :: PushL( dbManager );
// протокол локальных баз данных
_LIT( KFileProto, "file" );
// заполнение массива URI локальных баз данных
CDesCArray* dbUriList = dbManager->ListDatabasesLC( KFileProto );
// MIME type для импорта и экспорта
_LIT8( KPosMimeTypeLandmarkCollectionXml, "application/vnd.nokia.landmarkcollection+xml" );
// encoder используется для экспорта
CPosLandmarkEncoder* encoder = CPosLandmarkEncoder::NewL(KPosMimeTypeLandmarkCollectionXml);
CleanupStack :: PushL( encoder );
// массив для экспортируемых элементов
RArray<TPosLmItemId> itemsArray;
CleanupClosePushL( itemsArray );
for( TInt i = 0; i < dbUriList->Count(); i++ )
{
// открываем текущую базу данных
TPtrC currentUri = (*dbUriList)[i];
CPosLandmarkDatabase* db = CPosLandmarkDatabase :: OpenL( currentUri );
CleanupStack :: PushL( db );
// итератор используется для чтения всех ориентиров текущей базы
CPosLmItemIterator* iter = db->LandmarkIteratorL();
CleanupStack::PushL( iter );
// если итератор не пустой
if( iter->NumOfItemsL() > 0 )
{
// получение идентификаторов всех ориентиров
itemsArray.Reset();
iter->GetItemIdsL( itemsArray, 0, iter->NumOfItemsL() );
// формирование файлового имени из URI: file://e:my.ldb -> C:\LmBackup\e_my.ldb
TFileName fileName( backupFolder );
fileName.Append( currentUri.Right( currentUri.Length() - 7 ) );
fileName.Replace( backupFolder.Length() + 1, 1, replaceStr ); // : -> _
// если файл уже существует - удалить файл
if( BaflUtils :: FileExists( rFs, fileName ) )
BaflUtils :: DeleteFile( rFs, fileName );
// указываем файл для экспорта
encoder->SetOutputFileL( fileName );
// выполнение экспорта в пакетном режиме
ExecuteAndDeleteLD( db->ExportLandmarksL( *encoder, itemsArray,
CPosLandmarkDatabase::EIncludeCategories ) );
// завершение экспорта в пакетном режиме
ExecuteAndDeleteLD( encoder->FinalizeEncodingL() );
}
CleanupStack :: PopAndDestroy( 2 ); // iter db
}
CleanupStack :: PopAndDestroy( 5 ); // rFs itemsArray encoder iDbList dbManager


(no comments yet)