日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

用MATLAB 读写各种文件 ∈ Matlab 使用笔记

發(fā)布時(shí)間:2023/12/9 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用MATLAB 读写各种文件 ∈ Matlab 使用笔记 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

主博客:https://blog.csdn.net/Gou_Hailong/article/details/106092705

【日志】
2020/6/15
早就想開這個(gè)博客了,一直沒有用到 Matlab 讀文件,這不最近要用 Matlab 讀取 txt 文件,就先把這部分介紹一下。
2020/8/19
加了讀文本文件的例子,將文章結(jié)構(gòu)優(yōu)化了一下,加了讀取圖片的方法。
2020/8/20
加了寫圖片文件,nc,excle。
2020/10/29
加入了一個(gè)讀寫geotiff的例子。
2020/11/1
加了一個(gè)txt存文件名,之后讀txt的例子。

一、讀寫文本文件

以 txt 為例

1.讀

常用的主要有以下幾種方法:

1.load /*1.該函數(shù)只能加載僅含有數(shù)字的文本文件,如果文檔中夾雜著字母或者文字,就會(huì)報(bào)錯(cuò)。 2.支持的分割符有 “,”、“,”、“ ”、“ ”... 3.每行列數(shù)必須相等 4.Data 是一個(gè)矩陣*/ Data = load("filename.txt");2.importdata /*1.既可以讀取數(shù)據(jù)又可以讀取字符: Data.data矩陣?yán)锎娣诺氖羌償?shù)字, Data.textdata矩陣?yán)锸且晕谋拘问酱娣诺乃袛?shù)據(jù)。 2.支持的分割符有 “ ”、“ ”... 3.個(gè)人感覺不太好用*/ Data = importdata("filename.txt");3.textread /*它的基本語(yǔ)法是: [A,B,C,...] = textread(filename,format) [A,B,C,...] = textread(filename,format,N) 其中filename就是文件名, format就是要讀取的格式,A,B,C就是從文件中讀取到的數(shù)據(jù)。 中括號(hào)里面變量的個(gè)數(shù)必須和format中定義的個(gè)數(shù)相同。 如果每N行相同格式的數(shù)據(jù),可采用[A,B,C,...] = textread(filename,format,N)的語(yǔ)法,讀取N次。 詳細(xì)介紹如下博客鏈接*/textread(filename,'%s%f-%f-%f%f:%f%f',... %文件名用' ' ,格式 'headerlines',1,... %忽略前1'delimiter' ,';'); %分隔符為;

textread用法示例:https://blog.csdn.net/jisuanjiguoba/article/details/79997805


補(bǔ)于2021-03-14
下面是一個(gè)函數(shù),用來(lái)讀取空格分割的文本文件,將數(shù)據(jù)存到元胞數(shù)組中,但是太耗時(shí),廢棄不用,還是textread香啊!

function Data=Txt2Cell(filename) fid=fopen(filename,'r'); Data=cell(0); while ~feof(fid)line = fgetl(fid);if line(1)~='%'Data=[Data;strsplit(line)];end end fclose(fid); end ---------------------------------------- [gW,sec,prn,AZ,El,SNR,MP]=textread(filename,'%d%f%s%f%f%f%f',...'headerlines',1,...'delimiter' ,' ');

2.寫

將數(shù)據(jù)寫入 txt 需要用到 fopen、fprintf 函數(shù),這就有點(diǎn)像C、C#了。

FID = fopen(FILENAME,PERMISSION) /*FID 獲取到的文件句柄 FILENAME 文件名 PERMISSION 打開方式*/fprintf(fid,format,A) /*fid為文件句柄,指定要寫入數(shù)據(jù)的文件, format是用來(lái)控制所寫數(shù)據(jù)格式的格式符,與fscanf函數(shù)相同, A是用來(lái)存放數(shù)據(jù)的矩陣。*/help('fopen') help('fprintf') doc fopen doc fprintf /*上面介紹的比較簡(jiǎn)單 更詳細(xì)的介紹可以通過(guò)這些命令查看*/

3.例子

例子1:這個(gè)例子是讀寫文本文件里邊存著數(shù)據(jù)的那類。
先寫一下:

