⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mif2xyz.m

📁 MATLAB语言下的(有源码):Mike Zero系列软件的前后处理 GE中岸线与MIKE岸线相互转换 Mapinfo与MIKE中数据相互转换.(对学习MIKE与学习MATLAB编程人皆有帮助,且有说
💻 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 + -