kml2xyz.m
来自「MATLAB语言下的(有源码):Mike Zero系列软件的前后处理 GE中岸线」· M 代码 · 共 46 行
M
46 行
function kml2xyz(UserPath)
%转换kml文件为xyz格式文件
TempStr=strcat(UserPath,'*.kml');
%
%打开文件
[KmlFileName,KmlFilePath]=uigetfile(TempStr,'请选择需转换的Kml文件:');
if strcmp(KmlFilePath(length(KmlFilePath)),'\')~=1
KmlFilePath(length(KmlFilePath)+1)='\';
end
%
KmlFilePathName=strcat(KmlFilePath,KmlFileName); %Kml 文件绝对路径引用
XYZFileName=strcat(KmlFileName(1:length(KmlFileName)-3),'xyz');
XYZFilePathName=strcat(KmlFilePath,XYZFileName); %txt 文件绝对路径引用,生成的同名xyz文件存于与Kml文件相同目录中。
Fid_Kml=fopen(KmlFilePathName,'r');
if Fid_Kml==-1
msgbox(strcat('Can''t open the file-',KmlFilePathName));
error(strcat('Can''t open the file-',KmlFilePathName));
end
Fid_XYZ=fopen(XYZFilePathName,'w'); %
if Fid_XYZ==-1
msgbox(strcat('Can''t open the file-',XYZFilePathName));
error(strcat('Can''t open the file-',XYZFilePathName));
end
%%
while feof(Fid_Kml)~=1
CurrentStr=fgetl(Fid_Kml);
Tag=findstr(CurrentStr,'<coordinates>');
if (length(Tag)==1)&(Tag>0)
CurrentStr=fgetl(Fid_Kml);
Tag=findstr(CurrentStr,'</coordinates>');
AllData=str2num(CurrentStr(1:(Tag-1)));
N=length(AllData);
Longitude=AllData(1:3:N);
Lagitude=AllData(2:3:N);
Elevation=Lagitude.*0+10; %设定岸线为10m高程.
Connectivity=Longitude.*0+1;
Connectivity(length(Connectivity))=0;
NewData=[Longitude',Lagitude',Connectivity',Elevation'];
[M,N]=size(NewData);
for c1=1:M
fprintf(Fid_XYZ,'%.10f\t%.10f\t%.0f\t%.2f\n',NewData(c1,1),NewData(c1,2),NewData(c1,3),NewData(c1,4));
end
end
end
fclose(Fid_Kml);
fclose(Fid_XYZ);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?