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

📄 mif2kml.m

📁 MATLAB语言下的(有源码):Mike Zero系列软件的前后处理 GE中岸线与MIKE岸线相互转换 Mapinfo与MIKE中数据相互转换.(对学习MIKE与学习MATLAB编程人皆有帮助,且有说
💻 M
字号:
function mif2kml(UserPath)
%convert the mif data to kml, in order to display it in Google Earth.
%%
Depth=load('高程基准面.txt','-ascii');
%打开文件
[MifFileName,MifFilePath]=uigetfile(strcat(UserPath,'*.mif'),'请选择需转换的mif文件:');
if strcmp(MifFilePath(length(MifFilePath)),'\')~=1
    MifFilePath(length(MifFilePath)+1)='\';
end
MifFilePathName=strcat(MifFilePath,MifFileName); %Mif 文件绝对路径引用
LineName=MifFileName(1:length(MifFileName)-4);
KmlFileName=strcat(LineName,'.kml');
KmlFilePathName=strcat(MifFilePath,KmlFileName); %Kml 文件绝对路径引用,生成的同名Kml文件存于与Mif文件相同目录中。
Fid_Mif=fopen(MifFilePathName,'r');
if Fid_Mif==-1
    error(strcat(MifFilePathName,'无法打开!'));
end
%%
Fid_Kml=fopen(KmlFilePathName,'w');
if Fid_Kml==-1
    error(strcat(KmlFilePathName,'无法打开!'));
end
%%
Fid_Str=fopen('kmlstr.txt','r');
if Fid_Str==-1
    error('kmlstr.txt无法打开!');
end
%%
fprintf(Fid_Kml,'<?xml version="1.0" encoding="UTF-8"?>\n');
fprintf(Fid_Kml,'<kml xmlns="http://earth.google.com/kml/2.1">\n');
fprintf(Fid_Kml,'<Document>\n	<name>');
bytes_LineName = unicode2native(LineName, 'UTF-8');
fwrite(Fid_Kml, bytes_LineName, 'uint8');
fprintf(Fid_Kml,'</name>\n');
%%
while feof(Fid_Str)~=1
    TempStr=fgetl(Fid_Str);
    fprintf(Fid_Kml,'%s\n',TempStr);
end
fclose(Fid_Str);
%%
LineCounter=0; %线数目
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)));
            LineCounter=LineCounter+1;
            LineName=strcat('线',num2str(LineCounter));
            GenerateLineCor(Fid_Kml,LineName,[TempData(1) TempData(3)],[TempData(2) TempData(4)],[Depth,Depth]);
        elseif (length(TempStr)>6)&&(strcmpi(TempStr(1:5),'PLINE')==1) %两种情况,单折线,合并的折线
            if (length(TempStr)>15)&&(strcmpi(TempStr(1:14),'Pline Multiple')==1)
                LineCounter=LineCounter+1;
                LineName=strcat('线',num2str(LineCounter));
                Num_Pline=str2num(TempStr(15:length(TempStr)));
                X=[];
                Y=[];
                Z=[];
                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);
                        X(c1)=TempData(1);
                        Y(c1)=TempData(2);
                        Z(c1)=Depth;
                    end 
                end
                GenerateLineCor(Fid_Kml,LineName,X,Y,Z);
            else
                LineCounter=LineCounter+1;
                LineName=strcat('线',num2str(LineCounter));
                X=[];
                Y=[];
                Z=[];
                TempNum=str2num(TempStr(6:length(TempStr)));
                for c1=1:TempNum
                    TempStr=fgetl(Fid_Mif);
                    TempData=str2num(TempStr);
                    X(c1)=TempData(1);
                    Y(c1)=TempData(2);
                    Z(c1)=Depth;
                end
                GenerateLineCor(Fid_Kml,LineName,X,Y,Z);
            end
        end
    end
end
fprintf(Fid_Kml,'</Document>\n');
fprintf(Fid_Kml,'</kml>\n');
%%
fclose(Fid_Mif);
fclose(Fid_Kml);
%%
function GenerateLineCor(Fid_Kml,LineName,X,Y,Z)
fprintf(Fid_Kml,'	<Placemark>');
fprintf(Fid_Kml,'		<name>');
bytes_LineName = unicode2native(LineName, 'UTF-8');
fwrite(Fid_Kml, bytes_LineName, 'uint8');
fprintf(Fid_Kml,'</name>\n');
fprintf(Fid_Kml,'		<styleUrl>#msn_ylw-pushpin</styleUrl>\n');
fprintf(Fid_Kml,'		<LineString>\n');
fprintf(Fid_Kml,'			<extrude>1</extrude>\n');
fprintf(Fid_Kml,'			<tessellate>1</tessellate>\n');
fprintf(Fid_Kml,'			<altitudeMode>absolute</altitudeMode>\n');
fprintf(Fid_Kml,'			<coordinates>\n');
N=length(X);
for c1=1:N
    fprintf(Fid_Kml,'%.10f,%.10f,%.0f ',X(c1),Y(c1),Z(c1));
end
%%
fprintf(Fid_Kml,'</coordinates>\n		</LineString>\n');
fprintf(Fid_Kml,'	</Placemark>\n');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -