transform_gpx_to_kml_files.py
# ------------------------------------------------------------------------------#
import os;
import time;

from typing import List;

# Local python files
from pyfiles import extract_kmldata_outof_gpxfile as extractor;
from pyfiles import generate_kmlfile_from_gpxdata as generator;

# ------------------------------------------------------------------------------#

def getListOfFiles(NameOfDir: str,ext: str) -> List[str]:
    listOfFiles=os.listdir(NameOfDir);
    return sorted([fl for fl in listOfFiles if fl.endswith(ext)]);

# end getListOfFiles()

# ------------------------------------------------------------------------------#

def formatCoords(coords: extractor.TypeCoords) -> str:
    return "{0:8.6f},{1:9.6f},{2:5.2f}".format(*map(float,coords));

# end def formatCoords

# ------------------------------------------------------------------------------#
# ------------------------------------------------------------------------------#
if __name__=='__main__':
    print('\n# Beginning transform_gpx_to_kml_files.py ...\n');
    # --------------------------------------------------------------------------#
    # --------------------------------------------------------------------------#

    Author="Bernd";

    nameOfDir='./gpxfiles';
    assert (os.access(nameOfDir,os.F_OK)), \
        "# Directory ./gpxfiles does not exist!";

    templateFilePath='./templates/template_from_gpx_to_kml.kml';
    assert (os.access(templateFilePath,os.F_OK)), \
        "# File ./templates/template_from_gpx_to_kml.kml does not exist!";

    # --------------------------------------------------------------------------#
    # --------------------------------------------------------------------------#

    timeStamp=time.strftime(", %d.%m.%Y, %H:%M MEZ");

    inExtension='.gpx';
    extFileNames=getListOfFiles(nameOfDir,inExtension);

    for extfn in extFileNames:
        print("> Transforming: "+extfn);

        pureFilename=str(extfn.split('.')[0]);
        inputFilePath=nameOfDir+'/'+extfn;
        (wptData,trkData)=extractor.extractKmlData(inputFilePath);

        # ----------------------------------------------------------------------#
        # Transforming outputdata of function extractKmlData
        # to inputdata of function generateKmlFile
        # ----------------------------------------------------------------------#

        docData=(pureFilename,Author+timeStamp);

        waypointsData={name:formatCoords(coords)
                       for (name,coords) in wptData.items()};

        (trkName,trkPoints)=trkData;
        pathCoordsAsString="".join(['\n'+formatCoords(ppt)
                                    for ppt in trkPoints]);

        trackpathData=(trkName,pathCoordsAsString);

        # ----------------------------------------------------------------------#
        # ----------------------------------------------------------------------#

        outExtension='.kml';
        outputFilePath=nameOfDir+'/'+pureFilename+outExtension;
        generator.generateKmlFile(templateFilePath,
                                  docData,
                                  waypointsData,
                                  trackpathData,
                                  outputFilePath);
    # end for;

    # --------------------------------------------------------------------------#
    # --------------------------------------------------------------------------#
    print('\n> Working Directory with files (gpx,kml) is: ',nameOfDir);

    print('\n# Finished transform_gpx_to_kml_files.py.\n');
# end if main

# ------------------------------------------------------------------------------#
# ------------------------------------------------------------------------------#