2013-06-26 4 views
0

J'essaie de tracer des trajectoires de vol sur GoogleEarth en utilisant Matlab pour générer le fichier KML. Je suis très nouveau à Matlab. Mon code a jusqu'ici réussi à utiliser des nœuds XML pour formater le fichier KML correct, mais j'ai du mal à obtenir les nombreuses lignes de coordonnées d'un fichier csv ou xls vers le fichier KML. Je peux seulement obtenir une coordonnée à écrire dans le fichier ou toutes les coordonnées horizontalement qui ne sont pas correctement formatées.Matlab: Créer un fichier KML contenant plusieurs lignes de coordonnées

J'ai été capable de copier et coller les coordonnées dans le fichier KML écrit après que le script a suivi son cours, mais je dois être capable de dire au script de le faire.

Le code actuel n'est pas robuste, je ne sais pas encore comment intercepter les exceptions et empêcher le code d'échouer dans Matlab. Je réalise aussi que mon utilisation de la boucle for pour créer le tableau char qui contient mes coordonnées est très inefficace. Si quelqu'un connaît un moyen de rendre cela plus efficace, cela aiderait aussi.

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); 

C'est la sortie du script tel qu'il est:

<coordinates> latitude,longitude,altitude latitude,longitude,altitude </coordinates> 

Je dois juste une façon de formater le kml comme ceci:

<coordinates> 
    latitude,longitude,altitude 
    latitude,longitude,altitude 
</coordinates> 
+0

Quelles sont les difficultés que vous rencontrez? Comment le code ci-dessus échoue-t-il? Ce n'est pas clair ce que vous demandez. –

Répondre

0

D'un point de vue purement KML, il n'y a pas de problème pour écrire vos coordonnées horizontalement, à condition qu'elles soient séparées d'au moins 1 espace.

Cependant, si vous souhaitez changer la mise en forme, je crois que vous pourriez simplement ajouter un caractère de nouvelle ligne \n à la zone où vous construisez vos chaînes de coordonnées KML.

Il ressemblerait plutôt à ceci:

coord = char(coord,strcat(... 
        num2str(trajectoryData.Longitude(i,1)), ',' ,... 
        num2str(trajectoryData.Latitude(i,1)) , ',' ,... 
        num2str(trajectoryData.Altitude(i,1)) , ' \n')); 

Cela devrait injecter des caractères dans votre nouvelle ligne KML, créant ainsi la mise en forme que vous désirez.

Questions connexes