";
if(div.title) {
str += div.title + " ";
}
else {
if(this.parameters.legende_fnm) {
var shdate = this.parameters.legende_fnm_lm === true || this.parameters.legende_fnm_lm ==="d" || this.parameters.legende_fnm_lm === "dt";
var shtime = this.parameters.legende_fnm_lm ==="t" || this.parameters.legende_fnm_lm === "dt";
str += "
"+strings.file+": "
for(var i=0;i
";
MapHead.innerHTML = str;
MapHead.appendChild(JB.createImageButton({src:JB.GPX2GM.Path+"Icons/lupe_p.png",alt:"Zoom-Symbol"},"menueitem",JB.GPX2GM.strings[JB.GPX2GM.parameters.doclang].zoom,function() { dieses.Rescale() }));
var gpxelement,name,texte;
if(gpxdaten.wegpunkte.anzahl) {
if(gpxdaten.wegpunkte.anzahl==1) {
gpxelement = strings.wpt;
name = gpxdaten.wegpunkte.wegpunkt[0].name;
if(JB.checkImageName(name)) texte = [name.replace(/.+\//,"")];
else texte = [name];
}
else if(gpxdaten.wegpunkte.anzahl>1) {
gpxelement = strings.wpts;
var texte = [strings.all];
for(var i=0;i 1) zoomFunc[0] = function() { dieses.Rescale(gpxdaten.wegpunkte) };
for(var i=0;i1) {
gpxelement = strings.trks;
if(this.parameters.legende_rr) {
var rrflag=true;
for(var i=0;i1) {
gpxelement = strings.rtes;
texte[0] = "Alle"+" ("+Number(gpxdaten.routen.laenge.toPrecision(10).toString(10))+units.way+") ";
for(var i=0;i0 && typeof(JB.GPX2GM.callback)=="function")
JB.GPX2GM.callback({id:id,type:"Wegpunkte_v",gpxdaten:gpxdaten,profil:profil,Map:Map});
if(this.parameters.wpcluster && gpxdaten.wegpunkte.anzahl>1) {
var clusters = wpcluster();
mrk = showClusters.call(this,clusters);
for(var m=0;m0 && typeof(JB.GPX2GM.callback)=="function")
JB.GPX2GM.callback({id:id,type:"Wegpunkte_n",gpxdaten:gpxdaten,profil:profil,Map:Map,markers:markers});
} // showWpts
function showWpt(waypoint) {
var sym = waypoint.sym.toLowerCase() ;
var icon = JB.icons[sym]?JB.icons[sym]:null;
JB.Debug_Info(id,"Symbol: "+sym,false);
var imgsrc="";
if (JB.checkImageName(waypoint.name)) imgsrc = waypoint.name;
else if (JB.checkImageName(waypoint.link)) imgsrc = waypoint.link;
wpinfo.call(this,waypoint);
var mrk;
if(imgsrc.length) {
if(this.parameters.bildwegpunkticon != "") sym = this.parameters.bildwegpunkticon;
mrk = Map.Marker_Bild(waypoint,JB.icons[sym]?JB.icons[sym]:JB.icons.Bild,this.parameters.bildpfad+imgsrc);
}
else if (waypoint.link && waypoint.link.length)
mrk = Map.Marker_Link(waypoint,icon,waypoint.name,waypoint.link,this.parameters.popup_Pars);
else if (waypoint.name.length || waypoint.cmt.length || waypoint.desc.length)
mrk = Map.Marker_Text(waypoint,icon,waypoint.name);
else
mrk = Map.Marker(waypoint,icon);
return mrk;
} // showWpt
function showClusters(clusters) {
var zoomstatus = Map.getZoom();
var mrks=[],mrk;
for(var i=0;imindist) break;
wppointer[i] = [i,ct];
}
wppointer.sort(function(a,b) {return a[1]-b[1];});
var clusternr=-1;
for(var i=0;i1) clusters.push(cluster);
else if(cluster.members.length==1) wps[cluster.members[0]].cluster = -1;
}
}
for(var i=0;i-1) {
wps[i].cluster = wps[wp.dist[j][0]].cluster;
clusters[wps[i].cluster].members.push(i);
break;
}
}
}
}
}
for(var i=0;i0 && typeof(JB.GPX2GM.callback)=="function")
JB.GPX2GM.callback({id:id,type:"Routen_v",gpxdaten:gpxdaten,profil:profil,Map:Map});
for(var i=0;i0 && typeof(JB.GPX2GM.callback)=="function")
JB.GPX2GM.callback({id:id,type:"Routen_n",gpxdaten:gpxdaten,profil:profil,Map:Map,polylines:routepolylines});
} // showRoutes
function showTracks() {
var colmod=this.parameters.trcolmod,colmodflag=false,min=1e10,max=-1e10,minmax={};
JB.Debug_Info(id,"showTracks",false);
for(var i=0;i0 && typeof(JB.GPX2GM.callback)=="function")
JB.GPX2GM.callback({id:id,type:"Tracks_v",gpxdaten:gpxdaten,profil:profil,Map:Map});
if( (colmod=="h" && gpxdaten.tracks.hflag) || (colmod=="v" && gpxdaten.tracks.tflag) || (colmod=="hr" && gpxdaten.tracks.hrflag) || (colmod=="cad" && gpxdaten.tracks.cadflag) ) {
colmodflag = true;
var coltab = JB.farbtafel(1000);
for(var i=0;i0) min = -max;
else max = -min;
}
}
if(colmodflag) {
if(max0 && typeof(JB.GPX2GM.callback)=="function")
JB.GPX2GM.callback({id:id,type:"Tracks_n",gpxdaten:gpxdaten,profil:profil,Map:Map,polylines:trackpolylines});
} // showTracks
function track_click_fkt(map,daten,point) {
var d, entf=[];
for(var i=0;i";
if(this.parameters.shtrx)
info += "
"+strings.way+": "+Number(tracki.laenge.toPrecision(10).toString(10))+" "+units.way;
if(this.parameters.shtrtges && tracki.tges>0)
info += "
"+strings.duration+": "+JB.Zeitstring(tracki.tges*3600);
if(this.parameters.shtrtgeswob && tracki.tgeswob>0)
info += "
"+strings.duration+" "+strings.inmo+": "+JB.Zeitstring(tracki.tgeswob*3600);
if(this.parameters.shtrs && typeof(tracki.rauf)!="undefined" )
info += "
"+strings.altdiff+": +"+tracki.rauf+" "+units.alt+" / -"+tracki.runter+" "+units.alt+"";
if(this.parameters.shtrt && tracki.t0>0)
info += "
"+strings.tstart+": " + JB.sec2string.call(this,tracki.t0*3600,this.parameters.tdiff*3600+tracki.tzoff) + "";
if(this.parameters.shtrvmitt && tracki.vmitt>0)
info += "
"+strings.avspeed+" = " + tracki.vmitt + " "+units.speed+"";
if(this.parameters.shtrvmittwob && tracki.vmittwob>0)
info += "
"+strings.avspeed+" = " + tracki.vmittwob + " "+units.speed+" "+strings.inmo+"";
if(this.parameters.shtrvmittpace && tracki.vmitt>0)
info += "
"+strings.pace+" = " + (60/tracki.vmitt).toFixed(1) + " "+units.pace+"";
if(this.parameters.shtrvmittpacewob && tracki.vmittwob>0)
info += "
"+strings.pace+" = " + (60/tracki.vmittwob).toFixed(1) + " "+units.pace+" "+strings.inmo+"";
if(this.parameters.shtrcmt) info += "
"+tracki.cmt;
if(this.parameters.shtrdesc) info += "
"+tracki.desc;
tracki.info = info;
} // trackinfo
function routinfo(routei) {
var info = ""+routei.name+"";
if(this.parameters.shtrx)
info += "
"+strings.way+" "+Number(routei.laenge.toPrecision(10).toString(10))+" "+units.way;
if(this.parameters.shrtcmt) info += "
"+routei.cmt;
if(this.parameters.shrtdesc) info += "
"+routei.desc;
routei.info = info;
} // routinfo
function wpinfo(wp) {
var imgsrc="";
if (JB.checkImageName(wp.name)) imgsrc = wp.name;
else if (JB.checkImageName(wp.link)) imgsrc = wp.link;
var info = ((this.parameters.shwpname&&!imgsrc.length)?""+wp.name+"
":"")
+ (this.parameters.shwpcmt?wp.cmt:"")
+ (this.parameters.shwpcmt&&this.parameters.shwpdesc?"
":"")
+ (this.parameters.shwpdesc?wp.desc:"");
if(this.parameters.shwptime && wp.time>0) info += "
("
+ JB.sec2string.call(this,wp.time,this.parameters.tdiff) +")";
wp.info = info;
} // wpinfo
function getminmax(daten,o,minmax) {
var min=1e10,max=-1e10;
if(typeof(minmax)!="undefined") { min = minmax.min; max = minmax.max; }
for(var j=0;jmax) max = wert;
}
return {min:min,max:max};
} // getminmax
function showProfiles() {
JB.Debug_Info(id,"showProfiles",false);
if(profil) profil.setflags(gpxdaten.tracks,-1);
if(typeof(JB.GPX2GM.callback)=="function")
JB.GPX2GM.callback({id:id,type:"Profile_v",gpxdaten:gpxdaten,profil:profil,Map:Map});
for(var p in profil) {
if(profil[p].ele && !profil[p].diag) {
profil[p].diag = new JB.plot(profil[p].id,profil[p].x,profil[p].y);
if (profil[p].ele.className && profil[p].ele.className.search(/(^|\s)no_x(\s|$)/i)!=-1) profil[p].xtext = "";
JB.Debug_Info(id,"Profil: "+profil[p].id+" Diagramm angelegt",false);
profil[p].diag.framecol = this.parameters.plotframecol;
profil[p].diag.gridcol = this.parameters.plotgridcol;
profil[p].diag.labelcol = this.parameters.plotlabelcol;
profil[p].diag.markercol = this.parameters.plotmarkercol;
profil[p].diag.fillopac = this.parameters.profilfillopac;
if(p.search("pt")>-1) {
if(this.parameters.shtrtabs_p) profil[p].diag.xscaletime = "absolute";
else profil[p].diag.xscaletime = "relative";
}
}
}
for(var p in profil) {
var pr = profil[p];
if(pr.ele /*&& pr.pflag*/) pr.diag.clear();
}
if(!(chktrk && chktrk.status[0])) return;
if(!gpxdaten) return;
for(var i=0;i1 && chktrk.status[gpxdaten.tracks.anzahl==1?0:i+1]) {
for(var p in profil) {
pr = profil[p];
if(pr.ele) {
if(pr.scale && pr.scale.length==2) {
pr.scale[0][pr.x] = daten[0][pr.x];
pr.scale[1][pr.x] = daten[daten.length-1][pr.x];
pr.diag.scale(pr.scale);
if(!JB.Scaling.hardscaling) pr.diag.scale(daten);
}
else {
pr.diag.scale(daten);
}
}
}
}
}
profil.setflags(gpxdaten.tracks,-1);
for(var p in profil) {
var pr = profil[p];
if(pr.ele) {
pr.diag.frame(50,35,pr.xtext,pr.ytext);
}
}
for(var i=0;i1) {
profil.setflags(tracki,-1);
for(var p in profil) {
var pr = profil[p];
if(pr.ele && pr.pflag) {
pr.diag.plot(tracki.daten,tracki.farbe);
}
}
}
}
var ct=0,cf=0;
if(chktrk.status.length==1) {
if(chktrk.status[0]) cf = ct = 1;
}
else {
var fa={};
for(var i=1;i"+strings.alt+": "+Math.round(a.h)+units.alt;
if(dieses.parameters.shtrrr && typeof a.rauf != "undefined") info += " (+"+Math.round(a.rauf)+units.alt+"/-"+Math.round(a.runter)+units.alt+")";
if(dieses.parameters.shtrv && typeof a.v != "undefined") info += "
"+strings.speed2+": "+Math.round(a.v)+units.speed;
if(dieses.parameters.shtrpace && typeof a.v != "undefined") info += "
"+strings.pace+": "+(60/a.v).toFixed(1)+units.pace;
if(dieses.parameters.shtrs && typeof a.s != "undefined") info += "
"+strings.grade+": "+Math.round(a.s)+strings.grade_unit;
if(dieses.parameters.shtrhr && typeof a.hr != "undefined") info += "
"+strings.hr+": "+Math.round(a.hr)+" "+strings.hr_unit;
if(dieses.parameters.shtrcad && typeof a.cad != "undefined") info += "
"+strings.cad+": "+Math.round(a.cad)+" "+strings.cad_unit;
if(dieses.parameters.shtrtabs_k && typeof a.t != "undefined") info += "
"+strings.time+": "+JB.sec2string.call(dieses,a.tabs*3600,dieses.parameters.tdiff*3600);
if(dieses.parameters.shtrt && typeof a.t != "undefined") info += "
"+strings.time+": "+JB.Zeitstring(a.t*3600);
if(dieses.parameters.shtrtwob && typeof a.twob != "undefined") info += "
"+strings.time+": "+strings.inmo+": "+JB.Zeitstring(a.twob*3600);
return info;
} // trackpointinfo
} // JB.makeMap
JB.checkImageName = function(url) {
var ext = url.substr(url.lastIndexOf(".")+1).toLowerCase();
return (ext=="jpg" || ext=="jpeg" || ext=="png" || ext=="gif" || url.indexOf("data:image")>-1) ;
} // checkImageName
JB.CheckBoxGroup = function(id,Texte,gpxelement,Label,Farbe,def_stat,clickFunc,clickFunc2) {
var dieses = this;
var nbx = Texte.length;
this.status = []; for(var i=0;i " + JB.GPX2GM.strings[JB.GPX2GM.parameters.doclang].showlist+ "";
box.appendChild(button);
var ol = document.createElement("ol"),li;
ol.setAttribute("aria-expanded",false);
ol.setAttribute("role","menu");
for(var i=0;ii) {
li.appendChild(JB.createImageButton({src:JB.GPX2GM.Path+"Icons/lupe_p.png",alt:"Zoom-Symbol"},"menueitem",JB.GPX2GM.strings[JB.GPX2GM.parameters.doclang].zoom,clickFunc2[i]));
}
ol.appendChild(li);
}
box.appendChild(ol);
document.getElementById(id).appendChild(box);
} // JB.CheckBoxGroup
JB.createImageButton = function(image,role,infotext,clickFunc) {
var button = document.createElement("button");
button.type = "button";
button.setAttribute("role",role);
var img = document.createElement("img");
img.src = image.src;
img.style.cursor = "Pointer";
img.alt = image.alt;
//img.title = infotext;
button.appendChild(img);
if(infotext && infotext.length) {
var span = document.createElement("span");
span.className = "visually-hidden";
span.innerHTML = " "+infotext+".";
button.appendChild(span);
}
button.onclick = clickFunc;
return button;
} // createImageButton
JB.activateCheckBoxGroups = function(MapId,MapHead) {
this.MapId = MapId;
var dieses = this;
var handleMenuButtonClick = function(e) {
e.preventDefault();
for(var m in dieses.menuElements) {
if(m != this.id) {
dieses.menuElements[m].menuButton.setAttribute("aria-pressed", false);
dieses.menuElements[m].ol.setAttribute("aria-expanded", false);
}
}
var pressed = !(this.getAttribute("aria-pressed") === "true");
this.setAttribute("aria-pressed", pressed);
if(!pressed && dieses.active) dieses.menuElements[dieses.active].ol.setAttribute("aria-expanded", false);
dieses.active = pressed?this.id:null;
if(pressed && dieses.active) dieses.menuElements[dieses.active].ol.setAttribute("aria-expanded", true);
}
var handleMenuButtonFocus = function(e) {
e.preventDefault();
for(var m in dieses.menuElements) {
if(m != this.id) {
dieses.menuElements[m].menuButton.setAttribute("aria-pressed", false);
dieses.menuElements[m].ol.setAttribute("aria-expanded", false);
}
}
this.setAttribute("aria-pressed", true);
dieses.active = this.id;
dieses.menuElements[dieses.active].ol.setAttribute("aria-expanded", true);
}
var keydown = function(event) {
if(JB.GPX2GM.globalMapParameter.activeMapId!=dieses.MapId) return;
var keyCode = event.keyCode;
if(event.altKey) {
switch(keyCode) {
case 87: // w
if(document.querySelector("#"+MapHead.id+"_Wegpunkte"))
document.querySelector("#"+MapHead.id+"_Wegpunkte").click();
break;
case 84: // t
if(document.querySelector("#"+MapHead.id+"_Tracks"))
document.querySelector("#"+MapHead.id+"_Tracks").click();
break;
case 82: // r
if(document.querySelector("#"+MapHead.id+"_Routen"))
document.querySelector("#"+MapHead.id+"_Routen").click();
break;
}
return;
}
if(!dieses.active) return;
if(keyCode == 9) { // Tabulator
dieses.menuElements[dieses.active].menuButton.setAttribute("aria-pressed", false);
dieses.menuElements[dieses.active].activeLine = -1;
dieses.menuElements[dieses.active].activeRow = 0;
dieses.menuElements[dieses.active].ol.setAttribute("aria-expanded", false);
dieses.active = null;
return;
}
if(keyCode && (keyCode==27 || keyCode==37 || keyCode==38 || keyCode==39 || keyCode==40)) {
event.preventDefault();
var menuElement = dieses.menuElements[dieses.active];
switch(keyCode) {
case 37: // links
menuElement.activeRow = 1 - menuElement.activeRow;
break;
case 38: // rauf
menuElement.activeLine --;
if(menuElement.activeLine < 0) {
menuElement.menuButton.setAttribute("aria-pressed", false);
menuElement.activeLine = -1;
menuElement.activeRow = 0;
dieses.active = null;
menuElement.ol.setAttribute("aria-expanded", false);
return;
}
break;
case 39: // rechts
menuElement.activeRow = 1 - menuElement.activeRow;
break;
case 40: // runter
menuElement.activeLine ++;
if(menuElement.activeLine >= menuElement.elements.length) menuElement.activeLine = menuElement.elements.length - 1;
if(menuElement.activeLine == 0) {
menuElement.menuButton.setAttribute("aria-pressed", true);
menuElement.ol.setAttribute("aria-expanded", true);
}
break;
case 27: // escape
menuElement.menuButton.setAttribute("aria-pressed", false);
menuElement.activeLine = -1;
menuElement.activeRow = 0;
dieses.active = null;
menuElement.ol.setAttribute("aria-expanded", false);
return;
break;
}
if(menuElement.activeLine > -1) menuElement.elements[menuElement.activeLine][menuElement.activeRow].focus();
}
}
var inPath = function(node,toSearch) {
var path = [];
while(node && node != document.body) {
path.push(node);
node = node.parentNode;
}
return path.indexOf(toSearch) > -1;
}
var closeActive = function(element) {
if(dieses.active) {
if(!inPath(element.target,dieses.menuElements[dieses.active].menu)) {
if(!dieses.delayclose) dieses.delayclose = window.setTimeout(function(){
dieses.menuElements[dieses.active].menuButton.setAttribute("aria-pressed", false);
dieses.menuElements[dieses.active].activeLine = -1;
dieses.menuElements[dieses.active].activeRow = 0;
dieses.menuElements[dieses.active].ol.setAttribute("aria-expanded", false);
dieses.active = null;
dieses.delayclose = null;
},500);
}
}
}
var menus = MapHead.querySelectorAll(".JBcheckbox");
this.menuElements = {};
this.active = null;
this.delayclose = null;
for(var i=0;i/g,"\n").replace(/ /g," "));
}
if(errorflag) {
if(typeof(console) != "undefined" && typeof(console.error) == "function")
console.error(id+": "+Infotext);
// else
alert(Infotext);
}
} // Debug_Info
JB.Wait = function(id,scripte,callback,ct) {
var Text = "";
var flag = true;
ct = ct || 1;
for(var i=0;i"};
if(url.length==0) {
JB.Debug_Info(id,"Kein Dateiname",false);
callback(result, 0, null);
return;
}
request = new XMLHttpRequest();
if(request) {
JB.Debug_Info(id,"XMLHttpRequest");
request.addEventListener('load', function(event) {
if ((request.status >= 200 && request.status < 300) || request.status == 0) {
if(format=="b") result.binarydata = new Uint8Array(request.response);
else { result.asciidata = request.responseText }
JB.Debug_Info(id,"Datei konnte geladen werden, Status: "+request.status+", Datei: "+url,false);
var lastmodified = request.getResponseHeader("Last-Modified");
if(lastmodified) {
lastmodified = new Date(Date.parse(lastmodified));
var lmstr;
if(JB.GPX2GM.parameters.doclang=="en")
lmstr = {d: lastmodified.toLocaleDateString('en-EN'), t: lastmodified.toLocaleTimeString('en-EN')};
else if(JB.GPX2GM.parameters.doclang=="fr")
lmstr = {d: lastmodified.toLocaleDateString('fr-FR'), t: lastmodified.toLocaleTimeString('fr-FR')};
else
lmstr = {d: lastmodified.toLocaleDateString('de-DE'), t: lastmodified.toLocaleTimeString('de-DE')};
}
callback(result, request.status, lmstr);
}
else {
JB.Debug_Info(id,"Datei konnte nicht geladen werden, Status: "+request.status+", Datei: "+url,true);
callback(result,request.status,null);
}
});
request.addEventListener('error', function(event) {
JB.Debug_Info(id,"Datei konnte nicht geladen werden, Status: "+request.status+", Datei: "+url,true);
callback(result,request.status,null);
});
request.open("GET",url);
if(format=="b") request.responseType = "arraybuffer";
request.send();
}
else {
JB.Debug_Info(id,"XMLHttpRequest konnte nicht erstellt werden, Datei: "+url,true)
callback(result,-1,null);
}
} // loadFile_xml
JB.LoadFile_local = function(file, format, callback) {
var id = "loadFile_local";
if(typeof(FileReader)=="function" || typeof(FileReader)=="object") {
var reader = new FileReader();
var result={};
reader.readAsDataURL(file.fileobject);
reader.onload = function(evt) {
result.dataurl = evt.target.result;
if(format=="b") reader.readAsArrayBuffer(file.fileobject);
else reader.readAsText(file.fileobject);
reader.onload = function(evt) {
if(format=="b") result.binarydata = new Uint8Array(evt.target.result);
else result.asciidata = evt.target.result;
var lastmodified = new Date(file.fileobject.lastModified);
callback(result,200,{d:lastmodified.toLocaleDateString(),t:lastmodified.toLocaleTimeString()});
}
reader.onerror = function(evt) {
JB.Debug_Info(id,"Datei konnte nicht geladen werden, Status: "+evt.target.error.name+", Datei: "+file.name,true);
callback({},42,null);
}
}
reader.onerror = function(evt) {
JB.Debug_Info(id,"Datei konnte nicht geladen werden, Status: "+evt.target.error.name+", Datei: "+file.name,true);
callback({},42,null);
}
}
else {
JB.Debug_Info(id,"FileReader wird vom Browser nicht unterst\u00fctzt.",true);
JB.Debug_Info(id,"FileReader = "+FileReader+"; typeof(FileReader) = "+typeof(FileReader),false);
}
} // JB.LoadFile_local
JB.entf = (function() {
var fak = Math.PI/180,ls,le,hs,he,be,sinbs,sinbe,cosbs,cosbe,dh,arg,e;
var si = Math.sin, co = Math.cos, ac = Math.acos, sq = Math.sqrt;
function entf_o() {
this.init = function(b,l,h) {
le = l*fak;
be = b*fak;
he = h;
sinbe = si(be);
cosbe = co(be);
}
this.rechne = function(b,l,h) {
ls = le ;
le = l*fak;
hs = he ;
he = h;
be = b*fak;
dh = (h - hs)/1000;
sinbs = sinbe;
cosbs = cosbe;
sinbe = si(be);
cosbe = co(be);
arg = sinbs*sinbe + cosbs*cosbe*co(ls-le);
if(arg>1) arg = 1; // arg kann durch die letzte Stelle schon mal >1 oder <-1 sein
else if(arg<-1) arg = -1;
e = ac ( arg ) * 6378.137;
if(dh!=0) e = sq(e*e+dh*dh);
return e;
}
}
return new entf_o();
})() // entf
JB.lpgpx = function(fns,id,callback) {
var dieses = this;
function xmlParse(str) {
JB.Debug_Info(id,"xmlParse -",false);
if(str && typeof DOMParser != 'undefined') {
str = str.replace(/>\s+<");
str = str.replace(/gpxtpx:|gpxx:/g,"");
str = str.replace(/cadence>/g,"cad>");
str = str.replace(/heartrate>/g,"hr>");
return (new DOMParser()).parseFromString(str, 'text/xml');
}
JB.Debug_Info(id,"xml konnte nicht geparsed werde!",false);
return document.createElement("div");
} // xmlParse
function rauf_runter(a) {
var l=a.length;
if(l<2) return { rauf:0, runter:0 } ;
var rauf = 0;
var runter = 0;
var h = a[0].hs;
a[0].rauf = rauf;
a[0].runter = runter;
var hm,dh;
for(var i=1;i0) rauf += dh;
else runter -= dh;
a[i].rauf = rauf;
a[i].runter = runter;
}
var korrektur = ( (a[a.length-1].h-a[0].h) - (rauf-runter) ) / 2;
rauf += korrektur;
runter -= korrektur;
rauf = Math.round(rauf);
runter = Math.round(runter);
a[a.length-1].rauf = rauf;
a[a.length-1].runter = runter;
return { rauf:rauf, runter:runter } ;
} // rauf_runter
function getTag_qs(ele,tagname,defval,child) {
var tag, val=defval;
if(child) tag = ele.querySelector(':scope > '+tagname);
else tag = ele.querySelector(tagname);
if( tag && tag.firstChild ) { val = tag.firstChild.data; }
return val;
} // getTag_qs
function getLink_qs(ele,defval,child) {
var tag, val=defval;
if(child) tag = ele.querySelector(':scope > link');
else tag = ele.querySelector("link");
if( tag ) {
if( tag.hasAttribute("href") ) { val = tag.getAttribute("href"); }
else if( tag.firstChild ) { val = tag.firstChild.data; }
}
return val;
} // getLink_qs
function getTag_ge(ele,tagname,defval,child) {
var tag = ele.getElementsByTagName(tagname), val=defval, tag0;
if( tag && tag.length ) {
tag0 = tag[0];
if( tag0.firstChild && (child?(tag0.parentNode==ele):true) )
val = tag0.firstChild.data;
}
return val;
} // getTag_ge
function getLink_ge(ele,defval,child) {
var tag = ele.getElementsByTagName("link"), val=defval, tag0;
if( tag && tag.length ) {
tag0 = tag[0];
if( (child?(tag0.parentNode==ele):true) ) {
if( tag0.hasAttribute("href") ) { val = tag0.getAttribute("href"); }
else if( tag0.firstChild ) { val = tag0.firstChild.data; }
}
}
return val;
} // getLink_ge
var getTag,getLink;
(function(){
var neu=false;
try {
var t1 = document.body.appendChild(document.createElement("div"));
var t2 = document.body.querySelector(':scope > div');
neu = true;
document.body.removeChild(t1);
}
catch(e) {}
if(neu) {
getTag = getTag_qs;
getLink = getLink_qs;
}
else {
getTag = getTag_ge;
getLink = getLink_ge;
}
})();
function utc2sec(utcdate) {
return Date.parse(utcdate)/1000;
} // utc2sec
function smooth(a,x,y,ys,range) {
var fak,faksum,sum,xi,xmin,xmax,xj,i,j,ai,aj,ti;
var l = a.length;
var t = [];
for(i=0;i(xl-x0)/4 || range==0) return t;
var glattpar = 1.0; // 1.3;
var dx;
for(i=0;i=0) {
aj = a[j];
xj = aj[x];
while(xj>xmin) {
dx = -(xj - xi)/range;
fak = 1 - glattpar*dx*dx;
sum += aj[y]*fak;
faksum += fak;
j--;
if(j<0) break;
aj = a[j];
xj = aj[x];
}
}
j = i + 1;
if(j=l) break;
aj = a[j];
xj = aj[x];
}
}
t[i][ys] = sum/faksum;
}
return t;
} // smooth
function diff(a,x,y,d,fak) {
var l=a.length,l1=l-1;
if(l<3) { for(var i=0;ilatmax) latmax = t;
t = parseFloat(gpxbounds[0].getAttribute("minlon"));
if(tlonmax) lonmax = t;
}
// Tracks
var trk = xml.documentElement.getElementsByTagName("trk");
JB.Debug_Info(id,trk.length +" Tracks gefunden",false);
if(dieses.parameters.gpxtracks) for(var k=0;k1) {
tnr++;
var tracki = { laenge:0, rauf:0, runter:0, t0:0, tzoff:0, vmitt:0, vmittwop:0, fnr:fnr};
tracki.name = getTag(trkk,"name","Track "+k,true);
tracki.cmt = getTag(trkk,"cmt","",true);
tracki.desc = getTag(trkk,"desc","",true);
tracki.link = getLink(trkk,"",true);
tracki.farbe = dieses.parameters.tcols[tnr%dieses.parameters.tcols.length];
tracki.latmin=1000;tracki.latmax=-1000;
tracki.lonmin=1000;tracki.lonmax=-1000;
if(dieses.parameters.displaycolor) {
var ext = trkk.getElementsByTagName("extensions");
if(ext.length) {
tracki.farbe = getTag(ext[0],"DisplayColor",dieses.parameters.tcols[tnr%dieses.parameters.tcols.length],false);
if(tracki.farbe.toLowerCase()=="darkyellow") tracki.farbe = "#8b8b00";
}
}
var daten = [];
var hflag=true,tflag=true,vflag=dieses.parameters.readspeed,hrflag=true,cadflag=true,h,t,v,hr,cad,tabs,tmp,cadfound=false;
JB.Debug_Info(id,trkptslen+" Trackpunkte in Track "+k+" gefunden",false);
for(var i=0;ilatmax) latmax=lat;
if(lonlonmax) lonmax=lon;
}
if(lattracki.latmax) tracki.latmax=lat;
if(lontracki.lonmax) tracki.lonmax=lon;
h = getTag(trkptsi,"ele","nf",false);
if(h=="nf") hflag = false;
else h = parseFloat(h.replace(",",".")) * dieses.parameters.hfaktor;
tmp = getTag(trkptsi,"time","nf",false);
if(tmp!="nf") {
tabs = utc2sec(tmp)/3600;
if( i==0 ) {
tracki.t0 = tabs;
t = 0;
t0 = tracki.t0;
}
else
t = tabs - t0;
}
else {
tflag = false;
tabs = t = 0;
}
if(vflag) {
if((tmp=getTag(trkptsi,"speed","nf",false)) != "nf")
v = parseFloat(tmp) * dieses.parameters.speedfaktor;
else {
v = 0;
vflag = false;
}
}
hr = getTag(trkptsi,"hr","nf",false);
if(hr=="nf") hrflag = false;
else hr = parseFloat(hr);
if(cadflag) {
if((tmp=getTag(trkptsi,"cad","nf",false)) != "nf") {
cad = parseFloat(tmp);
cadfound = true;
}
else {
cad = 0;
}
}
var dateni = {lat:lat,lon:lon,t:t,h:h,v:v,hr:hr,cad:cad,tabs:tabs};
daten.push(dateni);
} // Trackdaten erfassen
if(!hflag) hflag = korr(daten,"h"); // Höhen korrigieren
if(!hrflag) hrflag = korr(daten,"hr"); // Puls korrigieren
cadflag &= cadfound;
var tracklen = 0;
daten[0].x = tracklen;
daten[0].dx = 0;
var dateni,dx;
dateni = daten[0];
JB.entf.init(dateni.lat,dateni.lon,0.0) ;
for(var i=1;i gpxdaten.tracks.latmax) gpxdaten.tracks.latmax = tracki.latmax;
if(tracki.lonmax > gpxdaten.tracks.lonmax) gpxdaten.tracks.lonmax = tracki.lonmax;
}
}
gpxdaten.tracks.anzahl = gpxdaten.tracks.track.length;
gpxdaten.tracks.t0 = gpxdaten.tracks.anzahl ? gpxdaten.tracks.track[0].t0 : 0;
// Routen
var rte = xml.documentElement.getElementsByTagName("rte");
JB.Debug_Info(id,rte.length +" Routen gefunden",false);
if(dieses.parameters.gpxrouten) for(var j=0;jlatmax) latmax=lat;
if(lonlonmax) lonmax=lon;
}
if(latroutei.latmax) routei.latmax=lat;
if(lonroutei.lonmax) routei.lonmax=lon;
daten.push({lat:lat,lon:lon,x:routlen});
var rpts = rteptsi.getElementsByTagName("rpt"); // Routenpunkte
if(rpts.length>0) JB.Debug_Info(id,rpts.length +" Routenpunkte (Garmin) gefunden",false);
for(var k=0;klatmax) latmax=lat;
if(lonlonmax) lonmax=lon;
}
if(latroutei.latmax) routei.latmax=lat;
if(lonroutei.lonmax) routei.lonmax=lon;
daten.push({lat:lat,lon:lon,x:routlen});
}
}
routei.daten = daten;
routei.laenge = Math.round(routlen*10)/10;
gpxdaten.routen.route.push(routei);
gpxdaten.routen.laenge += Math.round(routlen*10)/10;
if(routei.latmin < gpxdaten.routen.latmin) gpxdaten.routen.latmin = routei.latmin;
if(routei.lonmin < gpxdaten.routen.lonmin) gpxdaten.routen.lonmin = routei.lonmin;
if(routei.latmax > gpxdaten.routen.latmax) gpxdaten.routen.latmax = routei.latmax;
if(routei.lonmax > gpxdaten.routen.lonmax) gpxdaten.routen.lonmax = routei.lonmax;
}
gpxdaten.routen.anzahl = gpxdaten.routen.route.length;
// Waypoints
var wpts = xml.documentElement.getElementsByTagName("wpt");
JB.Debug_Info(id,wpts.length +" Wegpunkte gefunden",false);
if(dieses.parameters.gpxwegpunkte) for(var i=0;ilatmax) latmax=lat;
if(lonlonmax) lonmax=lon;
}
if(latgpxdaten.wegpunkte.latmax) gpxdaten.wegpunkte.latmax=lat;
if(longpxdaten.wegpunkte.lonmax) gpxdaten.wegpunkte.lonmax=lon;
var waypoint = {};
waypoint.lat = lat;
waypoint.lon = lon;
waypoint.name = getTag(wpt,"name","",false);
waypoint.cmt = getTag(wpt,"cmt","",false);
waypoint.desc = getTag(wpt,"desc","",false);
waypoint.link = getLink(wpt,"",false);
waypoint.sym = getTag(wpt,"sym","default",false);
waypoint.time = utc2sec(getTag(wpt,"time","1980-01-01T12:00:00Z",false));
gpxdaten.wegpunkte.wegpunkt.push(waypoint);
}
gpxdaten.wegpunkte.anzahl = gpxdaten.wegpunkte.wegpunkt.length;
gpxdaten.latmin = latmin;
gpxdaten.latmax = latmax;
gpxdaten.lonmin = lonmin;
gpxdaten.lonmax = lonmax;
return gpxdaten
} // parseGPX
function lpgpxResponse(response,status,filelastmod) {
if( (status >= 200 && status < 300) || status == 0) {
gpxdaten = parseGPX(xmlParse(response.asciidata),gpxdaten,id,fnr);
fns[fnr].filelastmod = filelastmod;
}
else
JB.Debug_Info(id,fns[fnr].name+" konnte nicht gelesen werden",true);
if(fns[++fnr]) {
JB.Debug_Info(id,fns[fnr].name,false);
JB.loadFile(fns[fnr],"a",lpgpxResponse);
}
else {
callback.call(dieses,gpxdaten);
}
} // lpgpxResponse
JB.Debug_Info(id,fns[fnr].name,false);
window.requestAnimationFrame(function() { JB.loadFile(fns[fnr],"a",lpgpxResponse); });
} // JB.lpgpx
// Ende lpgpx.js
JB.LoadScript = function(url,callback) {
var scr = document.createElement('script');
scr.type = "text/javascript";
scr.async = "async";
if(typeof(callback)=="function") {
scr.onloadDone = false;
scr.onload = function() {
if ( !scr.onloadDone ) {
scr.onloadDone = true;
JB.Debug_Info(url,"loaded",false);
callback();
}
};
scr.onreadystatechange = function() {
if ( ( "loaded" === scr.readyState || "complete" === scr.readyState ) && !scr.onloadDone ) {
scr.onloadDone = true;
JB.Debug_Info(url,"ready",false);
callback();
}
}
}
scr.onerror = function() {
JB.Debug_Info(url,"Konnte nicht geladen werden.",false);
}
scr.src = url;
document.getElementsByTagName('head')[0].appendChild(scr);
} // LoadScript
JB.LoadCSS = function(url) {
var l = document.createElement("link");
l.type = "text/css";
l.rel = "stylesheet";
l.href = url;
document.getElementsByTagName("head")[0].appendChild(l);
JB.Debug_Info(url,"load",false);
l.onerror = function() {
JB.Debug_Info(url,"Konnte nicht geladen werden.",false);
}
} // LoadCSS
JB.onresize = function(ele,callback,run) {
var w = ele.offsetWidth;
var h = ele.offsetHeight;
if(run) window.setTimeout(function() {callback(w,h)});
return window.setInterval(function() {
var ww = ele.offsetWidth;
var hh = ele.offsetHeight;
if(w != ww || h != hh) {
w = ww;
h = hh;
callback(w,h);
}
},200);
} // onresize
JB.offresize = function(id) {
window.clearInterval(id);
} // offresize
JB.farbtafel = function(n) {
var gauss = function(a,hwb,pos,x) {
var t = (x-pos)/hwb;
return Math.round(a*Math.exp(-t*t));
}
var tafel = [],r,g,b,i,n2=n*n;
for(i=0;i128;r--) tafel.push("rgb("+r+","+0+","+0+")");
return tafel;
} // farbtafel_bipolar
JB.addClass = function(classname,element) {
if(element.classList) element.classList.add(classname);
else {
var cn = element.className;
if(cn.indexOf(classname)!=-1) {
return;
}
if(cn!='') {
classname = ' '+classname;
}
element.className = cn+classname;
}
} // addClass
JB.removeClass = function(classname,element) {
if(element.classList) element.classList.remove(classname);
else {
var cn = element.className;
var rxp = new RegExp("\\s?\\b"+classname+"\\b","g");
cn = cn.replace(rxp,'');
element.className = cn;
}
} // removeClass
JB.getRect = function (o) {
var r = { top:0, left:0, width:0, height:0 };
if(!o) return r;
else if(typeof o == 'string' ) o = document.getElementById(o);
if(typeof o != 'object') return r;
if(typeof o.offsetTop != 'undefined') {
r.height = o.offsetHeight;
r.width = o.offsetWidth;
r.left = r.top = 0;
while (o && o.tagName != 'BODY') {
r.top += parseInt( o.offsetTop );
r.left += parseInt( o.offsetLeft );
o = o.offsetParent;
}
}
return r;
} // getRect
JB.openurl = function(url) {
if(url.search("~")==0) window.location.href = url.substr(1);
else if(JB.GPX2GM.parameters.linktarget == "") window.location.href = url;
else if(JB.GPX2GM.parameters.linktarget == "popup") window.open(url,"",JB.GPX2GM.parameters.popup_Pars);
else {
var a = document.createElement("a");
a.href = url;
a.target = JB.GPX2GM.parameters.linktarget;
document.body.appendChild(a);
a.click();
a.parentNode.removeChild(a);
}
} // openurl
JB.gmcb = function() {
JB.Scripte.maplib = 2;
JB.Debug_Info("Start","maps.google.com/maps/api/js?libraries=geometry&callback=JB.gmcb",false);
} // gmcb
JB.GPX2GM.start = function() {
JB.Debug_Info("","GPXViewer "+JB.GPX2GM.ver+" vom "+JB.GPX2GM.dat,false);
if(!JB.debuginfo && typeof(console) != "undefined" && typeof(console.log) == "function" )
console.log("GPXViewer "+JB.GPX2GM.ver+" vom "+JB.GPX2GM.dat);
JB.LoadCSS(JB.GPX2GM.Path+"GPX2GM.css");
JB.LoadScript(JB.GPX2GM.Path+"GPX2GM_Defs.js", function() {
JB.GPX2GM.setparameters();
JB.GPX2GM.parameters.mapapi = JB.GPX2GM.check_API();
if(!JB.GPX2GM.GM_usage_ok()) return;
JB.Scripte.maputils = 1;
JB.Scripte.maplib = 1;
if(JB.GPX2GM.parameters.mapapi=="gm") {
var gmurl = "https://maps.google.com/maps/api/js?libraries=geometry&callback=JB.gmcb";
if(JB.GPX2GM.GM_Api_key && (location.protocol=="https:" || location.protocol=="http:") ) gmurl += "&key="+JB.GPX2GM.GM_Api_key;
if(document.documentElement.hasAttribute("lang") && document.documentElement.getAttribute("lang")!="de") gmurl += "&language=en";
JB.LoadScript(gmurl, function() {});
JB.LoadScript(JB.GPX2GM.Path+"gmutils.js", function() { JB.Scripte.maputils = 2; } );
}
else {
JB.LoadScript(JB.GPX2GM.Path+"leaflet/leaflet.js", function() { JB.Scripte.maplib = 2; });
JB.LoadCSS(JB.GPX2GM.Path+"leaflet/leaflet.css");
JB.LoadScript(JB.GPX2GM.Path+"osmutils.js", function() { JB.Scripte.maputils = 2; } );
}
JB.Scripte.GPX2GM_Defs = 2;
JB.icons = new JB.Icons(JB.GPX2GM.Path);
JB.Debug_Info("Start","Icons vorbereitet",false);
var Map_Nr=0;
var divs = document.querySelectorAll("div[class*='gpxview:'],figure[class*='gpxview:']");
var typ = undefined;
var maps=[];
var trenner_re = JB.GPX2GM.parameters.dateitrenner.replace(/[$*+?|.@^]/g,"\\$&");
var re = new RegExp('\\s*'+trenner_re+'\\s*', 'g');
for(var i=0;i=0 && JB.GPX2GM.parameters.dateitrenner != ";") GPX = GPX.split(";");
else GPX = GPX.split(":");
if(GPX.length>=3) {
typ = GPX[2];
}
maps["Karte_"+Id] = div.makeMap = new JB.makeMap(Id);
maps["Karte_"+Id].ShowGPX(GPX[1].split(JB.GPX2GM.parameters.dateitrenner),typ);
}
var buttons = document.querySelectorAll("button[class*='gpxview:']");
for(var i=0;i=0 && JB.GPX2GM.parameters.dateitrenner != ";") cmd = cmd.split(";") ;
else cmd = cmd.split(":") ;
if(cmd.length>2) {
var Id = cmd[1];
switch(cmd[2]) {
case "skaliere":
( function() {
var mapid = "Karte_"+Id;
if(cmd.length == 3)
button.onclick = function(){maps[mapid].Rescale()};
else if(cmd.length == 4) {
var pars = cmd[3].split(",");
button.onclick = function(){maps[mapid].Rescale(pars[0],pars[1],pars[2])};
}
} )();
break;
case "lade":
if(cmd.length>3) {
if(cmd.length>4) typ = cmd[4];
else typ = "";
( function() {
var fn = cmd[3].split(JB.GPX2GM.parameters.dateitrenner);
var mapid = "Karte_"+Id;
var tp = typ;
button.onclick = function(){maps[mapid].ShowGPX(fn,tp)};
} )();
}
break;
default:
break;
}
}
}
var selects = document.querySelectorAll("select[class^='gpxview']");
for(var i=0;i"+antwort+"";
return false;
}
}
}
}
else {
return true;
}
} // JB.GPX2GM.GM_usage_ok
JB.GPX2GM.check_API = function() {
if(JB.GPX2GM.parameters && JB.GPX2GM.parameters.mapapi) var mapapi = JB.GPX2GM.parameters.mapapi;
else if(typeof(Mapapi)!="undefined") var mapapi = Mapapi;
else var mapapi = "osm";
if(window.location.search) {
var pars = decodeURI(window.location.search.substring(1));
var parsarr = pars.split(";");
for(var i=0;iLeider wird Ihr Browser vom GPX-Viewer nicht mehr unterstützt.";
console.error("Leider wird Ihr Browser vom GPX-Viewer nicht mehr unterstützt.");
}
}
}