clear; clc; r=1:1:10; results=[r;pi*r.^2]; fid=fopen('draft.txt','w'); %以寫的方式打開/新建一個(gè)txt, fprintf(fid,'%7s %9s\r\n','Radius','Area'); %右對(duì)齊占位7,前不夠補(bǔ)空格 fprintf(fid,'%3d %11.4f\r\n',results); %占位11,小數(shù)點(diǎn)后4位,前不夠補(bǔ)空格 results=results'; fprintf(fid,'\n'); fprintf(fid,'%3d %11.4f\r\n',results); fclose(fid);


這個(gè)例子說(shuō)明了:matlab 寫文件是按照列來(lái)存取數(shù)據(jù)的,為了后續(xù)讀,把后面幾行刪了


讀:

[R,Area]= textread('draft.txt','%3d %11.4f',... %文件名用' ' ,格式 'headerlines',1,... %忽略前1'delimiter' ,' '); %分隔符為; type draft.txt %在命令窗口查看txt

這步得到倆列向量。


例子2:有時(shí)候由于批量操作某些文件,但是文件名字規(guī)律性不是很強(qiáng),所以就需要將文件名字存到一個(gè)文本文檔里邊,然后讀這個(gè)文件來(lái)獲得文件名,這個(gè)例子是針對(duì)這種類型的。

soupath='D:\matlab\mat\CHLA\sorce\'; %source year=[2010 2005 2020 2015];% soufilename=[soupath,'filename.txt']; filename=textread(soufilename,'%s'); %將txt中的數(shù)據(jù)搞成元胞filename count=-1; for i=yearcount=count+1;for j=1:3str1=char(filename(count*4+j)); %注意這行,是將元胞轉(zhuǎn)化為字符串。soufile=[soupath,str1,'.mat'];disp(soufile);end end

結(jié)果如下:

D:\matlab\mat\CHLA\sorce\chla_201001.mat D:\matlab\mat\CHLA\sorce\chla_201002.mat D:\matlab\mat\CHLA\sorce\chla_201003.mat D:\matlab\mat\CHLA\sorce\chla_201501.mat D:\matlab\mat\CHLA\sorce\chla_201502.mat D:\matlab\mat\CHLA\sorce\chla_201503.mat D:\matlab\mat\CHLA\sorce\chla_202001.mat D:\matlab\mat\CHLA\sorce\chla_202002.mat D:\matlab\mat\CHLA\sorce\chla_202003.mat D:\matlab\mat\CHLA\sorce\chla_202501.mat D:\matlab\mat\CHLA\sorce\chla_202502.mat D:\matlab\mat\CHLA\sorce\chla_202503.mat

二、讀寫圖片

Matlab用來(lái)讀取圖像的函數(shù)是imread(),顧名思義image read,同樣的道理寫圖片的函數(shù)是imwrite();


圖片的格式有(我去,竟然有那么多種圖片格式,看來(lái)我是孤陋寡聞了)見于百度百科。常見的幾種有:jpg, bmp, gif, tif, png等,其中幾種簡(jiǎn)介如下:

格式簡(jiǎn)介
BMP格式Windows系統(tǒng)下的標(biāo)準(zhǔn)位圖格式,未經(jīng)過(guò)壓縮,一般圖像文件會(huì)比較大。在很多軟件中被廣泛應(yīng)用.
JPEG格式也是應(yīng)用最廣泛的圖片格式之一,它采用一種特殊的有損壓縮算法,將不易被人眼察覺的圖像顏色刪除,從而達(dá)到較大的壓縮比(可達(dá)到2:1甚至40:1),因?yàn)镴PEG格式的文件尺寸較小,下載速度快,所以是互聯(lián)網(wǎng)上最廣泛使用的格式!
GIF格式最大的特點(diǎn)是不僅可以是一張靜止的圖片,也可以是動(dòng)畫,并且支持透明背景圖像,適用于多種操作系統(tǒng),“體型”很小,網(wǎng)上很多小動(dòng)畫都是GIF格式。但是其色域不太廣,只支持256種顏色.
PSD格式Photoshop的專用圖像格式,可以保存圖片的完整信息,土層,通道,文字都可以被保存,圖像文件一般較大。
PNG格式與JPG格式類似,網(wǎng)頁(yè)中有很多圖片都是這種格式,壓縮比高于GIF,支持圖像透明,可以利用Alpha通道調(diào)節(jié)圖像的透明度,是網(wǎng)頁(yè)三劍客之一Fireworks的源文件。
TIFF格式它的特點(diǎn)是圖像格式復(fù)雜、存貯信息多,在Mac中廣泛使用的圖像格式,正因?yàn)樗鎯?chǔ)的圖像細(xì)微層次的信息非常多,圖像的質(zhì)量也得以提高,故而非常有利于原稿的復(fù)制。很多地方將TIFF格式用于印刷.
TGA格式TGA的結(jié)構(gòu)比較簡(jiǎn)單,屬于一種圖形、圖像數(shù)據(jù)的通用格式,在多媒體領(lǐng)域有著很大影響,在做影視編輯時(shí)經(jīng)常使用,例如3DS MAX輸出TGA圖片序列導(dǎo)入到AE里面進(jìn)行后期編輯。
EPS格式蘋果Mac機(jī)的用戶則用得較多。它是用PostScript語(yǔ)言描述的一種ASCII碼文件格式,主要用于排版、打印等輸出工作。

