MATLAB 讀寫ArcGIS *.shp檔案
阿新 • • 發佈:2020-09-15
shaperead
從shapefile讀取向量特性和屬性 S=shaperead(fileName); %讀取filename檔案中的資料及屬性,並將其儲存在結構體 S 中。
shapewrite
將地理向量資料結構寫入shapefile shapewrite(S,resultFileName); %將儲存在shapefile S中的向量地理特性寫入以shapefile格式的檔名指定的檔案。 案例程式碼如下:
for month=1:length(Month) Matrix=readtable(['./ControlMatrix/Matrix_PRD_2017_Base' Month{1,month} '_12.csv']); %按月讀取控制矩陣 for file=1:length(file_dir) % 迴圈讀取並計算所有檔案 shp=shaperead(['./emission/' file_dir(file).name '/final_' file_dir(file).name '.shp']);%讀取 *.shp 格式的清單檔案 nowRegi=''; nowPoll=''; for pollution=1:length(pollutionName) disp([Month{1,month} ' ' file_dir(file).name ' ' pollutionName{pollution} 'Complete']); eval(['species ={ shp.' pollutionName{pollution} '};']) % 讀取 *.shp 中對應汙染物的濃度資料 for point=1:length(regionFile{:,1}) % 遍歷所有網格點,並修正其網格數值 num=col*(regionFile{point,3}-1)+regionFile{point,2}; if ~strcmp(nowRegi,regionFile{point,1}) || ~strcmp(nowPoll,pollutionName{pollution}) nowRegi=regionFile{point,1}; nowPoll=pollutionName{pollution}; for i=1:length(factorFile{:,1}) if strcmp(factorFile{i,2},regionFile{point,1}) && strcmp(factorFile{i,3},pollutionName{pollution}) break end end end species{1,num}=species{1,num}*Matrix{1,i+1}; end for j=1:length(species) eval(['shp(j).' pollutionName{pollution} '= species{j};']) % 將修正過的網格化資料存入清單結構體 end end if exist(['./Result/' Month{1,month}],'dir')==0 % 判斷是否存在結果儲存目錄,若不存在則新建 mkdir(['./Result/' Month{1,month}]); end % 儲存修改後的清單檔案,儲存格式為 *.shp resultFileName=['./Result/' Month{1,month} '/final_' file_dir(file).name '.shp' ]; shapewrite(shp,resultFileName); end end
參考資料:
https://ww2.mathworks.cn/help/map/index.html?s_tid=srchtitle
https://ww2.mathworks.cn/help/map/ref/shaperead.html
https://ww2.mathworks.cn/help/map/ref/shapewrite.html