亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

基于Python+GDAL實現nc格式轉geotiff格式

系統 4635 0

基于Python+GDAL實現nc格式轉geotiff格式

        • 1. 目的
        • 2. 版本
        • 3. 基礎知識
          • ?3.1 什么是nc文件?
          • ?3.2 基于Python處理nc文件需要用到的庫
        • 4. 程序示例
        • 5. 問題
          • ? 5.1 影像分辨率的設置
        • 參考資料

1. 目的

(1)掌握基于Python處理nc格式文件的基本方法
(2)學會將程序函數化,提高程序可讀性【待補充】

2. 版本

(1)2019年6月20日; ? ?Version 1

3. 基礎知識

?3.1 什么是nc文件?

??NetCDF(network Common Data Form)網絡通用數據格式是由美國大學大氣研究協會(University Corporation for Atmospheric Research,UCAR)的Unidata項目科學家針對科學數據的特點開發的,是一種面向數組型并適于網絡共享的數據的描述和編碼標準。目前,NetCDF廣泛應用于大氣科學、水文、海洋學、環境模擬、地球物理等諸多領域。用戶可以借助多種方式方便地管理和操作NetCDF 數據集 [1] 。

?3.2 基于Python處理nc文件需要用到的庫

??基于Python處理nc數據必要的庫是 netCDF4 ,同時如果需要將nc文件轉換為tiff文件,還需要osgeo庫中的gdal子庫和osr子庫。

4. 程序示例

??以Python將nc格式的標準化降水蒸散發指數(SPEI)文件轉換為tif格式的文件為例,說明nc轉tif的python實現過程,SPEI數據下載自西班牙國家研究委員會(CSIC)下屬的SPEI下載網站 [2]

            
              
                '''
 1. 目的:基于Python將.nc文件轉換為.tif文件
 2. 山東青島  2019年6月20日
'''
              
              
                # 0. 模塊導入
              
              
                import
              
               numpy 
              
                as
              
               np

              
                import
              
               netCDF4 
              
                as
              
               Dataset

              
                from
              
               osgeo 
              
                import
              
               gdal
              
                ,
              
              osr


              
                # 1. 路徑處理和變量定義
              
              
RootDir 
              
                =
              
               r
              
                'F:\SPEI_NC'
              
              
SPEI_NC 
              
                =
              
               RootDir 
              
                +
              
              
                '\\spei12.nc'
              
              
                # 輸入文件
              
              
                # 1.1 輸出路徑-OutPath
              
              
OutPath 
              
                =
              
               RootDir 
              
                +
              
              
                '\\SPEI_TIF'
              
              
                if
              
               os
              
                .
              
              path
              
                .
              
              exists
              
                (
              
              OutPath
              
                )
              
              
                :
              
              
    shutil
              
                .
              
              rmtree
              
                (
              
              OutPath
              
                )
              
              
    os
              
                .
              
              mkdir
              
                (
              
              OutPath
              
                )
              
              
                else
              
              
                :
              
              
    os
              
                .
              
              mkdir
              
                (
              
              OutPath
              
                )
              
              
OutTif 
              
                =
              
               OutPath 
              
                +
              
              
                '\\Global_SPEI_Test.tif'
              
              
                # 2. NetCDF文件處理
              
              
NC_DS 
              
                =
              
               Dataset
              
                (
              
              SPEI_NC
              
                )
              
              
                print
              
              
                (
              
              NC_DS
              
                ,
              
              
                type
              
              
                (
              
              NC_DS
              
                )
              
              
                )
              
              
                # 了解NC_DS的數據類型,
                
              
              
                print
              
              
                (
              
              NC_DS
              
                .
              
              variables
              
                )
              
              
                # 了解變量的基本信息
              
              
                print
              
              
                (
              
              NC_DS
              
                .
              
              variables
              
                [
              
              
                'spei'
              
              
                ]
              
              
                )
              
              
                # 了解SPEI的基本信息
              
              