1.讀

Photo=imread(photofilenme);%讀的話,這一行就搞定了 Tif=imread('1.tiff'); %例子

下面介紹一下我做的實(shí)驗(yàn):

  • 我先用畫圖 3D 搞了幾種格式(tif, jpg, bmp, png)的圖片,圖片內(nèi)容都是下圖:
    然后,用 imread() 讀取圖片,都得到了91x317x3 uint8這樣一個(gè)三維矩陣,之后又用 imshow() 顯示圖片,看到結(jié)果都是一樣的。但是,得到的三維矩陣并不是完全相同的,我覺得可能是圖片壓縮方式不同導(dǎo)致的。至于為啥是三維的,很容易猜到,91x317x3對(duì)應(yīng)行x列x頁(yè),即寬x長(zhǎng)xRGB
  • 從網(wǎng)上找了個(gè) gif, 看看這個(gè)gif一共有71幀,用 imread() 讀取圖片,得到了298x395x1x71這樣一個(gè)四維矩陣,之后又用 imshow() 顯示圖片,Info=imfinfo('1.gif'); 可查詢圖片信息。為啥第三維不是RGB呢?我曉得了,先看一下Info:前面是一大堆其他信息,包括路徑,時(shí)間等等。后面這有兩列,一個(gè)是位深,一個(gè)是colortable,25=322^5=3225=32,想必你已經(jīng)會(huì)了吧。顯示第一幀的代碼如下:
Gif=imread('1.gif');%將gif搞到一個(gè)四維矩陣中 Info=imfinfo('1.gif');%圖片信息。 mat=Gif(:,:,:,1);%第一幀,這時(shí)是二維的 colortable=Info(1).ColorTable;%由于是5位,所以是32x3 bit=size(colortable,1); [a,b]=size(mat); Rimg=zeros(a,b); Gimg=zeros(a,b); Bimg=zeros(a,b); for i=0:bit-1j=i+1;%由于mat是從0-31, so...Rimg(mat==i)=colortable(j,1);%找到mat中等于i的元素位置,然后Rimg相應(yīng)位置填充元素colortable(j,1)Gimg(mat==i)=colortable(j,2);Bimg(mat==i)=colortable(j,3); end img=cat(3,Rimg,Gimg,Bimg);%將三個(gè)二維矩陣合成一個(gè)三維矩陣 imshow(img);

  • 總之,imread()非常之強(qiáng)大!!

總結(jié):

mat=imread(filepath);%將圖片讀到矩陣mat中 Info=imfinfo(filepath);%查看圖片信息。 imshow(mat);%顯示圖片 img=cat(3,Rimg,Gimg,Bimg);%將三個(gè)二維矩陣合成一個(gè)三維矩陣 Rimg(mat==i)=colortable(j,1);%找到mat中等于i的元素位置,然后Rimg相應(yīng)位置填充元素colortable(j,1)

這里提供一個(gè)小函數(shù),用來(lái)根據(jù)二維矩陣(整數(shù))和colortable 來(lái)畫圖。

function showgif(mat,colortable) bit=size(colortable,1); [a,b]=size(mat); Rimg=zeros(a,b); Gimg=zeros(a,b); Bimg=zeros(a,b); for i=0:bit-1j=i+1;%由于mat是從0-31, so...Rimg(mat==i)=colortable(j,1);%找到mat中等于i的元素位置,然后Rimg相應(yīng)位置填充元素colortable(j,1)Gimg(mat==i)=colortable(j,2);Bimg(mat==i)=colortable(j,3); end img=cat(3,Rimg,Gimg,Bimg);%將三個(gè)二維矩陣合成一個(gè)三維矩陣 imshow(img); end

如果要讀的tif有好幾頁(yè)圖片,可用

