bool CoordinateSystemConnector::loadMetaData(IlwisObject* data) { Ilwis3Connector::loadMetaData(data); CoordinateSystem *csy = static_cast<CoordinateSystem *>(data); QString ellipsoideName; IEllipsoid ell = getEllipsoid(); GeodeticDatum *datum = getDatum(ellipsoideName); if ( !ell.isValid() && ellipsoideName != sUNDEF){ QString ellres = QString("ilwis://tables/ellipsoid?code=%1").arg(ellipsoideName); if (!ell.prepare(ellres)) { return ERROR1("No ellipsoid for this code %1",ellipsoideName); } } if ( type() == itCONVENTIONALCOORDSYSTEM ) { ConventionalCoordinateSystem *csycc = static_cast<ConventionalCoordinateSystem *>(csy); IProjection proj = getProjection(); if ( !proj.isValid()) { return ERROR1(ERR_NO_INITIALIZED_1, "projection"); } csycc->setDatum(datum); csycc->setEllipsoid(ell); csycc->setProjection(proj); proj->setCoordinateSystem(csycc); proj->setParameter(Projection::pvELLCODE, ell->toProj4()); csycc->prepare(); } else if ( type() == itUNKNOWN){ //TODO other types of csy } return true; }
bool CoordinateSystemConnector::loadMetaData(IlwisObject* data, const IOOptions& options) { Ilwis3Connector::loadMetaData(data, options); CoordinateSystem *csy = static_cast<CoordinateSystem *>(data); QString ellipsoideName; IEllipsoid ell = getEllipsoid(); GeodeticDatum *datum = getDatum(ellipsoideName); if ( !ell.isValid() && ellipsoideName != sUNDEF){ QString ellres = QString("ilwis://tables/ellipsoid?code=%1").arg(ellipsoideName); if (!ell.prepare(ellres)) { return ERROR1("No ellipsoid for this code %1",ellipsoideName); } } QString cb = _odf->value("CoordSystem", "CoordBounds"); QStringList cbparts = cb.split(" "); if ( cbparts.size() == 4 && cbparts[0] != "-1e+308") { bool ok1, ok2, ok3, ok4; Envelope box( Coordinate( cbparts[0].toDouble(&ok1), cbparts[1].toDouble(&ok2)), Coordinate( cbparts[2].toDouble(&ok3), cbparts[3].toDouble(&ok4))); if ( !( ok1 && ok2 && ok3 && ok4)) { return ERROR2(ERR_NO_INITIALIZED_2, TR("envelop"), csy->name()); } csy->envelope(box); } else { QString type = _odf->value("CoordSystem", "Type"); if ( type == "LatLon") { Envelope box(Coordinate(-180,-90), Coordinate(180,90)); csy->envelope(box); } } if ( type() == itCONVENTIONALCOORDSYSTEM ) { ConventionalCoordinateSystem *csycc = static_cast<ConventionalCoordinateSystem *>(csy); IProjection proj = getProjection(csycc); if ( !proj.isValid()) { return ERROR1(ERR_NO_INITIALIZED_1, "projection"); } csycc->setDatum(datum); csycc->setEllipsoid(ell); csycc->setProjection(proj); proj->setCoordinateSystem(csycc); proj->setParameter(Projection::pvELLCODE, ell->toProj4()); csycc->prepare(); } else if ( type() == itUNKNOWN){ //TODO: other types of csy } return true; }
void ProjectionImplementationInternal::setCoordinateSystem(ConventionalCoordinateSystem *csy) { ProjectionImplementation::setCoordinateSystem(csy); IProjection prj = _coordinateSystem->projection(); if ( prj.isValid()) { _easting = prj->parameter(Projection::pvFALSEEASTING).toDouble(); _northing = prj->parameter(Projection::pvFALSENORTHING).toDouble(); _maxis = _coordinateSystem->ellipsoid()->majorAxis(); _centralMeridian = prj->parameter(Projection::pvCENTRALMERIDIAN).toDouble(); } }
QQmlListProperty<ProjectionParameterModel> IlwisObjectModel::projectionItems() { IlwisTypes objectype = _ilwisobject->ilwisType(); if ( hasType( objectype, itPROJECTION | itCONVENTIONALCOORDSYSTEM)){ IProjection proj; _projectionParmItems.clear(); if ( hasType(objectype, itCONVENTIONALCOORDSYSTEM)){ IConventionalCoordinateSystem csyProj = _ilwisobject.as<ConventionalCoordinateSystem>(); if ( csyProj.isValid()){ proj = csyProj->projection(); } }else proj = _ilwisobject.as<Projection>(); if ( proj.isValid()){ if ( proj->isUsed(Projection::pvX0)) _projectionParmItems.append(new ProjectionParameterModel(proj, Projection::pvX0, this)); if ( proj->isUsed(Projection::pvY0)) _projectionParmItems.append(new ProjectionParameterModel(proj, Projection::pvY0, this)); if ( proj->isUsed(Projection::pvLON0)) _projectionParmItems.append(new ProjectionParameterModel(proj, Projection::pvLON0, this)); if ( proj->isUsed(Projection::pvLAT0)) _projectionParmItems.append(new ProjectionParameterModel(proj, Projection::pvLAT0, this)); if ( proj->isUsed(Projection::pvLAT1)) _projectionParmItems.append(new ProjectionParameterModel(proj, Projection::pvLAT1, this)); if ( proj->isUsed(Projection::pvLAT2)) _projectionParmItems.append(new ProjectionParameterModel(proj, Projection::pvLAT2, this)); if ( proj->isUsed(Projection::pvLATTS)) _projectionParmItems.append(new ProjectionParameterModel(proj, Projection::pvLATTS, this)); if ( proj->isUsed(Projection::pvK0)) _projectionParmItems.append(new ProjectionParameterModel(proj, Projection::pvK0, this)); if ( proj->isUsed(Projection::pvZONE)) _projectionParmItems.append(new ProjectionParameterModel(proj, Projection::pvZONE, this)); if ( proj->isUsed(Projection::pvHEIGHT)) _projectionParmItems.append(new ProjectionParameterModel(proj, Projection::pvHEIGHT, this)); } return QQmlListProperty<ProjectionParameterModel>(this, _projectionParmItems); } return QQmlListProperty<ProjectionParameterModel>(); }
QString IlwisObjectModel::getProperty(const QString &propertyname) { try{ QString property = ResourceModel::getProperty(propertyname); if ( property != sUNDEF) return property; if ( !_ilwisobject.isValid()) return ""; if ( propertyname == "latlonenvelope" || propertyname == "envelope"){ if (hasType(_ilwisobject->ilwisType(), itCOVERAGE)){ return _ilwisobject.as<Coverage>()->envelope(propertyname == "latlonenvelope").toString(); } if ( hasType(_ilwisobject->ilwisType(), itCOORDSYSTEM)){ return _ilwisobject.as<CoordinateSystem>()->envelope(propertyname == "latlonenvelope").toString(); } } if ( propertyname == "pixelsize"){ return pixSizeString(); } if ( propertyname == "centerpixelboundingbox"){ return centerPixelLocation(); } if ( propertyname == "parentdomain"){ return parentDomain(); } if ( propertyname == "valuetype"){ return valueType(); } if ( propertyname == "recordcount"){ if ( hasType(_ilwisobject->ilwisType(), itTABLE)){ return QString::number(_ilwisobject.as<Table>()->recordCount()); } } if ( propertyname == "columncount"){ if ( hasType(_ilwisobject->ilwisType(), itTABLE)){ return QString::number(_ilwisobject.as<Table>()->columnCount()); } } if ( propertyname == "polygoncount"){ if ( hasType(_ilwisobject->ilwisType(), itFEATURE)){ IFeatureCoverage features = _ilwisobject.as<FeatureCoverage>(); return QString::number(features->featureCount(itPOLYGON)); } } if ( propertyname == "linecount"){ if ( hasType(_ilwisobject->ilwisType(), itFEATURE)){ IFeatureCoverage features = _ilwisobject.as<FeatureCoverage>(); return QString::number(features->featureCount(itLINE)); } } if ( propertyname == "pointcount"){ if ( hasType(_ilwisobject->ilwisType(), itFEATURE)){ IFeatureCoverage features = _ilwisobject.as<FeatureCoverage>(); return QString::number(features->featureCount(itPOINT)); } } if ( propertyname == "featurecount"){ if ( hasType(_ilwisobject->ilwisType(), itFEATURE)){ IFeatureCoverage features = _ilwisobject.as<FeatureCoverage>(); return QString::number(features->featureCount()); } } if ( propertyname == "majoraxis"){ if ( hasType(_ilwisobject->ilwisType(), itELLIPSOID)){ IEllipsoid ellipsoid = _ilwisobject.as<Ellipsoid>(); return QString::number(ellipsoid->majorAxis()); } } if ( propertyname == "minoraxis"){ if ( hasType(_ilwisobject->ilwisType(), itELLIPSOID)){ IEllipsoid ellipsoid = _ilwisobject.as<Ellipsoid>(); return QString::number(ellipsoid->minorAxis()); } } if ( propertyname == "flattening"){ if ( hasType(_ilwisobject->ilwisType(), itELLIPSOID)){ IEllipsoid ellipsoid = _ilwisobject.as<Ellipsoid>(); return QString::number(ellipsoid->flattening()); } } if ( propertyname == "excentricity"){ if ( hasType(_ilwisobject->ilwisType(), itELLIPSOID)){ IEllipsoid ellipsoid = _ilwisobject.as<Ellipsoid>(); return QString::number(ellipsoid->excentricity()); } } if (propertyname == "proj4def"){ IlwisTypes objectype = _ilwisobject->ilwisType(); if ( hasType( objectype, itPROJECTION | itCONVENTIONALCOORDSYSTEM)){ IProjection proj; if ( hasType(objectype, itCONVENTIONALCOORDSYSTEM)){ IConventionalCoordinateSystem csyProj = _ilwisobject.as<ConventionalCoordinateSystem>(); if ( csyProj.isValid()){ proj = csyProj->projection(); } }else proj = _ilwisobject.as<Projection>(); if ( proj.isValid()){ return proj->toProj4(); } } } return ""; } catch(const ErrorObject& ){ // no exceptions may escape here } return ""; }