gdal座標變換(x,y變經緯度)

2021-07-14 05:03:04 字數 2166 閱讀 5838

最近因為一些原因需要讀取地理資料,我使用的工具是gdal,在處理資料的時候遇到一些小的問題,自己折騰了會兒,現在分享出來,避免大家浪費時間。

#include"gdal_priv.h"

#include "ogrsf_frmts.h"

#include"gdal.h"

#include"ogr_srs_api.h"

#include"ogr_spatialref.h"

#include"ogr_api.h"

#include"proj_api.h"

#include#includeint main()

過程1包括讀檔案,獲得影象和座標基本資訊,這裡假設影象為」test.tif」,按理說每一步操作都應該判斷是否成功,這裡為了使結構更簡單清晰,把這裡略去了。

/** 過程1 **/

gdaldataset *podataset;

gdalallregister();

podataset = (gdaldataset *)gdalopen("test.tif", ga_readonly);

/** projref將會儲存test.tif中的座標資訊 **/

const

char* projref = podataset->getprojectionref();

/** adfgeotransform儲存一些基準點的座標和每乙個pixel表示的長度等 **/

double adfgeotransform[6];

podataset->getgeotransform(adfgeotransform);

/** 下面獲得波段資訊 **/

gdalrasterband *poband;

poband = podataset->getrasterband(1);

int nxsize = poband->getxsize(),

nysize = poband->getysize();

這裡說明一下,adfgeotransform中(這裡簡稱gt),gt[0],gt[3]是做上角座標,gt[1],gt[5]是影象總向橫向解析度,就是每個畫素代表的長度,gt[2],gt[4]是旋轉相關,一般是0,不用管他。

所以,如果我們想知道右下角的座標,以橫座標為例,右邊和左邊相隔nxsize個畫素,所以相距nxsize*gt[1]的長度,所以橫座標自然是gt[0]+nxsize*gt[1]。我們得到右下角的座標x,y為

double x,y;

x = adfgeotransform[0] + nxsize * adfgeotransform[1];

y = adfgeotransform[3] + nysize * adfgeotransform[5];

我們想把x,y變成經緯度怎麼辦呢?下面就是過程2幹的事了

/** 過程2 **/

ogrspatialreference fref, tref;

char *tmp = null;

/** 獲得projref的乙份拷貝 **/

/** 由於projref是const char*,下面的乙個函式不接受,所以需要轉換成非const **/

tmp = (char *)malloc(strlen(projref) + 1);

strcpy_s(tmp, strlen(projref)+1, projref);

/** 設定原始的座標引數,和test.tif一致 **/

fref.importfromwkt(&tmp);

/** 設定轉換後的座標 **/

tref.setwellknowngeogcs("wgs84");

/** 下面進行座標轉換,到此為止都不需要proj,但是下面的內容如果不安裝proj將會無法編譯 **/

ogrcoordinatetransformation *coordtrans;

coordtrans = ogrcreatecoordinatetransformation(&fref, &tref);

coordtrans->transform(1, &x, &y);

/** 這時候x,y已經轉化為經緯度啦 **/

std::cout << x << '\t'

<< y << std::endl;

經緯度座標轉換

經緯度與xy座標轉換工具類 public class latlngxyzconverthelper xy轉經緯度 需要轉換的x座標 需要轉換的y座標 地圖級別 轉換後的經度 轉換後的緯度 public static void tiletolatlng double tile x,double til...

經緯度座標系轉東北天 經緯度座標系轉換

網際網路地圖的座標系現狀 地球座標 wgs84 國際標準,從 gps 裝置中取出的資料的座標系 國際地圖提供商使用的座標系 火星座標 gcj 02 也叫國測局座標系 中國標準,從國行移動裝置中定位獲取的座標資料使用這個座標系 國家規定 國內出版的各種地圖系統 包括電子形式 必須至少採用gcj 02對...

arcgis 經緯度轉大地座標 大地經緯度轉UTM

在日常gnss應用中,常需要應用到utm座標,而python提供了較為完備座標轉換工具,無需再去用arcgis了。首先貼出幾個帖子,值得一讀,其次,說一下要用到的工具,pyproj,其源於proj4庫 安裝 pip install pyproj 呼叫 import pyproj 再者,庫函式使用,先...