Hallo,
wollte aus einem GPX-Track die Streckenlänge in javascript errechnen und habe folgendes Script erstellt:
if (window.ActiveXObject) {
var request = OpenLayers.Request.GET({
url: window.file_name,
async: false
});
} else {
request = new XMLHttpRequest();
request.overrideMimeType(“text/xml”);
request.open(“GET”, window.file_name, false);
request.send(null);
}
//function ausgeben() {
// if (http.readyState == 4) {
//alert(request.responseXML);
var daten = request.responseXML;
var ergebnisse = daten.getElementsByTagName(“ele”);
var punkte = daten.getElementsByTagName(“trkpt”);//[0].getAttribute(“lon”);
var hoehen = new Array();
var dataPt = new Array(6);
var radius = 6378.137 ; // earth radius in kilometer
var DE2RA = 0.01745329252; // degre to radian conversion
// return the distance between (lat1,lon1) and (lat2,lon2) in kilometer.
function GCDistance(lat1, lon1, lat2, lon2) {
if (lat1 == lat2 && lon1 == lon2) return 0;
lat1 *= DE2RA;
lon1 *= DE2RA;
lat2 *= DE2RA;
lon2 *= DE2RA;
var d = Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon1 - lon2);
return (radius * Math.acos(d));
};
dataPt[0] = new Array ()
for (var j = 0; j < ergebnisse.length; j++) {
dataPt[0].push(parseFloat(ergebnisse[j].childNodes[0].nodeValue));
}
dataPt[1] = new Array ()
for (var k = 0; k < punkte.length; k++) {
dataPt[1].push(punkte[k].getAttribute(“lon”));
}
dataPt[2] = new Array ()
for (var m = 0; m < punkte.length; m++) {
dataPt[2].push(punkte[m].getAttribute(“lat”));
}
//Errechnung der Strecke zwischen zwei Punkten
dataPt[3] = new Array ()
for (var n = 0; n < punkte.length-1; n++) {
dataPt[3].push(GCDistance(dataPt[1][n],dataPt[2][n],dataPt[1][n+1],dataPt[2][n+1])
); // track lenghts
}
//Aufsummierung der Punkte
dataPt[4] = new Array ()
for (var p = 0; p < dataPt[3].length; p++) {
dataPt[4][0] = 0;
dataPt[4].push(dataPt[4][p] + dataPt[3][p]);
}
Ich habe das folgende Problem.
Bei kurzen gpx Tracks ist die Stecke zu kurz
Bei langen gpx Tracks ist die Strecke zu lange.
Hat jemand eine Idee woran es liegen kann