Image=zeros(Height,Width,Slice); for i=1:SliceImage(:,:,i)=imread(filepath,i); %%一層一層的讀入圖像 end

更多顯示圖片的方法:https://blog.csdn.net/Gou_Hailong/article/details/107619919

2.寫

1.寫簡(jiǎn)單tif, png, jpg, bmp

imwrite(Tif,[num2str(1,'%04d'),'.tif']); imwrite(Tif,[num2str(1,'%04d'),'.png']); imwrite(Tif,[num2str(1,'%04d'),'.jpg']); imwrite(Tif,[num2str(1,'%04d'),'.bmp']);

2.寫gif,這里提供一個(gè)例子(來(lái)源于百度經(jīng)驗(yàn))

clear;clc; figure %新建一張圖 axis([0 5 0 2])%定義x軸(從05)和y軸的范圍(從02for i=1:4if i==1text(i,1,'百','fontsize',40,'color','red');%i=1時(shí),寫一個(gè)‘百’字endif i==2text(i,1,'度','fontsize',40,'color','green');%i=2時(shí),寫一個(gè)‘度’字endif i==3text(i,1,'經(jīng)','fontsize',40,'color','blue'); %i=3時(shí),寫一個(gè)‘經(jīng)’字endif i==4text(i,1,'驗(yàn)','fontsize',40,'color','black');%i=4時(shí),寫一個(gè)‘驗(yàn)’字end picname=[num2str(i) '.fig'];%保存的文件名:如i=1時(shí),picname=1.figaxis off;hold on % 寫后面的字時(shí),不把前面的字沖掉saveas(gcf,picname) %保存下中間結(jié)果, end stepall=4; for i=1:stepallpicname=[num2str(i) '.fig'];open(picname) % set(gcf,'outerposition',get(0,'screensize'));% matlab窗口最大化frame=getframe(gcf); im=frame2im(frame);%制作gif文件,圖像必須是index索引圖像 [I,map]=rgb2ind(im,20); if i==1imwrite(I,map,'baidujingyan.gif','gif', 'Loopcount',inf,'DelayTime',0.5);%第一次必須創(chuàng)建!elseif i==stepallimwrite(I,map,'baidujingyan.gif','gif','WriteMode','append','DelayTime',0.5);elseimwrite(I,map,'baidujingyan.gif','gif','WriteMode','append','DelayTime',0.5);end close alldelete(picname); end


3.讀寫多維tif,可參考博客:

https://blog.csdn.net/u013921430/article/details/79283305

為了方便看,這里copy 一下:
灰度tiff讀寫代碼

clear all clc;filepath='test.tif'; %%圖像名稱與路徑 Info=imfinfo(filepath); %%獲取圖片信息并判斷是否為tiftif='tif'; format=Info.Format; if (strcmp(format ,tif)==0)disp('載入的不是tif圖像,請(qǐng)確認(rèn)載入的數(shù)據(jù)'); %%確保載入的圖像是tiff圖像 endSlice=size(Info,1); %%獲取圖片z向幀數(shù) Width=Info.Width; Height=Info.Height;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Image=zeros(Height,Width,Slice);for i=1:SliceImage(:,:,i)=imread(filepath,i); %%一層一層的讀入圖像 end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=1:SliceJ=uint8(Image(:,:,i)); %%一層一層寫出圖像 %%imwrite(J,[num2str(i,'%4d'),'.tif'],'WriteMode','Append');imwrite(J,[num2str(i,'%04d'),'.tif']); end

彩色tiff圖像讀寫代碼:

clear all clc;filepath='test.tif'; %%圖像名稱與路徑 Info=imfinfo(filepath); %%獲取圖片信息并判斷是否為tiftif='tif'; format=Info.Format; if (strcmp(format ,tif)==0)disp('載入的不是tif圖像,請(qǐng)確認(rèn)載入的數(shù)據(jù)'); %%確保載入的圖像是tiff圖像 end Slice=size(Info,1); %%獲取圖片z向幀數(shù) Width=Info.Width; Height=Info.Height;Image=zeros(Height,Width,Slice*3);for i=1:SliceImage(:,:,(i-1)*3+1:i*3)=imread(filepath,i); %%一層一層的讀入彩色圖像 end %%%%%%%%%%%%%%%%%%%%% 圖像處理操作 %%%%%%%%%%%%%%%%%%%%% for i=1:SliceJ=uint8(Image(:,:,(i-1)*3+1:i*3)); %%一層一層寫出圖像 %%imwrite(J,[num2str(i,'%4d'),'.tif'],'WriteMode','Append');imwrite(J,[num2str(i,'%04d'),'.tif']); end

3.例子(geotiff)

如何讀取tif并且獲取其經(jīng)緯度信息;讀取之后還要把它另存為另一個(gè)tif呢?這個(gè)問(wèn)題問(wèn)的可能有點(diǎn)作,但是我今天缺失要實(shí)現(xiàn)這個(gè)功能,因?yàn)槲矣幸粡坱if的模板圖片,還有很多張比較大的圖片。我想把所有的圖片都裁剪成和模板圖片一樣的大小,用arcgis或者envi的話會(huì)一個(gè)一個(gè)操作,太枯燥了,所以我想著能否用matlab幫我裁剪。話不多說(shuō),直接開整:

