ossimRefPtr<ossimProjection> ossimFgdcXmlDoc::getProjection() { if ( (m_projection.valid() == false) && isOpen() ) { ossimString projName; if ( getProjCsn(projName) ) { if (!projName.empty()) { m_projection = ossimEpsgProjectionFactory::instance()->createProjection(projName); if ( m_projection.valid() ) { ossimDpt gsd; gsd.makeNan(); ossim_float64 d; if ( getXRes(d) ) { gsd.x = std::fabs(d); } if ( getYRes(d) ) { gsd.y = std::fabs(d); } ossimMapProjection* mapProj = dynamic_cast<ossimMapProjection*>(m_projection.get()); if (mapProj) { ossimDrect rect; getBoundingBox(rect); if (mapProj->isGeographic()) { ossimGpt tie(rect.ul().lat, rect.ul().lon); mapProj->setUlTiePoints(tie); mapProj->setDecimalDegreesPerPixel(gsd); } else { ossimDpt tie(rect.ul().x, rect.ul().y); ossimUnitType unitType = getUnitType(); if ( unitType == OSSIM_US_SURVEY_FEET) { gsd = gsd * US_METERS_PER_FT; tie = tie * US_METERS_PER_FT; } else if ( unitType == OSSIM_FEET ) { gsd = gsd * MTRS_PER_FT; tie = tie * MTRS_PER_FT; } mapProj->setUlTiePoints(tie); mapProj->setMetersPerPixel(gsd); } } } } } } return m_projection; }
ossimProjection* ossimFgdcXmlDoc::getProjection() { if ( m_projection.valid() ) { return m_projection.get(); } ossimDrect rect = getBoundingBox(); ossimString projName (getProjCsn()); if (!projName.empty()) { m_projection = ossimEpsgProjectionFactory::instance()->createProjection(projName); if ( m_projection.valid() ) { ossimDpt gsd(fabs(getXRes()), fabs(getYRes())); ossimMapProjection* mapProj = dynamic_cast<ossimMapProjection*>(m_projection.get()); if (mapProj) { if (mapProj->isGeographic()) { ossimGpt tie(rect.ul().lat, rect.ul().lon); mapProj->setUlTiePoints(tie); mapProj->setDecimalDegreesPerPixel(gsd); } else { ossimDpt tie(rect.ul().x, rect.ul().y); if (getUnits().upcase() == "FEET") { gsd = gsd * METER_PER_FOOT; tie = tie * METER_PER_FOOT; } mapProj->setUlTiePoints(tie); mapProj->setMetersPerPixel(gsd); } } } } return m_projection.get(); }