我正在尝试使用Matlab在GoogleEarth上绘制飞机飞行轨迹来构建KML文件。我是Matlab的新手。到目前为止,我的代码已成功使用XML节点格式化正确的KML文件,但我很难从csv或xls文件中获取多行坐标到KML文件。我只能将一个坐标写入文件或水平的所有坐标都没有正确格式化。
我已经能够在脚本运行之后将坐标复制并粘贴到已编写的KML文件中,但我需要能够告诉脚本执行此操作。
当前代码不健壮,我还不知道如何捕获异常并防止代码在Matlab中失败。我也意识到我使用for循环来创建保存我坐标的char数组是非常低效的。如果有人知道如何提高效率,那也会有所帮助。
trajectoryData = struct('Longitude',[],'Latitude',[],'Altitude',[]);
data = xlsread('Table.xls');
[m,n]=size(data);
trajectoryData.Longitude = data(:,1);
trajectoryData.Latitude = data(:,2);
trajectoryData.Altitude = data(:,3);
xDoc = com.mathworks.xml.XMLUtils.createDocument('kml');
xDocRootNode = xDoc.getDocumentElement;
documentNode = xDoc.createElement('Document');
nameNode = xDoc.createElement('name');
styleNode = xDoc.createElement('Style');
lineStyleNode = xDoc.createElement('LineStyle');
polyStyleNode = xDoc.createElement('PolyStyle');
colorNode = xDoc.createElement('color');
widthNode = xDoc.createElement('width');
placemarkNode = xDoc.createElement('Placemark');
visibilityNode = xDoc.createElement('visibility');
styleUrlNode = xDoc.createElement('styleUrl');
altitudeNode = xDoc.createElement('altitudeMode');
coordinatesNode = xDoc.createElement('coordinates');
lineStringNode = xDoc.createElement('LineString');
extrudeNode = xDoc.createElement('extrude');
tessellateNode = xDoc.createElement('tessellate');
nameNode.setTextContent('FlightID 26');
colorNode.setTextContent('7f00ff00');
widthNode.setTextContent('4');
visibilityNode.setTextContent('1');
styleUrlNode.setTextContent('#yellowLineGreenPoly');
extrudeNode.setTextContent('1');
tessellateNode.setTextContent('1');
altitudeNode.setTextContent('absolute');
xDocRootNode.appendChild(documentNode);
documentNode.appendChild(nameNode);
documentNode.appendChild(styleNode);
documentNode.appendChild(placemarkNode);
styleNode.appendChild(lineStyleNode);
styleNode.appendChild(polyStyleNode);
polyStyleNode.appendChild(colorNode);
lineStyleNode.appendChild(colorNode);
lineStyleNode.appendChild(widthNode);
lineStringNode.appendChild(altitudeNode);
lineStringNode.appendChild(extrudeNode);
lineStringNode.appendChild(tessellateNode);
lineStringNode.appendChild(coordinatesNode);
placemarkNode.appendChild(visibilityNode);
placemarkNode.appendChild(styleUrlNode);
placemarkNode.appendChild(lineStringNode);
for i=1:numel(data(1:end,1))
coord = char(coord,strcat(num2str(trajectoryData.Longitude(i,1)),',',...
num2str(trajectoryData.Latitude(i,1)),',',num2str(trajectoryData.Altitude(i,1))))
for j=1:27
coordinateNode = xDoc.createTextNode(coord(i,j));
coordinatesNode.appendChild(coordinateNode);
end
end
xDocRootNode.appendChild(documentNode);
xmlwrite('KMLFile2.kml',xDoc);
这是脚本的输出:
<coordinates> latitude,longitude,altitude latitude,longitude,altitude </coordinates>
我只需要一种格式化kml的方法:
<coordinates>
latitude,longitude,altitude
latitude,longitude,altitude
</coordinates>
答案 0 :(得分:0)
从纯KML的角度来看,水平编写坐标没有问题,只要它们至少相隔1个空格即可。
但是,如果您想更改格式,我相信您只需在构建KML坐标字符串的区域添加换行\n
字符。
看起来像这样:
coord = char(coord,strcat( ...
num2str(trajectoryData.Longitude(i,1)), ',' ,...
num2str(trajectoryData.Latitude(i,1)) , ',' ,...
num2str(trajectoryData.Altitude(i,1)) , ' \n'));
这应该在你的KML中注入换行符,创建你想要的格式。