Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml Matlab:创建一个包含多行坐标的KML文件_Xml_Matlab_Coordinates_Kml_Google Earth - Fatal编程技术网

Xml Matlab:创建一个包含多行坐标的KML文件

Xml Matlab:创建一个包含多行坐标的KML文件,xml,matlab,coordinates,kml,google-earth,Xml,Matlab,Coordinates,Kml,Google Earth,我正试图用Matlab在谷歌地球上绘制飞机飞行轨迹,以构建KML文件。我对Matlab很陌生。到目前为止,我的代码已经成功地使用XML节点格式化了正确的KML文件,但是我很难从csv或xls文件中获取到KML文件的多行坐标。我只能将一个坐标写入文件,或者水平方向上所有未正确格式化的坐标 我已经能够在脚本运行之后将坐标复制并粘贴到编写的KML文件中,但是我需要能够告诉脚本这样做 当前的代码并不健壮,我还不知道如何在Matlab中捕获异常并防止代码失败。我还意识到,使用for循环创建保存坐标的cha

我正试图用Matlab在谷歌地球上绘制飞机飞行轨迹,以构建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>
    coord = char(coord,strcat( ...
                  num2str(trajectoryData.Longitude(i,1)), ',' ,...
                  num2str(trajectoryData.Latitude(i,1)) , ',' ,...
                  num2str(trajectoryData.Altitude(i,1)) , ' \n'));

纬度、经度、高度
纬度、经度、高度

从纯KML的角度来看,水平写入坐标没有问题,只要它们之间至少有1个空格

但是,如果您想更改格式,我相信您可以简单地在构建KML坐标字符串的区域中添加一个换行符
\n

相反,它看起来是这样的:

<coordinates>
    latitude,longitude,altitude
    latitude,longitude,altitude
</coordinates>
    coord = char(coord,strcat( ...
                  num2str(trajectoryData.Longitude(i,1)), ',' ,...
                  num2str(trajectoryData.Latitude(i,1)) , ',' ,...
                  num2str(trajectoryData.Altitude(i,1)) , ' \n'));

这将向KML中注入换行符,创建您想要的格式。

您有什么困难?上面的代码是如何失败的?不清楚你在问什么。