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

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

系統 5124 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條評論
主站蜘蛛池模板: 精品久久一区 | 欧美亚洲国产一区 | jizz欧洲| 欧美日韩北条麻妃一区二区 | 啪啪毛片 | 久草在在线 | 国产精品好好热在线观看 | 中文字幕亚洲一区二区v@在线 | 999久久免费高清热精品 | 欧美天天性影院 | 337p亚洲精品色噜噜狠狠 | 四虎最新免费网址 | 成人a毛片| 欧美日韩亚洲第一页 | 九操网| 五月婷久久 | 黄色小视频免费看 | 真人一级一级特黄高清毛片 | 精品国产免费久久久久久婷婷 | 成人日韩欧美 | 天天都色 | 91精品国产三级在线观看 | 久久久受www免费人成 | 午夜久久久精品 | 99爱视频免费高清在线观看 | 国产一区二区三区四区在线观看 | 日本不卡视频在线视频观看 | 夜夜骑天天操 | 国产精品视频第一区二区 | 天天骑夜夜操 | 欧美视频www | 日韩欧美一卡二区 | 日本欧美在线播放 | 色综合精品久久久久久久 | 亚洲精品久久久久午夜福 | 久热精品视频在线播放 | 国产日韩欧美亚洲综合在线 | 激情五月综合婷婷 | 精品午夜寂寞黄网站在线 | 亚洲国产另类久久久精品小说 | 美女黄频|