ossimRefPtr<ossimImageGeometry> ossimPointCloudImageHandler::getImageGeometry() { if (!isOpen()) return 0; if (theGeometry.valid()) return theGeometry; // Check for external geom (i.e., a *.geom file) theGeometry = getExternalImageGeometry(); if (theGeometry.valid()) return theGeometry; theGeometry = new ossimImageGeometry(); ossimString epsgCode ("EPSG:4326"); ossimMapProjection* proj = dynamic_cast<ossimMapProjection*>( ossimEpsgProjectionFactory::instance()->createProjection(epsgCode)); if (!proj) return 0; theGeometry->setProjection(proj); // Need to establish image bounds and optimal GSD given ground rect. Use this switch to also // initialize the UL tiepoint of image projection: ossimGrect bounds; m_pch->getBounds(bounds); proj->setOrigin(bounds.ul()); proj->setUlTiePoints(bounds.ul()); // The GSD depends on the point density on the ground. count all final returns and // assume they are evenly distributed over the bounding ground rect. Note that this can have // up to a sqrt(2)X error if the collection was taken in a cardinal-diagonal direction. // Also use this point loop to latch the ground quad vertices vertices. ossim_uint32 numPulses = m_pch->getNumPoints(); // count of final returns if (numPulses == 0) { // Not yet determined. Set GSD to NAN and expect it will be set later: m_gsd.makeNan(); } else if (m_gsd.hasNans()) { ossimDpt delta (bounds.widthMeters(), bounds.heightMeters()); ossim_float64 gsd = sqrt(delta.x * delta.y / numPulses) * m_gsdFactor; setGSD(gsd); // also recomputes the image size } return theGeometry; }
QUrl WmsServerLayout::downloadUrl( const QUrl &prototypeUrl, const Marble::TileId &tileId ) const { GeoDataLatLonBox box = tileId.toLatLonBox( m_textureLayer ); #if QT_VERSION < 0x050000 QUrl url = prototypeUrl; #else QUrlQuery url(prototypeUrl.query()); #endif url.addQueryItem( "service", "WMS" ); url.addQueryItem( "request", "GetMap" ); url.addQueryItem( "version", "1.1.1" ); if ( !url.hasQueryItem( "styles" ) ) url.addQueryItem( "styles", "" ); if ( !url.hasQueryItem( "format" ) ) { if ( m_textureLayer->fileFormat().toLower() == "jpg" ) url.addQueryItem( "format", "image/jpeg" ); else url.addQueryItem( "format", "image/" + m_textureLayer->fileFormat().toLower() ); } if ( !url.hasQueryItem( "srs" ) ) { url.addQueryItem( "srs", epsgCode() ); } if ( !url.hasQueryItem( "layers" ) ) url.addQueryItem( "layers", m_textureLayer->name() ); url.addQueryItem( "width", QString::number( m_textureLayer->tileSize().width() ) ); url.addQueryItem( "height", QString::number( m_textureLayer->tileSize().height() ) ); url.addQueryItem( "bbox", QString( "%1,%2,%3,%4" ).arg( QString::number( box.west( GeoDataCoordinates::Degree ), 'f', 12 ) ) .arg( QString::number( box.south( GeoDataCoordinates::Degree ), 'f', 12 ) ) .arg( QString::number( box.east( GeoDataCoordinates::Degree ), 'f', 12 ) ) .arg( QString::number( box.north( GeoDataCoordinates::Degree ), 'f', 12 ) ) ); #if QT_VERSION < 0x050000 return url; #else QUrl finalUrl = prototypeUrl; finalUrl.setQuery(url); return finalUrl; #endif }