使用GDAL读取SRTM格式高程数据
生活随笔
收集整理的這篇文章主要介紹了
使用GDAL读取SRTM格式高程数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
頭文件:
//#include "include/gdal.h" #include <gdal_priv.h>#include <math.h>#ifdef _DEBUG #define new DEBUG_NEW #pragma comment(lib, "gdal_i_d.lib") #else #pragma comment(lib, "gdal_i.lib") #endif函數部分:
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 * atan(exp(mid * M_PI / 180.0)) - M_PI / 2.0);return result; }// 開始計算 void CreadSRTMDlg::OnCompute() {// TODO: Add your command handler code hereCString filename;filename = "srtm_66_21.tif";GDALAllRegister();GDALDataset *poDataSet;GDALRasterBand *pBand;int nWidth, nHeight;poDataSet = (GDALDataset*)GDALOpen((LPCTSTR)filename, GA_ReadOnly);nWidth = poDataSet->GetRasterXSize();//獲取圖像寬度nHeight = poDataSet->GetRasterYSize();//獲取圖像高度// 存儲邊界信息double adfGeoTransform[6];double value[6];if (poDataSet->GetGeoTransform(adfGeoTransform) == CE_None){value[0] = adfGeoTransform[0]; // 起點,左上經度value[1] = adfGeoTransform[3]; // 起點,左上維度value[2] = adfGeoTransform[1] * (double)nWidth + adfGeoTransform[0]; // 右側經度value[3] = adfGeoTransform[5] * (double)nHeight + adfGeoTransform[3]; // 右下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]);}}short int *pData = new short int[nWidth*nHeight];pBand = poDataSet->GetRasterBand(1);pBand->RasterIO(GF_Read, 0, 0, nWidth, nHeight, pData, nWidth, nHeight,pBand->GetRasterDataType(), 0, 0);int i = pData[1000 * nWidth + 1];CPLFree(pData);//釋放內存GDALClose(poDataSet);//關閉數據集 }我的版本是3.1.3,涉及的庫比較多,我使用vcpkg管理,已經導出并放到資源里。
總結
以上是生活随笔為你收集整理的使用GDAL读取SRTM格式高程数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 读取excel表数据
- 下一篇: 说到建模,如果不提这几个软件的话……