栅格区域人口分布数据获取及坐标系转换
前言
需要獲取的是目標柵格區域內的人口分布(密度)數據。本文從數據獲取,到處理方式上一步步詳細進行闡述,借助工具有:arcgis10.7,python3.7,matlabR2018b。
一、人口分布數據下載和格式轉換
資源環境科學與數據中心,網址: https://www.resdc.cn/Default.aspx
依次選擇左側的數據集(庫)目錄----->>社會經濟數據----->>中國人口空間分布公里網格數據集,如下圖:
下載數據需要注冊和登錄,拉到網頁最下端,有如下下載列表,選擇2019年數據進行下載。
下載下來的數據是.adf格式數據,需要轉tif,shp,或netcdf格式數據的同學,請參照https://blog.csdn.net/rqjabc/article/details/124771567
該數據為柵格數據類型,每個柵格代表該網格范圍(1平方公里)內的人口數,單位為人/平方公里,數據格式為gird,數據以Krassovsky橢球為基準,投影方式為Albers投影。
二、坐標系統轉換
所需要的是基于經緯度的地理坐標系,然而,現在拿到的數據是投影坐標系,具體是krasovsky_1940_Albers到GCS_WGS_1984 關于地理坐標系統和投影坐標系統想了解的可以查看https://blog.csdn.net/weixin_43465015/article/details/110875759,說白了,投影坐標系=地理坐標系+投影方法,兩種坐標系統的轉換使用arcgis工具來實現。
-
首先,需要定義投影(如果投影坐標系和要轉換的地理坐標系是同一個地理坐標系,則直接調至下一步),打開arcgis,系統工具箱------->>數據管理工具------->>投影和變換------->>創建自定義地理(坐標)變換。如下圖:
地理(坐標)變換名稱自己起,方便識別就行,輸入地理坐標系和輸出地理坐標系在右側的小手圖標打開,可通過搜索選擇。 -
其次,柵格投影,系統工具箱------->>數據管理工具------->>投影和變換------->>柵格------->>投影柵格,如下圖:
輸入柵格為需要轉換的數據,輸出數據集我這里選擇的默認地址,輸出坐標系和上面一樣,此時地理坐標變換會自動識別出上面我們定義的投影,確定后即可完成轉換。
三、數據解析和插值
我這里轉換為tif格式數據,以下為該格式數據解析的python代碼,需要gdal包的加持。
from osgeo import gdal import numpy as npdef read_data(data_path):dataset = gdal.Open(data_path) # 打開tifprojection = dataset.GetProjection() # 地理/投影坐標系im_geotrans = dataset.GetGeoTransform() # 獲取仿射矩陣,含有 6 個元素的元組# [左上角的x坐標, 像素寬度, 行旋轉(通常為零), 左上角的y坐標, 列旋轉(通常為零), 像素高度(北半球上圖像為負值)]。im_width = dataset.RasterXSize # 獲取寬度,數組第二維,左右方向元素長度,代表經度范圍im_height = dataset.RasterYSize # 獲取高度,數組第一維,上下方向元素長度,代表緯度范圍band = dataset.RasterCount # 波段數im_data = dataset.GetRasterBand(1).ReadAsArray(xoff=0, yoff=0, win_xsize=im_width, win_ysize=im_height) # 數據im_lon = [im_geotrans[0] + i * im_geotrans[1] for i in range(im_width)] # 經度列表im_lat = [im_geotrans[3] + i * im_geotrans[5] for i in range(im_height)] # 緯度列表return np.array(im_lon), np.array(im_lat), im_data由于想要更精細的數據,因此需要對數據進行插值處理,這里應用的是matlab中的interp2函數進行二維插值,matlab代碼如下:
[lon_data1, lat_data1] = meshgrid(lon_data, lat_data); [lon_u1, lat_u1] = meshgrid(lon_u, lat_u); inter_data= interp2(lon_data1, lat_data1, double(origin_data), lon_u1, lat_u1, 'spline'); %三次樣條插值 % 'linear' :雙線性插值算法(缺省算法); % 'nearest' :最臨近插值; % 'spline' :三次樣條插值; % 'cubic' :雙三次插值。 save('C:\Users\ADMIN\PycharmProjects\pythonProject\inter_data.mat', 'inter_data');END
參考資料
- https://blog.csdn.net/rqjabc/article/details/124771567
- https://blog.csdn.net/weixin_43465015/article/details/110875759
- https://blog.csdn.net/qq_33657870/article/details/103647090
- https://ww2.mathworks.cn/help/matlab/ref/interp2.html?s_tid=srchtitle_interp2_1
總結
以上是生活随笔為你收集整理的栅格区域人口分布数据获取及坐标系转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大二上期末总结
- 下一篇: 传说中的“群控”!云控群控、线控群控到底