<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      GDAL 2.X升級(jí)3.X需要注意的問(wèn)題總結(jié)

      1 引言

      最近終于將使用的GDAL 2.X升級(jí)到成了3.X版本,總結(jié)一下遇到的各種問(wèn)題。

      2 詳論

      2.1 數(shù)據(jù)路徑

      GDAL 3.X以后深度依賴PROJ庫(kù),以前只是可選構(gòu)建項(xiàng),現(xiàn)在已經(jīng)是必須構(gòu)建項(xiàng)了。最直接的體現(xiàn)是如果涉及到空間參考相關(guān)的內(nèi)容時(shí),除了要配置GDAL_DATA環(huán)境變量,還必須配置PROJ_DATA環(huán)境變量。GDAL_DATA和PROJ_DATA分別是GDAL和PROJ庫(kù)的數(shù)據(jù),里面存儲(chǔ)了一些空間參考相關(guān)的參數(shù),因此一般在使用GDAL之前,需要配置一下相關(guān)的路徑:

      string gdalDir = shareDataDir + string("/gdal");
      CPLSetConfigOption("GDAL_DATA", gdalDir.c_str());
      
      std::string projDir = shareDataDir + string("/proj");
      CPLSetConfigOption("PROJ_DATA", projDir.c_str());
      

      這些數(shù)據(jù)一般在構(gòu)建的時(shí)候會(huì)安裝到指定的目錄的share文件夾內(nèi),如下圖所示:

      GDAL數(shù)據(jù)和PROJ數(shù)據(jù)

      注意以下幾點(diǎn):

      1. 經(jīng)過(guò)筆者的測(cè)試,一般設(shè)置PROJ_DATA目錄就可以了。但是有的資料顯示還必須繼續(xù)設(shè)置GDAL_DATA目錄。因?yàn)镚DAL_DATA目錄中可能保存的不僅僅是空間參考信息,可能保存了很多GIS相關(guān)的數(shù)據(jù)。
      2. 另外,很多資料推薦直接設(shè)置操作系統(tǒng)的環(huán)境變量。這樣做不是不行,前提是與操作系統(tǒng)的其他GDAL環(huán)境不沖突。如果你安裝過(guò)QGIS或者PostGIS等環(huán)境就知道,這些程序也會(huì)在操作系統(tǒng)中設(shè)置GDAL_DATA、PROJ_DATA環(huán)境變量,那么就只能像筆者這樣在程序中配置。
      3. 在PROJ 9.1版本以前,PROJ數(shù)據(jù)的環(huán)境變量名為PROJ_LIB;在后續(xù)版本中優(yōu)先使用PROJ_DATA,PROJ_LIB還會(huì)使用一段時(shí)間,但是最好替換成PROJ_DATA,避免后續(xù)的版本廢棄。

      2.2 坐標(biāo)順序

      GDAL升級(jí)到3.X后另外一個(gè)問(wèn)題就是坐標(biāo)順序的問(wèn)題。例如如果要進(jìn)行空間參考坐標(biāo)轉(zhuǎn)換:

      // CGCS2000
      gcs.importFromEPSG(4326);
      
      // Tm投影
      pcs.importFromEPSG(3857);
      
      OGRCoordinateTransformation* lonLat2XY =
          OGRCreateCoordinateTransformation(&gcs, &pcs);
      OGRCoordinateTransformation* xy2LonLat =
          OGRCreateCoordinateTransformation(&pcs, &gcs);
      if (!lonLat2XY || !xy2LonLat) {
      return 1;
      }
      
      double x = 113.6;
      double y = 38.8;
      printf("經(jīng)緯度坐標(biāo):%.9lf\t%.9lf\n", x, y);
      if (!lonLat2XY->Transform(1, &x, &y)) {
      return 1;
      }
      printf("平面坐標(biāo):%.9lf\t%.9lf\n", x, y);
      
      if (!xy2LonLat->Transform(1, &x, &y)) {
      return 1;
      }
      printf("再次轉(zhuǎn)換回的經(jīng)緯度坐標(biāo):%.9lf\t%.9lf\n", x, y);
      
      OGRCoordinateTransformation::DestroyCT(lonLat2XY);
      lonLat2XY = nullptr;
      OGRCoordinateTransformation::DestroyCT(xy2LonLat);
      xy2LonLat = nullptr;
      

      這段代碼在3.X的結(jié)果就不正確。原因是GDAL 3.X更換了坐標(biāo)軸的順序,認(rèn)為y在前,x在后才是更加專業(yè)的坐標(biāo)表達(dá)。不過(guò)這樣就破壞了向后兼容性。解決方案是給空間參考設(shè)置軸策略為傳統(tǒng)順序[1]

      // CGCS2000
      gcs.importFromEPSG(4326);
      
      // Tm投影
      pcs.importFromEPSG(3857);
      
      gcs.SetAxisMappingStrategy(OAMS_TRADITIONAL_GIS_ORDER);
      pcs.SetAxisMappingStrategy(OAMS_TRADITIONAL_GIS_ORDER);
      
      //...
      

      想這樣一個(gè)一個(gè)坐標(biāo)參考修改很麻煩,另一個(gè)更加合適的辦法是設(shè)置全局的坐標(biāo)軸策略為傳統(tǒng)順序[2]

      // 設(shè)置全局坐標(biāo)順序?yàn)閭鹘y(tǒng)GIS順序(經(jīng)度,緯度)
      CPLSetConfigOption("OGR_CT_FORCE_TRADITIONAL_GIS_ORDER", "YES");
      

      3 總結(jié)

      最好的辦法就是在程序的最開(kāi)始階段執(zhí)行一個(gè)初始化函數(shù):

      void Init(const char *shareDataDir) { 
      
        GDALAllRegister();  //注冊(cè)所有的格式
        CPLSetConfigOption("SHAPE_ENCODING", "");  //解決中文亂碼問(wèn)題
      
        string gdalDir = shareDataDir + string("/gdal");
        CPLSetConfigOption("GDAL_DATA", gdalDir.c_str());
      
        std::string projDir = shareDataDir + string("/proj");
        CPLSetConfigOption("PROJ_DATA", projDir.c_str());
      
        // 設(shè)置全局坐標(biāo)順序?yàn)閭鹘y(tǒng)GIS順序(經(jīng)度,緯度)
        CPLSetConfigOption("OGR_CT_FORCE_TRADITIONAL_GIS_ORDER", "YES");
      }
      

      1. GDAL 3.0 Coordinate transformation (backwards compatibility (?)) ??

      2. Problem with GDAL >= 3.0 ??

      posted @ 2025-06-05 12:58  charlee44  閱讀(187)  評(píng)論(1)    收藏  舉報(bào)
      主站蜘蛛池模板: 欧美黑人大战白嫩在线| 亚洲精品人妻中文字幕| 亚洲综合网中文字幕在线| 亚洲成a人片在线观看中文| 人妻中文字幕不卡精品| 最新国产精品好看的精品| 国产成人8X人网站视频| 中文字幕免费不卡二区| 丰满老熟妇好大bbbbb| 黄色免费在线网址| 亚洲中文字幕人妻系列| 亚洲一区二区三区在线观看播放| 国语精品国内自产视频| av在线播放国产一区| 汝城县| 搡老熟女老女人一区二区 | 天天爽夜夜爱| 97久久超碰国产精品2021| 久久天天躁狠狠躁夜夜avapp| 日韩人妻系列无码专区| 桃花岛亚洲成在人线AV| 亚洲热视频这里只有精品| 99久久精品美女高潮喷水| 99久久亚洲综合精品成人| 精品人妻中文字幕av| 汨罗市| 亚洲一区二区三区人妻天堂| 伊人色综合一区二区三区影院视频| 日本精品不卡一二三区| 国产精品成人网址在线观看| 日韩秘 无码一区二区三区| 亚洲国产精品毛片在线看| 国产成人无码免费视频麻豆| 无套内谢少妇毛片aaaa片免费 | 无码AV中文字幕久久专区| 国产伦一区二区三区久久| 美女内射无套日韩免费播放| 亚洲精品日本久久久中文字幕| 色偷偷久久一区二区三区| 亚洲精品乱码久久久久久蜜桃| 91亚洲精品一区二区三区|