php 读取tif,读取TIF文件经纬度

源代码:

//tifinfo.h

void getGeoTransform(const QString path, double *value);

private:

Ui::TifInfoClass ui;

QString m_previousDir;//记录上次打开的文件夹

QString m_Path;//文件路径

GDALDataset *m_Dataset;

private slots:

void selBtnClickedSlot();

void calcBtnClickedSlot();

//tifinfo.cpp

TifInfo::TifInfo(QWidget *parent)

: QDialog(parent)

{

ui.setupUi(this);

this->setFixedSize(600, 400);

m_Path = "";

m_previousDir = "\.";

connect(ui.selBtn, SIGNAL(clicked()), this, SLOT(selBtnClickedSlot()));

connect(ui.calcBtn, SIGNAL(clicked()), this, SLOT(calcBtnClickedSlot()));

}

TifInfo::~TifInfo()

{

}

void TifInfo::selBtnClickedSlot()

{

m_Path = QFileDialog::getOpenFileName(this, "选择文件", m_previousDir, "Files (*.tif)");

if (m_Path.isEmpty()) return;

QFileInfo fInfo(m_Path);

m_previousDir = fInfo.absolutePath();

ui.pathEdt->setText(m_Path);

}

void TifInfo::calcBtnClickedSlot()

{

if (m_Path.isEmpty()) return;

double value[6];

getGeoTransform(m_Path, value);

QFileInfo fInfo(m_Path);

QString showStr = "";

showStr.append(fInfo.fileName() + " :\n");

showStr.append("左上: " + QString::number(value[1], 'f', 12) + " , " + QString::number(value[0], 'f', 12) + "\n");

showStr.append("右上: " + QString::number(value[1], 'f', 12) + " , " + QString::number(value[2], 'f', 12) + "\n");

showStr.append("左下: " + QString::number(value[3], 'f', 12) + " , " + QString::number(value[0], 'f', 12) + "\n");

showStr.append("右下: " + QString::number(value[3], 'f', 12) + " , " + QString::number(value[2], 'f', 12) + "\n");

ui.textBrowser->append(showStr);

m_Path = "";

}

void TifInfo::getGeoTransform(const QString path, double *value)

{

GDALAllRegister();

CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");

m_Dataset = (GDALDataset *)GDALOpen(path.toStdString().c_str(), GA_ReadOnly);

if (m_Dataset == NULL)

{

ui.textBrowser->append("无法打开文件!");

return;

}

double adfGeoTransform[6];

int XSize = m_Dataset->GetRasterXSize();

int YSize = m_Dataset->GetRasterYSize();

int imgFixedWidth = 3000;

if (m_Dataset->GetGeoTransform(adfGeoTransform) == CE_None)

{

value[0] = adfGeoTransform[0];

value[1] = adfGeoTransform[3];

value[2] = adfGeoTransform[1] * (double)XSize + adfGeoTransform[0];

value[3] = adfGeoTransform[5] * (double)YSize + adfGeoTransform[3];

value[4] = imgFixedWidth;

value[5] = (imgFixedWidth*YSize) / XSize;

if (value[0] > 180 || value[0] < -180)//墨卡托转WGS84

{

value[0] = Mercator2Lon(value[0]);

value[1] = Mercator2Lat(value[1]);

value[2] = Mercator2Lon(value[2]);

value[3] = Mercator2Lat(value[3]);

}

}

GDALClose(m_Dataset);

}

//GlobalFunction.h

#include

static double Mercator2Lon(double lon)//墨卡托转WGS84:经度

{

return lon / 20037508.34 * 180.0;

}

static double Mercator2Lat(double lat)//墨卡托转WGS84:纬度

{

double result = 0;

double mid = lat / 20037508.34 * 180.0;

result = 180.0 / M_PI*(2.0 * qAtan(qExp(mid*M_PI / 180.0)) - M_PI / 2.0);

return result;

}

预览:

64e6c2f564da502add34cb85e5477305.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值