Adaptation des fichiers GPX de TwoNav (ou autres ?) pour l'importation dans BaseCamp
Page 1 sur 1
Adaptation des fichiers GPX de TwoNav (ou autres ?) pour l'importation dans BaseCamp
Préambule :
Voici une application Web qui permet de façonner des fichiers GPX, en vue d’une importation dans BaseCamp.
L’entièreté de l’application est dans une page Web, sous la forme d’une page « HTML » que vous mettez en local dans vos fichiers. L’affichage de l’application et son exécution ne nécessite aucune liaison internet. Tout se passe en local !
Cette application, sous forme de page Web, est composée ainsi :
• La structure d’une page « HTML ».
• Une feuille de style (CSS) pour le formatage à l’écran.
• Un script en JavaScript pour réaliser le travail.
Sous l’impulsion du membre du forum « Sorcière Monique GPS », [Vous devez être inscrit et connecté pour voir ce lien], j’ai écrit cette application Web dans le but premier de rendre compatible les fichiers GPX issus de « TwoNav » (TwoNav Cloud) avec BaseCamp.
Dans ces GPX il y a 3 lignes qui sont bloquantes pour l’importation dans BaseCamp. BaseCamp affiche un message d’erreur et refuse l’importation.
Ces 3 lignes :
[Vous devez être inscrit et connecté pour voir cette image]
L’application web permet de, soit de mettre en commentaire ces 3 lignes, soit de les supprimer.
Après avoir choisi un fichier GPX, l’application recherche la présence de ces lignes et signale celles-ci, si elles existent.
[Vous devez être inscrit et connecté pour voir cette image]
Un autre avantage de l’application est de proposer de supprimer certaines données du fichier GPX (en vue d'un partage), notamment des données très personnelles comme la « fréquence cardiaque ».
Il est donc possible de supprimer ces balises :
• « extensions »
• « time »
• « ele »
• « sat »
Autres options :
• La balise « name » est entièrement éditable. Par défaut, elle ajoute « GPX_adapté » au contenu préexistant.
• Possibilité d’ajouter un contenu à la balise « desc » (chaîne vide par défaut).
• Indentation du fichier GPX adapté avec un certain nombre d’espaces, offrant une lecture plus aisée (en mode texte) du contenu.
Cette application peut aussi être utile avec des GPX , non issus de TwoNav, afin de supprimer certaines balises inutiles en vue d’un partage.
Vous trouverez, ci-dessous, le texte de toute la page « HTML ». Pour la mettre en local chez vous, vous copiez l’ensemble du texte du code présent ci-dessous et vous le copiez dans un nouveau fichier texte que vous créez, avec le nom que vous souhaitez. Vous changez, ensuite, l’extension « .txt » par « .html ».
Pour exécuter l’application, vous « double-cliquez » sur ce nouveau fichier « HTML ».
Pour ceux qui ne sauraient pas réaliser ceci, la « Sorcière Monique » - maîtresse des lieux, ajoutera à la fin de ce « fil », un fichier avec l’extension « .zip » contenant la page « HTML ». Il suffira ensuite de « double-cliquez » sur ce nouveau fichier « HTML ».
Cordialement,
Benoît
[EDIT de Monique : Ajout du ".zip" en fichier-joint ci-dessous]
.
Voici une application Web qui permet de façonner des fichiers GPX, en vue d’une importation dans BaseCamp.
L’entièreté de l’application est dans une page Web, sous la forme d’une page « HTML » que vous mettez en local dans vos fichiers. L’affichage de l’application et son exécution ne nécessite aucune liaison internet. Tout se passe en local !
Cette application, sous forme de page Web, est composée ainsi :
• La structure d’une page « HTML ».
• Une feuille de style (CSS) pour le formatage à l’écran.
• Un script en JavaScript pour réaliser le travail.
Sous l’impulsion du membre du forum « Sorcière Monique GPS », [Vous devez être inscrit et connecté pour voir ce lien], j’ai écrit cette application Web dans le but premier de rendre compatible les fichiers GPX issus de « TwoNav » (TwoNav Cloud) avec BaseCamp.
Dans ces GPX il y a 3 lignes qui sont bloquantes pour l’importation dans BaseCamp. BaseCamp affiche un message d’erreur et refuse l’importation.
Ces 3 lignes :
[Vous devez être inscrit et connecté pour voir cette image]
L’application web permet de, soit de mettre en commentaire ces 3 lignes, soit de les supprimer.
Après avoir choisi un fichier GPX, l’application recherche la présence de ces lignes et signale celles-ci, si elles existent.
[Vous devez être inscrit et connecté pour voir cette image]
Un autre avantage de l’application est de proposer de supprimer certaines données du fichier GPX (en vue d'un partage), notamment des données très personnelles comme la « fréquence cardiaque ».
Il est donc possible de supprimer ces balises :
• « extensions »
• « time »
• « ele »
• « sat »
Autres options :
• La balise « name » est entièrement éditable. Par défaut, elle ajoute « GPX_adapté » au contenu préexistant.
• Possibilité d’ajouter un contenu à la balise « desc » (chaîne vide par défaut).
• Indentation du fichier GPX adapté avec un certain nombre d’espaces, offrant une lecture plus aisée (en mode texte) du contenu.
Cette application peut aussi être utile avec des GPX , non issus de TwoNav, afin de supprimer certaines balises inutiles en vue d’un partage.
Vous trouverez, ci-dessous, le texte de toute la page « HTML ». Pour la mettre en local chez vous, vous copiez l’ensemble du texte du code présent ci-dessous et vous le copiez dans un nouveau fichier texte que vous créez, avec le nom que vous souhaitez. Vous changez, ensuite, l’extension « .txt » par « .html ».
Pour exécuter l’application, vous « double-cliquez » sur ce nouveau fichier « HTML ».
- Code:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<title>TwoNav vers Basecamp</title>
<meta name="author" content="BenThon & al" />
<meta name="description" content="Application Web pour adapter les
traces venant de TwoNav, pour permettre l"importation dans BaseCamp">
<meta name="revised" content="samedi 23 août 2024" />
<style>
#grid {
display: grid;
grid-template-columns: auto auto;
}
textarea {
margin-left: 20px;
margin-right: 20px;
resize: none;
vertical-align: top;
}
input[type="text"] {
padding: 6px 12px;
font-size: 16px;
font-weight: 400;
line-height: 1.5;
color: #212529;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #ced4da;
appearance: none;
border-radius: 4px;
transition: border-color 0.15s ease-in-out,
box-shadow 0.15s ease-in-out;
:focus {
color: #212529;
background-color: #fff;
border-color: #86b7fe;
outline: 0;
box-shadow: 0 0 0 0.25rem rgb(13 110 253 / 25%);
}
}
</style>
</head>
<body>
<div id="grid">
<div id="infile">
<h3>Adaptation des fichiers <i>GPX de TwoNav (ou autres ?)</i> pour <b>BaseCamp</b></h3>
<p>Choisir un fichier venant de TwoNav (ou autres ?)</p>
<input
id="inputfile"
type="file"
accept="application/gpx"
autocomplete="off"
/>
</div>
<div id="outfile">
<button id="downloadlink">Sauve GPX adapté</button>
<input
type="string"
id="outputfile"
value="fichier_en_sortie.gpx"
autocomplete="off"
size="40"
/><br /><br />
<input type="checkbox" id="extsup" name="extsup" />
<label for="extsup"
>Supprimer les <i><b>extensions</b></i> (ex :
<b>fréquence cardiaque</b> - <b>hr</b>)</label
><br />
<input type="checkbox" id="timesup" name="timesup" />
<label for="timesup"
>Supprimer les
<i><b>données temporelles</b></i> (<b>time</b>)</label
><br />
<input type="checkbox" id="altsup" name="altsup" />
<label for="altsup"
>Supprimer les
<i><b>données d'altitude</b></i> (<b>ele</b>)</label
><br />
<input type="checkbox" id="satsup" name="satsup" />
<label for="satsup"
>Supprimer les
<i><b>données de satellite</b></i> (<b>sat</b>)</label
><br /><br />
<label for="nomgpx"
>Balise <<b>name</b>> éditable :
</label>
<input
type="text"
id="nomgpx"
name="nomgpx"
value="..."
size="40"
/><br /><br />
<label for="descgpx"
>Balise <<b>desc</b>> ajouter :
</label>
<input
type="text"
id="descgpx"
name="descgpx"
placeholder="Mettre une description ici"
size="40"
/><br /><br />
<input type="checkbox" id="indentgpx" name="indentgpx" checked />
<label for="indentgpx"
><i><b>Indenter</b></i> le fichier adapté de
</label>
<select id="nb_espaces">
<option value="1">1 espace</option>
<option value="2">2 espaces</option>
<option value="3">3 espaces</option>
<option value="4" selected>4 espaces</option>
<option value="5">5 espaces</option>
<option value="6">6 espaces</option></select
><br /><br />
<fieldset style="width: 300px">
<legend>Supprimer ou commenter lignes TwoNav :</legend>
<div>
<input
type="radio"
id="commenter"
name="choixTN"
value="commenter"
checked
/>
<label for="commenter">Commenter</label>
</div>
<div>
<input
type="radio"
id="supprimer"
name="choixTN"
value="supprimer"
/>
<label for="supprimer">Supprimer</label>
</div>
</fieldset>
</div>
<div id="comments"></div>
</div>
<script>
var inputfile = document.getElementById("inputfile");
var outputfile = document.getElementById("outputfile");
var checksup = document.getElementById("extsup");
var checksuptime = document.getElementById("timesup");
var checksupalt = document.getElementById("altsup");
var checksupsat = document.getElementById("satsup");
var downloadlink = document.getElementById("downloadlink");
var comments = document.getElementById("comments");
var modif_text;
var sauve_text;
inputfile.addEventListener("change", function () {
if (inputfile.files.length) {
handleFile(inputfile.files[0]);
}
});
downloadlink.addEventListener("click", download, false);
function handleFile(file) {
var outputfile = document.getElementById("outputfile");
outputfile.value = file.name.replace(/\.gpx/, "_adapté.gpx");
file.text().then(postprocess).catch(catchAll);
}
function catchAll(val) {
comments.innerHTML = "error: " + val;
}
function postprocess(text) {
comments.innerHTML = "";
modif_text = text;
if (modif_text.search("<author>TwoNavGO</author>") >= 0) {
comments.innerHTML +=
"<br/>Présence de <b>author= TwoNavGO</b> dans le GPX<br/>";
}
if (
modif_text.search(
'<copyright author="TwoNavGO">Device-TwoNavGO</copyright>'
) >= 0
) {
comments.innerHTML +=
'<br/>Présence de <b>copyright author="TwoNavGO"</b> dans le GPX<br/>';
}
if (
modif_text.search('<link href="https://go.twonav.com">') >=
0
) {
comments.innerHTML +=
'<br/>Présence du lien <b>"https://go.twonav.com"</b> dans le GPX<br/>';
}
// Adapter le name et desc
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(text, "application/xml");
var GPXnom = xmlDoc.getElementsByTagName("name")[0].textContent;
nomgpx.value = "GPX_adapté " + GPXnom.replace(/\.gpx/, "");
if (modif_text.search("<desc>") >= 0) {
descgpx.value =
xmlDoc.getElementsByTagName("desc")[0].textContent;
} else {
descgpx.value = "";
}
}
function formatXml(xml, rep) {
const PADDING = " ".repeat(rep); // taille d'indentation
const reg = /(>)(<)(\/*)/g;
let pad = 0;
xml = xml
.replace(/(\r\n|\n|\r)/gm, "\u0020")
.replace(/>\s+</g, "><");
xml = xml.replace(/(>)(<)(\/*)/g, "$1\r\n$2$3");
return xml
.split("\r\n")
.map((node, index) => {
let indent = 0;
if (node.match(/.+<\/\w[^>]*>$/)) {
indent = 0;
} else if (node.match(/^<\/\w/) && pad > 0) {
pad -= 1;
} else if (node.match(/^<\w[^>]*[^\/]>.*$/)) {
indent = 1;
} else {
indent = 0;
}
pad += indent;
return PADDING.repeat(pad - indent) + node;
})
.join("\r\n");
}
function download() {
sauve_text = modif_text;
sauve_text = sauve_text.replace(
/<desc>[\s\S]*?<\/desc>/g,
""
);
sauve_text = sauve_text.replace(
/<name>[\s\S]*?<\/name>/g,
"<name>" +
nomgpx.value +
"<\/name>\n<desc>" +
descgpx.value +
"</desc>"
);
if (commenter.checked == true) {
sauve_text = sauve_text
.replace("<author>TwoNavGO</author>", "<!-- <author>TwoNavGO</author> -->")
.replace(
'<copyright author="TwoNavGO">',
'<!-- <copyright author="TwoNavGO">'
)
.replace(
"Device-TwoNavGO</copyright>",
"Device-TwoNavGO</copyright> -->"
)
.replace(
'<link href="https://go.twonav.com">https://go.twonav.com</link>',
'<!-- <link href="https://go.twonav.com">https://go.twonav.com</link> -->'
);
} else {
sauve_text = sauve_text
.replace("<author>TwoNavGO</author>", "<!-- *** -->")
.replace(
'<copyright author="TwoNavGO">Device-TwoNavGO</copyright>',
"<!-- *** -->"
)
.replace(
'<link href="https://go.twonav.com">https://go.twonav.com</link>',
"<!-- *** -->"
);
}
// Supprimer les données de fréquence cardiaque et autres extensions spécifiques
if (checksup.checked == true) {
sauve_text = sauve_text.replace(
/<extensions>[\s\S]*?<\/extensions>/g,
""
);
}
// Supprimer les données temporelles
if (checksuptime.checked == true) {
sauve_text = sauve_text.replace(
/<time>[\s\S]*?<\/time>/g,
""
);
}
// Supprimer les données d'altitude
if (checksupalt.checked == true) {
sauve_text = sauve_text.replace(
/<ele>[\s\S]*?<\/ele>/g,
""
);
}
// Supprimer les données de satellite
if (checksupsat.checked == true) {
sauve_text = sauve_text.replace(
/<sat>[\s\S]*?<\/sat>/g,
""
);
}
var el = document.getElementById("nb_espaces");
var val = el[el.selectedIndex].value;
if (indentgpx.checked == true) {
sauve_text = formatXml(sauve_text, val);
}
var hiddenElement = document.createElement("a");
hiddenElement.href =
"data:application/gpx;charset=utf-8," +
encodeURI(sauve_text);
hiddenElement.target = "_blank";
hiddenElement.download = outputfile.value;
hiddenElement.click();
}
</script>
</body>
</html>
Pour ceux qui ne sauraient pas réaliser ceci, la « Sorcière Monique » - maîtresse des lieux, ajoutera à la fin de ce « fil », un fichier avec l’extension « .zip » contenant la page « HTML ». Il suffira ensuite de « double-cliquez » sur ce nouveau fichier « HTML ».
Cordialement,
Benoît
[EDIT de Monique : Ajout du ".zip" en fichier-joint ci-dessous]
.
- Fichiers joints
BenThon- 4 sat
Sujets similaires
» [résolu] coller une route de Basecamp dans un Twonav Anima
» Affichage des parcours, tracés, waypoints et autres balises dans BaseCamp
» Utilisation des .gpx du guide Michelin "100 virées à moto"
» Connaître le poids des fichiers installés dans Basecamp
» [résolu]Navigator 6 v2 supprimer les fichiers journal-actif dans BaseCamp sur Mac
» Affichage des parcours, tracés, waypoints et autres balises dans BaseCamp
» Utilisation des .gpx du guide Michelin "100 virées à moto"
» Connaître le poids des fichiers installés dans Basecamp
» [résolu]Navigator 6 v2 supprimer les fichiers journal-actif dans BaseCamp sur Mac
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum