#include "gravsoftGrid.h" #include #include GravsoftGrid::GravsoftGrid() { } bool GravsoftGrid::open(QString fileName) { QFile gravsoftFile(fileName); if(!gravsoftFile.open(QIODevice::ReadOnly)) { return(false); } QTextStream gravsoftStream(&gravsoftFile); gravsoftStream >> privLatitudeMin >> privLatitudeMax >> privLongitudeMin >> privLongitudeMax >> privLatitudeDelta >> privLongitudeDelta; privLatitudeSize=qRound((privLatitudeMax-privLatitudeMin)/privLatitudeDelta)+1; privLongitudeSize=qRound((privLongitudeMax-privLongitudeMin)/privLongitudeDelta)+1; privLatitudeDelta=privLatitudeMax-privLatitudeMin; privLongitudeDelta=privLongitudeMax-privLongitudeMin; privData.resize(privLatitudeSize*privLongitudeSize); if(privLatitudeMin<360.0 && privLatitudeMax<360.0 && privLongitudeMin<360.0 && privLongitudeMax<360.0) { for(int i=0; i> privData[i]; } return(true); } double GravsoftGrid::interpolateValue(double longitude, double latitude) { int latitudeIndex, longitudeIndex; double returnValue, latitudeRatio, longitudeRatio; if(longitude<=privLongitudeMax && longitude>=privLongitudeMin && latitude<=privLatitudeMax && latitude>=privLatitudeMin ) { latitudeIndex=int((privLatitudeMax-latitude)*(privLatitudeSize-1.0)/privLatitudeDelta); longitudeIndex=int((longitude-privLongitudeMin)*(privLongitudeSize-1.0)/privLongitudeDelta); latitudeRatio=(this->latitude(latitudeIndex)-latitude)*(privLatitudeSize-1.0)/privLatitudeDelta; longitudeRatio=(longitude-this->longitude(longitudeIndex))*(privLongitudeSize-1.0)/privLongitudeDelta; returnValue=(1.0-longitudeRatio)*((1.0-latitudeRatio)*this->value(longitudeIndex, latitudeIndex)+latitudeRatio*this->value(longitudeIndex, latitudeIndex+1)) +longitudeRatio*((1.0-latitudeRatio)*this->value(longitudeIndex+1, latitudeIndex)+latitudeRatio*this->value(longitudeIndex+1, latitudeIndex+1) ); return(returnValue); } else return(-9999.9); } double GravsoftGrid::value(int longitudeIndex, int latitudeIndex) { if(longitudeIndex