📄 mesh2kml.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 + -