影像座標重投影程式碼
原始碼如下,其中pInput為輸入影像路徑,pOut為輸出影像路徑,gcs為輸出影像的地理座標系
int DoReproject(string pInput, string pOut,string gcs)
{
GDALAllRegister();
CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");
GDALDataset* pDTIn = (GDALDataset*)GDALOpen(pInput.c_str(), GA_ReadOnly);
if (pDTIn == NULL)
{
printf("檔案開啟失敗: %s\n" , pInput.c_str());
return -1;
}
///判斷是否與目標座標系統一直
OGRSpatialReference obj_OSRS;
obj_OSRS.SetWellKnownGeogCS(gcs.c_str());
char *pszWKT = NULL;
obj_OSRS.exportToWkt(&pszWKT);
///建立從UTM到84座標系的座標轉換關係
void * hTransformArg = GDALCreateGenImgProjTransformer((GDALDatasetH)pDTIn, pDTIn->GetProjectionRef(),
NULL, pszWKT, false , 0, 1);
if (hTransformArg == NULL)
{
printf("無法建立轉換方程!\n");
GDALClose((GDALDatasetH)pDTIn);
return -1;
}
//計算輸出影像範圍
int nWidth = 0;
int nHeight = 0;
double dOutTransform[6];
///hTransformArg:座標轉換關係
CPLErr eErr = GDALSuggestedWarpOutput((GDALDatasetH)pDTIn,
GDALGenImgProjTransform, hTransformArg,
dOutTransform, &nWidth, &nHeight);
/*if (eErr == CE_None)
{
GDALDestroyGenImgProjTransformer(hTransformArg);
return -1;
}*/
//建立輸出影像
GDALDataType eType = pDTIn->GetRasterBand(1)->GetRasterDataType();
int nBandCnt = pDTIn->GetRasterCount();
const char* format = "GTiff";
GDALDriver* pDriver = GetGDALDriverManager()->GetDriverByName(format);
GDALDataset* pDTReproj = (GDALDataset*)GDALCreate((GDALDriverH)pDriver,
pOut.c_str(), nWidth, nHeight, nBandCnt, eType, NULL);
if (pDTReproj == NULL)
{
printf("建立失敗: %s\n", pOut.c_str());
return -1;
}
pDTReproj->SetProjection(pszWKT);
pDTReproj->SetGeoTransform(dOutTransform);
//psWarpOptions set
GDALWarpOptions *psWarpOptions = GDALCreateWarpOptions();
psWarpOptions->hDstDS = pDTReproj;///輸出影象指標
psWarpOptions->hSrcDS = pDTIn;///原始影象指標
psWarpOptions->nBandCount = 0;///處理的波段資料,0為處理所有波段
psWarpOptions->eResampleAlg = GRA_Bilinear;///重取樣方式
psWarpOptions->panSrcBands = NULL;
psWarpOptions->panDstBands = NULL;
psWarpOptions->pfnProgress = GDALTermProgress;
psWarpOptions->pTransformerArg =
GDALCreateGenImgProjTransformer((GDALDatasetH)pDTIn,
GDALGetProjectionRef(pDTIn),
(GDALDatasetH)pDTReproj,
GDALGetProjectionRef(pDTReproj),
FALSE, 0.0, 1); //建立從原始到輸出結果的投影變換引數
psWarpOptions->pfnTransformer = GDALGenImgProjTransform; //座標變換函式指標
//真正的重投影
GDALWarpOperation oOperation;
oOperation.Initialize(psWarpOptions);
oOperation.ChunkAndWarpImage(0, 0, nWidth, nHeight);
//銷燬轉換
GDALDestroyGenImgProjTransformer(psWarpOptions->pTransformerArg);
GDALDestroyWarpOptions(psWarpOptions);
GDALClose(pDTIn);
GDALClose(pDTReproj);
return true;
}
相關推薦
影像座標重投影程式碼
原始碼如下,其中pInput為輸入影像路徑,pOut為輸出影像路徑,gcs為輸出影像的地理座標系 int DoReproject(string pInput, string pOut,string gcs) { GDALAllRegister();
java+gdal實現影像重投影
java+gdal實現影像重投影 java+gdal實現影像重投影 GDAL功能很強大,用來處理影像資料,今天我要做的是java程式碼寫的影像重投影,網上參考資料大都是c++和python寫的,也看了一些大牛寫的程式碼,最後寫出了java版的,eclipse寫的,直接引用一個gdal.jar
MRT(MODIS Reprojection Tool)安裝、影像批量拼接、重投影和格式轉換
一、安裝MRT(MODIS Reprojection Tool) 安裝準備:檢查是否安裝java.exe。Java版本至少為Java 2 Runtime Environment version 1.5或者是Java 2 SDK version 1.5或者更高的版本。在W
重置程式碼
/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain)*/ html, body, div, span, applet, object, iframe,h1, h2, h3, h4
互動投影程式碼邏輯(可單獨定製)
#include <windows.h> #include <iostream> using namespace std; #include "camerads.h" #include "strsafe.h" #include <highgui.
Flex AIR 重啟程式碼示例
重啟程式碼: var app:WindowedApplication = WindowedApplication(FlexGlobals.topLevelApplication); var mgr:ProductManager = new ProductManager("airappins
Python+OGR庫學習(四):重投影shp檔案並另存,屬性表保持不變
程式碼關鍵點 1、首先要定義好轉換引數 2、主要操作物件是要素,需要提前建立好輸出檔案,然後遍歷所有要素,對每一個幾何物件進行座標轉換 3、輸出檔案的欄位屬性定義需要從輸入檔案讀取 程式碼思路 1、匯入相關包,切換路徑,註冊驅動 2、定義轉換關係 3、開啟輸入檔案,讀取到圖層
OpenCV計算變換與重投影的矩陣說明
本篇部落格主要討論opencv中兩個函式中幾何變換(矩陣)的對應關係,以下函式介面摘自opencv-2.4.8官方文件 1.Finds an object pose from 3D-2D point correspondences. bool solve
前端開發CSS樣式重置程式碼,reset.css
自己找的一段樣式重置程式碼,方便自己開發使用,如有更好的歡迎在評論去給個連結 /* 清除內外邊距 */ body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 結構元素 */ dl, dt, dd
地理座標和投影座標 你必須知道的地理座標系和投影座標系
原 你必須知道的地理座標系和投影座標系 置頂 2017年03月24日 17:34:21 ConardLi 閱讀數:32428
什麼是柵格資料向量資料?加帶號直接重投影就可以了
柵格就是常見的圖片資料,比如JPG、tiff等等,而向量資料就是你再Arcgis裡面畫出來的點啊線啊那些資料 加帶號直接重投影就可以了。 地理處理-搜尋工具-投影 arcgis 預設你第一次新增
含有導航欄的視圖裡tableView的座標問題(swift程式碼理論和OC相通)
檢視程式碼如下,注意我兩個tableView設定的座標,和下面位置對比。 <span style="font-family:Arial;font-size:18px;">
實現手機重啟程式碼
private void reboot() { Context context = getActivity().getBaseContext(); Toast.ma
座標系統投影變換分帶方法
地球橢球體又稱“地球橢圓體”和“地球扁球體”。代表地球大小和形狀的數學曲面。以長半徑和扁率表示。因它十分迫近於橢球體,故通常以參考橢球體表示地球橢球體的形狀和大小。橢圓繞其短軸旋轉所成的形體,並近似於地球大地水準面。大地水準面的形狀即用相對於參考橢球體的偏離來表示。通常所說地球的形狀和大小,實際上就
SLAM | 雙目重投影誤差雅克比推導
1. 雙目重投影誤差項(給的是歸一化座標) //i時刻相機座標系下的map point座標 Eigen::Vector3d pts_camera_i = pts_i / inv_dep_i; //i時刻IMU座標系下的map point座標 Eig
Windows server 2003 IIS6.0虛擬主機下301重定向程式碼
當你準備好好看這篇文章的時候,你應該已經知道了301重定向的作用與意義了,那麼這裡就不多加解釋了。一、域名“domain.com”重定向到“www.domain.com”httpd.ini檔案配置的程式碼如下,放置位置:網站根目錄[ISAPI_Rewrite] CacheC
ArcGIS中註記層重投影問題的解決
問題描述: 1.因為註記層的特殊性,直接改變平面投影,當註記層座標系與工作空間座標系不一致時,會導致文字偏移,定位框不一致。 2.設定平面座標系後,再投影,直接導致註記層圖形丟失,僅保留了
地理座標和投影座標轉換程式,基於ArcGIS Engine
通常需要將經緯度座標與投影座標相互轉換,下面是一些原始碼,在ArcEngine中實現。 投影轉經緯度 private IPoint PRJtoGCS(double x, double y) { IPoint pPoint
sql去重和程式碼去重
最近做專案,兩張表都是百萬資料的表,其中一主一從,客戶要根據主表從從表中獲取一條有效資料,從表資料很多髒資料,開始用sql去重發現速度很慢,後來用程式碼去重了 列表查詢,一般就是幾十條資料,先查出主表id的集合,再根據主表的集合查所有從表資料,程式碼去重的關鍵是,查從表時
ArcGIS柵格影像怎麼從WGS84地理座標轉成Xian80投影座標
事情是這樣的,我下載了一個WGS84座標系的影像圖,需要載入到Xian80投影座標系下,所以需要對影像圖進行座標系的轉換 1、因為涉及到兩個參考橢球的問題,首先需要計算七引數,如何計算七引數,請參考我之前的一篇文章 https://www.cnblogs.com/yiliangmi/p/9897435.h