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

📄 mesh2kml.m

📁 MATLAB语言下的(有源码):Mike Zero系列软件的前后处理 GE中岸线与MIKE岸线相互转换 Mapinfo与MIKE中数据相互转换.(对学习MIKE与学习MATLAB编程人皆有帮助,且有说
💻 M
字号:
function mesh2kml(UserPath,X_Shift,Y_Shift)
%将mike生成的三角网格转储为google earth上的线
%必须为经纬度坐标形式的网格
%X_Shift,Y_Shift,分别为经度、纬度偏移量,单位度
%%
%打开文件
[MeshFileName,MeshFilePath]=uigetfile(strcat(UserPath,'*.mesh'),'请选择需转换的mesh文件:');
if strcmp(MeshFilePath(length(MeshFilePath)),'\')~=1
    MeshFilePath(length(MeshFilePath)+1)='\';
end
MeshFilePathName=strcat(MeshFilePath,MeshFileName); %Mesh 文件绝对路径引用
LineName=MeshFileName(1:length(MeshFileName)-5);
KmlFileName=strcat(LineName,'.kml');
KmlFilePathName=strcat(MeshFilePath,KmlFileName); %Kml 文件绝对路径引用,生成的同名Kml文件存于与Mesh文件相同目录中。
Fid_Mesh=fopen(MeshFilePathName,'r');
if Fid_Mesh==-1
    error(strcat(MeshFilePathName,'无法打开!'));
end
%
Fid_Kml=fopen(KmlFilePathName,'w');
if Fid_Kml==-1
    error(strcat(KmlFilePathName,'无法打开!'));
end
%
Fid_Str=fopen('Mesh2Kml_kmlstr.txt','r');
if Fid_Str==-1
    error('Mesh2Kml_kmlstr.txt无法打开!');
end
%%
H_Wait=waitbar(0,'数据转储中,轻稍候。。。。。。');
%读取网格节点坐标
TempStr=fgetl(Fid_Mesh);
Tag_Space=findstr(TempStr,' ');
Num_MeshNode=str2num(TempStr(1:Tag_Space(1)));
NodePosition=[];
for c1=1:Num_MeshNode
    TempLine=str2num(fgetl(Fid_Mesh));
    NodePosition(c1,1:2)=TempLine(2:3);
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
%
fprintf(Fid_Kml,'		<name>');
bytes_LineName = unicode2native(LineName, 'UTF-8');
fwrite(Fid_Kml, bytes_LineName, 'uint8');
fprintf(Fid_Kml,'</name>\n');
%%
%读取三角形顶点配置
TempLine=str2num(fgetl(Fid_Mesh));
Num_Cell=TempLine(1);
clear TempLine;
for c1=1:Num_Cell
    TempLine=str2num(fgetl(Fid_Mesh));
    TempCellNum=c1;
    TempCellNode=TempLine(2:length(TempLine));
    %写入该三角形
    fprintf(Fid_Kml,'		<Placemark>\n');
    fprintf(Fid_Kml,'		<name>');
    bytes_LineName = unicode2native(strcat('网格单元',num2str(TempCellNum)), '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,'				<tessellate>1</tessellate>\n');
    fprintf(Fid_Kml,'				<coordinates>\n');
    for c2=1:length(TempCellNode)
        fprintf(Fid_Kml,'%.8f,%.8f,0,',NodePosition(TempCellNode(c2),1),NodePosition(TempCellNode(c2),2));
    end
    fprintf(Fid_Kml,'%.8f,%.8f,0',NodePosition(TempCellNode(1),1),NodePosition(TempCellNode(1),2)); %闭合多边形
    fprintf(Fid_Kml,'</coordinates>\n');
    fprintf(Fid_Kml,'			</LineString>\n');
    fprintf(Fid_Kml,'		</Placemark>\n');
    waitbar(c1./Num_Cell,H_Wait);
end
%
close(H_Wait);
%%
fprintf(Fid_Kml,'</Document>\n');
fprintf(Fid_Kml,'</kml>\n');
%%
fclose(Fid_Kml);
fclose(Fid_Str);
fclose(Fid_Mesh);

⌨️ 快捷键说明

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