📄 mif2xyz.m
字号:
function mif2xyz(UserPath)
%转换Mif文件为xyz格式文件
%mif2xyz(depth,RowNum)
%
%%
%打开文件
%读取上次操作目录
TempStr=strcat(UserPath,'*.mif');
%
[MifFileName,MifFilePath]=uigetfile(TempStr,'请选择需转换的Mif文件:');
if strcmp(MifFilePath(length(MifFilePath)),'\')~=1
MifFilePath(length(MifFilePath)+1)='\';
end
%
MifFilePathName=strcat(MifFilePath,MifFileName); %Mif 文件绝对路径引用
xyzFileName=strcat(MifFileName(1:length(MifFileName)-3),'xyz');
xyzFilePathName=strcat(MifFilePath,xyzFileName); %xyz 文件绝对路径引用,生成的同名xyz文件存于与mif文件相同目录中。
Fid_Mif=fopen(MifFilePathName,'r');
if Fid_Mif==-1
error(strcat(MifFilePathName,'无法打开!'));
end
Fid_xyz=fopen(xyzFilePathName,'w');
if Fid_xyz==-1
error(strcat(xyzFilePathName,'无法打开!'));
end
%%
%水深自动基于文件名判断
TempVar1=MifFileName(1:length(MifFileName)-4);
TempVar2=isstrprop(TempVar1, 'digit');
Tag_Num=find(TempVar2==1);
Tag_Abstract=findstr(TempVar1,'-');
if length(Tag_Num)>0
if (length(Tag_Abstract)>0)&((Tag_Abstract+1)==Tag_Num(1))
TempVar3=str2num(TempVar1(Tag_Abstract(1):Tag_Num(length(Tag_Num))));
else
TempVar3=str2num(TempVar1(Tag_Num(1):Tag_Num(length(Tag_Num))));
end
depth=TempVar3(1);
RowNum=3;
WarningMsg=strcat(TempVar1,'.mif作为“等高线”处理!',char(13),'高程:',num2str(depth),'m');
else
depth=10;
RowNum=4;
WarningMsg=strcat(TempVar1,'.mif作为“海岸线”处理!',char(13),'高程:10m');
end
msgbox(WarningMsg);
%%
%主要处理过程
CnnectionTag=1;%联通状态
while feof(Fid_Mif)~=1
TempStr=fgetl(Fid_Mif);
if length(TempStr)>5
if (length(TempStr)>10)&&(strcmpi(TempStr(1:4),'LINE')==1)
TempData=str2num(TempStr(5:length(TempStr)));
if RowNum==4
fprintf(Fid_xyz,'%.8f %.8f 1 %.8f\n%.8f %.8f 0 %.8f\n',TempData(1),TempData(2),depth,TempData(3),TempData(4),depth);
else
fprintf(Fid_xyz,'%.8f %.8f %.8f\n%.8f %.8f %.8f\n',TempData(1),TempData(2),depth,TempData(3),TempData(4),depth);
end
elseif (length(TempStr)>6)&&(strcmpi(TempStr(1:5),'PLINE')==1) %两种情况,单折线,合并的折线
if (length(TempStr)>15)&&(strcmpi(TempStr(1:14),'Pline Multiple')==1)
Num_Pline=str2num(TempStr(15:length(TempStr)));
for c1=1:Num_Pline
TempStr=fgetl(Fid_Mif);
TempNum=str2num(TempStr);
CnnectionTag=1;
for c2=1:TempNum
TempStr=fgetl(Fid_Mif);
TempData=str2num(TempStr);
if (c2==TempNum)
CnnectionTag=0; %折线末端联通状态为0
end
if RowNum==4
fprintf(Fid_xyz,'%.8f %.8f %d %.8f\n',TempData(1),TempData(2),CnnectionTag,depth);
else
fprintf(Fid_xyz,'%.8f %.8f %.8f\n',TempData(1),TempData(2),depth);
end
end
end
else
TempNum=str2num(TempStr(6:length(TempStr)));
CnnectionTag=1;
for c1=1:TempNum
TempStr=fgetl(Fid_Mif);
TempData=str2num(TempStr);
if c1==TempNum
CnnectionTag=0; %折线末端联通状态为0
end
if RowNum==4
fprintf(Fid_xyz,'%.8f %.8f %d %.8f\n',TempData(1),TempData(2),CnnectionTag,depth);
else
fprintf(Fid_xyz,'%.8f %.8f %.8f\n',TempData(1),TempData(2),depth);
end
end
end
end
end
end
%%
fclose(Fid_Mif);
fclose(Fid_xyz);
%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -