1$(function() { 2 var strLang = $('html').attr('lang'); 3 4 var arrDictionary = { 'Aktuelle Position': 'Current location', 5 'Suche': 'Search', 6 'Es konnten leider keine Objekte in der Nähe (<': 'Unfortunately, no objects could be found nearby (<', 7 'm) gefunden werden.': 'm).', 8 ' Zoomen Sie einmal heraus um einen Größeren Bereich zu durchsuchen.': ' Zoom out to conduct a search across a larger area.', 9 'Keine Suchtreffer': 'No hits', 10 'Dies ist eine von Google ermittelte Position. Diese basiert auf der Adresse': 'This location was determined by Google based on the address', 11 'Dies ist die von Ihrem Ger\u00e4t gesendete Position, an der Sie sich aktuell aufhalten. Falls dies nicht korrekt ist, k\u00f6nnen Sie den Marker durch Drag and Drop auch an eine andere Position verschieben.': 'This is the position where you are located according to your device. If it is not correct, you can move the marker to another location using the drag & drop function.', 12 'Dies ist eine benutzerdefinierte Position. Sie k\u00f6nnen den Marker durch Drag and Drop an eine andere Position verschieben.': 'This is a user-defined location. You can move the marker to another position using the drag & drop function.', 13 'Geomarker verschoben': 'Geomarker moved', 14 'Einrichtungen': 'Organisation units', 15 'Gebäude': 'Buildings', 16 'Fahrplan': 'Schedule', 17 'Informationen': 'Information', 18 ' Treffer gefunden': ' hits', 19 'Routenplaner': 'Directions', 20 'Benutzerdefinierte Position': 'User-defined location', 21 'Es konnten leider keine Suchtreffer zu Ihrer Anfrage gefunden werden.': 'Unfortunately no search results could be found for your query.', 22 'Fehler: Koordinaten': 'Error: Coordinates', 23 'Zur Berechnung einer Route müssen genau zwei Marker auf der Karte existieren. Einer für Ihren Startpunkt und einer für Ihren Zielpunkt.': 'To calculate a route, there have to be exactly two markers on the map.', 24 'Fehler: Berechnung der Route': 'Error: Route calculation', 25 'Es gab leider Probleme bei der Berechnung Ihrer Route. Bitte versuchen Sie es später erneut.': 'Unfortunately, there were problems calculating your route. Please try again at a later time.', 26 'Route berechnen': 'Calculate route', 27 'Route entfernen': 'Clear route', 28 'Zielpunkt': 'Destination', 29 'In RWTH Maps suchen': 'Search RWTH Maps', 30 'Fehler: Geolocation': 'Error: Geolocation', 31 'Ihr Ger\u00e4t verbietet der Anwendung ihre aktuelle Geolocation zu ermitteln.': 'Your device does not allow the application to detect your current geolocation.', 32 'Ihre aktuelle Geolocation konnte nicht ermittelt werden.': 'It was not possible to detect your geolocation.', 33 'Es hat zu lange gedauert ihre Geolocation zu ermitteln, sodass der Versuch abgebrochen wurde.': 'It took too long to determine your geolocation, so the attempt was aborted.', 34 'Ein unbekannter Fehler ist beim Ermitteln der Geolocation aufgetreten.': 'An unknown error occurred when determining your geolocation.', 35 'Men\u00fc ausblenden': 'Collapse side panel', 36 'Men\u00fc einblenden': 'Expand side panel', 37 'Suche leeren': 'Clear search', 38 'Keine Relation': 'No relation', 39 'Als Startpunkt setzen': 'Set as starting point', 40 'Als Zielpunkt setzen': 'Set as destination', 41 'Es konnten leider keine Objekte gefunden werden, die in Relation zu diesem Objekt stehen.': 'Unfortunately no relations could be found for your query.', 42 'RWTH Parkplatz': 'RWTH parking', 43 'Öffentlicher Parkplatz': 'Public parking', 44 'Parkzonen einblenden': 'Show parking zones', 45 'Lade Parkzonen...': 'Loading parking zones...', 46 'Parkzonen ausblenden': 'Hide parking zones', 47 'Umweltzone einblenden': 'Show environmental zone', 48 'Lade Umweltzone...': 'Loading environmental zone...', 49 'Umweltzone ausblenden': 'Hide environmental zone' }; 50 51 var ajaxURL = '//maps.rwth-aachen.de/navigator/libraries/rwth/ajax/getBuildings.asp?lang=' + strLang; 52 53 var allowChangeURL = 1;
53 // 0 = false, 1 = pushState, 2 = replaceState 54 var mobileVersion = $('body').hasClass('mobile'); 55 56 var markerBuilding = []; 57 var polygonParkingZones = []; 58 var polygonEnvironmentalZone = []; 59 60 var posMenu = google.maps.ControlPosition.RIGHT_TOP; 61 if (mobileVersion) posMenu = google.maps.ControlPosition.LEFT_BOTTOM; 62 63 mapTypeId = google.maps.MapTypeId.ROADMAP; 64 if ($('#startingParameters').attr('data-maptype') == 'satellite') mapTypeId = google.maps.MapTypeId.SATELLITE; 65 else if ($('#startingParameters').attr('data-maptype') == 'hybrid') mapTypeId = google.maps.MapTypeId.HYBRID; 66 else if ($('#startingParameters').attr('data-maptype') == 'terrain') mapTypeId = google.maps.MapTypeId.TERRAIN; 67 68 var defaultZoom = 15; 69 if ($('#startingParameters').attr('data-start-z') != '' && parseInt($('#startingParameters').attr('data-start-z')) > 0) defaultZoom = Math.max( 1, Math.min( parseInt($('#startingParameters').attr('data-start-z')), 18 ) ); 70 var defaultLat = 50.77767; 71 if ($('#startingParameters').attr('data-start-x') != '' && parseFloat($('#startingParameters').attr('data-start-x')) > 0.0) defaultLat = parseFloat($('#startingParameters').attr('data-start-x')); 72 var defaultLng = 6.077912; 73 if ($('#startingParameters').attr('data-start-y') != '' && parseFloat($('#startingParameters').attr('data-start-y')) > 0.0) defaultLng = parseFloat($('#startingParameters').attr('data-start-y')); 74 75 var modifyZoom = 0; 76 if ($('#startingParameters').attr('data-modify-z') != '') { 77 let newModifyZoom = Number($('#startingParameters').attr('data-modify-z')); 78 if (Number.isInteger(newModifyZoom)) modifyZoom = newModifyZoom; 79 } 80 81 $('html').addClass('accepted'); 82 $('#main-menu').css({ 83 'height': 'auto', 84 }); 85 86 var staticmode = $('#startingParameters').attr('data-static') != ''; 87 if (staticmode) $('body').addClass('static'); 88 else $('body').removeClass('static'); 89 90 // Default-Parameter, wenn man ohne URL-Parameter in die Anwendung kommt 91 var options = { 92 zoom: defaultZoom, 93 center: { 94 lat: defaultLat, 95 lng: defaultLng 96 }, 97 zoomControl: false, 98 keyboardShortcuts: !staticmode, 99 scaleControl: true, 100 rotateControl: false, 101 cameraControl: !staticmode, 102 tilt: 0, 103 mapMarker: true, 104 disableDoubleClickZoom: !mobileVersion, 105 draggableCursor: (staticmode ? 'default' : 'pointer'), 106 gestureHandling: (staticmode ? 'none' : (window != top ? 'cooperative' : 'greedy')), 107 mapTypeControl: !staticmode, 108 mapTypeControlOptions: { 109 position: posMenu 110 }, 111 streetViewControl: false, 112 mapTypeId: mapTypeId, 113 styles: [ { 114 featureType: 'poi', 115 elementType: 'labels', 116 stylers: [ { 117 visibility: 'off' 118 } ] 119 }, { 120 featureType: 'transit.station', 121 stylers: [ { 122 visibility: 'off' 123 } ] 124 } ] 125 }; 126 127 map = new google.maps.Map( document.getElementById("mappart"), options ); 128 129 const trafficLayer = new google.maps.TrafficLayer(); 130 trafficLayer.setMap(map); 131 132 geocoder = new google.maps.Geocoder(); 133 dirService = new google.maps.DirectionsService(); 134 dirDisplay = new google.maps.DirectionsRenderer({ 135 draggable: false, 136 suppressMarkers: true, 137 polylineOptions: { 138 strokeColor: '#00B3FD', 139 strokeOpacity: 1.0, 140 strokeWeight: 5 141 } 142 }); 143 144 google.maps.event.addListenerOnce(map, 'idle', function() { 145 allowChangeURL = 2; 146 restoreURLValues(); 147 }); 148 149 google.maps.event.addListener(map, 'zoom_changed', function() { 150 var oldStatus = $('body').hasClass('wideview'); 151 if ( map.getZoom() < 17 ) $('body').addClass('wideview'); 152 else $('body').removeClass('wideview'); 153 var newStatus = $('body').hasClass('wideview'); 154 155 if ( oldStatus != newStatus ) { 156 for ( key in markerBuilding ) { 157 if ( markerBuilding[key].polygon != null ) { 158 markerBuilding[key].polygon.setMap( newStatus ? null : map ); 159 } 160 } 161 } 162 }); 163 164 google.maps.event.addListener(map, 'maptypeid_changed', function() { 165 for ( key in markerBuilding ) { 166 if ( markerBuilding[key].polygon != null ) { 167 highlightPolygon ( markerBuilding[key].polygon, 0 ) 168 } 169 } 170 171 $('#map').removeClass().addClass(map.getMapTypeId()); 172 173 changeURL( 'changed Map Type' ); 174 }); 175 176 google.maps.event.addListener(map, 'click', function(e) { 177 if (staticmode) return; 178 179 var param = e.latLng.lat() + ';' + e.latLng.lng() + ';false;anything;0.11'; 180 181 $('#selectableInfoWrapper').hide('fade', {}, 250, function() { 182 $('#selectableInfoWrapper .selectableInfo').remove(); 183 184 $.ajax({
185 url: ajaxURL + "&mode=distance&q=" + param, 186 dataType: 'json', 187 success: function( items ) { 188 if (items.length >= 1) { 189 var minItem = items[0] 190 var didSth = false; 191 192 for (var i = 0; i < items.length; i++ ) { 193 if (minItem.dst > items[i].dst) minItem = items[i]; 194 195 if (typeof items[i].pol !== 'undefined' && items[i].pol != '') { 196 var p = new google.maps.Polygon({ 197 paths: getArrayFromCoordString(items[i].pol), 198 map: null 199 }); 200 201 if (google.maps.geometry.poly.containsLocation(e.latLng, p)) { 202 var strInfo = '<p class="headline">' + items[i].bez + '</p>'; 203 if (items[i].adr != '') strInfo += '<p>' + items[i].adr.replace(/, /g, ',<br />') + '</p>'; 204 strInfo += '<p class="coordinates">' + (Math.round(items[i].lat * 100000) / 100000) + ', ' + (Math.round(items[i].lng * 100000) / 100000) + '</p>' 205 206 $('#selectableInfoWrapper').append('<div class="selectableInfo' + (didSth ? '' : ' first-child') + '">' + 207 '<div class="infodiv ' + items[i].typ + '">' + strInfo + '</div>' + 208 '<div class="navigateFrom tooltipright" title="' + translate('Als Startpunkt setzen') + '"></div>' + 209 '<div class="navigateTo tooltipright" title="' + translate('Als Zielpunkt setzen') + '"></div>' + 210 '</div>'); 211 jQuery.data( $('#selectableInfoWrapper .selectableInfo:last-child')[0], "item", items[i] ); 212 213 didSth = true; 214 } 215 } 216 } 217 218 if (!didSth) { 219 var strInfo = '<p class="headline">' + minItem.bez + '</p>'; 220 if (minItem.adr != '') strInfo += '<p>' + minItem.adr.replace(/, /g, ',<br />') + '</p>'; 221 strInfo += '<p class="coordinates">' + (Math.round(minItem.lat * 100000) / 100000) + ', ' + (Math.round(minItem.lng * 100000) / 100000) + '</p>' 222 223 $('#selectableInfoWrapper').append('<div class="selectableInfo first-child">' + 224 '<div class="infodiv ' + minItem.typ + '">' + strInfo + '</div>' + 225 '<div class="navigateFrom tooltipright" title="' + translate('Als Startpunkt setzen') + '"></div>' + 226 '<div class="navigateTo tooltipright" title="' + translate('Als Zielpunkt setzen') + '"></div>' + 227 '</div>'); 228 jQuery.data( $('#selectableInfoWrapper .selectableInfo:last-child')[0], "item", minItem ); 229 } 230 } else { 231 var lat = Math.round(e.latLng.lat() * 100000) / 100000, 232 lng = Math.round(e.latLng.lng() * 100000) / 100000; 233 234 var item = { 'gno': 'curpos', 'bez': translate('Benutzerdefinierte Position'), 'adr': '', 'img': 0, 'rel': 0, 'info': '', 'typ': 'geo', 'lat': lat, 'lng': lng } 235 236 var strInfo = '<p class="headline">' + item.bez + '</p>'; 237 strInfo += '<p class="coordinates">' + lat + ', ' + lng + '</p>' 238 239 $('#selectableInfoWrapper').append('<div class="selectableInfo first-child">' + 240 '<div class="infodiv ' + item.typ + '">' + strInfo + '</div>' + 241 '<div class="navigateFrom tooltipright" title="' + translate('Als Startpunkt setzen') + '"></div>' + 242 '<div class="navigateTo tooltipright" title="' + translate('Als Zielpunkt setzen') + '"></div>' + 243 '</div>'); 244 jQuery.data( $('#selectableInfoWrapper .selectableInfo:last-child')[0], "item", item ); 245 } 246 247 $('#selectableInfoWrapper .tooltipright').tooltip({ 248 position: { 249 my: "left center", 250 at: "right center", 251 collision: "none" 252 }, 253 classes: { "ui-tooltip": "ui-corner-all ui-widget-shadow arrowleft" } 254 }); 255 256 $('#selectableInfoWrapper').show( 'fade', {}, 250 ); 257 }, 258 error: function() {} 259 }); 260 }); 261 }); 262 263 google.maps.event.addListener(map, 'rightclick', function(e) { 264 if (staticmode) return; 265 266 $('#selectableInfoWrapper').hide('fade', {}, 250, function() { 267 $('#selectableInfoWrapper .selectableInfo').remove(); 268 269 var lat = Math.round(e.latLng.lat() * 100000) / 100000, 270 lng = Math.round(e.latLng.lng() * 100000) / 100000; 271 272 var item = { 'gno': 'curpos', 'bez': translate('Benutzerdefinierte Position'), 'adr': '', 'img': 0, 'rel': 0, 'info': '', 'typ': 'geo', 'lat': lat, 'lng': lng } 273 274 var strInfo = '<p class="headline">' + item.bez + '</p>'; 275 strInfo += '<p class="coordinates">' + lat + ', ' + lng + '</p>' 276 277 $('#selectableInfoWrapper').append('<div class="selectableInfo first-child">' + 278 '<div class="infodiv ' + item.typ + '">' + strInfo + '</div>' + 279 '<div class="navigateFrom tooltipright" title="' + translate('Als Startpunkt setzen') + '"></div>' + 280 '<div class="navigateTo tooltipright" title="' + translate('Als Zielpunkt setzen') + '"></div>' + 281 '</div>'); 282 jQuery.data( $('#selectableInfoWrapper .selectableInfo:last-child')[0], "item", item ); 283 284 $('#selectableInfoWrapper .tooltipright').tooltip({ 285 position: { 286 my: "left center", 287 at: "right center", 288 collision: "none" 289 }, 290 classes: { "ui-tooltip": "ui-corner-all ui-widget-shadow arrowleft" } 291 }); 292 293 $('#selectableInfoWrapper').show( 'fade', {}, 250 ); 294 }); 295 }); 296 297 setTimeout(function() { $('#overlayInfo').css('--imgcontainer-height', $('#overlayInfo .imgcontainer').outerHeight() + 'px'); }, 500); 298 window.addEventListener('resize', (evt) => { 299 $('#overlayInfo').css('--imgcontainer-height', $('#overlayInfo .imgcontainer').outerHeight() + 'px'); 300 301 let $addInfoTarget = $('#overlayInfo .additionalInfos'); 302 if ($addInfoTarget.length > 0) { 303 let calcHeightOfHeader = $('#overlayInfo .headline-bg').outerHeight() + $('#overlayInfo .imgcontainer').outerHeight() + 67; 304 $addInfoTarget.css('top', calcHeightOfHeader + 'px'); 305 } 306 }); 307 308 $('.building-attribute').on('mouseenter', function() { 309 $(this).next().show(); 310 }); 311 $('.building-attribute').on('mouseleave blur', function() { 312 $(this).removeClass('opened'); 313 $(this).next().hide(); 314 }); 315 $('.building-attribute').on('click', function() { 316 if (mobileVersion && !$(this).hasClass('mobile-link') && !$(this).hasClass('opened')) { 317 $(this).addClass('opened'); 318 $(this).next().show(); 319 } else if (typeof $(this).attr('data-link') != 'undefined' && $(this).attr('data-link') != '') { 320 window.open($(this).attr('data-link'), '_blank'); 321 } 322 }); 323 324 $('#map').on('resize', function() { 325 google.maps.event.trigger(map, 'resize'); 326 }); 327 328 let $hoverItemExpand = $('#hover-item-expand'), 329 $additionalInfos = $('#overlayInfo .additionalInfos')[0], 330 lastHoveredItem = null, 331 scrollTimerToReappear = null; 332 $('#overlayInfo .additionalInfos').on('mouseenter', '.additionalElement', function() { 333 lastHoveredItem = this; 334 $hoverItemExpand 335 .html('') 336 .append($($(this).html()).removeAttr('id').removeAttr('data-search')) 337 .css({ 338 'min-width': $additionalInfos.clientWidth + 'px', 339 'top': (this.getBoundingClientRect().top - 1) + 'px' 340 }); 341 }).on('mouseleave click', '.additionalElement', function() { 342 $hoverItemExpand.css('top', '-1000px'); 343 lastHoveredItem = null; 344 }).on('scroll', function() { 345 $hoverItemExpand.css('top', '-1000px'); 346 347 if (scrollTimerToReappear !== null) clearTimeout(scrollTimerToReappear); 348 scrollTimerToReappear = setTimeout(function() { 349 if (lastHoveredItem !== null) $hoverItemExpand.css('top', (lastHoveredItem.getBoundingClientRect().top - 1) + 'px'); 350 scrollTimerToReappear = null; 351 }, 150); 352 }); 353 354 $('#main-menu-wrapper .search-input').on('input', function() { 355 if ($('body').hasClass('routeplaner')) { 356 var doneSomething = false; 357 for ( key in markerBuilding ) { 358 if (markerBuilding[key].navStartEnd == $(this).next('span.searchplace').attr('data-marker')) { 359 if (markerBuilding[key].map != null) markerBuilding[key].setMap(null); 360 if (markerBuilding[key].polygon != null) markerBuilding[key].polygon.setMap(null); 361 delete markerBuilding[key]; 362 363 doneSomething = true; 364 } 365 } 366 367 if ( doneSomething ) { 368 clearRoute(); 369 changeURL( translate('Suche') ); 370 } 371 } 372 373 updateSearchItem('#' + $(this).attr('id')); 374 }); 375 376 function updateSearchItem( that ) { 377 var strLength = $(that).val().length; 378 379 if ( strLength > 0 ) { 380 $(that).next('span.searchplace').addClass('active').attr('title', translate('Suche')).html(translate('Suche')); 381 } else { 382 $(that).next('span.searchplace').removeClass('active'); 383 if ($('body').hasClass('geolocation')) $(that).next('span.searchplace').attr('title', translate('Aktuelle Position')).html(translate('Aktuelle Position')); 384 } 385 } 386 387 $('#search').autocomplete({ 388 source: function( request, response ) { 389 var strRoute = ''; 390 if ($('body').hasClass('routeplaner')) strRoute = '&route=1'; 391 392 $.ajax({
393 url: ajaxURL + "&q=" + escape(request.term).replace( new RegExp( '\\+', 'g' ), '%2B' ) + strRoute, 394 dataType: 'json', 395 success: function( data ) { 396 if (data.length == 0) $('.ui-autocomplete li').remove(); 397 response( data ); 398 } 399 }); 400 }, 401 select: function( event, ui ) { 402 $('#search').val(ui.item.bez).blur(); 403 404 successfulSearch( [ ui.item ], 0, 'end' ); 405 changeURL( translate('Suche') ); 406 407 $('.ui-autocomplete li').remove(); 408 return false; 409 }, 410 minLength: 3 411 }).autocomplete('instance')._renderItem = function( ul, item ) { 412 var str1 = item.bez; 413 var str2 = item.info; 414 415 var re = new RegExp('(' + escapeRegExp($('#search').val()) + ')', 'gi'); 416 str1 = str1.replace(re, '<span class="highlight">$1</span>'); 417 str2 = str2.replace(re, '<span class="highlight">$1</span>'); 418 419 return $('<li>').append('<div class="wrapperWrapper"><div class="wrapWrapper ' + item.typ + '">' + str1 + '<br /><span class="address">' + str2 + '</span></div></div>').appendTo(ul); 420 }; 421 422 $('#startNav').autocomplete({ 423 source: function( request, response ) { 424 var strRoute = ''; 425 if ($('body').hasClass('routeplaner')) strRoute = '&route=1'; 426 427 $.ajax({ 428 url: ajaxURL + "&q=" + escape(request.term) + strRoute, 429 dataType: 'json', 430 success: function( data ) { 431 if (data.length == 0) $('.ui-autocomplete li').remove(); 432 response( data ); 433 } 434 }); 435 }, 436 select: function( event, ui ) { 437 $('#startNav').val(ui.item.bez).blur(); 438 439 successfulSearch( [ ui.item ], 0, 'start' ); 440 changeURL( translate('Suche') ); 441 442 $('.ui-autocomplete li').remove(); 443 return false; 444 }, 445 minLength: 3 446 }).autocomplete('instance')._renderItem = function( ul, item ) { 447 var str1 = item.bez; 448 var str2 = item.info; 449 450 var re = new RegExp('(' + escapeRegExp($('#startNav').val()) + ')', 'gi'); 451 str1 = str1.replace(re, '<span class="highlight">$1</span>'); 452 str2 = str2.replace(re, '<span class="highlight">$1</span>'); 453 454 return $('<li>').append('<div class="wrapperWrapper"><div class="wrapWrapper ' + item.typ + '">' + str1 + '<br /><span class="address">' + str2 + '</span></div></div>').appendTo(ul); 455 }; 456 457 let $hoverSearchExpand = $('#hover-search-expand'), 458 $autocompleteContainer = $('#ui-id-2')[0], 459 lastHoveredSearch = null, 460 scrollTimerToReappear2 = null; 461 $('#ui-id-2, #ui-id-3').on('mouseenter', '.wrapperWrapper', function() { 462 lastHoveredSearch = this; 463 $hoverSearchExpand 464 .html('') 465 .append($(this).html()) 466 .css({ 467 'min-width': $(this).closest('.ui-autocomplete')[0].clientWidth + 'px', 468 'top': (this.getBoundingClientRect().top - 1) + 'px' 469 }); 470 }).on('mouseleave click', '.wrapperWrapper', function() { 471 $hoverSearchExpand.css('top', '-1000px'); 472 lastHoveredSearch = null; 473 }).on('scroll', function() { 474 $hoverSearchExpand.css('top', '-1000px'); 475 476 if (scrollTimerToReappear2 !== null) clearTimeout(scrollTimerToReappear2); 477 scrollTimerToReappear2 = setTimeout(function() { 478 if (lastHoveredSearch !== null) $hoverSearchExpand.css('top', (lastHoveredSearch.getBoundingClientRect().top - 1) + 'px'); 479 scrollTimerToReappear2 = null; 480 }, 150); 481 }); 482 483 function escapeRegExp( str ) { 484 return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); 485 } 486 487 function successfulSearch( items, addInfos, type ) { 488 $hoverSearchExpand.css('top', '-1000px'); 489 lastHoveredSearch = null; 490 491 if ($('body').hasClass('routeplaner') && items.length > 0) { 492 $('.ui-autocomplete li').remove(); 493 items = [ items[0] ]; 494 } 495 496 if (addInfos == 0) { 497 $('#main-menu .calcroute').addClass('delete').attr('title', translate('Suche leeren')).html(translate('Suche leeren')); 498 } 499 $('#overlayInfo .additionalInfos').html('').attr('data-nearobjects', '').attr('data-informations', ''); 500 501 var lengthItems = items.length; 502 503 for ( key in markerBuilding ) { 504 if (addInfos == 0 || !(markerBuilding[key].exportMarker)) { 505 if (markerBuilding[key].navStartEnd == type) { 506 if (markerBuilding[key].map != null) markerBuilding[key].setMap(null); 507 if (markerBuilding[key].polygon != null) markerBuilding[key].polygon.setMap(null); 508 delete markerBuilding[key]; 509 } 510 } 511 } 512 513 var errorMsg = translate('Es konnten leider keine Suchtreffer zu Ihrer Anfrage gefunden werden.'); 514 515 if ( lengthItems == 0 ) { 516 if (addInfos == 1) { 517 var distance = getDistanceFromZoom() * 1000; 518 errorMsg = translate('Es konnten leider keine Objekte in der Nähe (<') + distance + translate('m) gefunden werden.'); 519 if (map.getZoom() >= 17) errorMsg += translate(' Zoomen Sie einmal heraus um einen Größeren Bereich zu durchsuchen.'); 520 521 openMessageDialog( translate('Keine Suchtreffer'), errorMsg ); 522 } else if (addInfos == 2) { 523 openMessageDialog( translate('Keine Relation'), translate('Es konnten leider keine Objekte gefunden werden, die in Relation zu diesem Objekt stehen.') ); 524 } 525 526 return false; 527 } 528 529 for (var i = 0; i < lengthItems; i++ ) { 530 createMarker( items[i], addInfos == 0, type ); 531 532 if ( lengthItems > 1 || addInfos > 0 ) { 533 var str1 = ''; 534 if (items[i].info != '') str1 = '<p class="address">' + items[i].info + '</p>'; 535 536 $('#overlayInfo .additionalInfos').append('<div class="additionalElement"><div id="object_' + items[i].gno + '" class="' + items[i].typ + '" data-search="' + (items[i].typ == 'geo' ? items[i].lat
536+ ',' + items[i].lng : items[i].gno) + '"><p class="name">' + items[i].bez + '</p>' + str1 + '</div></div>'); 537 if (items[i].typ == 'geo') { 538 $('#object_' + items[i].gno).on('click', function() { convertLatLngParamToMap('end', $(this).attr('data-search')); }); 539 } else { 540 $('#object_' + items[i].gno).on('click', function() { getObjectsWithID($(this).attr('data-search'), 'end'); }); 541 } 542 543 $('#object_' + items[i].gno).on('mouseover', function() { 544 var tempMarker = markerBuilding[$(this).attr('data-search')]; 545 if ( typeof tempMarker !== 'undefined' ) { 546 if ( tempMarker.polygon != null ) highlightPolygon( tempMarker.polygon, 1 ); 547 if ( tempMarker.markerTyp === 'full' ) tempMarker.setTitle('Marker: ' + tempMarker.label.text); 548 } 549 }).on('mouseout', function() { 550 var tempMarker = markerBuilding[$(this).attr('data-search')]; 551 if ( typeof tempMarker !== 'undefined' ) { 552 if ( tempMarker.polygon != null ) highlightPolygon( tempMarker.polygon, -1 ); 553 if ( tempMarker.markerTyp === 'full' ) tempMarker.setTitle(''); 554 } 555 }); 556 } 557 558 if (markerBuilding[items[i].gno].markerTyp != 'reduced') { 559 google.maps.event.addListener(markerBuilding[items[i].gno], 'mouseover', function() { 560 if ($('#object_' + this.gebnr).length > 0) $('#object_' + this.gebnr).css('background-color', '#FCC'); 561 if (this.polygon != null) highlightPolygon( this.polygon, 1 ); 562 if (this.markerTyp === 'full') this.setTitle('Marker: ' + this.label.text); 563 }); 564 565 google.maps.event.addListener(markerBuilding[items[i].gno], 'mouseout', function() { 566 if ($('#object_' + this.gebnr).length > 0) $('#object_' + this.gebnr).css('background-color', ''); 567 if (this.polygon != null) highlightPolygon( this.polygon, -1 ); 568 if (this.markerTyp === 'full') this.setTitle(''); 569 }); 570 571 if (markerBuilding[items[i].gno].polygon != null) { 572 google.maps.event.addListener(markerBuilding[items[i].gno].polygon, 'mouseover', function() { 573 if ($('#object_' + this.gebnr).length > 0) $('#object_' + this.gebnr).css('background-color', '#FCC'); 574 highlightPolygon( this, 1 ); 575 if (markerBuilding[this.gebnr].markerTyp === 'full') markerBuilding[this.gebnr].setTitle('Marker: ' + markerBuilding[this.gebnr].label.text); 576 }); 577 578 google.maps.event.addListener(markerBuilding[items[i].gno].polygon, 'mouseout', function() { 579 if ($('#object_' + this.gebnr).length > 0) $('#object_' + this.gebnr).css('background-color', ''); 580 highlightPolygon( this, -1 ); 581 if (markerBuilding[this.gebnr].markerTyp === 'full') markerBuilding[this.gebnr].setTitle(''); 582 }); 583 } 584 585 if (markerBuilding[items[i].gno].objType != 'geo') { 586 google.maps.event.addListener(markerBuilding[items[i].gno], 'click', function() { 587 if (staticmode) return; 588 if (!($('body').hasClass('routeplaner'))) getObjectsWithID(this.gebnr, 'end'); 589 }); 590 591 if (markerBuilding[items[i].gno].polygon != null) { 592 google.maps.event.addListener(markerBuilding[items[i].gno].polygon, 'click', function() { 593 if (staticmode) return; 594 if (!($('body').hasClass('routeplaner'))) getObjectsWithID(this.gebnr, 'end'); 595 }); 596 } 597 } else { 598 google.maps.event.addListener(markerBuilding[items[i].gno], 'click', function() { 599 var msg = translate('Dies ist eine von Google ermittelte Position. Diese basiert auf der Adresse') + ' "' + this.label.text + '".'; 600 if (this.label.text == translate('Aktuelle Position')) msg = translate('Dies ist die von Ihrem Ger\u00e4t gesendete Position, an der Sie sich aktuell aufhalten. Falls dies nicht korrekt ist, k\u00f6nnen Sie den Marker durch Drag and Drop auch an eine andere Position verschieben.'); 601 else if (this.label.text == translate('Benutzerdefinierte Position')) msg = translate('Dies ist eine benutzerdefinierte Position. Sie k\u00f6nnen den Marker durch Drag and Drop an eine andere Position verschieben.'); 602 603 openMessageDialog( this.label.text, msg ); 604 });
605 606 google.maps.event.addListener(markerBuilding[items[i].gno], 'dragend', function() { 607 var lat = Math.round(this.getPosition().lat() * 100000) / 100000, 608 lng = Math.round(this.getPosition().lng() * 100000) / 100000; 609 610 if (this.navStartEnd == 'end') { 611 $('#search').val( lat + ',' + lng ); 612 updateSearchItem('#search'); 613 } else { 614 $('#startNav').val( lat + ',' + lng ); 615 updateSearchItem('#startNav'); 616 } 617 618 clearRoute(); 619 changeURL( translate('Geomarker verschoben') ); 620 }); 621 } 622 } 623 } 624 625 if (addInfos == 0 && type == 'end') { 626 $('#overlayInfo .imgcontainer').css('background-image', ''); 627 $('#overlayInfo .imgcontainer .copyright').html('RWTH Aachen University'); 628 $('#overlayInfo .sub-menu .couldbeinactive').attr('data-key', '').attr('href', '').removeClass('active'); 629 $('#overlayInfo .sub-menu .organisation').removeClass('building').removeClass('schedule').removeClass('externalinfos'); 630 $('#overlayInfo .sub-menu .organisation span').html(translate('Einrichtungen')); 631 632 $('.building-attribute').hide(); 633 634 if ( lengthItems == 1 ) { 635 if ( typeof items[0].wickelraum !== 'undefined') { 636 $('#wickelraum-tooltip').html(items[0].wickelraum.info); 637 $('#wickelraum-flag').attr('data-link', items[0].wickelraum.link).show(); 638 } 639 if ( typeof items[0].elternkindraum !== 'undefined') { 640 $('#elternkind-tooltip').html(items[0].elternkindraum.info); 641 $('#elternkind-flag').attr('data-link', items[0].elternkindraum.link).show(); 642 } 643 if ( typeof items[0].defibrillator !== 'undefined') { 644 $('#defibrillator-tooltip').html(items[0].defibrillator.info); 645 $('#defibrillator-flag').attr('data-link', items[0].defibrillator.link).show(); 646 } 647 if ( typeof items[0].bwc !== 'undefined') { 648 $('#bwc-tooltip').html(items[0].bwc.info); 649 $('#bwc-flag').attr('data-link', items[0].bwc.link).show(); 650 } 651 if ( typeof items[0].agwc !== 'undefined') { 652 $('#agwc-tooltip').html(items[0].agwc.info); 653 $('#agwc-flag').attr('data-link', items[0].agwc.link).show(); 654 } 655 if ( typeof items[0].hhwc !== 'undefined') { 656 $('#hhwc-tooltip').html(items[0].hhwc.info); 657 $('#hhwc-flag').attr('data-link', items[0].hhwc.link).show(); 658 } 659 if ( typeof items[0].lernraum !== 'undefined') { 660 $('#lernraum-tooltip').html(items[0].lernraum.info); 661 $('#lernraum-flag').attr('data-link', items[0].lernraum.link).show(); 662 } 663 if ( typeof items[0].energy !== 'undefined') { 664 $('#energie-tooltip').html(items[0].energy.info); 665 // Einkommentieren, wenn korrektes Piktogramm zur Verfügung steht 666 // $('#energie-flag').show(); 667 } 668 669 $('#overlayInfo').css('--imgcontainer-height', $('#overlayInfo .imgcontainer').outerHeight() + 'px'); 670 671 if ( items[0].img == 1 && !mobileVersion ) { 672 $('#overlayInfo .imgcontainer').css('background-image', 'url("images/' + items[0].typ + '/' + items[0].gno + '.jpg")'); 673 $('#overlayInfo .imgcontainer .copyright').html('RWTH Aachen University'); 674 } 675 $('#overlayInfo .headline-bg').html('<p class="name">' + items[0].bez + '</p><p class="address">' + items[0].info + '</p>'); 676 677 if (items[0].typ != 'geo') { 678 $('#search').val(items[0].bez); 679 $('#search').next('span.searchplace').addClass('active').attr('title', translate('Suche')).html(translate('Suche'));; 680 } 681 682 if (markerBuilding[items[0].gno].markerTyp != 'reduced') $('#overlayInfo .routewrapper').show(); 683 else $('#overlayInfo .routewrapper').hide(); 684 685 if ( markerBuilding[items[0].gno].markerTyp != 'reduced' ) $('#overlayInfo .sub-menu .nearobjects').attr('data-key', items[0].gno).addClass('active'); 686 687 if ( (items[0].typ == 'b' || items[0].typ == 'e') && items[0].rel == 1 ) $('#overlayInfo .sub-menu .organisation').attr('data-key', items[0].gno).addClass('active'); 688 else if ( items[0].typ != 'geo' && items[0].lnk != '' ) $('#overlayInfo .sub-menu .organisation').attr('data-key', items[0].lnk).addClass('active'); 689 690 if (items[0].typ == 'b') {
691 // Do nothing. 692 } else if ( items[0].typ == 'e' ) { 693 $('#overlayInfo .sub-menu .organisation').addClass('building'); 694 $('#overlayInfo .sub-menu .organisation span').html(translate('Gebäude')); 695 } else if ( items[0].typ == 'h1' || items[0].typ == 'h2' ) { 696 $('#overlayInfo .sub-menu .organisation').addClass('schedule'); 697 $('#overlayInfo .sub-menu .organisation span').html(translate('Fahrplan')); 698 } else { 699 $('#overlayInfo .sub-menu .organisation').addClass('externalinfos'); 700 $('#overlayInfo .sub-menu .organisation span').html(translate('Informationen')); 701 } 702 } else { 703 $('#overlayInfo .headline-bg').html('<p class="name">' + lengthItems + translate(' Treffer gefunden') + '</p>'); 704 $('#overlayInfo .routewrapper').hide(); 705 } 706 707 if ( $('#overlayInfo:hidden').length > 0 ) { 708 if ($('#overlayInfo').hasClass('slided-out')) { 709 $('#overlayInfo').show(); 710 } else { 711 if (!mobileVersion) $('#map').css('left', 'min(90dvw, 332px)').resize(); 712 $('#overlayInfo').show( 'slide', {}, 250 ); 713 } 714 } 715 716 var calcHeight = $('#overlayInfo .headline-bg').outerHeight() + $('#overlayInfo .imgcontainer').outerHeight() + 67; 717 $('#overlayInfo .additionalInfos').css('top', calcHeight + 'px'); 718 } else if (addInfos == 0 && type == 'start') { 719 if (lengthItems == 1 && items[0].typ != 'geo') { 720 $('#startNav').val(items[0].bez); 721 $('#startNav').next('span.searchplace').addClass('active').attr('title', translate('Suche')).html(translate('Suche'));; 722 } 723 } 724 725 centerAndZoomMap(); 726 727 return true; 728 } 729 730 function highlightPolygon ( polygon, value ) { 731 polygon.cHighlight = Math.max( polygon.cHighlight + value, 0 ); 732 733 if ( polygon.cHighlight > 0 ) { 734 polygon.setOptions({ 735 strokeColor: '#FF0000', 736 strokeOpacity: 1.0, 737 strokeWeight: 2,
738 fillColor: '#FFCCCC', 739 fillOpacity: getHighlightFillOpacity(), 740 zIndex: 2 741 }); 742 } else { 743 polygon.setOptions({ 744 strokeColor: getStrokeColorByType(polygon.objType), 745 strokeOpacity: getStrokeOpacityByType(polygon.objType), 746 strokeWeight: 1, 747 fillColor: getFillColorByType(polygon.objType), 748 fillOpacity: getFillOpacityByType(polygon.objType), 749 zIndex: getZIndexByType(polygon.objType) 750 }); 751 } 752 } 753 754 function getFillColorByType( type ) { 755 if ( type == 'zC' ) return '#FFBF81'; 756 if ( type == 'zU' ) return '#00FCFF'; 757 if ( type == 'zS' ) return '#FD81BD'; 758 if ( type == 'zT' ) return '#D60403'; 759 if ( type == 'u' ) return '#0FA20F'; 760 if ( type == 'p' ) return '#8888FF'; 761 if ( type == 'pr' ) return '#8888FF'; 762 763 return '#F4F3EC'; 764 } 765 766 function getStrokeColorByType( type ) { 767 if ( type == 'zC' ) return '#FFBF81'; 768 if ( type == 'zU' ) return '#00FCFF'; 769 if ( type == 'zS' ) return '#FD81BD'; 770 if ( type == 'zT' ) return '#D60403'; 771 if ( type == 'u' ) return '#0FA20F'; 772 if ( type == 'p' ) return '#0000FF'; 773 if ( type == 'pr' ) return '#0000FF'; 774 775 return '#ECECEC'; 776 } 777 778 function getHighlightFillOpacity() { 779 tmpMapType = map.getMapTypeId(); 780 781 if ( tmpMapType == 'hybrid' || tmpMapType == 'satellite' ) return 0.4; 782 return 1.0; 783 } 784 785 function getFillOpacityByType( type ) { 786 tmpMapType = map.getMapTypeId(); 787 788 if ( type.indexOf('z') == 0 ) return 0.0; 789 if ( type == 'u' ) return 0.1; 790 if ( type == 'p' ) return 0.2; 791 if ( type == 'pr' ) return 0.2; 792 793 if ( tmpMapType == 'hybrid' || tmpMapType == 'satellite' ) return 0.6; 794 795 return 1.0; 796 } 797 798 function getStrokeOpacityByType( type ) { 799 if ( type.indexOf('z') == 0 ) return 0.6; 800 if ( type == 'u' ) return 0.9; 801 if ( type == 'p' ) return 0.6; 802 if ( type == 'pr' ) return 0.6; 803 804 return 1.0; 805 } 806 807 function getZIndexByType( type ) { 808 if ( type == 'p' ) return 3; 809 if ( type == 'pr' ) return 3; 810 if ( type == 'u' ) return 0; 811 812 return 1; 813 } 814 815 function createMarker( item, exportMarker, type ) { 816 if (typeof markerBuilding[item.gno] !== 'undefined') { 817 if (markerBuilding[item.gno].map != null) markerBuilding[item.gno].setMap(null); 818 if (markerBuilding[item.gno].polygon != null) markerBuilding[item.gno].polygon.setMap(null); 819 delete markerBuilding[item.gno]; 820 } 821 822 if (typeof item.lat !== 'undefined' && typeof item.lng !== 'undefined') { 823 var tempPolygon = null; 824 if ((item.typ == 'pr' || item.typ == 'p' || item.typ == 'b') && item.pol.length > 0) { 825 tempPolygon = new google.maps.Polygon({ 826 paths: getArrayFromCoordString(item.pol), 827 strokeColor: getStrokeColorByType( item.typ ), 828 strokeOpacity: getStrokeOpacityByType( item.typ ), 829 strokeWeight: 1, 830 fillColor: getFillColorByType( item.typ ), 831 fillOpacity: getFillOpacityByType( item.typ ), 832 map: $('body').hasClass('wideview') ? null : map, 833 gebnr: item.gno, 834 objType: item.typ, 835 cHighlight: 0, 836 zIndex: getZIndexByType( item.typ ) 837 }); 838 } 839 840 var iconMarker = 'libraries/rwth/img/rwth2.png'; 841 var labelMarker = 'markerlabel'; 842 var strContent = item.bez; 843 var hiddenContent = ''; 844 845 if (item.typ == 'p') { 846 iconMarker = 'libraries/rwth/img/parkplatz.png'; 847 labelMarker = 'markerlabel simple'; 848 hiddenContent = item.bez; 849 if (item.pzn == 'O') strContent = translate('Öffentlicher Parkplatz'); 850 else if (item.pzn != '' && item.pzn != '-') strContent = translate('RWTH Parkplatz') + ': Zone ' + item.pzn; 851 else strContent = translate('RWTH Parkplatz'); 852 } else if (item.typ == 'c') { 853 iconMarker = 'libraries/rwth/img/cambio.png'; 854 labelMarker = 'markerlabel simple'; 855 } else if (item.typ == 'v') { 856 iconMarker = 'libraries/rwth/img/velocity.png'; 857 labelMarker = 'markerlabel simple'; 858 } else if (item.typ == 'ls') { 859 iconMarker = 'libraries/rwth/img/ladestation.png'; 860 labelMarker = 'markerlabel simple'; 861 } else if (item.typ == 'h1') { 862 iconMarker = 'libraries/rwth/img/haltestelle_bus.png'; 863 labelMarker = 'markerlabel simple'; 864 } else if (item.typ == 'h2') { 865 iconMarker = 'libraries/rwth/img/haltestelle_bahn.png'; 866 labelMarker = 'markerlabel simple bahn'; 867 } else if (item.typ == 'pr') { 868 iconMarker = 'libraries/rwth/img/park_ride.png'; 869 labelMarker = 'markerlabel simple parkride'; 870 } else if (item.typ == 'd1') { 871 iconMarker = 'libraries/rwth/img/defi.png'; 872 labelMarker = 'markerlabel simple'; 873 } else if (item.typ == 'd2') { 874 iconMarker = 'libraries/rwth/img/defi2.png'; 875 labelMarker = 'markerlabel simple'; 876 } else if (item.typ == 't') { 877 iconMarker = 'libraries/rwth/img/bwc.png'; 878 labelMarker = 'markerlabel simple'; 879 } else if (item.typ == 'tt') { 880 iconMarker = 'libraries/rwth/img/agwc.png'; 881 labelMarker = 'markerlabel simple'; 882 } else if (item.typ == 'tthh') { 883 iconMarker = 'libraries/rwth/img/hhwc.png'; 884 labelMarker = 'markerlabel simple'; 885 } else if (item.typ == 'ba') { 886 iconMarker = 'libraries/rwth/img/fahrstuhl.png'; 887 labelMarker = 'markerlabel simple'; 888 } else if (item.typ == 'be') { 889 iconMarker = 'libraries/rwth/img/eingang.png'; 890 labelMarker = 'markerlabel simple'; 891 } else if (item.typ == 'w') { 892 iconMarker = 'libraries/rwth/img/wickel.png'; 893 labelMarker = 'markerlabel simple'; 894 } else if (item.typ == 'f') { 895 iconMarker = 'libraries/rwth/img/eltern.png'; 896 labelMarker = 'markerlabel simple'; 897 } else if (item.typ == 'fk') { 898 iconMarker = 'libraries/rwth/img/fristenkasten.png'; 899 labelMarker = 'markerlabel simple'; 900 } 901 902 markerBuilding[item.gno] = new google.maps.Marker({ 903 position: { 904 lat: item.lat, 905 lng: item.lng 906 }, 907 map: map, 908 draggable: (item.bez == translate('Benutzerdefinierte Position') || item.bez == translate('Aktuelle Position')), 909 polygon: tempPolygon, 910 gebnr: item.gno, 911 objType: item.typ, 912 label: { 913 text: strContent, 914 className: labelMarker, 915 color: (labelMarker !== 'markerlabel' ? 'black' : '#820101') 916 }, 917 hiddenContent: hiddenContent, 918 icon: { 919 url: iconMarker, 920 labelOrigin: new google.maps.Point((labelMarker !== 'markerlabel' ? 12 : 0), (labelMarker !== 'markerlabel' ? 15 : 38)) 921 },
922 exportMarker: exportMarker, 923 markerTyp: 'full', 924 address: item.adr, 925 navStartEnd: type 926 }); 927 } else { 928 markerBuilding[item.gno] = { 929 gebnr: item.gno, 930 objType: item.typ, 931 label: { text: item.bez }, 932 exportMarker: exportMarker, 933 markerTyp: 'reduced', 934 address: item.adr, 935 navStartEnd: type 936 }; 937 } 938 } 939 940 function clearSearch( onlyNavigation, changeButton ) { 941 onlyNavigation = typeof onlyNavigation !== 'undefined' ? onlyNavigation : false; 942 changeButton = typeof changeButton !== 'undefined' ? changeButton : true; 943 944 $('.ui-autocomplete li').remove(); 945 946 if ( !onlyNavigation ) { 947 $('#map').css('left', '0').resize(); 948 $('#overlayInfo').hide( 'slide', {}, 250 ); 949 // Setze die Karte auf den Default 950 map.setZoom(15); 951 map.setCenter( { lat: 50.77767, lng: 6.077912 } ); 952 } 953 954 for ( key in markerBuilding ) { 955 if (!onlyNavigation || markerBuilding[key].navStartEnd != 'end') { 956 if (markerBuilding[key].map != null) markerBuilding[key].setMap(null); 957 if (markerBuilding[key].polygon != null) markerBuilding[key].polygon.setMap(null); 958 delete markerBuilding[key]; 959 } 960 } 961 962 if ( changeButton ) { 963 $('#main-menu .delete').removeClass('delete').attr('title', translate('Routenplaner')).html(translate('Routenplaner')); 964 } 965 } 966 967 function centerAndZoomMap() { 968 var minLat = 1000.0, minLng = 1000.0, maxLat = -1000.0, maxLng = -1000.0; 969 970 for ( key in markerBuilding ) { 971 if (markerBuilding[key].markerTyp != 'reduced') { 972 if ( markerBuilding[key].getPosition().lat() < minLat ) minLat = markerBuilding[key].getPosition().lat(); 973 if ( markerBuilding[key].getPosition().lat() > maxLat ) maxLat = markerBuilding[key].getPosition().lat(); 974 if ( markerBuilding[key].getPosition().lng() < minLng ) minLng = markerBuilding[key].getPosition().lng(); 975 if ( markerBuilding[key].getPosition().lng() > maxLng ) maxLng = markerBuilding[key].getPosition().lng(); 976 } 977 } 978 979 if (!$('#toggleparkingzones').hasClass('show')) { 980 for ( key in polygonParkingZones ) { 981 if ( polygonParkingZones[key].getPosition().lat() < minLat ) minLat = polygonParkingZones[key].getPosition().lat(); 982 if ( polygonParkingZones[key].getPosition().lat() > maxLat ) maxLat = polygonParkingZones[key].getPosition().lat(); 983 if ( polygonParkingZones[key].getPosition().lng() < minLng ) minLng = polygonParkingZones[key].getPosition().lng(); 984 if ( polygonParkingZones[key].getPosition().lng() > maxLng ) maxLng = polygonParkingZones[key].getPosition().lng(); 985 } 986 } 987 988 if (minLat < 1000.0 && minLng < 1000.0 && maxLat > -1000.0 && maxLng > -1000.0) { 989 var bounds = new google.maps.LatLngBounds( { lat: minLat, lng: minLng }, { lat: maxLat, lng: maxLng } ); 990 map.setZoom(Math.max(0, Math.min(getZoomByBounds( bounds ) + modifyZoom, 18))); 991 map.setCenter( bounds.getCenter() ); 992 modifyZoom = 0; 993 } 994 } 995 996 function getZoomByBounds( bounds ){ 997 if (typeof map.getProjection() === 'undefined') return; 998 999 var MAX_ZOOM = 18 ; 1000 var MIN_ZOOM = 0 ; 1001 1002 var ne = map.getProjection().fromLatLngToPoint( bounds.getNorthEast() ); 1003 var sw = map.getProjection().fromLatLngToPoint( bounds.getSouthWest
1003() ); 1004 1005 var worldCoordWidth = Math.abs( ne.x - sw.x ); 1006 var worldCoordHeight = Math.abs( ne.y - sw.y ); 1007 1008 var FIT_PAD = 40; 1009 1010 for ( var zoom = MAX_ZOOM; zoom >= MIN_ZOOM; --zoom ) { 1011 if ( worldCoordWidth * (1 << zoom) + 2 * FIT_PAD < $(map.getDiv()).width() && worldCoordHeight * (1 << zoom) + 2 * FIT_PAD < $(map.getDiv()).height() ) return zoom; 1012 } 1013 1014 return 0; 1015 } 1016 1017 function selectSelectableInfo( item, toNavigate, field ) { 1018 if (typeof item === 'undefined') return; 1019 1020 $(field == 'end' ? '#search' : '#startNav').val(item.bez); 1021 successfulSearch( [ item ], 0, field ); 1022 setNavigationVisibility(toNavigate); 1023 expandSidepanel( true ); 1024 1025 $('#selectableInfoWrapper').hide('fade', {}, 250); 1026 } 1027 1028 $('#selectableInfoWrapper').on('click', '.selectableInfo .infodiv', function() { 1029 selectSelectableInfo( jQuery.data( $(this).parent()[0], "item" ), false, 'end' ); 1030 }); 1031 1032 $('#selectableInfoWrapper').on('click', '.selectableInfo .navigateFrom', function() { 1033 selectSelectableInfo( jQuery.data( $(this).parent()[0], "item" ), true, 'start' ); 1034 }); 1035 1036 $('#selectableInfoWrapper').on('click', '.selectableInfo .navigateTo', function() { 1037 selectSelectableInfo( jQuery.data( $(this).parent()[0], "item" ), true, 'end' ); 1038 }); 1039 1040 $('#selectableInfoWrapper .closewindow').on('click', function() { 1041 $('#selectableInfoWrapper').hide('fade', {}, 250); 1042 }); 1043 1044 $('#search').on('focus', function() { 1045 $('.ui-autocomplete:has(li)').css('display', 'block'); 1046 }); 1047 1048 $('.search-input').on('keypress', function( e ) { 1049 if ( e.which == 13 && $(this).next('span.searchplace').hasClass('active') ) { 1050 $(this).next('span.searchplace').click(); 1051 $(this).blur(); 1052 } 1053 }); 1054 1055 $('#main-menu .calcroute').on('click', function() { 1056 if ( $(this).hasClass('delete') ) { 1057 $('#search').val(''); 1058 $('#main-menu .searchplace').removeClass('active') 1059 if ($('body').hasClass('geolocation')) $('#main-menu .searchplace').attr('title', translate('Aktuelle Position')).html(translate('Aktuelle Position')); 1060 clearSearch(); 1061 changeURL( translate('Suche') ); 1062 } else { 1063 setNavigationVisibility(true); 1064 } 1065 }); 1066 1067 $('#overlayInfo .routewrapper').on('click', function() { 1068 for ( key in markerBuilding ) { 1069 if (markerBuilding[key].exportMarker) { 1070 if (markerBuilding[key].objType != 'geo') { 1071 $('#search').val(markerBuilding[key].hiddenContent != '' ? markerBuilding[key].hiddenContent : markerBuilding[key].label.text); 1072 } else { 1073 $('#search').val((Math.round(markerBuilding[key].getPosition().lat() * 100000) / 100000) + ',' + (Math.round(markerBuilding[key].getPosition().lng() * 100000) / 100000)); 1074 } 1075 } 1076 } 1077 1078 setNavigationVisibility(true); 1079 }); 1080 1081 $('#main-menu-wrapper .searchplace').on('click', function() { 1082 $('#startingParameters').attr('data-last-used', $(this).attr('data-marker')); 1083 1084 if ( $(this).hasClass('active') ) { 1085 var re = /\d+\.\d+, *\d+\.\d+/gi; 1086 // var re = /\d+\.\d+,\d+\.\d+|\d+\.\d+, +\d+\.\d+/gi; 1087 1088 if ( $(this).prev('.search-input').val().match(re) ) { 1089 var coords = $(this).prev('.search-input').val().split(','); 1090 1091 var lat = Math.round(parseFloat(coords[0]) * 100000) / 100000, 1092 lng = Math.round(parseFloat(coords[1]) * 100000) / 100000; 1093 1094 $(this).prev('.search-input').val(lat + ',' + lng); 1095 1096 var item = { 'gno': 'curpos', 'bez': translate('Benutzerdefinierte Position'), 'adr': '', 'img': 0, 'rel': 0, 'info': '', 'typ': 'geo', 'lat': lat, 'lng': lng } 1097 successfulSearch( [ item ], 0, $(this).attr('data-marker') ); 1098 1099 changeURL( translate('Suche') ); 1100 } else { 1101 var strRoute = ''; 1102 if ($('body').hasClass('routeplaner')) strRoute = '&route=1'; 1103 1104 $.ajax({
1105 url: ajaxURL + "&q=" + escape($(this).prev('.search-input').val()).replace( new RegExp( '\\+', 'g' ), '%2B' ) + strRoute, 1106 dataType: 'json', 1107 success: function( data ) { 1108 if ( !successfulSearch( data, 0, $('#startingParameters').attr('data-last-used') ) ) { 1109 var strSuche = '#search'; 1110 if ($('#startingParameters').attr('data-last-used') == 'start') strSuche = '#startNav'; 1111 1112 geocoder.geocode({ 1113 address: $(strSuche).val(), 1114 bounds: new google.maps.LatLngBounds( 1115 { 1116 lat: 49.77767, 1117 lng: 5.077912 1118 }, 1119 { 1120 lat: 51.77767, 1121 lng: 7.077912 1122 } 1123 ) 1124 }, function( results, status ) { 1125 if ( status == google.maps.GeocoderStatus.OK ) { 1126 var item = { 'gno': 'curpos_' + $('#startingParameters').attr('data-last-used'), 'bez': $(strSuche).val(), 'adr': $(strSuche).val(), 'img': 0, 'rel': 0, 'info': '', 'typ': 'geo', 'lat': results[0].geometry.location.lat(), 'lng': results[0].geometry.location.lng() } 1127 successfulSearch( [ item ], 0, $('#startingParameters').attr('data-last-used') ); 1128 } else { 1129 openMessageDialog( translate('Keine Suchtreffer'), translate('Es konnten leider keine Suchtreffer zu Ihrer Anfrage gefunden werden.') ); 1130 if (!$('body').hasClass('routeplaner')) clearSearch(); 1131 } 1132 1133 changeURL( translate('Suche') ); 1134 }); 1135 } else { 1136 changeURL( translate('Suche') ); 1137 } 1138 } 1139 }); 1140 } 1141 } else { 1142 navigator.geolocation.getCurrentPosition( handle_geolocation_query, handle_geolocation_errors ); 1143 } 1144 }); 1145 1146 $('.settingspanel .search-group[data-type]').on('click', function() { 1147 setNavigationVisibility(false); 1148 1149 $('.settingspaneloverlay').hide('fade', {}, 250); 1150 $('.settingspanel').hide('slide', {}, 250); 1151 1152 $('#search').val(''); 1153 $('#main-menu .searchplace').removeClass('active') 1154 if ($('body').hasClass('geolocation')) $('#main-menu .searchplace').attr('title', translate('Aktuelle Position')).html(translate('Aktuelle Position')); 1155 1156 var strType = $(this).data('type'); 1157 1158 if (strType !== '') { 1159 $('#startingParameters').attr('data-last-used', 'end'); 1160 1161 $.ajax({ 1162 url: ajaxURL + "&mode=type&q=" + strType, 1163 dataType: 'json', 1164 success: function( data ) { 1165 successfulSearch( data, 0, $('#startingParameters').attr('data-last-used') ); 1166 changeURL( translate('Suche') ); 1167 } 1168 }); 1169 } 1170 }); 1171 1172 $('#main-menu-wrapper .buttonNav').on('click', function() { 1173 if (!($(this).hasClass('active'))) { 1174 $('#main-menu-wrapper .buttonNav').removeClass('active'); 1175 $(this).addClass('active'); 1176 1177 clearRoute(); 1178 1179 allowChangeURL = 2; 1180 changeURL( 'change Navigation Type' ); 1181 allowChangeURL = 1; 1182 } 1183 }); 1184 1185 $('#main-menu-wrapper .switchNav').on('click', function() { 1186 var tempStr = $('#startNav').val(); 1187 $('#startNav').val($('#search').val()); 1188 $('#search').val(tempStr); 1189 1190 clearRoute(); 1191 1192 $('.ui-autocomplete li').remove(); 1193 updateSearchItem('#startNav'); 1194 updateSearchItem('#search'); 1195 1196 for ( key in markerBuilding ) { 1197 var tmp = markerBuilding[key].navStartEnd; 1198 markerBuilding[key].setOptions( { navStartEnd: (tmp == 'end' ? 'start' : 'end') } ); 1199 } 1200 1201 changeURL ( 'switch Navigation' ); 1202 }); 1203 1204 $('#main-menu-wrapper .closeNav').on('click', function() { 1205 setNavigationVisibility( false ); 1206 }); 1207 1208 $('#calcRouteButton').on('click', function() { 1209 if ($(this).hasClass('deactivated')) return; 1210 1211 var removeRoute = $(this).hasClass('removeRoute'); 1212 1213 if ( removeRoute ) { 1214 clearRoute(); 1215 } else { 1216 var coords = { 'start': '', 'end': '' }, arrCounter = 0; 1217 1218 for ( key in markerBuilding ) { 1219 if (markerBuilding[key].address != '' && markerBuilding[key].objType != 'geo') 1220 coords[markerBuilding[key].navStartEnd] = markerBuilding[key].address; 1221 else 1222 coords[markerBuilding[key].navStartEnd] = markerBuilding[key].getPosition().lat() + ',' + markerBuilding[key].getPosition().lng(); 1223 1224 arrCounter++; 1225 } 1226 1227 if (arrCounter != 2 || coords['start'] == '' || coords['end'] == '') { 1228 openMessageDialog( translate('Fehler: Koordinaten'), translate('Zur Berechnung einer Route müssen genau zwei Marker auf der Karte existieren. Einer für Ihren Startpunkt und einer für Ihren Zielpunkt.') ); 1229 return; 1230 } 1231 1232 $('#calcRouteButton').addClass('deactivated'); 1233 1234 var mode = google.maps.TravelMode.DRIVING; 1235 if ($('#main-menu-wrapper .buttonNav.transit').hasClass('active')) mode = google.maps.TravelMode.TRANSIT; 1236 else if ($('#main-menu-wrapper .buttonNav.walking').hasClass('active')) mode = google.maps.TravelMode.WALKING; 1237 else if ($('#main-menu-wrapper .buttonNav.bicycling').hasClass('active')) mode = google.maps.TravelMode.BICYCLING; 1238 1239 dirService.route({ 1240 origin: coords['start'], 1241 destination: coords['end'], 1242 travelMode: mode, 1243 provideRouteAlternatives: true 1244 }, function( result, status ) { 1245 if ( status == google.maps.DirectionsStatus.OK ) { 1246 dirDisplay.setPanel( document.getElementById('routePanel') ); 1247 dirDisplay.setDirections( result ); 1248 dirDisplay.setMap( map ); 1249 1250 $('#calcRouteButton').html(translate('Route entfernen')).addClass('removeRoute');
1251 $('#overlayInfo .navigationWrapper .topBackground').animate( { height: 140 }, 250, null ); 1252 $('#overlayInfo .navigationWrapper .bottomBackground').animate( { top: 140 }, 250, null ); 1253 } else { 1254 openMessageDialog( translate('Fehler: Berechnung der Route'), translate('Es gab leider Probleme bei der Berechnung Ihrer Route. Bitte versuchen Sie es später erneut.') ); 1255 } 1256 1257 $('#calcRouteButton').removeClass('deactivated'); 1258 }); 1259 } 1260 }); 1261 1262 function clearRoute() { 1263 dirDisplay.setPanel( null ); 1264 dirDisplay.setMap( null ); 1265 1266 $('#calcRouteButton').html(translate('Route berechnen')).removeClass('removeRoute'); 1267 $('#overlayInfo .navigationWrapper .topBackground').animate( { height: 180 }, 250, null ); 1268 $('#overlayInfo .navigationWrapper .bottomBackground').animate( { top: 180 }, 250, null ); 1269 } 1270 1271 function setNavigationVisibility( activate ) { 1272 if ( activate ) { 1273 $('body').addClass('routeplaner'); 1274 1275 for ( key in markerBuilding ) { 1276 if (!(markerBuilding[key].exportMarker)) { 1277 if (markerBuilding[key].map != null) markerBuilding[key].setMap(null); 1278 if (markerBuilding[key].polygon != null) markerBuilding[key].polygon.setMap(null); 1279 delete markerBuilding[key]; 1280 } 1281 } 1282 1283 $('#overlayInfo .additionalInfos').html('').attr('data-nearobjects', '').attr('data-informations', ''); 1284 1285 $('#main-menu').css('box-shadow', '0 0'); 1286 $('#main-menu .search-input').attr('placeholder', translate('Zielpunkt')); 1287 1288 if (!($('#overlayInfo').is(':visible'))) { 1289 $('#overlayInfo .navigationWrapper').show(); 1290 if (!mobileVersion) $('#map').css('left', 'min(90dvw, 332px)').resize(); 1291 $('#overlayInfo').show( 'slide', {}, 250 ); 1292 offsetCenter( -166, 0 ); 1293 } else { 1294 $('#overlayInfo .navigationWrapper').show( 'fade', {}, 250 ); 1295 } 1296 1297 $('#search').removeClass('extrapadding'); 1298 $('#main-menu-wrapper').animate({ 1299 top: '0' 1300 }, 250, function() {}); 1301 $('.settings').animate({ 1302 top: '11px', 1303 left: '5px' 1304 }, 250, function() {}); 1305 $('#main-menu-wrapper').addClass('doing-routes'); 1306 setTimeout(function() { $('#main-menu-wrapper .switchNav').css( 'display', 'inline-block' ); }, 250); 1307 } else { 1308 $('body').removeClass('routeplaner'); 1309 1310 clearRoute(); 1311 1312 $('#main-menu').css('box-shadow', ''); 1313 $('#main-menu .search-input').attr('placeholder', translate('In RWTH Maps suchen')); 1314 1315 var relevantMarkers = false; 1316 for ( key in markerBuilding ) { 1317 if (markerBuilding[key].navStartEnd == 'end') { 1318 relevantMarkers = true; 1319 break; 1320 } 1321 } 1322 1323 if ( !relevantMarkers ) { 1324 $('#map').css('left', '0').resize(); 1325 $('#overlayInfo').hide( 'slide', {}, 250, function() { 1326 $('#overlayInfo .navigationWrapper').hide(); 1327 } ); 1328 offsetCenter( 166, 0 ); 1329 } else { 1330 $('#overlayInfo .navigationWrapper').hide( 'fade', {}, 250 ); 1331 } 1332 1333 $('#startNav').val(''); 1334 $('#startNav').next('.searchplace').removeClass('active'); 1335 if ($('body').hasClass('geolocation')) $('#main-menu-wrapper .searchplace').attr('title', translate('Aktuelle Position')).html(translate('Aktuelle Position')); 1336 clearSearch( true, !relevantMarkers ); 1337 1338 $('#search').addClass('extrapadding'); 1339 $('#main-menu-wrapper .switchNav').css( 'display', 'none' ); 1340 $('#main-menu-wrapper').animate({ 1341 top: '-87px' 1342 }, 250, function() {}); 1343 $('.settings').animate({ 1344 top: '102px', 1345 left: '13px' 1346 }, 250, function() {}); 1347 $('#main-menu-wrapper').removeClass('doing-routes'); 1348 } 1349 1350 changeURL( 'Change NAV-Mode' ); 1351 } 1352 1353 function handle_geolocation_query( position ) { 1354 var lat = Math.round(position.coords.latitude * 100000) / 100000, 1355 lng = Math.round(position.coords.longitude * 100000) / 100000; 1356 1357 if ($('#startingParameters').attr('data-last-used') == 'end') { 1358 $('#search').val(lat + ',' + lng); 1359 $('#search').next('span.searchplace').addClass('active'); 1360 } else { 1361 $('#startNav').val(lat + ',' + lng); 1362 $('#startNav').next('span.searchplace').addClass('active'); 1363 } 1364 var item = { 'gno': 'curpos', 'bez': translate('Aktuelle Position'), 'adr': '', 'img': 0, 'rel': 0, 'info': '', 'typ': 'geo', 'lat': lat, 'lng': lng } 1365 successfulSearch( [ item ], 0, $('#startingParameters').attr('data-last-used') ); 1366 changeURL( translate('Suche') ); 1367 } 1368 1369 function handle_geolocation_errors( error ) { 1370 switch ( error.code ) { 1371 case error.PERMISSION_DENIED: 1372 openMessageDialog( translate('Fehler: Geolocation'), translate('Ihr Ger\u00e4t verbietet der Anwendung ihre aktuelle Geolocation zu ermitteln. Dies kann gegebenenfalls daran liegen, dass sie unverschl\u00fcsselt auf dieser Webseite surfen.') ); 1373 break; 1374 case error.POSITION_UNAVAILABLE: 1375 openMessageDialog( translate('Fehler: Geolocation'), translate('Ihre aktuelle Geolocation konnte nicht ermittelt werden.') ); 1376 break; 1377 case error.TIMEOUT: 1378 openMessageDialog( translate('Fehler: Geolocation'), translate('Es hat zu lange gedauert ihre Geolocation zu ermitteln, sodass der Versuch abgebrochen wurde.') ); 1379 break; 1380 default: 1381 openMessageDialog( translate('Fehler: Geolocation'), translate('Ein unbekannter Fehler ist beim Ermitteln der Geolocation aufgetreten.') ); 1382 break; 1383 } 1384 } 1385 1386 function openMessageDialog( title, message ) { 1387 $('#overlayDialog').html(message); 1388 $('#overlayDialog').dialog({ 1389 closeOnEscape: true, 1390 draggable: !mobileVersion, 1391 resizable: false, 1392 modal: true, 1393 width: mobileVersion ? '97%' : 385, 1394 title: title, 1395 position: { my: "center", at: "center", of: window }, 1396 show: { effect: 'fade', duration: 200 }, 1397 hide: { effect: 'fade', duration: 200 } 1398 }); 1399 } 1400 1401 $('#overlayInfo .sub-menu .nearobjects').on('click', function() { 1402 if ( $(this).hasClass('active') ) { 1403 $('#overlayNearObjects').show( 'fade', {}, 200 ); 1404 } 1405 }); 1406 1407 $('#overlayNearObjects').on('mouseleave', function() { 1408 $('#overlayNearObjects').hide( 'fade', {}, 200 ); 1409 }); 1410 1411 $('#overlayNearObjects span').on('click', function() { 1412 $('#overlayNearObjects').hide( 'fade', {}, 200 ); 1413 1414 var dataType = $(this).attr('data-type'); 1415 var tempMarker = markerBuilding[$('#overlayInfo .sub-menu .nearobjects').attr('data-key')]; 1416 1417 getObjectsNearX( tempMarker, dataType, getDistanceFromZoom() ); 1418 }); 1419 1420 $('#overlayInfo .sub-menu .organisation').on('click', function() { 1421 if ( $(this).hasClass('active') ) { 1422 if ( $(this).hasClass('schedule') || $(this).hasClass('externalinfos') ) { 1423 window.open( $(this).attr('data-key'), '_blank' ); 1424 } else { 1425 getObjectsWithRelation( $(this).attr('data-key') ); 1426 } 1427 } 1428 }); 1429 1430 $('#overlayInfo .sub-menu .share').on('click', function() { 1431 $('#overlayShare input').val( 'https://maps.rwth-aachen.de' + buildURL() ); 1432 1433 $('#overlayShare').dialog({ 1434 closeOnEscape: true, 1435 draggable: !mobileVersion, 1436 resizable: false, 1437 modal: true, 1438 width: mobileVersion ? '97%' : 500, 1439 height: 132, 1440 position: { my: "center", at: "center", of: window }, 1441 show: { effect: 'fade', duration: 200 }, 1442 hide: { effect: 'fade', duration: 200 } 1443 }); 1444 1445 $('#overlayShare input').select(); 1446 }); 1447 1448 $('.toggleVisibility').on('click', function() { 1449 if ( $(this).hasClass('show') ) { 1450 expandSidepanel( true ); 1451 } else { 1452 collideSidepanel( true ); 1453 } 1454 }); 1455 1456 function expandSidepanel( updateURL ) { 1457 if (!$('.toggleVisibility').hasClass('show')) return; 1458 1459 $('.toggleVisibilityTarget').removeClass('slided-out'); 1460 if (updateURL) { 1461 setTimeout(function() { 1462 if ($('.toggleVisibility').hasClass('show')) { 1463 $('.toggleVisibility').removeClass('show'); 1464 changeURL( 'expand sidepanel' ); 1465 } 1466 }, 250); 1467 } else { 1468 $('.toggleVisibility').removeClass('show'); 1469 } 1470 1471 $('#overlayInfo .toggleVisibility[title]').attr('title', translate('Men\u00fc ausblenden')); 1472 1473 if (!mobileVersion) { 1474 $('#map').css('left', 'min(90dvw, 332px)').resize(); 1475 offsetCenter( -166, 0 ); 1476 } 1477 1478 $('#overlayInfo').css('--imgcontainer-height', $('#overlayInfo .imgcontainer').outerHeight() + 'px'); 1479 } 1480 1481 function collideSidepanel( updateURL ) { 1482 if ($('.toggleVisibility').hasClass('show')) return; 1483 1484 $('.toggleVisibilityTarget').addClass('slided-out'); 1485 if (updateURL) { 1486 setTimeout(function() { 1487 if (!$('.toggleVisibility').hasClass('show')) { 1488 $('.toggleVisibility').addClass('show'); 1489 changeURL( 'collide sidepanel' ); 1490 } 1491 }, 250); 1492 } else { 1493 $('.toggleVisibility').addClass('show'); 1494 } 1495 1496 $('#overlayInfo .toggleVisibility[title]').attr('title', translate('Men\u00fc einblenden')); 1497 1498 if (!mobileVersion) { 1499 offsetCenter( 166, 0 ); 1500 $('#map').css('left', '0').resize(); 1501 } 1502 } 1503 1504 $('.show-on-js').show(); 1505 1506 $('#toggleenvironmentzone').on('click', function() { 1507 if ($(this).hasClass('ready')) { 1508 if ($('#toggleenvironmentzone').hasClass('show')) { 1509 showUmweltzone(); 1510 } else { 1511 hideUmweltzone(); 1512 } 1513 } 1514 }); 1515 1516 function showUmweltzone() { 1517 $('#toggleenvironmentzone').removeClass('show'); 1518 1519 if (polygonEnvironmentalZone.length > 0) { 1520 $('#toggleenvironmentzone').html(translate('Umweltzone ausblenden')); 1521 1522 for (var i = 0; i < polygonEnvironmentalZone.length; i++) { 1523 polygonEnvironmentalZone[i].setMap( map ); 1524 } 1525 1526 changeURL( 'toggle environmental zone' ); 1527 $('.closesettings').click(); 1528 } else { 1529 $('#toggleenvironmentzone').removeClass('ready').html(translate('Lade Umweltzone...')); 1530 1531 $.ajax({
1532 url: ajaxURL + "&mode=environmentalzone", 1533 dataType: 'json', 1534 success: function( data ) { 1535 for (var i = 0; i < data.length; i++) { 1536 polygonEnvironmentalZone[i] = new google.maps.Polygon({ 1537 paths: getArrayFromCoordString(data[i].pol), 1538 strokeColor: getStrokeColorByType( data[i].typ ), 1539 strokeOpacity: getStrokeOpacityByType( data[i].typ ), 1540 strokeWeight: 3, 1541 fillColor: getFillColorByType( data[i].typ ), 1542 fillOpacity: getFillOpacityByType( data[i].typ ), 1543 map: map, 1544 zIndex: getZIndexByType( data[i].typ ) 1545 }); 1546 } 1547 1548 $('#toggleenvironmentzone').addClass('ready').html(translate('Umweltzone ausblenden')); 1549 changeURL( 'toggle environmental zone' ); 1550 $('.closesettings').click(); 1551 }, 1552 error: function() { 1553 $('#toggleenvironmentzone').addClass('show').addClass('ready').html(translate('Umweltzone einblenden')); 1554 // TODO: Alert in Dialog umwandeln 1555 alert( 'Die Polygondaten fuer die Umweltzone konnten nicht geladen werden! Bitte versuchen Sie es spaeter erneut.' ); 1556 } 1557 }); 1558 } 1559 } 1560 1561 function hideUmweltzone() { 1562 $('#toggleenvironmentzone').addClass('show').html(translate('Umweltzone einblenden')); 1563 1564 for (var i = 0; i < polygonEnvironmentalZone.length; i++) { 1565 polygonEnvironmentalZone[i].setMap( null ); 1566 } 1567 1568 changeURL( 'toggle environmental zone' ); 1569 $('.closesettings').click(); 1570 } 1571 1572 $('#toggleparkingzones').on('click', function() { 1573 if ($(this).hasClass('ready')) { 1574 if ($('#toggleparkingzones').hasClass('show')) { 1575 showParkzonen(); 1576 } else { 1577 hideParkzonen(); 1578 } 1579 } 1580 }); 1581 1582 function showParkzonen() { 1583 $('#toggleparkingzones').removeClass('show'); 1584 1585 if (polygonParkingZones.length > 0) { 1586 $('#toggleparkingzones').html(translate('Parkzonen ausblenden')); 1587 1588 for (var i = 0; i < polygonParkingZones.length; i++) { 1589 polygonParkingZones[i].setMap( map ); 1590 polygonParkingZones[i].polygon.setMap( map ); 1591 } 1592 1593 centerAndZoomMap(); 1594 changeURL( 'toggle parking zones' ); 1595 $('.closesettings').click(); 1596 } else { 1597 $('#toggleparkingzones').removeClass('ready').html(translate('Lade Parkzonen...')); 1598 1599 $.ajax({ 1600 url: ajaxURL + "&mode=parkingzones", 1601 dataType: 'json', 1602 success: function( data ) { 1603 for (var i = 0; i < data.length; i++) { 1604 typePZ = data[i].typ + data[i].bez.replace('Parkzonen ', '').replace('Parkzone ', ''); 1605 1606 var tempPolygon = new google.maps.Polygon({ 1607 paths: getArrayFromCoordString(data[i].pol), 1608 strokeColor: getStrokeColorByType( typePZ ), 1609 strokeOpacity: getStrokeOpacityByType( typePZ ), 1610 strokeWeight: 5, 1611 fillColor: getFillColorByType( typePZ ), 1612 fillOpacity: getFillOpacityByType( typePZ ), 1613 map: map, 1614 zIndex: getZIndexByType( data[i].typ ) 1615 }); 1616 1617 polygonParkingZones[i] = new google.maps.Marker({ 1618 position: { 1619 lat: data[i].lat, 1620 lng: data[i].lng 1621 }, 1622 map: map, 1623 draggable: false, 1624 polygon: tempPolygon, 1625 label: { 1626 text: data[i].bez.replace('Parkzonen ', '').replace('Parkzone ', ''), 1627 className: 'parkingzonelabel' 1628 }, 1629 icon: { 1630 url: 'libraries/rwth/img/parkzone.png', 1631 labelOrigin: new google.maps.Point(16, 48) 1632 } 1633 }); 1634 } 1635 1636 $('#toggleparkingzones').addClass('ready').html(translate('Parkzonen ausblenden')); 1637 centerAndZoomMap(); 1638 changeURL( 'toggle parking zones' ); 1639 $('.closesettings').click(); 1640 }, 1641 error: function() { 1642 $('#toggleparkingzones').addClass('show').addClass('ready').html(translate('Parkzonen einblenden')); 1643 // TODO: Alert in Dialog umwandeln 1644 alert( 'Die Polygondaten fuer die Parkzonen konnten nicht geladen werden! Bitte versuchen Sie es spaeter erneut.' ); 1645 } 1646 }); 1647 } 1648 } 1649 1650 function hideParkzonen() { 1651 $('#toggleparkingzones').addClass('show').html(translate('Parkzonen einblenden')); 1652 1653 for (var i = 0; i < polygonParkingZones.length; i++) { 1654 polygonParkingZones[i].setMap( null ); 1655 polygonParkingZones[i].polygon.setMap( null ); 1656 } 1657 1658 centerAndZoomMap(); 1659 changeURL( 'toggle parking zones' ); 1660 $('.closesettings').click(); 1661 } 1662 1663 if (!mobileVersion) { 1664 $('.tooltip').tooltip({ 1665 position: { 1666 my: "center top", 1667 at: "center bottom", 1668 collision: "none" 1669 }, 1670 classes: { "ui-tooltip": "ui-corner-all ui-widget-shadow arrowup" } 1671 }); 1672 1673 $('.tooltipright').tooltip({ 1674 position: { 1675 my: "left center", 1676 at: "right center", 1677 collision: "none" 1678 }, 1679 classes: { "ui-tooltip": "ui-corner-all ui-widget-shadow arrowleft" } 1680 }); 1681 1682 $('.tooltipleft').tooltip({ 1683 position: { 1684 my: "right center", 1685 at: "left center", 1686 collision: "none" 1687 }, 1688 classes: { "ui-tooltip": "ui-corner-all ui-widget-shadow arrowright" } 1689 }); 1690 } 1691 1692 $('#map').on('mousedown', function() { 1693 $('#search').blur(); 1694 }); 1695 1696 function getDistanceFromZoom() { 1697 if (map.getZoom() >= 18) return 0.15; 1698 else if (map.getZoom() == 17) return 0.375; 1699 else if (map.getZoom() <= 16) return 0.75; 1700 1701 return 0.15; 1702 } 1703 1704 function offsetCenter( offsetx, offsety ) { 1705 if (typeof map === 'undefined' || typeof map.getBounds() === 'undefined') return; 1706 1707 var scale = Math.pow(2, map.getZoom()); 1708 var nw = new google.maps.LatLng( 1709 map.getBounds().getNorthEast().lat(),
1710 map.getBounds().getSouthWest().lng() 1711 ); 1712 1713 var worldCoordinateCenter = map.getProjection().fromLatLngToPoint(map.getCenter()); 1714 1715 var pixelOffset = new google.maps.Point( (offsetx/scale) || 0, (offsety/scale) || 0 ); 1716 1717 var worldCoordinateNewCenter = new google.maps.Point( 1718 worldCoordinateCenter.x - pixelOffset.x, 1719 worldCoordinateCenter.y + pixelOffset.y 1720 ); 1721 1722 var newCenter = map.getProjection().fromPointToLatLng(worldCoordinateNewCenter); 1723 1724 map.setCenter(newCenter); 1725 } 1726 1727 function getArrayFromCoordString( coords ) { 1728 var arrCoords = coords.split(';'); 1729 var arrLatLng = []; 1730 1731 for (var i = 0; i < arrCoords.length; ++i) { 1732 var curCoord = arrCoords[i].split(','); 1733 1734 if ((!isNaN(parseFloat(curCoord[0]))) && (!isNaN(parseFloat(curCoord[1])))) { 1735 arrLatLng.push( { lat: parseFloat(curCoord[1]), lng: parseFloat(curCoord[0]) } ); 1736 } 1737 } 1738 1739 return arrLatLng; 1740 } 1741 1742 function changeURL( title ) { 1743 if ( allowChangeURL == 1 ) { 1744 // alert('Push State: ' + JSON.stringify(buildStateObject())); 1745 window.history.pushState( buildStateObject(), title, buildURL() ); 1746 } else if ( allowChangeURL == 2 ) { 1747 // alert('Replace State: ' + JSON.stringify(buildStateObject())); 1748 window.history.replaceState( buildStateObject(), title, buildURL() ); 1749 } 1750 } 1751 1752 function buildStateObject() { 1753 var strGNO = '', strGNOSource = '', coords = '', scoords = '', dlabel = '', slabel= ''; 1754 for ( key in markerBuilding ) { 1755 if (markerBuilding[key].exportMarker) { 1756 if (markerBuilding[key].objType != 'geo') { 1757 if (markerBuilding[key].navStartEnd == 'end') { 1758 strGNO += key + ','; 1759 } else { 1760 if (strGNOSource == '') strGNOSource = key; 1761 else strGNOSource += ',' + key; 1762 } 1763 } else { 1764 if (markerBuilding[key].navStartEnd == 'end') { 1765 coords = (Math.round(markerBuilding[key].getPosition().lat() * 100000) / 100000) + ',' + (Math.round(markerBuilding[key].getPosition().lng() * 100000) / 100000); 1766 if (markerBuilding[key].label.text != translate('Benutzerdefinierte Position') && markerBuilding[key].label.text != translate('Aktuelle Position')) dlabel = markerBuilding[key].label.text; 1767 } else { 1768 scoords = (Math.round(markerBuilding[key].getPosition().lat() * 100000) / 100000) + ',' + (Math.round(markerBuilding[key].getPosition().lng() * 100000) / 100000); 1769 if (markerBuilding[key].label.text != translate('Benutzerdefinierte Position') && markerBuilding[key].label.text != translate('Aktuelle Position')) slabel = markerBuilding[key].label.text; 1770 } 1771 } 1772 } 1773 } 1774 1775 var param; 1776 if ($('#overlayInfo .additionalInfos').attr('data-nearobjects') != '') { 1777 param = { 1778 sur: $('#overlayInfo .additionalInfos').attr('data-nearobjects'), 1779 dist: $('#overlayInfo .additionalInfos').attr('data-nearobjects-distance'), 1780 info: '' 1781 }; 1782 } else if ($('#overlayInfo .additionalInfos').attr('data-informations') != '') { 1783 param = { sur: '', dist: '', info: '1' }; 1784 } else { 1785 param = { sur: '', dist: '', info: '' }; 1786 } 1787 1788 var boolRoute = $('body').hasClass('routeplaner'); 1789 var strRoute = ''; 1790 if (boolRoute) { 1791 if ($('#main-menu-wrapper .buttonNav.transit').hasClass('active')) strRoute = 'transit'; 1792 else if ($('#main-menu-wrapper .buttonNav.walking').hasClass('active')) strRoute = 'walking'; 1793 else if ($('#main-menu-wrapper .buttonNav.bicycling').hasClass('active')) strRoute = 'bicycling'; 1794 else strRoute = 'driving'; 1795 } 1796 1797 strOverlays = ''; 1798 if (!$('#toggleparkingzones').hasClass('show')) strOverlays += ',pz'; 1799 if (!$('#toggleenvironmentzone').hasClass('show')) strOverlays += ',uz'; 1800 if (strOverlays != '') strOverlays = strOverlays.substring(1); 1801 1802 var returnValue = { 1803 coords: '', 1804 dlabel: '', 1805 scoords: '', 1806 slabel: '', 1807 obj: '', 1808 sobj: '', 1809 route: strRoute, 1810 param: param, 1811 lang: strLang, 1812 map: map.getMapTypeId(), 1813 overlays: strOverlays, 1814 staticmode: staticmode, 1815 expandmenu: $('.toggleVisibility').hasClass('show') ? '0' : '' 1816 } 1817 1818 if (coords != '') { 1819 returnValue = { 1820 coords: coords, 1821 dlabel: dlabel, 1822 scoords: scoords, 1823 slabel: slabel, 1824 obj: (strGNO != '' ? strGNO.substr(0, strGNO.length - 1) : ''), 1825 sobj: strGNOSource, 1826 route: strRoute, 1827 param: param, 1828 lang: strLang, 1829 map: map.getMapTypeId(), 1830 overlays: strOverlays, 1831 staticmode: staticmode, 1832 expandmenu: $('.toggleVisibility').hasClass('show') ? '0' : '' 1833 } 1834 } else if (strGNO != '') { 1835 returnValue = { 1836 coords: '', 1837 dlabel: '', 1838 scoords: scoords, 1839 slabel: slabel, 1840 obj: strGNO.substr(0, strGNO.length - 1), 1841 sobj: strGNOSource, 1842 route: strRoute, 1843 param: param, 1844 lang: strLang, 1845 map: map.getMapTypeId(), 1846 overlays: strOverlays, 1847 staticmode: staticmode, 1848 expandmenu: $('.toggleVisibility').hasClass('show') ? '0' : '' 1849 } 1850 } else if (scoords != '') { 1851 returnValue = { 1852 coords: '', 1853 dlabel: '', 1854 scoords: scoords, 1855 slabel: slabel, 1856 obj: '', 1857 sobj: '', 1858 route: strRoute, 1859 param: param, 1860 lang: strLang, 1861 map: map.getMapTypeId(), 1862 overlays: strOverlays, 1863 staticmode: staticmode, 1864 expandmenu: $('.toggleVisibility').hasClass('show') ? '0' : '' 1865 } 1866 } else if (strGNOSource != '') { 1867 returnValue = { 1868 coords: '', 1869 dlabel: '', 1870 scoords: '', 1871 slabel: '', 1872 obj: '', 1873 sobj: strGNOSource, 1874 route: strRoute, 1875 param: param, 1876 lang: strLang, 1877 map: map.getMapTypeId(), 1878 overlays: strOverlays, 1879 staticmode: staticmode, 1880 expandmenu: $('.toggleVisibility').hasClass('show') ? '0' : '' 1881 } 1882 } 1883 1884 return returnValue; 1885 } 1886 1887 function buildURL() { 1888 var strGNO = '', strGNOSource = '', coords = '', scoords = ''; 1889 1890 for ( key in markerBuilding ) { 1891 if (markerBuilding[key].exportMarker) { 1892 if (markerBuilding[key].objType != 'geo') { 1893 if (markerBuilding[key].navStartEnd == 'end') { 1894 strGNO += key + ','; 1895 } else { 1896 if (strGNOSource == '') strGNOSource = key; 1897 else strGNOSource += ',' + key; 1898 } 1899 } else { 1900 if (markerBuilding[key].navStartEnd == 'end') { 1901 coords = (Math.round(markerBuilding[key].getPosition().lat() * 100000) / 100000) + ',' + (Math.round(markerBuilding[key].getPosition().lng() * 100000) / 100000); 1902 if (markerBuilding[key].label.text != translate('Benutzerdefinierte Position') && markerBuilding[key].label.text != translate('Aktuelle Position')) coords += '&d-label=' + escape(markerBuilding[key].label.text); 1903 } else { 1904 scoords = (Math.round(markerBuilding[key].getPosition().lat() * 100000) / 100000) + ',' + (Math.round(markerBuilding[key].getPosition().lng() * 100000) / 100000); 1905 if (markerBuilding[key].label.text != translate('Benutzerdefinierte Position') && markerBuilding[key].label.text != translate('Aktuelle Position')) scoords += '&s-label=' + escape(markerBuilding[key].label.text); 1906 } 1907 } 1908 } 1909 } 1910 1911 var param = ''; 1912 if ($('#overlayInfo .additionalInfos').attr('data-nearobjects') != '') param = '&sur=' + $('#overlayInfo .additionalInfos').attr('data-nearobjects') + '&dist=' + $('#overlayInfo .additionalInfos').attr('data-nearobjects-distance'); 1913 else if ($('#overlayInfo .additionalInfos').attr('data-informations') != '') param = '&info=1'; 1914 1915 var boolRoute = $('body').hasClass('routeplaner'); 1916 var strRoute = ''; 1917 if (boolRoute) { 1918 if ($('#main-menu-wrapper .buttonNav.transit').hasClass('active')) strRoute = 'route=transit'; 1919 else if ($('#main-menu-wrapper .buttonNav.walking').hasClass('active')) strRoute = 'route=walking'; 1920 else if ($('#main-menu-wrapper .buttonNav.bicycling').hasClass('active')) strRoute = 'route=bicycling'; 1921 else strRoute = 'route=driving'; 1922 } 1923 1924 var returnValue = boolRoute ? '&' + strRoute : ''; 1925 1926 if (coords != '') returnValue = '&coords=' + coords + (strGNO != '' ? '&obj=' + strGNO.substr(0, strGNO.length - 1) : '') + (strGNOSource != '' ? '&s-obj=' : '') + strGNOSource + (scoords != '' ? '&s-coords=' : '') + scoords + param + (boolRoute ? '&' + strRoute : ''); 1927 else if (strGNO != '') returnValue = '&obj=' + strGNO.substr(0, strGNO.length - 1) + (strGNOSource != '' ? '&s-obj=' : '') + strGNOSource + (scoords != '' ? '&s-coords=' : '') + scoords + param + (boolRoute ? '&' + strRoute : ''); 1928 else if (scoords != '') returnValue = '&s-coords=' + scoords + (boolRoute ? '&' + strRoute : ''); 1929 else if (strGNOSource != '') returnValue = '&s-obj=' + strGNOSource + (boolRoute ? '&' + strRoute : ''); 1930 1931 strOverlays = ''; 1932 if (!$('#toggleparkingzones').hasClass('show')) strOverlays += ',pz'; 1933 if (!$('#toggleenvironmentzone').hasClass('show')) strOverlays += ',uz'; 1934 1935 if (staticmode) returnValue = '&static=1' + returnValue; 1936 1937 if (strOverlays != '') returnValue = '&overlays=' + strOverlays.substring(1) + returnValue; 1938 1939 if ($('.toggleVisibility').hasClass('show')) { 1940 returnValue = '&expandmenu=0' + returnValue; 1941 } 1942 1943 returnValue = '&type=' + map.getMapTypeId() + returnValue; 1944 1945 $('.switchlanguage').attr('href', '/navigator/?lang=' + (strLang == 'en' ? 'de' : 'en') + returnValue); 1946 1947 return '/navigator/?lang=' + strLang + returnValue; 1948 } 1949 1950 window.onpopstate = function( event ) { 1951 // alert('--- On Pop State ---\nhistory.state: ' + JSON.stringify(history.state) + '\nevent.state: ' + JSON.stringify(event.state)); 1952 1953 if ( event.state != null ) { 1954 allowChangeURL = 0; 1955 1956 $('#startingParameters') 1957 .html( event.state.obj ) 1958 .attr( 'data-current-position', event.state.coords ) 1959 .attr( 'data-source-coords', event.state.scoords ) 1960 .attr( 'data-source-obj', event.state.sobj ) 1961 .attr( 'data-nearobjects', event.state.param.sur ) 1962 .attr( 'data-nearobjects-distance', event.state.param.dist ) 1963 .attr( 'data-informations', event.state.param.info ) 1964 .attr( 'data-destination-label', event.state.dlabel ) 1965 .attr( 'data-source-label', event.state.slabel ) 1966 .attr( 'data-overlays', ',' + event.state.overlays + ',' ) 1967 .attr( 'data-expandmenu', event.state.expandmenu ) 1968 .attr( 'data-route', event.state.route ); 1969 1970 staticmode = event.state.staticmode; 1971 if (staticmode) $('body').addClass('static'); 1972 else $('body').removeClass('static'); 1973 1974 mapTypeId = google.maps.MapTypeId.ROADMAP;
1975 if (event.state.map == 'satellite') mapTypeId = google.maps.MapTypeId.SATELLITE; 1976 else if (event.state.map == 'hybrid') mapTypeId = google.maps.MapTypeId.HYBRID; 1977 else if (event.state.map == 'terrain') mapTypeId = google.maps.MapTypeId.TERRAIN; 1978 1979 map.setMapTypeId( mapTypeId ); 1980 1981 restoreURLValues(); 1982 } else { 1983 $('#startingParameters') 1984 .html( '' ) 1985 .attr( 'data-current-position', '' ) 1986 .attr( 'data-source-coords', '' ) 1987 .attr( 'data-source-obj', '' ) 1988 .attr( 'data-nearobjects', '' ) 1989 .attr( 'data-nearobjects-distance', '' ) 1990 .attr( 'data-informations', '' ) 1991 .attr( 'data-destination-label', '' ) 1992 .attr( 'data-source-label', '' ) 1993 .attr( 'data-overlays', ',,' ) 1994 .attr( 'data-expandmenu', '' ) 1995 .attr( 'data-route', '' ); 1996 1997 map.setMapTypeId( google.maps.MapTypeId.ROADMAP ); 1998 1999 $('#search').val(''); 2000 $('#startNav').val(''); 2001 $('#main-menu-wrapper .searchplace').removeClass('active') 2002 clearSearch(); 2003 } 2004 }; 2005 2006 function restoreURLValues() { 2007 if ($('#startingParameters').attr('data-overlays').indexOf(',pz,') > -1) showParkzonen(); 2008 else hideParkzonen(); 2009 2010 if ($('#startingParameters').attr('data-overlays').indexOf(',uz,') > -1) showUmweltzone(); 2011 else hideUmweltzone(); 2012 2013 if ($('#startingParameters').attr('data-expandmenu') == '0') { 2014 collideSidepanel( false ); 2015 } else { 2016 expandSidepanel( false ); 2017 } 2018 2019 for ( key in markerBuilding ) { 2020 if (markerBuilding[key].map != null) markerBuilding[key].setMap(null); 2021 if (markerBuilding[key].polygon != null) markerBuilding[key].polygon.setMap(null); 2022 delete markerBuilding[key]; 2023 } 2024 2025 if ($('#startingParameters').attr('data-route') != '' && !($('body').hasClass('routeplaner'))) setNavigationVisibility( true ); 2026 else if ($('#startingParameters').attr('data-route') == '' && $('body').hasClass('routeplaner')) setNavigationVisibility( false ); 2027 2028 if ($('#startingParameters').attr('data-route') != '') { 2029 $('#main-menu-wrapper .buttonNav.' + $('#startingParameters').attr('data-route')).trigger('click'); 2030 } 2031 2032 if ($('#startingParameters').attr('data-search') != '') { 2033 $('#search').val($('#startingParameters').attr('data-search')); 2034 $('#startNav').val(''); 2035 $('#startNav').next('span').removeClass('active'); 2036 $('#search').next('span').addClass('active').trigger('click'); 2037 } else { 2038 $('#search').val(''); 2039 $('#startNav').val(''); 2040 $('#main-menu-wrapper .searchplace').removeClass('active') 2041 2042 if ($('#startingParameters').attr('data-source-obj') != '') { 2043 getObjectsWithID($('#startingParameters').attr('data-source-obj'), 'start'); 2044 } else if ($('#startingParameters').attr('data-source-coords') != '') { 2045 convertLatLngParamToMap('start'); 2046 } else if ($('#startingParameters').html() != '') { 2047 getObjectsWithID($('#startingParameters').html(), 'end'); 2048 } else if ($('#startingParameters').attr('data-current-position') != '') { 2049 convertLatLngParamToMap('end'); 2050 } else { 2051 changeURL ( 'Initialize RWTH Maps' ); 2052 allowChangeURL = 1; 2053 } 2054 } 2055 } 2056 2057 function convertLatLngParamToMap( type, latlng ) { 2058 if (typeof latlng === 'undefined') { 2059 if (type == 'end') latlng = $('#startingParameters').attr('data-current-position').split(','); 2060 else latlng = $('#startingParameters').attr('data-source-coords').split(','); 2061 } else { 2062 latlng = latlng.split(','); 2063 } 2064 2065 if ( latlng.length == 2 ) { 2066 var strBez = translate('Benutzerdefinierte Position'); 2067 if (type == 'end' && $('#startingParameters').attr('data-destination-label') != '') strBez = $('#startingParameters').attr('data-destination-label'); 2068 else if (type == 'start' && $('#startingParameters').attr('data-source-label') != '') strBez = $('#startingParameters').attr('data-source-label'); 2069 2070 var address = (strBez == translate('Benutzerdefinierte Position') ? '' : strBez); 2071 2072 var item = { 'gno': 'curpos_' + type, 'bez': strBez, 'adr': address, 'img': 0, 'rel': 0, 'info': '', 'typ': 'geo', 'lat': parseFloat(latlng[0]), 'lng': parseFloat(latlng[1]) } 2073 successfulSearch( [ item ], 0, type ); 2074 2075 var lat = parseFloat(latlng[0]), lng = parseFloat(latlng[1]); 2076 2077 $(type == 'end' ? '#search' : '#startNav').val(strBez == translate('Benutzerdefinierte Position') ? lat + ',' + lng : strBez); 2078 $(type == 'end' ? '#search' : '#startNav').next('span.searchplace').addClass('active'); 2079 2080 if (type == 'start') { 2081 if ($('#startingParameters').html() != '') getObjectsWithID($('#startingParameters').html(), 'end'); 2082 else if ($('#startingParameters').attr('data-current-position') != '') convertLatLngParamToMap('end'); 2083 else { 2084 changeURL( translate('Suche') ); 2085 allowChangeURL = 1; 2086 } 2087 } else { 2088 if ($('#startingParameters').attr('data-nearobjects') != '' && markerBuilding['curpos'] != null) { 2089 getObjectsNearX( markerBuilding['curpos'], $('#startingParameters').attr('data-nearobjects'), $('#startingParameters').attr('data-nearobjects-distance') ); 2090 $('#startingParameters').attr('data-nearobjects', ''); 2091 } else { 2092 if ($('#startingParameters').attr('data-calcroute') == '1') $('#calcRouteButton').click(); 2093 2094 changeURL( translate('Suche') ); 2095 allowChangeURL = 1; 2096 } 2097 } 2098 } 2099 2100 $('#startingParameters').attr('data-current-position', ''); 2101 } 2102 2103 function getObjectsNearX( obj, type, distance ) { 2104 var param = obj.getPosition().lat() + ';' + obj.getPosition().lng() + ';' + obj.gebnr + ';' + type + ';' + distance; 2105 2106 $.ajax({
2107 url: ajaxURL + "&mode=distance&q=" + param, 2108 dataType: 'json', 2109 success: function( items ) { 2110 if (successfulSearch(items, 1, 'end')) $('#overlayInfo .additionalInfos').attr('data-nearobjects', type).attr('data-nearobjects-distance', distance); 2111 changeURL( 'Suche' ); 2112 allowChangeURL = 1; 2113 }, 2114 error: function( error ) { 2115 allowChangeURL = 1; 2116 } 2117 }); 2118 } 2119 2120 function getObjectsWithID( idlist, type ) { 2121 $.ajax({ 2122 url: ajaxURL + "&mode=gno&q=" + escape(idlist), 2123 dataType: 'json', 2124 success: function( data ) { 2125 if ($('#startingParameters').attr('data-current-position') != '') { 2126 var latlng = $('#startingParameters').attr('data-current-position').split(','); 2127 2128 if ( latlng.length == 2 ) { 2129 var strBez = translate('Benutzerdefinierte Position'); 2130 if ($('#startingParameters').attr('data-destination-label') != '') strBez = $('#startingParameters').attr('data-destination-label'); 2131 2132 var address = (strBez == translate('Benutzerdefinierte Position') ? '' : strBez); 2133 2134 var item = { 'gno': 'curpos_' + type, 'bez': strBez, 'adr': address, 'img': 0, 'rel': 0, 'info': '', 'typ': 'geo', 'lat': parseFloat(latlng[0]), 'lng': parseFloat(latlng[1]) } 2135 2136 data.push(item); 2137 } 2138 2139 $('#startingParameters').attr('data-current-position', ''); 2140 } 2141 2142 successfulSearch( data, 0, type ); 2143 2144 if ( type == 'start' ) { 2145 if ($('#startingParameters').html() != '') getObjectsWithID($('#startingParameters').html(), 'end'); 2146 else if ($('#startingParameters').attr('data-current-position') != '') convertLatLngParamToMap('end'); 2147 else { 2148 changeURL( translate('Suche') ); 2149 allowChangeURL = 1; 2150 } 2151 } else { 2152 if ($('#startingParameters').attr('data-nearobjects') != '' && markerBuilding[$('#startingParameters').html()] != null) { 2153 getObjectsNearX( markerBuilding[$('#startingParameters').html()], $('#startingParameters').attr('data-nearobjects'), $('#startingParameters').attr('data-nearobjects-distance') ); 2154 } else if ($('#startingParameters').attr('data-informations') != '' && markerBuilding[$('#startingParameters').html()] != null) { 2155 getObjectsWithRelation( $('#startingParameters').html() ); 2156 } else { 2157 if ($('#startingParameters').attr('data-calcroute') == '1') $('#calcRouteButton').click(); 2158 2159 changeURL( translate('Suche') ); 2160 allowChangeURL = 1; 2161 } 2162 2163 $('#startingParameters').attr('data-nearobjects', '').attr('data-informations', ''); 2164 } 2165 }, 2166 error: function() { allowChangeURL = 1; } 2167 }); 2168 } 2169 2170 function getObjectsWithRelation( relationid ) { 2171 $.ajax({ 2172 url: ajaxURL + "&mode=relation&q=" + escape(relationid), 2173 dataType: 'json', 2174 success: function( data ) { 2175 if (successfulSearch(data, 2, 'end')) $('#overlayInfo .additionalInfos').attr('data-informations', relationid); 2176 changeURL( 'Suche' ); 2177 allowChangeURL = 1; 2178 }, 2179 error: function() { allowChangeURL = 1; } 2180 }); 2181 } 2182 2183 $('#map').removeClass().addClass(map.getMapTypeId()); 2184 2185 if ( navigator.geolocation ) { 2186 $('body').addClass('geolocation'); 2187 $('#main-menu-wrapper .searchplace').attr('title', translate('Aktuelle Position')).html(translate('Aktuelle Position')); 2188 } 2189 2190 function translate( german ) { 2191 if (strLang == 'en' && typeof arrDictionary[german] !== 'undefined') { 2192 return arrDictionary[german]; 2193 } else if (strLang == 'en') { 2194 return '***' + german + '***'; 2195 } 2196 return german; 2197 } 2198});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.