file20150='G:\Light\data\annual\2015\20150.tif'; Info0=geotiffinfo(file20150); %將tif的信息都搞到一個(gè)叫Info0的結(jié)構(gòu)體中 img0=imread(file20150); %讀取圖像的灰度信息

第二行,得到的結(jié)構(gòu)體如下:

里邊包含的信息比較豐富,像坐標(biāo)系(GCS)、分辨率(PixelScale)、經(jīng)緯度(BoundingBox)等等,關(guān)于經(jīng)緯度這個(gè),下面記下筆記,真的很容易忘。

下面用imshow()顯示一下矩陣:

如果正常讀的話,

file20150='G:\Light\data\annual\2015\20150.tif'; Info0=geotiffinfo(file20150); img0=imread(file20150); %數(shù)據(jù)的讀取 lat_min=Info0.BoundingBox(1,2); lat_max=Info0.BoundingBox(2,2); lon_min=Info0.BoundingBox(1,1); lon_max=Info0.BoundingBox(2,1); GeoRef = georasterref('Rastersize',size(img0),'Latlim',[lat_min,lat_max],'Lonlim',[lon_min,lon_max]); %數(shù)據(jù)的寫出 SST_Tif = 'G:\Light\data\annual\2015\20151.tif'; %img1=imread(SST_Tif); %數(shù)據(jù)的讀取 %Info1=geotiffinfo(SST_Tif); geotiffwrite(SST_Tif,img0,GeoRef) disp('finished');


可見,它是被上下翻轉(zhuǎn)了一下,所以,我們要先提前翻轉(zhuǎn)一下,再寫入文件。

ok。再來(lái)對(duì)比一下,info信息:

可以看到,圖片的大小發(fā)生了變化,其他信息保持不變。
總結(jié)代碼如下所示:

file20150='G:\Light\data\annual\2015\20150.tif'; Info0=geotiffinfo(file20150); img0=imread(file20150); %數(shù)據(jù)的讀取 lat_min=Info0.BoundingBox(1,2); lat_max=Info0.BoundingBox(2,2); lon_min=Info0.BoundingBox(1,1); lon_max=Info0.BoundingBox(2,1); GeoRef = georasterref('Rastersize',size(img0),'Latlim',[lat_min,lat_max],'Lonlim',[lon_min,lon_max]); %數(shù)據(jù)的寫出 SST_Tif = 'G:\Light\data\annual\2015\20151.tif'; %img1=imread(SST_Tif); %數(shù)據(jù)的讀取 %Info1=geotiffinfo(SST_Tif); geotiffwrite(SST_Tif,flipud(img0),GeoRef); %注意,這里上下翻轉(zhuǎn)一下!!!! disp('finished');

三、其他文件

1.nc 文件

其實(shí) nc 文件也是文本文件,但是是比較專業(yè)化那種,matlab 專門提供了讀取 nc 文件的函數(shù)。

//nc文件的讀取 filename='A20160922016121.L3m_MO_SST_sst_4km.nc'; ncdisp(filename);//展示文件包含的信息 Lon = ncread(filename);//讀取信息到Lon中

2.excle

a=xlsread('1.xlsx'); %[num,txt,raw]=xlsread(file,2);%num 存數(shù)字,txt 存文本,raw 存元胞(包含兩者)。第2個(gè)表 xlswrite('2.xlsx',a); %寫 help.. %更多用法

若出現(xiàn)Excel Worksheet could not be activated.問(wèn)題,
解決辦法:打開excel,“文件→選項(xiàng)→加載項(xiàng)→管理(位于界面坐下角)→點(diǎn)擊選擇COM加載項(xiàng)→轉(zhuǎn)到→把可用加載項(xiàng)的√全部去掉“,之后重啟 matlab 即可。