Lat 
              
                =
              
               NC_DS
              
                .
              
              variables
              
                [
              
              
                'lat'
              
              
                ]
              
              
                [
              
              
                :
              
              
                ]
              
              
Lon 
              
                =
              
               NC_DS
              
                .
              
              variables
              
                [
              
              
                'Lon'
              
              
                ]
              
              
                [
              
              
                :
              
              
                ]
              
              
SPEI 
              
                =
              
               NC_DS
              
                .
              
              variables
              
                [
              
              
                'spei'
              
              
                ]
              
              
                [
              
              
                13
              
              
                ,
              
              
                :
              
              
                ,
              
              
                :
              
              
                ]
              
              
                # 1901年1月的SPEI_12,注意SPEI的存儲形式決定了讀取方式
              
              
                print
              
              
                (
              
              
                type
              
              
                (
              
              SPEI
              
                )
              
              
                ,
              
              SPEI
              
                .
              
              shape
              
                )
              
              
                # 了解SPEI的數據類型,和維數
              
              
                # 2.1 異常值處理
              
              
SPEI 
              
                =
              
               np
              
                .
              
              asarray
              
                (
              
              SPEI
              
                )
              
              
                # 數據類型轉換
              
              
SPEI
              
                [
              
              np
              
                .
              
              where
              
                (
              
              SPEI 
              
                ==
              
              
                1.e+30
              
              
                )
              
              
                ]
              
              
                =
              
              
                -
              
              
                99
              
              
                # 3. 將數據寫出到.tif文件中
              
              
                # 3.1 影像的左上角和右下角坐標
              
              
LonMin
              
                ,
              
              LatMax
              
                ,
              
              LonMax
              
                ,
              
              LatMin 
              
                =
              
              
                [
              
              Lon
              
                .
              
              
                min
              
              
                (
              
              
                )
              
              
                ,
              
              Lat
              
                .
              
              
                max
              
              
                (
              
              
                )
              
              
                ,
              
              Lon
              
                .
              
              
                max
              
              
                (
              
              
                )
              
              
                ,
              
              Lat
              
                .
              
              
                min
              
              
                (
              
              
                )
              
              
                ]
              
              
                # 3.2 影像的分辨率,此處float(N_Lon)-1是為了保證分辨率為0.5 degree,不知是否合理,望指正
              
              
N_Lat 
              
                =
              
              
                len
              
              
                (
              
              Lat
              
                )
              
               
N_Lon 
              
                =
              
              
                len
              
              
                (
              
              Lon
              
                )
              
              
Lon_Res 
              
                =
              
              
                (
              
              LonMax 
              
                -
              
               LonMin
              
                )
              
              
                /
              
              
                (
              
              
                float
              
              
                (
              
              N_Lon
              
                )
              
              
                -
              
              
                1
              
              
                )
              
              
Lat_Res 
              
                =
              
              
                (
              
              LatMax 
              
                -
              
               LatMin
              
                )
              
              
                /
              
              
                (
              
              
                float
              
              
                (
              
              N_Lat
              
                )
              
              
                -
              
              
                1
              
              
                )
              
              
                # 3.3 構建.tiff文件框架
              
              
spei_ds 
              
                =
              
               gdal
              
                .
              
              GetDriverByName
              
                (
              
              
                'Gtiff'
              
              
                )
              
              
                .
              
              Create
              
                (
              
              OutTif
              
                ,
              
              N_Lon
              
                ,
              
              N_Lat
              
                ,
              
              
                1
              
              
                ,
              
              gdal
              
                .
              
              GDT_Float32
              
                )
              
              
                # 3.4 設置影像的顯示范圍
              
              
geotransform 
              
                =
              
              
                (
              
              LonMin
              
                ,
              
              Lon_Res
              
                ,
              
              
                0
              
              
                ,
              
               LatMin
              
                ,
              
              
                0
              
              
                ,
              
               Lat_Res
              
                )
              
              
spei_ds
              
                .
              
              SetGeoTransform
              
                (
              
              geotransform
              
                )
              
              
                # 3.5 地理坐標系統信息
              
              
