本文整理汇总了C++中GeoDataDocument类的典型用法代码示例。如果您正苦于以下问题:C++ GeoDataDocument类的具体用法?C++ GeoDataDocument怎么用?C++ GeoDataDocument使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了GeoDataDocument类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: saveTrack
bool PositionTracking::saveTrack( const QString& fileName )
{
if ( fileName.isEmpty() ) {
return false;
}
GeoWriter writer;
//FIXME: a better way to do this?
writer.setDocumentType( kml::kmlTag_nameSpaceOgc22 );
GeoDataDocument *document = new GeoDataDocument;
QFileInfo fileInfo( fileName );
QString name = fileInfo.baseName();
document->setName( name );
foreach( const GeoDataStyle &style, d->m_document.styles() ) {
document->addStyle( style );
}
foreach( const GeoDataStyleMap &map, d->m_document.styleMaps() ) {
document->addStyleMap( map );
}
GeoDataPlacemark *track = new GeoDataPlacemark( *d->m_currentTrackPlacemark );
track->setName( "Track " + name );
document->append( track );
QFile file( fileName );
file.open( QIODevice::WriteOnly );
bool const result = writer.write( &file, document );
file.close();
delete document;
return result;
}
示例2: Q_ASSERT_X
void CountryByFlag::initiateGame()
{
/**
* First remove the GeoDataDocument, which displays
* country names, from map.
*/
if ( !d->m_countryNames ) {
const GeoDataTreeModel *const treeModel = d->m_marbleWidget->model()->treeModel();
for ( int i = 0; i < treeModel->rowCount(); ++i ) {
QVariant const data = treeModel->data ( treeModel->index ( i, 0 ), MarblePlacemarkModel::ObjectPointerRole );
GeoDataObject *object = qvariant_cast<GeoDataObject*>( data );
Q_ASSERT_X( object, "CountryByFlag::initiateGame",
"failed to get valid data from treeModel for GeoDataObject" );
if ( object->nodeType() == GeoDataTypes::GeoDataDocumentType ) {
GeoDataDocument *doc = static_cast<GeoDataDocument*>( object );
QFileInfo fileInfo( doc->fileName() );
if ( fileInfo.fileName() == QString("boundaryplacemarks.cache") ) {
d->m_countryNames = doc;
break;
}
}
}
}
if ( d->m_countryNames ) {
d->m_countryNames->setVisible( false );
d->m_marbleWidget->model()->treeModel()->updateFeature( d->m_countryNames );
d->m_marbleWidget->centerOn( 23.0, 42.0 );
d->m_marbleWidget->setDistance( 7500 );
d->m_marbleWidget->setHighlightEnabled( false );
emit gameInitialized();
}
}
示例3: centerContent
void TestGxTimeStamp::simpleParseTest()
{
QString const centerContent (
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
"<kml xmlns=\"http://www.opengis.net/kml/2.2\""
" xmlns:gx=\"http://www.google.com/kml/ext/2.2\">"
"<Document>"
"<Placemark>"
"<Camera>"
"<gx:TimeStamp>"
"<when>1987-06-05T04:03:02-01:00</when>"
"</gx:TimeStamp>"
"</Camera>"
"</Placemark>"
"</Document>"
"</kml>" );
GeoDataDocument* dataDocument = parseKml( centerContent );
QCOMPARE( dataDocument->placemarkList().size(), 1 );
GeoDataPlacemark *placemark = dataDocument->placemarkList().at( 0 );
GeoDataAbstractView* view = placemark->abstractView();
QVERIFY( view != 0 );
GeoDataCamera* camera = dynamic_cast<GeoDataCamera*>( view );
QVERIFY( camera != 0 );
QCOMPARE( camera->timeStamp().when().toUTC(), QDateTime::fromString( "1987-06-05T04:03:02-01:00", Qt::ISODate).toUTC() );
delete dataDocument;
}
示例4: QStringLiteral
GeoDataDocument *GpsbabelRunner::parseFile(const QString &fileName, DocumentRole role, QString &error)
{
// Check and see if the file exists
if ( !QFileInfo( fileName ).exists() ) {
error = QStringLiteral("File %1 does not exist").arg(fileName);
mDebug() << error;
return nullptr;
}
// Inspect the filename suffix
QString const fileSuffix = QFileInfo( fileName ).suffix();
// Determine if fileName suffix is supported by this plugin
QMap<QString,QString> fileTypes;
fileTypes["nmea"] = "nmea";
fileTypes["igc"] = "igc";
fileTypes["tiger"] = "tiger";
fileTypes["ov2"] = "tomtom";
fileTypes["garmin"] = "garmin_txt";
fileTypes["magellan"] = "magellan";
fileTypes["csv"] = "csv";
QString const inputFileType = fileTypes[fileSuffix];
if ( inputFileType.isEmpty() ) {
error = QStringLiteral("Unsupported file extension for").arg(fileName);
mDebug() << error;
return nullptr;
}
// Set up temporary file to hold output KML from gpsbabel executable
QTemporaryFile tempKmlFile(QDir::tempPath() + QLatin1String("/marble-gpsbabel-XXXXXX.kml"));
tempKmlFile.open();
QFile kmlFile( tempKmlFile.fileName() );
// Set up gpsbabel command line
const QString command =
QLatin1String("gpsbabel -i ") + inputFileType +
QLatin1String(" -f ") + fileName + QLatin1String(" -o kml -F ") +
tempKmlFile.fileName();
// Execute gpsbabel to parse the input file
int const exitStatus = QProcess::execute( command );
if ( exitStatus == 0 ) {
kmlFile.open( QIODevice::ReadWrite );
GeoDataParser parser( GeoData_KML );
parser.read( &kmlFile );
GeoDataDocument *document = dynamic_cast<GeoDataDocument*>( parser.releaseDocument() );
if ( !document ) {
error = parser.errorString();
mDebug() << error;
return nullptr;
}
document->setDocumentRole( role );
return document;
} else {
error = QStringLiteral("Gpsbabel returned error code %1").arg(exitStatus);
mDebug() << error;
return nullptr;
}
}
示例5: kmlContent
void TestCamera::simpleParseTest()
{
QString const kmlContent (
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
"<kml xmlns=\"http://www.opengis.net/kml/2.2\""
" xmlns:gx=\"http://www.google.com/kml/ext/2.2\">"
"<Document>"
" <Camera id=\"myCam\">"
" <longitude>1</longitude>"
" <latitude>2</latitude>"
" <altitude>3</altitude>"
" <heading>4</heading>"
" <tilt>5</tilt>"
" <roll>6</roll>"
" <altitudeMode>relativeToGround</altitudeMode>"
" </Camera>"
"</Document>"
"</kml>" );
GeoDataDocument* dataDocument = parseKml( kmlContent );
GeoDataCamera *camera = dynamic_cast<GeoDataCamera*>( dataDocument->abstractView() );
QVERIFY( camera != 0);
GeoDataCoordinates::Unit const degree = GeoDataCoordinates::Degree;
QCOMPARE( camera->longitude( degree ), 1.0 );
QCOMPARE( camera->latitude( degree ), 2.0 );
QCOMPARE( camera->altitude(), 3.0 );
QCOMPARE( camera->heading(), 4.0 );
QCOMPARE( camera->tilt(), 5.0 );
QCOMPARE( camera->roll(), 6.0 );
QCOMPARE( camera->altitudeMode(), RelativeToGround );
delete dataDocument;
}
示例6: locker
void RoutingManagerPrivate::saveRoute(const QString &filename)
{
GeoWriter writer;
writer.setDocumentType( kml::kmlTag_nameSpaceOgc22 );
QMutexLocker locker( &m_fileMutex );
QFile file( filename );
if ( !file.open( QIODevice::WriteOnly | QIODevice::Truncate ) )
{
mDebug() << "Cannot write to " << file.fileName();
return;
}
GeoDataDocument container;
container.setName(QStringLiteral("Route"));
GeoDataFolder* request = routeRequest();
if ( request ) {
container.append( request );
}
GeoDataDocument *route = m_alternativeRoutesModel.currentRoute();
if ( route ) {
container.append( new GeoDataDocument( *route ) );
}
if ( !writer.write( &file, &container ) ) {
mDebug() << "Can not write route state to " << file.fileName();
}
file.close();
}
示例7: Q_ASSERT_X
void MainWindow::browseMapButtonClicked()
{
d->m_marbleWidget->setMapThemeId(QStringLiteral("earth/political/political.dgml"));
/**
* Now display the country names which
* were removed to initiate the game
*/
const GeoDataTreeModel *const treeModel = d->m_marbleWidget->model()->treeModel();
for ( int i = 0; i < treeModel->rowCount(); ++i ) {
QVariant const data = treeModel->data ( treeModel->index ( i, 0 ), MarblePlacemarkModel::ObjectPointerRole );
GeoDataObject *object = qvariant_cast<GeoDataObject*>( data );
Q_ASSERT_X( object, "MainWindow::browseMapButtonClicked",
"failed to get valid data from treeModel for GeoDataObject" );
if ( object->nodeType() == GeoDataTypes::GeoDataDocumentType ) {
GeoDataDocument *doc = static_cast<GeoDataDocument*>( object );
QFileInfo fileInfo( doc->fileName() );
QString fileName = fileInfo.fileName();
if (fileName == QLatin1String("boundaryplacemarks.cache")) {
doc->setVisible( true );
d->m_marbleWidget->model()->treeModel()->updateFeature( doc );
d->m_marbleWidget->setHighlightEnabled( true );
break;
}
}
}
}
示例8: centerContent
void TestGxTimeSpan::simpleParseTest()
{
QString const centerContent (
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
"<kml xmlns=\"http://www.opengis.net/kml/2.2\""
" xmlns:gx=\"http://www.google.com/kml/ext/2.2\">"
"<Document>"
"<Placemark>"
"<LookAt>"
"<gx:TimeSpan>"
"<begin>2010-05-28T02:02:09Z</begin>"
"<end>2010-05-28T02:02:56Z</end>"
"</gx:TimeSpan>"
"</LookAt>"
"</Placemark>"
"</Document>"
"</kml>" );
GeoDataDocument* dataDocument = parseKml( centerContent );
QCOMPARE( dataDocument->placemarkList().size(), 1 );
GeoDataPlacemark *placemark = dataDocument->placemarkList().at( 0 );
QVERIFY( placemark->lookAt() != 0 );
QCOMPARE( placemark->lookAt()->timeSpan().begin().when(), QDateTime::fromString( "2010-05-28T02:02:09Z", Qt::ISODate) );
QCOMPARE( placemark->lookAt()->timeSpan().end().when(), QDateTime::fromString( "2010-05-28T02:02:56Z", Qt::ISODate) );
delete dataDocument;
}
示例9: parser
void TestGeoDataPack::saveKMLToCache()
{
GeoDataParser parser( GeoData_KML );
QByteArray array( content.toUtf8() );
QBuffer buffer( &array );
buffer.open( QIODevice::ReadOnly );
if ( !parser.read( &buffer ) ) {
qWarning( "Could not parse data!" );
QFAIL( "Could not parse data!" );
return;
}
GeoDocument* document = parser.releaseDocument();
QVERIFY( document );
qDebug() << " parse Timer " << timer.elapsed();
GeoDataDocument *dataDocument = static_cast<GeoDataDocument*>( document );
QString path = QString( "%1/%2.cache" );
path = path.arg( QCoreApplication::applicationDirPath() );
path = path.arg( QString( "KMLTest" ) );
QFile cacheFile( path );
if ( cacheFile.open( QIODevice::WriteOnly ) ) {
QDataStream stream ( &cacheFile );
dataDocument->pack( stream );
cacheFile.close();
qDebug( "Saved kml document to cache: %s", path.toLatin1().data() );
}
qDebug() << "write Timer " << timer.elapsed();
delete document;
}
示例10: parseKml
void TestGeoDataTrack::simpleParseTest()
{
GeoDataDocument* dataDocument = parseKml( simpleExampleContent );
GeoDataFolder *folder = dataDocument->folderList().at( 0 );
QCOMPARE( folder->placemarkList().size(), 1 );
GeoDataPlacemark* placemark = folder->placemarkList().at( 0 );
QCOMPARE( placemark->geometry()->geometryId(), GeoDataTrackId );
GeoDataTrack* track = static_cast<GeoDataTrack*>( placemark->geometry() );
QCOMPARE( track->size(), 7 );
{
QDateTime when = track->whenList().at( 0 );
QCOMPARE( when, QDateTime( QDate( 2010, 5, 28 ), QTime( 2, 2, 9 ), Qt::UTC ) );
}
{
GeoDataCoordinates coord = track->coordinatesList().at( 0 );
QCOMPARE( coord.longitude( GeoDataCoordinates::Degree ), -122.207881 );
QCOMPARE( coord.latitude( GeoDataCoordinates::Degree ), 37.371915 );
QCOMPARE( coord.altitude(), 156.000000 );
}
{
GeoDataCoordinates coord = track->coordinatesAt( QDateTime( QDate( 2010, 5, 28 ), QTime( 2, 2, 9 ), Qt::UTC ) );
QCOMPARE( coord.longitude( GeoDataCoordinates::Degree ), -122.207881 );
QCOMPARE( coord.latitude( GeoDataCoordinates::Degree ), 37.371915 );
QCOMPARE( coord.altitude(), 156.000000 );
}
delete dataDocument;
}
示例11: clipToBaseClipper
GeoDataDocument *VectorClipper::clipTo(const GeoDataLatLonBox &tileBoundary, int zoomLevel)
{
bool const useBaseClipper = false;
if (useBaseClipper) {
return clipToBaseClipper(tileBoundary);
}
bool const filterSmallAreas = zoomLevel > 10 && zoomLevel < 17;
GeoDataDocument* tile = new GeoDataDocument();
auto const clip = clipPath(tileBoundary, zoomLevel);
GeoDataLinearRing ring;
ring << GeoDataCoordinates(tileBoundary.west(), tileBoundary.north());
ring << GeoDataCoordinates(tileBoundary.east(), tileBoundary.north());
ring << GeoDataCoordinates(tileBoundary.east(), tileBoundary.south());
ring << GeoDataCoordinates(tileBoundary.west(), tileBoundary.south());
qreal const minArea = filterSmallAreas ? 0.01 * area(ring) : 0.0;
foreach (GeoDataPlacemark const * placemark, potentialIntersections(tileBoundary)) {
GeoDataGeometry const * const geometry = placemark ? placemark->geometry() : nullptr;
if (geometry && tileBoundary.intersects(geometry->latLonAltBox())) {
if(geometry->nodeType() == GeoDataTypes::GeoDataPolygonType) {
clipPolygon(placemark, clip, minArea, tile);
} else if (geometry->nodeType() == GeoDataTypes::GeoDataLineStringType) {
clipString<GeoDataLineString>(placemark, clip, minArea, tile);
} else if (geometry->nodeType() == GeoDataTypes::GeoDataLinearRingType) {
clipString<GeoDataLinearRing>(placemark, clip, minArea, tile);
} else {
tile->append(new GeoDataPlacemark(*placemark));
}
}
}
示例12: centerContent
void TestPhotoOverlay::simpleParseTest()
{
QString const centerContent (
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
"<kml xmlns=\"http://www.opengis.net/kml/2.2\""
" xmlns:gx=\"http://www.google.com/kml/ext/2.2\">"
"<Folder>"
" <PhotoOverlay>"
" <rotation>12.455</rotation>"
" <ViewVolume>"
" <near>1000</near>"
" <leftFov>-60</leftFov>"
" <rightFov>60</rightFov>"
" <bottomFov>-45</bottomFov>"
" <topFov>45</topFov>"
" </ViewVolume>"
" <ImagePyramid>"
" <tileSize>219</tileSize>"
" <maxWidth>22</maxWidth>"
" <maxHeight>36</maxHeight>"
" <gridOrigin>lowerLeft</gridOrigin>"
" </ImagePyramid>"
" <Point>"
" <coordinates>45.78665,0.6565</coordinates>"
" </Point>"
" <shape>sphere</shape>"
" </PhotoOverlay>"
"</Folder>"
"</kml>" );
GeoDataDocument* dataDocument = parseKml( centerContent );
QCOMPARE( dataDocument->folderList().size(), 1 );
GeoDataFolder *folder = dataDocument->folderList().at( 0 );
QCOMPARE( folder->size(), 1 );
GeoDataPhotoOverlay *overlay = dynamic_cast<GeoDataPhotoOverlay*>( folder->child( 0 ) );
QVERIFY( overlay != 0 );
QFUZZYCOMPARE( overlay->rotation(), 12.455, 0.0001 );
QFUZZYCOMPARE( overlay->viewVolume().near(), 1000.0, 0.0001 );
QFUZZYCOMPARE( overlay->viewVolume().leftFov(), -60.0, 0.0001 );
QFUZZYCOMPARE( overlay->viewVolume().rightFov(), 60.0, 0.0001 );
QFUZZYCOMPARE( overlay->viewVolume().bottomFov(), -45.0, 0.0001 );
QFUZZYCOMPARE( overlay->viewVolume().topFov(), 45.0, 0.0001 );
QFUZZYCOMPARE( overlay->imagePyramid().tileSize(), 219, 0.0001 );
QFUZZYCOMPARE( overlay->imagePyramid().maxWidth(), 22, 0.0001 );
QFUZZYCOMPARE( overlay->imagePyramid().maxHeight(), 36, 0.0001 );
QFUZZYCOMPARE( overlay->imagePyramid().gridOrigin(), GeoDataImagePyramid::LowerLeft, 0.0001 );
QFUZZYCOMPARE( overlay->point().coordinates().longitude( GeoDataCoordinates::Degree ), 45.78665, 0.0001 );
QFUZZYCOMPARE( overlay->point().coordinates().latitude( GeoDataCoordinates::Degree ), 0.6565, 0.0001 );
QFUZZYCOMPARE( overlay->shape(), GeoDataPhotoOverlay::Sphere, 0.0001 );
delete dataDocument;
}
示例13: input
void MonavMap::parseBoundingBox( const QFileInfo &file )
{
GeoDataLineString points;
bool tooLarge = false;
QFile input( file.absoluteFilePath() );
if ( input.open( QFile::ReadOnly ) ) {
GeoDataParser parser( GeoData_KML );
if ( !parser.read( &input ) ) {
mDebug() << "Could not parse file: " << parser.errorString();
return;
}
GeoDocument *doc = parser.releaseDocument();
input.close();
GeoDataDocument *document = dynamic_cast<GeoDataDocument*>( doc );
QVector<GeoDataPlacemark*> placemarks = document->placemarkList();
if ( placemarks.size() == 1 ) {
GeoDataPlacemark* placemark = placemarks.first();
m_name = placemark->name();
m_version = placemark->extendedData().value( "version" ).value().toString();
m_date = placemark->extendedData().value( "date" ).value().toString();
m_transport = placemark->extendedData().value( "transport" ).value().toString();
m_payload = placemark->extendedData().value( "payload" ).value().toString();
GeoDataMultiGeometry* geometry = dynamic_cast<GeoDataMultiGeometry*>( placemark->geometry() );
if ( geometry->size() > 1500 ) {
tooLarge = true;
}
for ( int i = 0; geometry && i < geometry->size(); ++i ) {
GeoDataLinearRing* poly = dynamic_cast<GeoDataLinearRing*>( geometry->child( i ) );
if ( poly ) {
for ( int j = 0; j < poly->size(); ++j ) {
points << poly->at( j );
}
m_tiles.push_back( *poly );
}
if ( poly->size() > 1500 ) {
tooLarge = true;
}
}
} else {
mDebug() << "File " << file.absoluteFilePath() << " does not contain one placemark, but " << placemarks.size();
}
delete doc;
}
m_boundingBox = points.latLonAltBox();
if ( tooLarge ) {
// The bounding box polygon is rather complicated, therefore not allowing a quick check
// and also occupying memory. Discard the polygon and only store the rectangular bounding
// box. Only happens for non-simplified bounding box polygons.
mDebug() << "Discarding too large bounding box poylgon for " << file.absoluteFilePath() << ". Please check for a map update.";
m_tiles.clear();
}
}
示例14: content
void TestGeoDataTrack::withoutTimeTest()
{
//"Simple Example" from kmlreference; when elements emptied
QString content(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
"<kml xmlns=\"http://www.opengis.net/kml/2.2\""
" xmlns:gx=\"http://www.google.com/kml/ext/2.2\">"
"<Folder>"
" <Placemark>"
" <gx:Track>"
" <when></when>"
" <when></when>"
" <when></when>"
" <when></when>"
" <when></when>"
" <when></when>"
" <when></when>"
" <gx:coord>-122.207881 37.371915 156.000000</gx:coord>"
" <gx:coord>-122.205712 37.373288 152.000000</gx:coord>"
" <gx:coord>-122.204678 37.373939 147.000000</gx:coord>"
" <gx:coord>-122.203572 37.374630 142.199997</gx:coord>"
" <gx:coord>-122.203451 37.374706 141.800003</gx:coord>"
" <gx:coord>-122.203329 37.374780 141.199997</gx:coord>"
" <gx:coord>-122.203207 37.374857 140.199997</gx:coord>"
" </gx:Track>"
" </Placemark>"
"</Folder>"
"</kml>" );
GeoDataDocument* dataDocument = parseKml( content );
GeoDataFolder *folder = dataDocument->folderList().at( 0 );
QCOMPARE( folder->placemarkList().size(), 1 );
GeoDataPlacemark* placemark = folder->placemarkList().at( 0 );
QCOMPARE( placemark->geometry()->geometryId(), GeoDataTrackId );
GeoDataTrack* track = static_cast<GeoDataTrack*>( placemark->geometry() );
QCOMPARE( track->size(), 7 );
{
GeoDataCoordinates coord = track->coordinatesList().at( 0 );
QCOMPARE( coord.longitude( GeoDataCoordinates::Degree ), -122.207881 );
QCOMPARE( coord.latitude( GeoDataCoordinates::Degree ), 37.371915 );
QCOMPARE( coord.altitude(), 156.000000 );
}
{
const GeoDataLineString *lineString = track->lineString();
QCOMPARE( lineString->size(), 7 );
GeoDataCoordinates coord = lineString->at( 0 );
QCOMPARE( coord.longitude( GeoDataCoordinates::Degree ), -122.207881 );
QCOMPARE( coord.latitude( GeoDataCoordinates::Degree ), 37.371915 );
QCOMPARE( coord.altitude(), 156.000000 );
}
delete dataDocument;
}
示例15: centerContent
void TestScreenOverlay::simpleParseTest()
{
QString const centerContent (
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
"<kml xmlns=\"http://www.opengis.net/kml/2.2\""
" xmlns:gx=\"http://www.google.com/kml/ext/2.2\">"
"<Folder>"
" <ScreenOverlay>"
" <overlayXY x=\"2.5\" y=\"-0.5\" xunits=\"fraction\" yunits=\"fraction\"/>"
" <screenXY x=\"0.5\" y=\"0.5\" xunits=\"insetpixels\" yunits=\"pixels\"/>"
" <rotationXY x=\"1.5\" y=\"3.5\" xunits=\"fraction\" yunits=\"insetPixels\"/>"
" <size x=\"23\" y=\"0.5\" xunits=\"pixels\" yunits=\"insetPixels\"/>"
" <rotation>23</rotation>"
" <drawOrder>9</drawOrder>"
" </ScreenOverlay>"
"</Folder>"
"</kml>" );
GeoDataDocument* dataDocument = parseKml( centerContent );
QCOMPARE( dataDocument->folderList().size(), 1 );
GeoDataFolder *folder = dataDocument->folderList().at( 0 );
QCOMPARE( folder->size(), 1 );
GeoDataScreenOverlay *overlay = dynamic_cast<GeoDataScreenOverlay*>( folder->child( 0 ) );
QVERIFY( overlay != 0 );
QCOMPARE( overlay->overlayXY().xunit(), GeoDataVec2::Fraction );
QCOMPARE( overlay->overlayXY().yunit(), GeoDataVec2::Fraction );
QCOMPARE( overlay->overlayXY().y(), -0.5 );
QCOMPARE( overlay->overlayXY().x(), 2.5 );
QCOMPARE( overlay->screenXY().xunit(), GeoDataVec2::Fraction ); // spelling error in kml, so fallback to default
QCOMPARE( overlay->screenXY().yunit(), GeoDataVec2::Pixels );
QCOMPARE( overlay->screenXY().x(), 0.5 );
QCOMPARE( overlay->screenXY().y(), 0.5 );
QCOMPARE( overlay->rotationXY().xunit(), GeoDataVec2::Fraction );
QCOMPARE( overlay->rotationXY().yunit(), GeoDataVec2::InsetPixels );
QCOMPARE( overlay->rotationXY().x(), 1.5 );
QCOMPARE( overlay->rotationXY().y(), 3.5 );
QCOMPARE( overlay->size().xunit(), GeoDataVec2::Pixels );
QCOMPARE( overlay->size().yunit(), GeoDataVec2::InsetPixels );
QCOMPARE( overlay->size().x(), 23.0 );
QCOMPARE( overlay->size().y(), 0.5 );
QCOMPARE( overlay->rotation(), 23.0 );
QCOMPARE( overlay->drawOrder(), 9 );
delete dataDocument;
}