(二)GDAL開發&與esri的wkt

  • 問題來源

最近在使用gdal來處理一些遙感數據,其中我的數據是一個波段的tif高程影像數據。然後在程序中需要判斷當然影像數據的投影是否符合要求。我們都知道,如何使用某一個座標系需要一個約定,而這個公認的,爲大家所知wkt算是一個之一。關於wkt,其爲空間參考文字描述。我們最爲知曉的應該就是編號id爲4326和3957這個了。前者爲WGS84的空間參考,而3857爲一種墨卡託投影參考。而我這裏使用的ArcGIS Desktop將我們CGCS2000的橢球座標定義爲WGS84橢球座標(在精度要求不是非常嚴格的情況下,可視這兩種橢球座標相當)。

  • 過程處理

於是在ArcGIS Desktop中將上面的數據按照如下圖的定義。注意其中的WKT爲3857。

接下來就是使用GDAL將投影信息給讀取出來了。代碼實現非常簡單。

const char* projection_wkt = dataset->GetProjectionRef();
if(projection_wkt == NULL){
       
        return false;
}

獲取到的projextion_wkt的字符信息爲:

PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],
PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],
PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],
EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext  +no_defs"]]

從這裏可以看得出,ArcGIS Desktop聲明瞭WGS_1984_Web_Mercator_Auxiliary_Sphere橢球,地理座標橢球爲GCS_WGS_1984,橢球信息SPHEROID長半軸爲:6378137.0,短半軸爲:298.257223563,起始子午線爲格林尼治經線。單位爲米。

好了我們現在使用GDAL的OGRSpatialReference類來創建一個參考信息。

	char    *EPSGID_WKT = NULL;
	OGRSpatialReference   myespEPSGIDosr;
	myespEPSGIDosr.importFromEPSG((int)3857);

	myespEPSGIDosr.exportToWkt(&EPSGID_WKT);

來看一下EPSGID_WKT帶給我們什麼樣的信息。

PROJCS["WGS 84 / Pseudo-Mercator",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext  +no_defs"],AUTHORITY["EPSG","3857"]]

顯然,同樣這裏的WKT是3857,但輸出的字符信息包含卻是完全不同。主要區別是橢球的標記一個是GCS_WGS_1984,另外一個是WGS_1984。

即便GDAL提供從esri投影轉換相關函數。比如說morphToESRI、和morphFromESRI但是,最後的wkt描述字符串還是不完全一致。我這裏爲了判定兩個座標參考是否相等,只能通過其他邏輯來判定了。


                             更多內容,請微信掃下面二維碼關注公衆號,或者加入arcpy開發qq學習羣:487352121

                                                                    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章