srs 
              
                =
              
               osr
              
                .
              
              SpatialReference
              
                (
              
              
                )
              
              
                #獲取地理坐標系統信息,用于選取需要的地理坐標系統
              
              
                print
              
              
                (
              
              
                type
              
              
                (
              
              srs
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              srs
              
                )
              
              
srs
              
                .
              
              ImportFromEPSG
              
                (
              
              
                4326
              
              
                )
              
              
                # 定義輸出的坐標系為"WGS 84",AUTHORITY["EPSG","4326"]
              
              
spei_ds
              
                .
              
              SetProjection
              
                (
              
              srs
              
                .
              
              ExportToWkt
              
                (
              
              
                )
              
              
                )
              
              
                # 給新建圖層賦予投影信息
              
              
                # 3.6 數據寫出
              
              
spei_ds
              
                .
              
              GetRasterBand
              
                (
              
              
                1
              
              
                )
              
              
                .
              
              WriteArray
              
                (
              
              SPEI
              
                )
              
              
                # 將數據寫入內存,此時沒有寫入硬盤
              
              
spei_ds
              
                .
              
              FlushCache
              
                (
              
              
                )
              
              
                # 將數據寫入硬盤
              
              
spei_ds 
              
                =
              
              
                None
              
              
                # 關閉spei_ds指針,注意必須關閉
              
              
                print
              
              
                (
              
              
                'Finished'
              
              
                )
              
            
          

5. 問題

? 5.1 影像分辨率的設置
            
              
                # 3.2 影像的分辨率,此處float(N_Lon)-1是為了保證分辨率為0.5 degree,不知是否合理,望指正
              
              
N_Lat 
              
                =
              
              
                len
              
              
                (
              
              Lat
              
                )
              
               
N_Lon 
              
                =
              
              
                len
              
              
                (
              
              Lon
              
                )
              
              
Lon_Res 
              
                =
              
              
                (
              
              LonMax 
              
                -
              
               LonMin
              
                )
              
              
                /
              
              
                (
              
              
                float
              
              
                (
              
              N_Lon
              
                )
              
              
                -
              
              
                1
              
              
                )
              
              
Lat_Res 
              
                =
              
              
                (
              
              LatMax 
              
                -
              
               LatMin
              
                )
              
              
                /
              
              
                (
              
              
                float
              
              
                (
              
              N_Lat
              
                )
              
              
                -
              
              
                1
              
              
                )
              
            
          

參考資料

[1] : netCDF百度百科
[2] : MATLAB中利用ncread函數讀取nc文件


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品欧美亚洲韩国日本不卡 | 亚洲成人综合网站 | 变态 调教 视频 国产九色 | 免费在线一级片 | 亚洲欧美精品综合中文字幕 | 国产在线五月综合婷婷 | 国产精品自线在线播放 | 国产精品视频麻豆 | 久久亚洲国产中v天仙www | 亚洲性激情 | 欧美成人aaaaa免费视频 | 欧美午夜性刺激在线观看免费 | 国产欧美一区二区三区久久 | 印度老妇bbwfreexxx | 91福利精品老师国产自产在线 | 亚洲精品色一区色二区色三区 | 女人zzzooooxxxx| 亚洲你懂的 | 中文字幕一区二区三区四区 | 99ri精品视频在线观看播放 | 日韩欧美亚洲国产精品字幕久久久 | 欧美九九 | 成人精品视频在线 | 天天干天天噜 | 欧美毛片免费看 | 免费区一级欧美毛片 | 欧美一级日韩 | 夜夜骑夜夜操 | 亚洲va欧美va | 四虎永久在线精品国产 | 欧美区亚洲区 | www.中文字幕| 久久免费成人 | 欧美孕妇乱大交xxxxx | 免费看成人毛片日本久久 | 欧美成年黄网站色视频 | 狠狠色狠色综合曰曰 | 欧美日韩国产欧美 | 99国产精品久久久久久久... | 欧美另类网 | 日本黄页网址 |