void RfpTestEcw::testRGB() { FdoPtr<FdoIConnection> connection = CreateConnection(); FdoPtr<FdoIoStream> stream = FdoIoFileStream::Create(L"../../TestData/Ecw/Adelaide_sample.xml", L"r"); connection->SetConfiguration(stream); connection->Open(); FdoICommand* cmd = connection->CreateCommand(FdoCommandType_Select); FdoPtr<FdoISelect> cmdSelect = dynamic_cast<FdoISelect*>(cmd); cmdSelect->SetFeatureClassName(L"Photo"); FdoPtr<FdoIFeatureReader> featureReader = cmdSelect->Execute(); CPPUNIT_ASSERT(featureReader->ReadNext()); FdoPtr<FdoIRaster> raster = featureReader->GetRaster(L"Image"); FdoInt32 xSize = raster->GetImageXSize(); FdoInt32 ySize = raster->GetImageYSize(); CPPUNIT_ASSERT(xSize == 2814); CPPUNIT_ASSERT(ySize == 2187); FdoPtr<FdoRasterDataModel> dataModel = raster->GetDataModel(); CPPUNIT_ASSERT(dataModel->GetBitsPerPixel() == 32); CPPUNIT_ASSERT(dataModel->GetDataModelType() == FdoRasterDataModelType_RGBA); CPPUNIT_ASSERT(dataModel->GetTileSizeX() == raster->GetImageXSize()); CPPUNIT_ASSERT(dataModel->GetTileSizeY() == raster->GetImageYSize()); const FdoInt32 tileSizeX = 1024, tileSizeY = 1024; dataModel->SetTileSizeX(tileSizeX); dataModel->SetTileSizeY(tileSizeY); raster->SetDataModel(dataModel); FdoPtr<FdoIStreamReaderTmpl<FdoByte> > reader = dynamic_cast<FdoIStreamReaderTmpl<FdoByte>*>(raster->GetStreamReader()); int numTileRows = (2187 - 1) / tileSizeX + 1; int numTileCols = (2814 - 1) / tileSizeY + 1; const int bytesTile = tileSizeX * tileSizeY * 4; FdoByte* buffer = new FdoByte[bytesTile]; for (int i = 0; i < numTileRows; i++) { // read the first tile of the tile row FdoInt32 numRead = reader->ReadNext(buffer, 0, bytesTile); CPPUNIT_ASSERT(numRead == bytesTile); // skip the rest tiles reader->Skip(bytesTile * (numTileCols - 1)); } // no data CPPUNIT_ASSERT(reader->ReadNext(buffer, 0, 1) == 0); delete buffer; // scale down to 1/4 of original size and read it row by row raster->SetImageXSize(703); raster->SetImageYSize(546); dataModel->SetTileSizeX(raster->GetImageXSize()); dataModel->SetTileSizeY(raster->GetImageYSize()); raster->SetDataModel(dataModel); reader = dynamic_cast<FdoIStreamReaderTmpl<FdoByte>*>(raster->GetStreamReader()); // iterate all rows FdoByte buff[2816]; //2816=703*4+4 for (int row = 0; row < 546; row++) { FdoInt32 numRead = reader->ReadNext(buff, 0, 2816); CPPUNIT_ASSERT(numRead == 2816); } CPPUNIT_ASSERT(reader->ReadNext(buff, 0, 1) == 0); connection->Close(); }
void FdoSpatialContextTest::DoTest( bool hasMetaSchema ) { FdoPtr<FdoIConnection> connection; StaticConnection* staticConn = NULL; try { if ( !hasMetaSchema ) { staticConn = UnitTestUtil::NewStaticConnection(); staticConn->connect(); UnitTestUtil::CreateDBNoMeta( staticConn->CreateSchemaManager(), UnitTestUtil::GetEnviron("datastore", DB_NAME_SUFFIX) ); } // delete, re-create and open the datastore printf( "Initializing Connection ... \n" ); connection = UnitTestUtil::CreateConnection( hasMetaSchema, hasMetaSchema, DB_NAME_SUFFIX, 0, NULL, 0 ); printf( "Creating Spatial Contexts ... \n" ); UnitTestUtil::CreateSpatialContext( connection, L"Bermuda", L"Bermuda 1957", 0, 0, 10, 10 ); UnitTestUtil::CreateSpatialContext( connection, L"Rectangular", L"", 0, 0, 1000, 1000 ); UnitTestUtil::CreateSpatialContext( connection, L"Bermuda Duplicate", L"Bermuda 1957", 0, 0, 10, 10 ); UnitTestUtil::CreateSpatialContext( connection, L"Luxembourg Delete", L"Luxembourg 1930", 0, 0, 10, 10 ); UnitTestUtil::CreateSpatialContext( connection, L"South", L"Australian Antarctic", 0, 0, 10, 10 ); UnitTestUtil::CreateSpatialContext( connection, L"sc_2", L"Puerto Rico", 0, 0, 10, 10 ); UnitTestUtil::CreateSpatialContext( connection, L"South Delete", L"Australian Antarctic", 0, 0, 10, 10 ); UnitTestUtil::CreateSpatialContext( connection, L"sc_1", L"NAD27", 0, 0, 10, 10 ); UnitTestUtil::CreateSpatialContext( connection, L"South Duplicate", L"Australian Antarctic", 0, 0, 10, 10 ); UnitTestUtil::CreateSpatialContext( connection, L"Liberia by WKT", L"", 0, 0, 10, 10, L"GEOGCS[\"Liberia 1964\", DATUM[\"Liberia 1964\", ELLIPSOID[\"Clarke 1880 (RGS)\", 6378249.145, 293.465]], PRIMEM[\"Greenwich\", 0], UNIT[\"Degree\", 0.0174532925199433]]" ); UnitTestUtil::CreateSpatialContext( connection, L"Qatar wrong name", L"Bermuda 1957", 0, 0, 10, 10, L"GEOGCS[\"Qatar 1974\", DATUM[\"Qatar 1974\", ELLIPSOID[\"International 1924\", 6378388, 297]], PRIMEM[\"Greenwich\", 0], UNIT[\"Degree\", 0.0174532925199433]]" ); UnitTestUtil::CreateSpatialContext( connection, L"California", L"CA-I", 0, 0, 10, 10 ); UnitTestUtil::CreateSpatialContext( connection, L"Bermuda Mentor", L"Bermuda.LL", 0, 0, 10, 10 ); UnitTestUtil::CreateSpatialContext( connection, L"Mentor by WKT", L"", 0, 0, 10, 10, L"PROJCS[\"Quebec test\",GEOGCS[\"For testing only\",DATUM[\"Test\",SPHEROID[\"NAD 27\",6300000,123.465,]]]]" ); UnitTestUtil::CreateSpatialContext( connection, L"Rectangular (Metre)", L"XY-M", 0, 0, 10, 10); UnitTestUtil::CreateSpatialContext( connection, L"Rectangular (Feet)", L"XY-FT", 0, 0, 10, 10); connection->Close(); connection->Open(); printf( "Deleting Spatial Contexts ... \n" ); UnitTestUtil::DeleteSpatialContext( connection, L"Luxembourg Delete" ); UnitTestUtil::DeleteSpatialContext( connection, L"South Delete" ); connection->Close(); connection->Open(); CreateSchema( connection, hasMetaSchema ); printf( "Writing output ... \n" ); FdoStringP datastore = UnitTestUtil::GetEnviron("datastore", DB_NAME_SUFFIX); FdoIoMemoryStreamP stream1 = FdoIoMemoryStream::Create(); FdoXmlSpatialContextFlagsP flags = FdoXmlSpatialContextFlags::Create( L"fdo.osgeo.org/schemas/feature", FdoXmlFlags::ErrorLevel_Normal, true, FdoXmlSpatialContextFlags::ConflictOption_Add, true ); UnitTestUtil::ExportDb( connection, stream1, flags, false, FdoStringP(L"Fdo") + datastore ); UnitTestUtil::Config2SortedFile( stream1, UnitTestUtil::GetOutputFileName( GenFileName(1, hasMetaSchema, false) ) ); UnitTestUtil::CheckOutput( GenFileName( 1, hasMetaSchema, true ), UnitTestUtil::GetOutputFileName( GenFileName(1, hasMetaSchema, false) ) ); InsertFeatures( connection ); stream1 = FdoIoMemoryStream::Create(); UnitTestUtil::ExportDb( connection, stream1, flags, false, FdoStringP(L"Fdo") + datastore, L"AutoGen", true ); UnitTestUtil::Config2SortedFile( stream1, UnitTestUtil::GetOutputFileName( GenFileName(2, hasMetaSchema, false) ) ); UnitTestUtil::CheckOutput( GenFileName( 2, hasMetaSchema, true ), UnitTestUtil::GetOutputFileName( GenFileName(2, hasMetaSchema, false) ) ); if ( !hasMetaSchema ) { CreateTables( staticConn, datastore ); connection->Close(); connection->Open(); stream1 = FdoIoMemoryStream::Create(); UnitTestUtil::ExportDb( connection, stream1, flags, false, FdoStringP(L"Fdo") + datastore, L"AutoGen", true ); UnitTestUtil::Config2SortedFile( stream1, UnitTestUtil::GetOutputFileName( GenFileName(3, hasMetaSchema, false) ) ); UnitTestUtil::CheckOutput( GenFileName( 3, hasMetaSchema, true ), UnitTestUtil::GetOutputFileName( GenFileName(3, hasMetaSchema, false) ) ); try { UnitTestUtil::CreateSpatialContext( connection, L"Nowhere", L"JunkCS", 0, 0, 10, 10 ); CPPUNIT_FAIL( "Setting unsupported coordinate system by name supposed to fail" ); } catch (FdoException* e ) { #ifdef _WIN32 #ifdef _DEBUG FdoStringP expectedMessage = L" Error creating spatial context Nowhere, coordinate system JunkCS is not in current datastore. "; FdoString* pMessage = wcschr( e->GetExceptionMessage(), ')' ); if (pMessage) pMessage++; #else FdoStringP expectedMessage = L"Error creating spatial context Nowhere, coordinate system JunkCS is not in current datastore. "; FdoString* pMessage = e->GetExceptionMessage(); #endif CPPUNIT_ASSERT( pMessage && expectedMessage.ICompare(pMessage) == 0 ); #endif FDO_SAFE_RELEASE(e); } try { UnitTestUtil::CreateSpatialContext( connection, L"California2", L"", 0, 0, 10, 10, L"PROJCS[\"CA-I\",GEOGCS[\"LL27\",DATUM[\"NAD27\",SPHEROID[\"CLRK66\",60.400,294.97869821]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"false_easting\",2000000.000],PARAMETER[\"false_northing\",0.000],PARAMETER[\"central_meridian\",-122.00000000000000],PARAMETER[\"latitude_of_origin\",39.33333333333333],PARAMETER[\"standard_parallel_1\",41.66666666666666],PARAMETER[\"standard_parallel_2\",40.00000000000000],UNIT[\"Foot_US\",0.30480060960122]]" ); CPPUNIT_FAIL( "Setting unsupported coordinate system by wkt supposed to fail" ); } catch (FdoException* e ) { #ifdef _WIN32 #ifdef _DEBUG FdoStringP expectedMessage = L" Error creating spatial context California2, coordinate system catalog does not contain entry for WKT 'PROJCS[\"CA-I\",GEOGCS[\"LL27\",DATUM[\"NAD27\",SPHEROID[\"CLRK66\",60.400,294.97869821]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"false_easting\",2000000.000],PARAMETER[\"false_northing\",0.000],PARAMETER[\"central_meridian\",-122.00000000000000],PARAMETER[\"latitude_of_origin\",39.33333333333333],PARAMETER[\"standard_parallel_1\",41.66666666666666],PARAMETER[\"standard_parallel_2\",40.00000000000000],UNIT[\"Foot_US\",0.30480060960122]]' "; FdoString* pMessage = wcschr( e->GetExceptionMessage(), ')' ); if (pMessage) pMessage++; #else FdoStringP expectedMessage = L"Error creating spatial context California2, coordinate system catalog does not contain entry for WKT 'PROJCS[\"CA-I\",GEOGCS[\"LL27\",DATUM[\"NAD27\",SPHEROID[\"CLRK66\",60.400,294.97869821]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"false_easting\",2000000.000],PARAMETER[\"false_northing\",0.000],PARAMETER[\"central_meridian\",-122.00000000000000],PARAMETER[\"latitude_of_origin\",39.33333333333333],PARAMETER[\"standard_parallel_1\",41.66666666666666],PARAMETER[\"standard_parallel_2\",40.00000000000000],UNIT[\"Foot_US\",0.30480060960122]]' "; FdoString* pMessage = e->GetExceptionMessage(); #endif CPPUNIT_ASSERT( pMessage && expectedMessage.ICompare(pMessage) == 0 ); #endif FDO_SAFE_RELEASE(e); } } else { UnitTestUtil::CreateSpatialContext( connection, L"Nowhere", L"JunkCS", 0, 0, 10, 10 ); UnitTestUtil::CreateSpatialContext( connection, L"California2", L"CA_I", 0, 0, 10, 10, L"PROJCS[\"CA-I\",GEOGCS[\"LL27\",DATUM[\"NAD27\",SPHEROID[\"CLRK66\",60.400,294.97869821]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",0.017453292519943295]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"false_easting\",2000000.000],PARAMETER[\"false_northing\",0.000],PARAMETER[\"central_meridian\",-122.00000000000000],PARAMETER[\"latitude_of_origin\",39.33333333333333],PARAMETER[\"standard_parallel_1\",41.66666666666666],PARAMETER[\"standard_parallel_2\",40.00000000000000],UNIT[\"Foot_US\",0.30480060960122]]" ); stream1 = FdoIoMemoryStream::Create(); UnitTestUtil::ExportDb( connection, stream1, flags, false, FdoStringP(L"Fdo") + datastore, L"AutoGen", true ); UnitTestUtil::Config2SortedFile( stream1, UnitTestUtil::GetOutputFileName( GenFileName(3, hasMetaSchema, false) ) ); UnitTestUtil::CheckOutput( GenFileName( 3, hasMetaSchema, true ), UnitTestUtil::GetOutputFileName( GenFileName(3, hasMetaSchema, false) ) ); } delete staticConn; connection->Close(); } catch ( ... ) { try { if ( staticConn ) delete staticConn; if ( connection ) connection->Close(); } catch ( ... ) { } throw; } }