3.vbb2txt

vbb文件是啥類型的文件呢?目前沒有找到比較正規(guī)的解釋,我好像是在大二時(shí)做行人檢測(cè)的時(shí)候遇到過(guò)。vbb直接打開是亂碼,所以需要借助一個(gè)vbb工具箱,把vbb轉(zhuǎn)換成txt,工具箱鏈接下面會(huì)提供,還有一個(gè)數(shù)據(jù)集當(dāng)時(shí)下的,壓縮超nb,128M的直接壓成了13M。


工具箱:鏈接: https://pan.baidu.com/s/1ZdfH1kot7eT8DZbBaS1uYg 提取碼: uub8
數(shù)據(jù)集:鏈接: https://pan.baidu.com/s/1GpUI4P3lyGkBm56-oMtV4A 提取碼: akq4

下好工具箱解壓后,將文件夾放在一個(gè)不常動(dòng)的地方,我放在了D:\MATLAB\R2017a\toolbox中,然后打開matlab,點(diǎn)擊set path(設(shè)置路勁),將vbb路徑加進(jìn)去就行了。測(cè)試是否成功的話,就在matlab命令空間敲help vbb,成功的話就不會(huì)報(bào)錯(cuò)。vbb轉(zhuǎn)txt的話,下面提供一個(gè)函數(shù):

function vbb2txt(file,out) A = vbb( 'vbbLoad',file);%當(dāng)然不要拘泥于此函數(shù),具體問(wèn)題具體分析,可以看看A是啥 c=fopen(out,'w'); for i = 1:A.nFrameiframe = A.objLists(1,i);iframe_data = iframe{1,1};n1length = length(iframe_data);for j = 1:n1lengthiframe_dataj = iframe_data(j);if iframe_dataj.pos(1) ~= 0 %pos ?posvfprintf(c,'%d %s %f %f %f %f \r\n', i, 'person', iframe_dataj.pos(1), iframe_dataj.pos(2), iframe_dataj.pos(3), iframe_dataj.pos(4));endend end fclose(c); disp('Finished'); end

4.shp文件

第一次接觸shp文件是在大一時(shí)上CAD時(shí)接觸的,那時(shí)候叫“形文件”。我目前理解中的shp文件有點(diǎn)像矢量圖,它存儲(chǔ)的是坐標(biāo),可無(wú)限放大,不會(huì)出現(xiàn)馬賽克(不知道對(duì)不對(duì),2020.8.22)。shp 包括一個(gè)主文件,一個(gè)索引文件,和一個(gè)dBASE表。

文件名后綴描述
主文件.shp主文件是一個(gè)直接存取,變量記錄長(zhǎng)度文件,其中每個(gè)記錄描述一個(gè)有它自己的vertices列表的shape。
索引文件.shx在索引文件中,每個(gè)記錄包含對(duì)應(yīng)主文件記錄離主文件頭開始的偏移,
dBASE文件.dbfdBASE表包含 feature 一個(gè)記錄的feature的特征。

幾何和屬性間的一一對(duì)應(yīng)關(guān)系是基于記錄數(shù)目的。在dBASE文件中的屬性記錄必須和主文件中的記錄是相同順序的。


讀寫代碼

shp=shaperead(filename); //這步搞出來(lái)一個(gè)shp結(jié)構(gòu)體 shapewrite(shp,filename);//這步搞出來(lái)三個(gè)文件,如上所述

世界如此簡(jiǎn)單,更多詳見help!

參考/引用 文章

[1] 仙女陽(yáng)-CSDN博主:https://blog.csdn.net/wangyang20170901/article/details/79617881 [2] 樣young-CSDN博主:https://blog.csdn.net/jisuanjiguoba/article/details/79997805 [3] 百度經(jīng)驗(yàn)-https://jingyan.baidu.com/article/9f63fb917c09ecc8410f0e66.html [4] 不用先生-CSDN博主:https://blog.csdn.net/u013921430/article/details/79283305 [5] 百度經(jīng)驗(yàn):https://jingyan.baidu.com/article/a378c960a47c24b3282830b7.html [6] csdn_funquiz-CSDN博主:https://blog.csdn.net/qq_38712026/article/details/78783422

總結(jié)

以上是生活随笔為你收集整理的用MATLAB 读写各种文件 ∈ Matlab 使用笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。