1/*************************************************************************************** 2 * 3 * Evolucion visor de recursos turisticos a la nueva version del api de googlemaps v3. 4 * 5 * Dependencias nuevas: 6 * 7 * - jquery 1.4.3 8 * - encode.js 9 * 10 * Notas: 11 * 12 * La mayor parte de la configuracion del servicio, se ha migrado al fichero 13 * <code>mapconfig.js</code> que expone la configuracion a traves del objeto 14 * MAP_CONFIG. 15 * 16 * @author cmendez Marzo 2011. 17 * 18 ***************************************************************************************/ 19 20/** 21 * Tipos de recursos a cargar en el mapa separados por comas: 22 * 23 * ejempo: A1_K,A1_W,A1_Z,B1_1 24 */ 25 26CONST_LABEL_ORIGEN = ''; 27CONST_LABEL_DESTINO = ''; 28var resource_types = ""; 29 30 31//Daclaracion de variables para recoger valores de las vistas de recursos turisticos 32 33/** 34 * Lenguaje por defecto. En la inicializacion de la aplicacion se 35 * obtiene la proporcionada por el servidor. 36 */ 37 38 var lang = ""; 39 40/** 41 * Compatibilidad con otros controles y scripts empleados por la aplicacion. 42 */ 43 44 var gPeticionEnCurso = false; 45 46/** 47 * Referencia al objeto mapa que se visualiza en la pagina. 48 * Objeto google.maps.Map 49 */ 50 51 var r_map; 52 var eVisitarMap; 53 54/** 55 * Referencia a la ventana de informacion que se emplea para visualizar las miniaturas 56 * de los recursos que se visualizan en el mapa. 57 * 58 * Se sigue la recomendacion del api, de emplear una unica ventana de informacion, para 59 * visualizar todas las informaciones. 60 * 61 * Objeto google.maps.InfoWindow 62 */ 63var infoWindow; 64 65/** 66 * Referencia al recurso vinculado a la ventana de informacion 67 * 68 * Si se elimina el marcador asociado a la ventana de informacion esta desaparece, para evitar que 69 * esto ocurra en el desplazamiento automatico, en el open, se mantendra esta referencia al marcador hasta 70 * que sea necesario eliminarlo 71 * 72 * Objeto RecursoTuristico 73 */ 74var infoWindowRecurso; 75 76/** 77 * Indica cuando hay que borrar este marcador del mapa 78 * 79 */ 80var borrarInfoWindowRecurso = false; 81 82/** 83 * Implementa el renderizador del servicio Directions del api de maps V3. 84 * Cuando se calcula una ruta, se le deben proporcionar dos objetos: 85 * 1) El mapa en el que visualizar la ruta. 86 * 2) Un panel en el que cargar las indicaciones de la ruta. 87 * 88 * Objeto google.maps.DirectionsRenderer 89 */ 90var directionsDisplay; 91 92/** 93 * Se inicializa con el servicio Directions del api de maps V3. 94 * 95 * Objeto google.maps.DirectionsService 96 */ 97var directionsService; 98 99/** 100 * Se inicializa con el servicio de Panoramio. 101 * 102 * Objeto google.maps.panoramio.PanoramioLayer 103 */ 104var panoramioLayer; 105 106/** 107 * Punto de inicio de la ruta. 108 * 109 * Objeto google.maps.LatLng 110 */ 111var r_start = null; 112 113/** 114 * Punto de finalizacion de la ruta. 115 * 116 * Objeto google.maps.LatLng 117 */ 118var r_end = null; 119 120/** 121 * Overlay que visualiza un marcador verde con la letra A para identificar 122 * el inicio de la ruta. 123 * 124 * Objeto google.maps.Marker 125 */ 126var r_start_o = null; 127 128/** 129 * Overlay que visualiza un marcador verde con la letra B para identificar 130 * el fin de la ruta. 131 * 132 * Objeto google.maps.Marker 133 */ 134var r_end_o = null; 135 136/** 137 * Indica si se deben visualizar resultados obtenidos de panoramio en el mapa. 138 */ 139var isPanoramioActive = false; 140 141/** 142 * Fecha del ultimo evento que actualiza el mapa. Se emplea para limitar el numero 143 * de conexiones que se relizan al servidor a por datos. 144 */ 145//var eventType = null; /*Ivan - Puesto para que siga ejecuntando el js*/ 146var lastEvent = null; 147 148/** 149 * Array de recursos turisticos. 150 * 151 * Array de objetos RecursoTuristico procedentes de la ruta 152 */ 153var vRecursosRuta = []; 154 155 156 157/** 158 * Array de recursos turisticos. 159 * 160 * Array de objetos RecursoTuristico 161 */ 162var vRecursos = []; 163 164/** 165 * Array de recursos turisticos procedentes de un formulario de búsqueda. 166 * 167 * Array de objetos RecursoTuristico 168 */ 169var vRecursosFiltro = []; 170 171/** 172 * Overlay dragable, que representa el puntero del radar de posicion 173 * 174 * Objeto google.maps.Marker 175 */ 176var pointer = null; 177 178/** 179 * Circulo de radio determinado por el rango del radar asociado al puntero. 180 * 181 * Objeto google.maps.Circle 182 */ 183var circle = null; 184 185/** 186 * Arrays de circulos de radio determinados por el rando del radar asociad
186os a 187 * cada punto de la ruta. 188 * 189 * Array de objetos google.maps.Circle 190 */ 191var ruteCircles = []; 192 193/** 194 * Rango del radar, este se debe proporcionar en metros. 195 */ 196var range = 0; 197 198/** 199 * Inicializador del visor de recursos turisticos. 200 * 201 * Anade al listado de funciones que se ejecutan al cargarse la pagina (onLoad), 202 * la funcion <code>inicializarMapa</code> de arranque de la aplicacion. 203 */ 204 205 206if (window.addEventListener) { 207 // window.addEventListener('load', inicializarMapa, false); 208 window.addEventListener('load', inicializarLeafletMapa, false); 209} else if (window.attachEvent) { 210 // window.attachEvent('onload', inicializarMapa); 211 window.attachEvent('onload', inicializarLeafletMapa); 212} 213 214/** 215 * Crea el infowindow de un recurso turistico con los enlaces correspondientss a la 216 * descarga de POI y Desde, Hasta y en funcion del nivel de zoom 217 * incluye o no el enlace de visualizacion de los recursos del municipio 218 * 219 * @param marker Marcador asociado a la ventana de informacion. Objeto google.maps.Marker 220 * @param recurso Recurso turistico. Objeto RecursoTuristico 221 */ 222function openInfoWindow(marker, recurso) { 223 lastEvent = new Date(); 224 var markerLatLng = marker.getPosition(); 225 226 como = "C\u00F3mo llegar"; 227 desde = "Desde aqu\u00ED"; 228 hasta = "Hasta aqu\u00ED"; 229 info= "Informaci\u00F3n"; 230 231 if (lang=="en"){ 232 como = "How to arrive"; 233 desde = "From here"; 234 hasta = "To here"; 235 info = "Information"; 236 } 237 238 if (lang=="fr"){ 239 como = "Comment arriver"; 240 desde = "D'ici"; 241 hasta = "Jusqu'ici"; 242 info="Information"; 243 } 244 245 246 247 if(recurso.codigoRecurso != ''){ 248 var styleTitle = 'conInfo'; 249 } 250 251 var view = [ 252 "<div id=\"municipios_ie6_contents\">", 253 "<div class='contenedor-imagen' style='float:left' >", 254 "<img class='img_infoView' src='", 255 recurso.imagen, 256 "'>", 257 "</div>", 258 "<p class='descr_infoView "+ styleTitle +"'><strong>", 259 recurso.nombreRecurso, 260 "</strong></p>", 261 //"<div class='descr_infoView2'>", 262 //recurso.descripcion, 263 //"</div>", 264 "<div class='capa_mas_info aqui'>", 265 "<a class='masinfo_maps' href='/", 266 lang, 267 "/node/", 268 recurso.codigoRecurso, 269 "'>"+info+"</a>", 270 "</div>", 271 "</div>", 272 "<div id=\"comollegar\">", 273 "<span class='como-llegar-capa'>", 274 como, 275 ": </span>", 276 "<a", 277 " href=\"javascript:refreshResourceRuteFromTo('", 278 recurso.nombreRecurso, 279 "', ", 280 recurso.longitudRecurso, 281 ", ", 282 recurso.latitudRecurso, 283 ", true);\" class='desde-punto'>", 284 desde, 285 "</a>", 286 " - ", 287 "<a", 288 " href=\"javascript:refreshResourceRuteFromTo('", 289 recurso.nombreRecurso, 290 "', ", 291 recurso.longitudRecurso, 292 ", ", 293 recurso.latitudRecurso, 294 ", false);\" class='hasta-punto'>", 295 hasta, 296 "</a>", 297 "</div>", 298 //"</div>" 299 300 ].join(''); 301 302 infoWindow.setContent(view); 303 infoWindow.open(r_map, marker); 304 305 // Codigo necesario para que el infoWindow no desaparezca al tener habilitado el autopan 306 if (borrarInfoWindowRecurso) { 307 infoWindowRecurso.borrar(); 308 borrarInfoWindowRecurso = false; 309 } 310 infoWindowRecurso = recurso; 311 /////////////// 312 //jQuery('#municipios_ie6_contents').parent().parent().parent().addClass("popupMapsRiba"); 313 314 315} 316 317 318function openInfoWindow2(marker,titulo,imagen,descripcion,codigoRecurso,latitudRecurso,longitudRecurso) { 319 lastEvent = new Date(); 320 var markerLatLng = marker.getPosition(); 321 322 var descripcion_recortada = descripcion.substring(0, 125) + ' ...' ; 323 324 // var view2="<div class='mapEmpresa'>"+titulo+"</div>"; 325 // view2=view2+"<div class='capa_mas_info'><a class='masinfo_maps' href='/"+lang+"/node/"+codigoRecurso+"'>+ info</a></div>"; 326 327 como = "C\u00F3mo llegar"; 328 desde = "Desde aqu\u00ED"; 329 hasta = "Hasta aqu\u00ED"; 330 info= "Informaci\u00F3n"; 331 332 if (lang=="fr"){ 333 como = "Comment arriver"; 334 desde = "D'ici"; 335 hasta = "Jusqu'ici"; 336 } 337 338 if (lang=="en"){ 339 como = "How to arrive"; 340 desde = "From here"; 341 hasta = "To here"; 342 } 343 344 if(titulo != ''){ 345 var styleTitle = 'sinInfo'; 346 } 347 348 var view = [ 349 "<div id=\"municipios_ie6_contents\" >", 350 "<div class='contenedor-imagen' style='float:left'>", 351 "<img class='img_infoView' src='", 352 imagen, 353 "'>", 354 "</div>", 355 "<p class='descr_infoView "+ styleTitle +"'><strong>", 356 titulo, 357 "</strong></p>", 358 //"<div class='descr_infoView2'>", 359 //descripcion_recortada, 360 //"</div>", 361 "</div>", 362 "<div id=\"comollegar\">", 363 "<span class='como-llegar-capa'>", 364 como, 365 ": </span>", 366 "<a", 367 " href=\"javascript:refreshResourceRuteFromTo('", 368 titulo, 369 "', ", 370 longitudRecurso, 371 ", ", 372 latitudRecurso, 373 ", true);\" class='desde-punto'>", 374 desde, 375 "</a>", 376 " - ", 377 "<a", 378 " href=\"javascript:refreshResourceRuteFromTo('", 379 titulo, 380 "', ", 381 longitudRecurso, 382 ", ", 383 latitudRecurso, 384 ", false);\" class='hasta-punto'>", 385 hasta, 386 "</a>", 387 "</div>", 388 //"</div>" 389 390 ].join(''); 391 392 infoWindow.setContent(view); 393 infoWindow.open(r_map, marker); 394} 395 396 397/** 398 * Proporciona el icono a emplear en funcion del tipo de recurso. Esta informacion, esta 399 * registrada en el objeto MAP_CONFIG. 400 * 401 * @param oidType Tipo de recurso. 402 * @return icono asociado al tipo de recurso. 403 */ 404function _getResourceIcon(oidType) { 405 return getLabel(MAP_CONFIG.path_imagen) + "" + eval("MAP_CONFIG.icon_type." + oidType); 406} 407 408/** 409 * Inicializacion de la aplicacion. 410 * 411 * - Inicializacion del idioma desde el servidor. 412 * - Configuracion inicial del mapa. (centro y nivel de zoom). 413 * - Inicializacion del infowindow de visualizacion de miniaturas. 414 * - Inicializacion del servicio Directions del api de maps V3. 415 * - Inicializacion del renderizador para el servicio Directions. 416 * - Inicializacion de las capas de Panoramio 417 * - Inicializacion de controles del mapa y del visor de recursos turisticos. 418 * - Inicializacion de eventos del mapa (zoom y cambio de zona). 419 * 420 */ 421 422function inicializarLeafletMapa(){ 423 424 lang = languageDrupal(); //No se que hace 425 //Cosas de RRTT 426 //CREO que al ser ruta y no RRTT devuelve NULL para que lo que se muestre en el mapa sea distinto 427 tituloRecurso = Drupal.settings.mapa_turistico.titulo; //NULL. Parece que lo usa como null para determinar ciertas circunstancias. Creo que para diferencias ruta de poi 428 if (tituloRecurso != null) 429 { 430 // tituloRecurso dice que no esta definido 431 432 descripcionRecurso = Drupal.settings.mapa_turistico.descripcion; 433 codigoRecurso = Drupal.settings.mapa_turistico.codigo_recurso; 434 imagenRecurso = Drupal.settings.mapa_turistico.imagen; 435 latitudRecurso = Drupal.settings.mapa_turistico.latitud; 436 longitudRecurso = Drupal.settings.mapa_turistico.longitud; 437 438 } 439 //FIN cosas RRTT 440 /********************************* 441 * Recogemos los valores de las coordenanadas y el zoom del mapa que las pasamos desde 442 * el archivo .module, mediante la funcion drupal_add_js. 443 * Pasamos estos valores al mapa de google maps 444 **********************************/ 445 446 var zoom_inicial = parseInt(Drupal.settings.mapa_turistico.zoom_inicial); 447 448 449 if(zoom_inicial == null) { zoom_inicial = 14} 450 451 //Es una landing page, le cambio el zoom 452 //VALORAR 453 // if(jQuery('#landingpage').length>0){ 454 // zoom_inicial =12; 455 // } 456 // if (!jQuery('#frontpage').length==0 && jQuery('#frontpage').val() == "merindades"){ 457 // zoom_inicial = 10; 458 // } 459 //Gestión de las posibles rutas 460 var ruta = new String(Drupal.settings.mapa_turistico.ruta); 461 462 if (ruta.length > 5) { //Si la ruta existe y su length es mayor que 5 463 // Drupal.settings.mapa_turistico.latitud = null; //Para que entre por la ruta// 20/09/18 esta fila proboca que no salga por defecto en las LP los 464 ruta = ruta.substring(12,ruta.length-1); 465 ruta = ruta.replace(",",""); 466 ruta = ruta.split(" "); 467 468 for (i = 0; i < ruta.length; i++) { 469 ruta[i] = ruta[i].replace(",",""); 470 ruta[i] = parseFloat(ruta[i]); 471 } 472 } 473 474 //Tipos de mapas de base: 475 //http://leaflet-extras.github.io/leaflet-providers/preview/ 476 477 var merindadesMapa = L.tileLayer( 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 478 attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>', 479 subdomains: ['a','b','c'] 480 }); 481 482 483 var openStreeMap = L.tileLayer('https://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}{r}.{ext}', { 484 attribution: 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> — Map data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors', 485 subdomains: 'abcd', 486 minZoom: 0, 487 maxZoom: 18, 488 ext: 'png' 489 }); 490 491 var OpenMapSurfer_Hillshade = L.tileLayer('https://maps.heigit.org/openmapsurfer/tiles/asterh/webmercator/{z}/{x}/{y}.png', { 492 maxZoom: 18, 493 attribution: 'Imagery from <a href="http://giscience.uni-hd.de/">GIScience Research Group @ University of Heidelberg</a> | Map data <a href="https://lpdaac.usgs.gov/products/aster_policies">ASTER GDEM</a>, <a href="http://srtm.csi.cgiar.org/">SRTM</a>' 494 }); 495 496 497 var esriTopo = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}', { 498 attribution: 'Tiles © Esri — Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community' 499 }); 500 501 var MtbMap = L.tileLayer('http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png', { 502 attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> & USGS' 503 }); 504 505 506 507 508 //Creación del objeto mapa 509 510 if (Drupal.settings.mapa_turistico.latitud != null) { 511 //Creación de la configuración de mapa en caso de que latitud no sea null 512 513 514 } 515 516 517 if (Drupal.settings.mapa_turistico.latitud != null && Drupal.settings.mapa_turistico.ruta == null ) { 518 519 if (jQuery('#baseURL').val() == "merindades"){ // 520 eVisitarMap = L.map('leafletMap').
521 setView([Drupal.settings.mapa_turistico.latitud,Drupal.settings.mapa_turistico.longitud], 522 10); 523 524 } else if (jQuery('#baseURL').val() == "cuenca"){ // 525 eVisitarMap = L.map('leafletMap'). 526 setView([Drupal.settings.mapa_turistico.latitud,Drupal.settings.mapa_turistico.longitud], 527 12); 528 529 } else { 530 531 eVisitarMap = L.map('leafletMap'). 532 setView([Drupal.settings.mapa_turistico.latitud,Drupal.settings.mapa_turistico.longitud], 533 zoom_inicial); 534 } 535 536 merindadesMapa.addTo( eVisitarMap ); // Carga el mapa 537 // OpenMapSurfer_Hillshade.addTo( eVisitarMap ); // le añadimos la segunda capa para dar relieve 538 539 540 541 542 //Creamos el marcador del RRTT 543 if(jQuery(".node-touristic-resource").length>0 || jQuery(".node-agenda").length>0) { //Para que solo pinte el primer marcador en el RRTT 544 var rrttMarker = L.marker([Drupal.settings.mapa_turistico.latitud,Drupal.settings.mapa_turistico.longitud]).addTo(eVisitarMap); 545 //Le añadimos el pop-up con su información 546 if( Drupal.settings.mapa_turistico.titulo != null ){ 547 rrttMarker.bindPopup("<div class='leafletPopup'>" + 548 Drupal.settings.mapa_turistico.titulo + 549 " <div class='leafletPopup__image' style='background-image:url(" + 550 Drupal.settings.mapa_turistico.imagen + 551 ")'></div></div>" 552 ).openPopup(); 553 } 554 } 555 else if(jQuery(".node-agenda").length>0) { //Para que solo pinte el primer marcador en la agenda sin bocadillo 556 var rrttMarker = L.marker([Drupal.settings.mapa_turistico.latitud,Drupal.settings.mapa_turistico.longitud]) 557 .addTo(eVisitarMap); 558 559 } else { 560 getMapDataLL(); 561 } 562 } 563 564 565 //Caso ruta: La ruta no es NULL 566 else if (Drupal.settings.mapa_turistico.ruta != null) { 567 //Creación de la configuración de mapa en caso de que latitud sea null y ruta no sea null 568 if (jQuery('#baseURL').val() == "merindades"){ // 569 eVisitarMap = L.map('leafletMap'). 570 setView([Drupal.settings.mapa_turistico.latitud,Drupal.settings.mapa_turistico.longitud], // le pasamos los datos proporcionados por drupal en el template donde llamamos al mapa, para conseguir centrar la ruta y no su punto inicial 571 10); // zoom del mapa de ruta 572 } else { 573 eVisitarMap = L.map('leafletMap'). 574 setView([Drupal.settings.mapa_turistico.latitud,Drupal.settings.mapa_turistico.longitud], // le pasamos los datos proporcionados por drupal en el template donde llamamos al mapa, para conseguir centrar la ruta y no su punto inicial 575 12); // zoom del mapa de ruta 576 } 577 578 merindadesMapa.addTo( eVisitarMap ); 579 580 //Creamos un array de coordenadas 581 var latlngsRoutePath = []; 582 583 //Metemos las coordenadas de la ruta en nuestro array 584 for (i = 0; i < ruta.length; i = i+2) { 585 latlngsRoutePath.push([ruta[i+1], ruta[i]]); 586 } 587 588 //Creamos el polyline, le metemos el array de coordenadas y lo asignamos al mapa 589 var routePath = L.polyline(latlngsRoutePath, { 590 color: '#fb8b01' //Color cuenca #fb8b01 591 }); 592 routePath.addTo(eVisitarMap); 593 594 var rrttMarker = L.marker([ruta[1], ruta[0]]) 595 .addTo(eVisitarMap); // punto de inicio de la ruta 596 597 } else { 598 if (jQuery('#baseURL').val() == "merindades"){ // 599 eVisitarMap = L.map('leafletMap'). 600 setView([42.932256,-3.486947], // le pasamos los datos proporcionados por drupal en el template donde llamamos al mapa, para conseguir centrar la ruta y no su punto inicial 601 10); 602 } else { 603 eVisitarMap = L.map('leafletMap'). 604 setView([40.4167,-3.70325], // le pasamos los datos proporcionados por drupal en el template donde llamamos al mapa, para conseguir centrar la ruta y no su punto inicial 605 6); 606 } 607 merindadesMapa.addTo( eVisitarMap ); 608 //Creación de la configuración de mapa en caso de que latitud y ruta sean null 609 } 610 611 //Cuando el mapa hace zoom o se mueve o se carga aplica la "recarga" 612 613 var rechargeMap= function(){ 614 getMapDataLL(); 615 616 if(document.getElementById('edit-field-type-tid')) { 617 getMapDataFiltroLL(null); 618 } 619 620 if(document.getElementById('route_type-tid-value')) { 621 getMapDataFiltroLL(null); 622 } 623 var idruta = new String(Drupal.settings.mapa_turistico.idruta); 624 if (idruta > 0){ 625 getMapDataRuta("idle"); 626 } 627 }; 628 629 eVisitarMap.whenReady( rechargeMap); 630 eVisitarMap.on("load moveend", rechargeMap); 631 632 633 eVisitarMap.scrollWheelZoom.disable(); 634 //eVisitarMap.dragging.disable(); 635} 636 637 638 639 640/** 641 * Redimensiona el mapa en funcion del tamaño de la página 642 */ 643function mapsize_fixed() { 644 document.getElementById("map").style.width = jQuery(document).width(); 645 document.getElementById("map").style.height = jQuery(document).height(); 646 google.maps.event.trigger(r_map, 'resize'); 647 648} 649 650 651 652/** 653 * Obtencion de datos externos desde los servicios recursos. Pintar� los puntos de las etapas relacionadas en el mapa. 654 * 655 * Esta funcion es invocada por los eventos del mapa (cambio de zoom o de zona) y 656 * explicitamente (eventType=null) por acciones del usuario en la pagina. 657 * 658 * Cuando el invocante es un evento, se aplica una limitacion de tiempo, de forma
659 * que solo se admite una peticion al/los servicios cada medio segundo. 660 * 661 * @param eventType evento que desencadena la peticion o null en caso de una accion de 662 * usuario. 663 */ 664function getMapDataRuta(eventType) { 665 // Limitador de eventos, evita encolar eventos del mapa, solo procesa un evento cada 1/2 segundo. 666 vRecursosRuta = []; 667 // Calculo de la nueva ventana y obtencion de los nuevos overlays 668 var bounds = r_map.getBounds(); 669 var southWest = bounds.getSouthWest(); 670 var northEast = bounds.getNorthEast(); 671 672 var _lng1 = southWest.lng(); 673 var _lat1 = southWest.lat(); 674 var _lng2 = northEast.lng(); 675 var _lat2 = northEast.lat(); 676 var zona = "All"; 677 var tematica = "All"; 678 var nombre = ""; 679 var precioHasta = ""; 680 var gratuito = "All"; 681 var nidruta = Drupal.settings.mapa_turistico.idruta; 682 683 684 jQuery.getJSON(getLabel(MAP_CONFIG.resources_service), { 685 peticion: "recursos", 686 lat1: _lat1, 687 lng1: _lng1, 688 lat2: _lat2, 689 lng2: _lng2, 690 Zoom: "Municipios", 691 tipos_recursos: '0', 692 idioma: lang, 693 zona: zona, 694 tematica: tematica, 695 nombre: nombre, 696 preciohasta: precioHasta, 697 gratuito: gratuito, 698 idruta: nidruta, 699 mod: "JSON" 700 }, function(data) { 701 prepareResourcesRuta(data); 702 }); 703 704} 705 706/** 707 * Obtencion de datos externos desde los servicios recursos. Filtro por arbol de tipos de recurso. 708 * 709 * Esta funcion es invocada por los eventos del mapa (cambio de zoom o de zona) y 710 * explicitamente (eventType=null) por acciones del usuario en la pagina. 711 * 712 * Cuando el invocante es un evento, se aplica una limitacion de tiempo, de forma 713 * que solo se admite una peticion al/los servicios cada medio segundo. 714 * 715 * @param eventType evento que desencadena la peticion o null en caso de una accion de 716 * usuario. 717 */ 718 719 720function getMapDataLL() { 721 722 /** 723 * GHernandez esto esta porque no se borraban los pois y las sombras, al mover cargana unas nuevas a terminaba por bloquear el navegador. 724 */ 725 if(typeof ($contTyp) == "undefined"){ 726 jQuery(".leaflet-shadow-pane img").remove(); 727 jQuery(".leaflet-marker-pane img").remove(); 728 } 729 // jQuery(".leaflet-popup-pane .leaflet-popup").remove(); 730 // GHernandez Fin 731 732 // Borrado de los overlays de recursos PRUEBA 733 for (var t = 0; t < vRecursos.length; t++) { 734 if (vRecursos[t] != infoWindowRecurso) { 735 vRecursos[t].borrar(null); 736 } else { 737 borrarInfoWindowRecurso = true; 738 } 739 } 740 741 vRecursos = []; 742 743 //FIN PRUEBA 744 745 //Calculo de los bounds de leaflet 746 var boundsLL = eVisitarMap.getBounds(); 747 var southWestLL = boundsLL._southWest; 748 var northEastLL = boundsLL._northEast; 749 var _lng1 = southWestLL.lng; 750 var _lat1 = southWestLL.lat; 751 var _lng2 = northEastLL.lng; 752 var _lat2 = northEastLL.lat; 753 754 var zona = "All"; 755 var tematica = "All"; 756 var nombre = ""; 757 var precioHasta = ""; 758 var gratuito = "All"; 759 760 // Variables para los tipos de contenido Rutas 761 var route_type = "All"; 762 var travel = "All"; 763 var dificultad = "All"; 764 var duration = "All"; 765 766 var nidruta = new String(Drupal.settings.mapa_turistico.idruta); 767 768 if(jQuery('#zone-tid-value').length) { 769 zona = document.getElementById('zone-tid-value').value; 770 } 771 772 if(jQuery('#route_type-tid-value').length) { 773 route_type = document.getElementById('route_type-tid-value').value; 774 } 775 776 if(jQuery('#travel-tid-value').length) { 777 travel = document.getElementById('travel-tid-value').value; 778 } 779 780 if(jQuery('#dificultad-tid-value').length) { 781 dificultad = document.getElementById('dificultad-tid-value').value; 782 } 783 784 if(jQuery('#duration-tid-value').length) { 785 duration = document.getElementById('duration-tid-value').value; 786 } 787 788 if(jQuery('#theme-tid-value').length) { 789 tematica = document.getElementById('theme-tid-value').value; 790 } 791 792 if(jQuery('#resource-tid-value').length) { 793 tematica = document.getElementById('resource-tid-value').value; 794 } 795 if (!jQuery('#frontpage').length==0 ){ 796 //resource_types='All'; 797 } 798 //Esta variable se utiliza para que el json sepa que estoy en una landing page y tiene que sacar todos los recursos tops de la zona
799 // m�s las categorias seleccionadas. 800 var flag_landing= 0; 801 if(jQuery('#landingpage').length>0){ 802 flag_landing = 1; 803 } 804 805 //Comprobamos si tiene #resource-tid-value y si tiene lo asinamos a resource types. 806 807 808 if (resource_types != '') { 809 810 if(jQuery('#resource-tid-value').length ) { 811 //resource_types = resource_types + "," + document.getElementById('resource-tid-value').value; 812 } 813 814 jQuery.getJSON(getLabel(MAP_CONFIG.resources_service), { 815 peticion: "recursos", 816 lat1: _lat1, 817 lng1: _lng1, 818 lat2: _lat2, 819 lng2: _lng2, 820 Zoom: "Municipios", 821 tipos_recursos: resource_types, 822 idioma: lang, 823 zona: zona, 824 tematica: tematica, 825 nombre: nombre, 826 preciohasta: precioHasta, 827 gratuito: gratuito, 828 idruta: nidruta, 829 tipos_recursos3 : flag_landing, 830 831 // Tipo de contenido rutas 832 route_type: route_type, 833 travel: travel, 834 dificultad: dificultad, 835 duration: duration, 836 837 mod: "JSON" 838 839 }, function(data) { 840 console.log(data) 841 prepareResourcesLL(data); 842 843 }); 844 } else { 845 jQuery("#div_tree_loading_filtros").css("display", "none"); 846 847 if(jQuery('#resource-tid-value').length>0) { 848 849 resource_types = document.getElementById('resource-tid-value').value; 850 } 851 } 852 853} 854/** 855 * Obtencion de datos externos desde los servicios recursos. Filtro por formulario. 856 * 857 * Esta funcion es invocada por los eventos del mapa (cambio de zoom o de zona) y 858 * explicitamente (eventType=null) por acciones del usuario en la pagina. 859 * 860 * Cuando el invocante es un evento, se aplica una limitacion de tiempo, de forma 861 * que solo se admite una peticion al/los servicios cada medio segundo. 862 * 863 * @param eventType evento que desencadena la peticion o null en caso de una accion de 864 * usuario. 865 */ 866 function getMapDataFiltroLL(eventType) { 867 868 for (var t = 0; t < vRecursosFiltro.length; t++) { 869 if (vRecursosFiltro[t] != infoWindowRecurso) { 870 vRecursosFiltro[t].borrar(null); 871 } else { 872 borrarInfoWindowRecurso = true; 873 } 874 } 875 876 //Calculo de los bounds de leaflet 877 var boundsLL = eVisitarMap.getBounds(); 878 var southWestLL = boundsLL._southWest; 879 var northEastLL = boundsLL._northEast; 880 881 var _lng1 = southWestLL.lng; 882 var _lat1 = southWestLL.lat; 883 var _lng2 = northEastLL.lng; 884 var _lat2 = northEastLL.lat; 885 886 var recurso = ""; 887 var zona = ""; 888 var tematica = ""; 889 var nombre = ""; 890 var precioHasta = ""; 891 var gratuito = ""; 892 893 var route_type = "All"; 894 var travel = "All"; 895 var dificultad = "All"; 896 var duration = "All"; 897 898 if(jQuery('#edit-field-type-tid').length) { 899 recurso = document.getElementById('edit-field-type-tid').value; 900 } 901 else { 902 recurso = "All"; 903 } 904 905 if(jQuery('#edit-field-zone-tid').length) { 906 zona = document.getElementById('edit-field-zone-tid').value; 907 } 908 else { 909 zona = "All"; 910 } 911 912 if(jQuery('#edit-field-theme-tid').length) { 913 tematica = document.getElementById('edit-field-theme-tid').value; 914 } 915 else { 916 tematica = "All"; 917 } 918 919 if(jQuery('#edit-title').length) { 920 nombre = document.getElementById('edit-title').value; 921 } 922 else { 923 nombre = ""; 924 } 925 926 if(jQuery('#edit-field-price-min-value').length) { 927 precioHasta = document.getElementById('edit-field-price-min-value').value; 928 } 929 else { 930 precioHasta = ""; 931 } 932 933 if(jQuery('#edit-field-free-value').length) { 934 gratuito = document.getElementById('edit-field-free-value').value; 935 } 936 else { 937 gratuito = "All"; 938 } 939 if(jQuery('#type-tid-value').length) { 940 recurso = document.getElementById('type-tid-value').value; 941 } 942 943 944 if(jQuery('#route_type-tid-value').length) { 945 route_type = document.getElementById('route_type-tid-value').value; 946 } 947 948 if(jQuery('#travel-tid-value').length) { 949 travel = document.getElementById('travel-tid-value').value; 950 } 951 if(jQuery('#dificultad-tid-value').length) { 952 dificultad = document.getElementById('dificultad-tid-value').value; 953 } 954 955 if(jQuery('#duration-tid-value').length) { 956 duration = document.getElementById('duration-tid-value').value; 957 } 958 959 if(document.getElementById('route_type-tid-value')) { 960 var peticion = "rutas"; 961 } else { 962 var peticion = "recursos"; 963 } 964 965 /*alert("Categoria " + recurso); 966 alert("Zona " + zona); 967 alert("Tematica " + tematica); 968 alert("Nombre " + nombre); 969 alert("Precio Hasta " + precioHasta); 970 alert("Gratuito " + gratuito);*/ 971 if (document.getElementById('route_type-tid-value')) { 972 jQuery.getJSON(getLabel(MAP_CONFIG.resources_service), { 973 peticion: peticion, 974 lat1: _lat1, 975 lng1: _lng1, 976 lat2: _lat2, 977 lng2: _lng2, 978 Zoom: "Municipios", 979 tipos_recursos: recurso, 980 idioma: lang, 981 zona: zona, 982 tematica: tematica, 983 nombre: nombre, 984 preciohasta: precioHasta, 985 gratuito: gratuito, 986 route_type: route_type, 987 travel: travel, 988 dificultad: dificultad, 989 duration: duration, 990 mod: "JSON" 991 992 }, function(data) { 993 prepareResourcesFiltroLL(data); 994 }); 995 } 996 997 if (recurso != '' && !document.getElementById('route_type-tid-value')) { 998 jQuery.getJSON(getLabel(MAP_CONFIG.resources_service), { 999 peticion: peticion, 1000 lat1: _lat1, 1001 lng1: _lng1, 1002 lat2: _lat2, 1003 lng2: _lng2, 1004 Zoom: "Municipios", 1005 tipos_recursos: recurso, 1006 idioma: lang, 1007 zona: zona, 1008 tematica: tematica, 1009 nombre: nombre, 1010 preciohasta: precioHasta, 1011 gratuito: gratuito, 1012 route_type: route_type, 1013 travel: travel, 1014 dificultad: dificultad, 1015 duration: duration, 1016 mod: "JSON" 1017 }, function(data) { 1018 prepareResourcesFiltroLL(data); 1019 }); 1020 } else { 1021 jQuery("#div_tree_loading_filtros").css("display", "none"); 1022 } 1023 1024}; 1025 1026/** 1027 * Carga y configuracion de overlays de los recursos tur�sticos de las etapas. 1028 * Tiene en cuenta si alguno de los radares (posicion o ruta) estan activos, para 1029 * cargar solo los recursos en el area de influencia del rada, si no carga todos 1030 * recursos otenidos del servicio de recursos. 1031 * 1032 * @param data Datos obtenidos del servicio de recursos en la peticion. Objeto de la forma: 1033 * {"p":[{"n":[{"r":codigo_recurso,"t":tipo_recurso,"m":nombre_recurso,"y":latitud,"x":longitud},...]}]} 1034 * 1035 * Ej. {"p":[{"n":[{"r":"5101","t":"D2","m":"DONOSTIA-SAN SEBASTIÁN","y":"43.320725","x":"-1.984449"}, 1036 * {"r":"5686","t":"D2","m":"ANDOAIN","y":"43.2204799","x":"-2.0211221"}, 1037 * {"r":"5699","t":"D2","m":"BERNEDO","y":"42.626684","x":"-2.497532"}]}]} 1038 * Pinta lo que recogemos de JSON 1039 */ 1040 1041function prepareResourcesRuta(data) { // no entra en /rutas 1042 1043 if (data.p.n) { 1044 for (var t = 0; t < data.p.n.length; t++) {
1045 vRecursosRuta[t] = new RecursoTuristicoSimple(data.p.n[t],r_map); 1046 } 1047 1048 if (!isRadarActive()) { // Si no hay ningun filtro adicional de radar se muestran todos los puntos 1049 for (var t = 0; t < vRecursosRuta.length; t++) { 1050 vRecursosRuta[t].mostrar(); 1051 } 1052 } else { // Si hay un filtro adicional solo se muestran aquellos puntos que se encuentren dentro del area fijada 1053 if (circle != null) { 1054 for (var t = 0; t < vRecursosRuta.length; t++) { 1055 if (google.maps.geometry.spherical.computeLength([circle.getCenter(), vRecursosRuta[t].marker.getPosition()]) < radiusInKm*1000 ) { 1056 vRecursosRuta[t].mostrar(); 1057 } 1058 } 1059 } 1060 1061 if (ruteCircles.length > 0) { //Se muestran los recursos que se encuentren dentro del halo (polÃgono + cÃrculos de inicio y fin de ruta) 1062 for (var t = 0; t < vRecursos.length; t++) { 1063 if (google.maps.geometry.poly.containsLocation(vRecursos[t].marker.getPosition(), ruteCircles[0])) { 1064 vRecursos[t].mostrar(); 1065 } else if (ruteCircles[1].getBounds().contains(vRecursos[t].marker.getPosition())){ 1066 vRecursos[t].mostrar(); 1067 } else if (ruteCircles[2].getBounds().contains(vRecursos[t].marker.getPosition())){ 1068 vRecursos[t].mostrar(); 1069 } 1070 } 1071 } 1072 } 1073 } 1074 jQuery("#div_tree_loading_filtros").css("display", "none"); 1075} 1076 1077 1078/** 1079 * Carga y configuracion de overlays de recursos turisticos. Filtro por arbol de tipos de recurso. 1080 * Tiene en cuenta si alguno de los radares (posicion o ruta) estan activos, para 1081 * cargar solo los recursos en el area de influencia del radar, si no carga todos 1082 * recursos otenidos del servicio de recursos. 1083 * 1084 * @param data Datos obtenidos del servicio de recursos en la peticion. Objeto de la forma: 1085 * {"p":[{"n":[{"r":codigo_recurso,"t":tipo_recurso,"m":nombre_recurso,"y":latitud,"x":longitud},...]}]} 1086 * 1087 * Ej. {"p":[{"n":[{"r":"5101","t":"D2","m":"DONOSTIA-SAN SEBASTIÁN","y":"43.320725","x":"-1.984449"}, 1088 * {"r":"5686","t":"D2","m":"ANDOAIN","y":"43.2204799","x":"-2.0211221"}, 1089 * {"r":"5699","t":"D2","m":"BERNEDO","y":"42.626684","x":"-2.497532"}]}]} 1090 * Pinta lo que recogemos de JSON 1091 */ 1092 1093function prepareResourcesLL(data){ // no entra en /rutas ni en contenido agenda 1094 1095 if (data.p.n) { 1096 for (var t = 0; t < data.p.n.length; t++) { 1097 vRecursos[t] = new RecursoTuristicoSimple(data.p.n[t],eVisitarMap); 1098 } 1099 1100 if (!isRadarActive()) { // Si no hay ningun filtro adicional de radar se muestran todos los puntos 1101 for (var t = 0; t < vRecursos.length; t++) { 1102 vRecursos[t].mostrar(); 1103 1104 } 1105 } else { // Si hay un filtro adicional solo se muestran aquellos puntos que se encuentren dentro del area fijada 1106 if (circle != null) { 1107 for (var t = 0; t < vRecursos.length; t++) { 1108 if (google.maps.geometry.spherical.computeLength([circle.getCenter(), vRecursos[t].marker.getPosition()]) < radiusInKm*1000 ) { 1109 vRecursos[t].mostrar(); 1110 } 1111 } 1112 } 1113 1114 if (ruteCircles.length > 0) { //Se muestran los recursos que se encuentren dentro del halo (polÃgono + cÃrculos de inicio y fin de ruta) 1115 for (var t = 0; t < vRecursos.length; t++) { 1116 if (google.maps.geometry.poly.containsLocation(vRecursos[t].marker.getPosition(), ruteCircles[0])) { 1117 vRecursos[t].mostrar(); 1118 } else if (ruteCircles[1].getBounds().contains(vRecursos[t].marker.getPosition())){ 1119 vRecursos[t].mostrar(); 1120 } else if (ruteCircles[2].getBounds().contains(vRecursos[t].marker.getPosition())){ 1121 vRecursos[t].mostrar(); 1122 } 1123 } 1124 } 1125 } 1126 } 1127 jQuery("#div_tree_loading_filtros").css("display", "none"); 1128 1129} 1130 1131/** 1132 * Carga y configuracion de overlays de recursos turisticos. Filtro por formulario. 1133 * Tiene en cuenta si alguno de los radares (posicion o ruta) estan activos, para 1134 * cargar solo los recursos en el area de influencia del rada, si no carga todos 1135 * recursos otenidos del servicio de recursos. 1136 * 1137 * @param data Datos obtenidos del servicio de recursos en la peticion. Objeto de la forma: 1138 * {"p":[{"n":[{"r":codigo_recurso,"t":tipo_recurso,"m":nombre_recurso,"y":latitud,"x":longitud},...]}]} 1139 * 1140 * Ej. {"p":[{"n":[{"r":"5101","t":"D2","m":"DONOSTIA-SAN SEBASTIÁN","y":"43.320725","x":"-1.984449"}, 1141 * {"r":"5686","t":"D2","m":"ANDOAIN","y":"43.2204799","x":"-2.0211221"}, 1142 * {"r":"5699","t":"D2","m":"BERNEDO","y":"42.626684","x":"-2.497532"}]}]} 1143 * Pinta lo que recogemos de JSON 1144 */ 1145 1146 1147//Prepare resources filter Leaflet 1148 1149// creo que no se usa 1150function prepareResourcesFiltroLL(data) { // entro /rutas 4 veces con solo 1 resultado 1151 1152 1153 if (data.p.n) { 1154 for (var t = 0; t < data.p.n.length; t++) {
1155 vRecursosFiltro[t] = new RecursoTuristicoSimple(data.p.n[t],eVisitarMap); 1156 } 1157 1158 // Si no hay ningun filtro adicional de radar se muestran todos los puntos 1159 if (!isRadarActive()) { 1160 for (var t = 0; t < vRecursosFiltro.length; t++) { 1161 vRecursosFiltro[t].mostrar(); 1162 } 1163 } else { 1164 // Si hay un filtro adicional solo se muestran aquellos puntos que se encuentren dentro del area fijada 1165 if (circle != null) { 1166 for (var t = 0; t < vRecursosFiltro.length; t++) { 1167 if (google.maps.geometry.spherical.computeLength([circle.getCenter(), vRecursosFiltro[t].marker.getPosition()]) < radiusInKm*1000 ) { 1168 vRecursosFiltro[t].mostrar(); 1169 } 1170 } 1171 } 1172 1173 if (ruteCircles.length > 0) { 1174 //Se muestran los recursos que se encuentren dentro del halo (polÃgono + cÃrculos de inicio y fin de ruta) 1175 for (var t = 0; t < vRecursos.length; t++) { 1176 if (google.maps.geometry.poly.containsLocation(vRecursos[t].marker.getPosition(), ruteCircles[0])) { 1177 vRecursos[t].mostrar(); 1178 } else if (ruteCircles[1].getBounds().contains(vRecursos[t].marker.getPosition())){ 1179 vRecursos[t].mostrar(); 1180 } else if (ruteCircles[2].getBounds().contains(vRecursos[t].marker.getPosition())){ 1181 vRecursos[t].mostrar(); 1182 } 1183 } 1184 } 1185 } 1186 } 1187 jQuery("#div_tree_loading_filtros").css("display", "none"); 1188 1189} 1190 1191/** 1192 * Crea los controles del mapa. 1193 * 1194 * - menu opciones 1195 * - boton panoramio 1196 * 1197 * Estos datos estan configurados en el objeto MAP_CONFIG. 1198 * 1199 * @param r_map mapa en el que se cargaron los controles. Objeto google.maps.Map 1200 * 1201 */ 1202function createControls(r_map) { 1203 var mapControls = document.createElement("div"); 1204 mapControls.style.marginTop = "5px"; 1205 1206 var mapControns_view = ["<ul id=\"jsddm\">", 1207 "<li onmouseover=\"gmenuOpen(this);\" onmouseout=\"gmenuClose(this);\"><a href=\"javascript:void()\" >", 1208 getLabel(MAP_CONFIG.action), 1209 " <img src=\"" + getLabel(MAP_CONFIG.resources_path) + "/flechadesplegar.gif\" border=\"none\"/></a>", 1210 "<ul>", 1211 createActionsMenu(MAP_CONFIG.action.actions), 1212 1213 "</ul>", 1214 1215 "</ul>"].join(''); 1216 1217 mapControls.innerHTML = mapControns_view; 1218 1219 mapControls.index = 1; 1220 r_map.controls[google.maps.ControlPosition.TOP_RIGHT].push(mapControls); 1221} 1222 1223/** 1224 * Funcion que gestiona los controles de menu, en este caso visualiza el menu. 1225 * 1226 * @param element menu seleccionado. 1227 * 1228 */ 1229function gmenuOpen(element) { 1230 if (element.getElementsByTagName("ul").length > 0) { 1231 element.getElementsByTagName("ul")[0].style.visibility = "visible"; 1232 } 1233} 1234 1235/** 1236 * Funcion que gestiona los controles de menu, en este caso oculta el menu. 1237 * 1238 * @param element menu seleccionado. 1239 * 1240 */ 1241function gmenuClose(element) { 1242 if (element.getElementsByTagName("ul").length > 0) { 1243 element.getElementsByTagName("ul")[0].style.visibility = "hidden"; 1244 } 1245} 1246 1247/** 1248 * Crea el control de menu acciones desde el objeto MAP_CONFIG. 1249 * 1250 * @param elements objeto que representa la lista de acciones a cargar en el menu. Array de objetos de la forma: 1251 * [{label: idiomatico, name: nombre_defecto, action: llamada_funcion, icon: ruta_icono},...] 1252 * 1253 */ 1254function createActionsMenu(elements) { 1255 var output = ""; 1256 1257 for (var t = 0; t < elements.length; t++) { 1258 output += ["<li><a href=\"javascript: ", 1259 elements[t].action, 1260 "\">", 1261 "<img src=\"", 1262 getLabel(MAP_CONFIG.resources_path) +"/" + elements[t].icon, 1263 "\" border=\"none\"/> ", 1264 getLabel(elements[t]), 1265 "</a></li>"].join(''); 1266 } 1267 return output; 1268} 1269 1270/** 1271 * Utilidad para obtener el valor de una constante cargada desde el servidor o un 1272 * valor por defecto. 1273 * 1274 * El metodo, admite cualquier objeto que exponga las propiedades label y name. 1275 * 1276 * - label es la etiqueta generada por el servidor a calcular. 1277 * - name es el valor que se empleara por defecto en caso de no encontrar la 1278 * etiqueta. 1279 * 1280 * @param element cualquier objeto de la forma {label: xx, name: yy, ....} 1281 * 1282 * @return El valor de la etiqueta o el valor por defecto proporcionado por name. 1283 */ 1284function getLabel(element) { 1285 if (element.label) { 1286 return eval(element.label); 1287 } 1288 return element.name; 1289} 1290 1291/** 1292 * Limpia todos los elementos cargados en el mapa. 1293 * 1294 * - Elimina la ruta del usuario si esta cargada. 1295 * - Limpia la seleccion del arbol de recuros. 1296 * 1297 */ 1298function limpiarTodo() { 1299 removeRute(); 1300 for (var t = 0; t < vRecursos.length; t++) { 1301 vRecursos[t].borrar(); 1302 } 1303 vRecursos = []; 1304 resource_types = ""; 1305 var divtree = document.getElementById("div_tree"); 1306 gPeticionEnCurso = true; // ponemos flag para q no haga peticiones al deschequear items del tree 1307 gPeticionSolicitante = null; 1308 1309 // recorro los hijos del divtree para descheckearlos 1310 for (var i = 0; i < divtree.childNodes.length; i++) { 1311 for (var j = 0; j < divtree.childNodes[i].childNodes.length; j++) { 1312 try { 1313 webFXTreeHandler.all[divtree.childNodes[i].childNodes[j].id.replace('-cont','')].setChecked(false); 1314 } catch(err) { 1315 } 1316 } 1317 } 1318 1319 if (infoWindowRecurso) { 1320 infoWindowRecurso.borrar(); 1321 infoWindowRecurso = null; 1322 borrarInfoWindowRecurso = false;
1323 } 1324 1325 gPeticionEnCurso = false; 1326} 1327 1328 1329 1330//Ya no lo usamos 1331 1332/***************************************************************************** 1333 * 1334 * TRATAMIENTO DE RUTAS 1335 * 1336 * 1337 ****************************************************************************/ 1338 1339/** 1340 * Inicializa una ruta desde los botones Desde/Hasta de las ventanas de informacion 1341 * de los recursos turisticos. 1342 * 1343 * Visualiza el tab de rutas y carga la informacion adecuada para que el usuario 1344 * continue la configuracion de la ruta. 1345 * 1346 * @param name nombre del recurso 1347 * @param lat latitud del recurso 1348 * @param lng longitud del recurso 1349 * @param isFrom indica si la peticion provienen del enlace Desde (isFrom=true), en 1350 * caso contrario lo considera enlace Hasta (isFrom=false). 1351 * 1352 */ 1353 1354// creo que no se usa 1355function refreshResourceRuteFromTo(name, lat, lng, isFrom) { 1356 //removeRute(); 1357 infoWindow.close(); 1358 1359 if (isFrom) { 1360 document.getElementById("INPUT_RUTA_ORIGEN").value = name; 1361 r_start = new google.maps.LatLng(lng, lat); 1362 r_start_o = new google.maps.Marker({ 1363 position: r_start, 1364 icon: new google.maps.MarkerImage(getLabel(MAP_CONFIG.resources_path) + "/icon_greenA.png", new google.maps.Size(24,38), new google.maps.Point(0,0), new google.maps.Point(12,38)), 1365 shadow: new google.maps.MarkerImage(getLabel(MAP_CONFIG.resources_path) + "/shadow_iconOrigenDestino.png", new google.maps.Size(44,38), new google.maps.Point(0,0), new google.maps.Point(12,38)), 1366 title: Encoder.htmlDecode(name) 1367 }); 1368 r_start_o.setMap(r_map); 1369 } else { 1370 document.getElementById("INPUT_RUTA_DESTINO").value = name; 1371 r_end = new google.maps.LatLng(lng, lat); 1372 r_end_o = new google.maps.Marker({ 1373 position: r_end, 1374 icon: new google.maps.MarkerImage(getLabel(MAP_CONFIG.resources_path) + "/icon_greenB.png", new google.maps.Size(24,38), new google.maps.Point(0,0), new google.maps.Point(12,38)), 1375 shadow: new google.maps.MarkerImage(getLabel(MAP_CONFIG.resources_path) + "/shadow_iconOrigenDestino.png", new google.maps.Size(44,38), new google.maps.Point(0,0), new google.maps.Point(12,38)), 1376 title: Encoder.htmlDecode(name) 1377 }); 1378 r_end_o.setMap(r_map); 1379 } 1380 1381 cambiarTab('mtabRutas'); 1382} 1383 1384/** 1385 * Realiza una peticion al servicio Directions del api, con los datos proporcionados. 1386 * Si faltan datos o no se puede calcular la ruta lanza mensajes de advertencia. 1387 * 1388 */ 1389function calculateRute() { 1390 var start = document.getElementById("INPUT_RUTA_ORIGEN").value; 1391 var end = document.getElementById("INPUT_RUTA_DESTINO").value; 1392 1393 if (start == "" || end == "" || start == CONST_LABEL_ORIGEN || end == CONST_LABEL_DESTINO) { 1394 alert(CONST_LABEL_ERRORCAMPOSRUTA); 1395 return; 1396 } 1397 1398 if (r_start_o == null) { 1399 r_start = start; 1400 } 1401 1402 if (r_end_o == null) { 1403 r_end = end; 1404 } 1405 1406 var request = { 1407 origin: r_start, 1408 destination: r_end, 1409 travelMode: google.maps.DirectionsTravelMode.DRIVING, 1410 region: "es" 1411 }; 1412 1413 directionsService.route(request, function(response, status) { 1414 if (status == google.maps.DirectionsStatus.OK) { 1415 if (r_start_o) { 1416 r_start_o.setMap(null); 1417 r_start_o = null; 1418 } 1419 1420 if (r_end_o) { 1421 r_end_o.setMap(null); 1422 r_end_o = null; 1423 } 1424 1425 directionsDisplay.setDirections(response); 1426 directionsDisplay.setMap(r_map); 1427 directionsDisplay.setPanel(document.getElementById("DIV_RUTA_INFORME")); 1428 } else { 1429 alert(CONST_LABEL_ERRORCALCULARRUTA); 1430 r_start = null; 1431 r_end = null; 1432 } 1433 }); 1434} 1435 1436/** 1437 * Elimina la ruta cargada en el mapa, si se ha creado un radar asociado a la ruta, 1438 * este es eliminado. 1439 * 1440 */ 1441function removeRute() { 1442 1443 directionsDisplay.setMap(null); 1444 directionsDisplay.setPanel(null); 1445 directionsDisplay = new google.maps.DirectionsRenderer({draggable: true}); 1446 1447 google.maps.event.addListener(directionsDisplay, 'directions_changed', function() { 1448 document.getElementById("INPUT_RUTA_ORIGEN").value = directionsDisplay.directions.routes[0].legs[0].start_address; 1449 document.getElementById("INPUT_RUTA_DESTINO").value = directionsDisplay.directions.routes[directionsDisplay.directions.routes.length-1].legs[directionsDisplay.directions.routes[directionsDisplay.directions.routes.length-1].legs.length-1].end_address; 1450 }); 1451 1452 document.getElementById("INPUT_RUTA_ORIGEN").value = CONST_LABEL_ORIGEN; 1453 document.getElementById("INPUT_RUTA_DESTINO").value = CONST_LABEL_DESTINO; 1454 r_start = null; 1455 r_end = null; 1456 if (r_start_o) { 1457 r_start_o.setMap(null); 1458 } 1459 1460 if (r_end_o) { 1461 r_end_o.setMap(null); 1462 } 1463 1464 if (ruteCircles.length > 0) { 1465 for (var t = 0; t < ruteCircles.length; t++) { 1466 ruteCircles[t].setMap(null); 1467 } 1468 1469 ruteCircles = []; 1470 getMapData(null); 1471 } 1472} 1473 1474/**Rutas a pié*/ 1475 1476function calculateWalkingRute() { 1477 var start = document.getElementById("INPUT_RUTA_ORIGEN").value; 1478 var end = document.getElementById("INPUT_RUTA_DESTINO").value; 1479 1480 if (start == "" || end == "" || start == CONST_LABEL_ORIGEN || end == CONST_LABEL_DESTINO) { 1481 alert(CONST_LABEL_ERRORCAMPOSRUTA); 1482 return; 1483 } 1484 1485 if (r_start_o == null) { 1486 r_start = start; 1487 } 1488 1489 if (r_end_o == null) { 1490 r_end = end; 1491 } 1492 1493 var request = { 1494 origin: r_start, 1495 destination: r_end, 1496 travelMode: google.maps.DirectionsTravelMode.WALKING, 1497 region: "es" 1498 }; 1499 1500 directionsService.route(request, function(response, status) { 1501 if (status == google.maps.DirectionsStatus.OK) { 1502 if (r_start_o) { 1503 r_start_o.setMap(null); 1504 r_start_o = null; 1505 } 1506 1507 if (r_end_o) { 1508 r_end_o.setMap(null); 1509 r_end_o = null; 1510 } 1511 1512 directionsDisplay.setDirections(response); 1513 directionsDisplay.setMap(r_map); 1514 directionsDisplay.setPanel(document.getElementById("DIV_RUTA_INFORME")); 1515 } else { 1516 alert(CONST_LABEL_ERRORCALCULARRUTA); 1517 r_start = null; 1518 r_end = null; 1519 } 1520 }); 1521} 1522 1523/**Rutas servicio Público*/ 1524 1525function calculateTransitRute() { 1526 var start = document.getElementById("INPUT_RUTA_ORIGEN").value; 1527 var end = document.getElementById("INPUT_RUTA_DESTINO").value; 1528 1529 if (start == "" || end == "" || start == CONST_LABEL_ORIGEN || end == CONST_LABEL_DESTINO) { 1530 alert(CONST_LABEL_ERRORCAMPOSRUTA); 1531 return; 1532 } 1533 1534 if (r_start_o == null) { 1535 r_start = start; 1536 } 1537 1538 if (r_end_o == null) { 1539 r_end = end; 1540 } 1541 1542 var request = { 1543 origin: r_start, 1544 destination: r_end, 1545 travelMode: google.maps.DirectionsTravelMode.TRANSIT, 1546 region: "es" 1547 }; 1548 1549 directionsService.route(request, function(response, status) { 1550 if (status == google.maps.DirectionsStatus.OK) { 1551 if (r_start_o) { 1552 r_start_o.setMap(null); 1553 r_start_o = null; 1554 } 1555 1556 if (r_end_o) { 1557 r_end_o.setMap(null); 1558 r_end_o = null; 1559 } 1560 1561 directionsDisplay.setDirections(response); 1562 directionsDisplay.setMap(r_map); 1563 directionsDisplay.setPanel(document.getElementById("DIV_RUTA_INFORME")); 1564 } else { 1565 alert(CONST_LABEL_ERRORCALCULARRUTA); 1566 r_start = null; 1567 r_end = null; 1568 } 1569 }); 1570} 1571 1572 1573 1574 1575/**************/ 1576/************************************************************************** 1577 * 1578 * RADARES 1579 * 1580 **************************************************************************/ 1581 1582var radiusInKm = 1; // Radio alrededor del coche virtual. El poligono no es un circulo real, por eso el radio es una distancia estimada alrededor del coche. 1583 1584/** 1585 * Se llama cuando el usuario cambia el valor del radio del poligono que rodea al coche 1586 * cambiando el area de busqueda alrededor del coche para los puntos de interes. 1587 */ 1588function changeRadius() { 1589 var tempradius = parseFloat(document.getElementById('radarRange').value); 1590 1591 if (isNaN(tempradius)) { 1592 radiusInKm = 1; 1593 document.getElementById('radarRange').value = radiusInKm; 1594 } 1595 else { 1596 radiusInKm = tempradius; 1597 } 1598 1599 startRadarsPosicion(); 1600} 1601 1602/** 1603 * Se llama cuando el usuario cambia el valor del radio del poligono que rodea la ruta 1604 * cambiando el area de busqueda alrededor de la ruta para los puntos de interes. 1605 */ 1606function changeRadiusRutas() { 1607 var tempradius = parseFloat(document.getElementById('radarRange2').value); 1608 1609 if (isNaN(tempradius)) { 1610 radiusInKm = 1; 1611 document.getElementById('radarRange2').value = radiusInKm; 1612 } 1613 else { 1614 radiusInKm = tempradius; 1615 } 1616 1617 startRadarsRutas(); 1618} 1619 1620/** 1621 * Indica si hay algun radar activo. 1622 * 1623 * @return boolean indicando si algun radar esta activo. 1624 */ 1625function isRadarActive() { 1626 if (ruteCircles.length > 0 || pointer != null) { 1627 return true; 1628 } 1629 return false;
1630} 1631 1632/** 1633 * Inicializa el radar de ruta 1634 * 1635 */ 1636function startRadarsRutas() { 1637 // Determinar el rango en el que localizar recursos 1638 var i_distance = parseFloat(document.getElementById("radarRange2").value); 1639 1640 if (i_distance != NaN) { 1641 range = i_distance * 1000; 1642 } else { 1643 range = 0; 1644 } 1645 1646 clearPointerRadar(); 1647 if (ruteCircles.length > 0) { 1648 for(var t = 0; t < ruteCircles.length; t++) { 1649 ruteCircles[t].setMap(null); 1650 } 1651 } 1652 if (directionsDisplay.getDirections()) { 1653 var rutePoints = directionsDisplay.getDirections().routes[0].overview_path; 1654 ruteCircles = []; 1655 var PointsIzquierda = new Array(); 1656 var PointsDerecha = new Array(); 1657 var polygonPoints = new Array(); 1658 1659 for (var t = 0; t < rutePoints.length-1; t++) { 1660 // Se calculan los ángulos 1661 var heading1 = google.maps.geometry.spherical.computeHeading(rutePoints[t], rutePoints[t+1])+90; 1662 var heading2 = google.maps.geometry.spherical.computeHeading(rutePoints[t], rutePoints[t+1])+270; 1663 // Se calculan los puntos vértices del polÃgono que rodea a la recta 1664 var endPoint1 = google.maps.geometry.spherical.computeOffset(rutePoints[t], range, heading1); 1665 var endPoint2 = google.maps.geometry.spherical.computeOffset(rutePoints[t], range, heading2); 1666 var endPoint3 = google.maps.geometry.spherical.computeOffset(rutePoints[t+1], range, heading1); 1667 var endPoint4 = google.maps.geometry.spherical.computeOffset(rutePoints[t+1], range, heading2); 1668 // Se añaden los puntos en 2 arrays, 2 a la izquierda y 2 a la derecha 1669 PointsIzquierda.push(endPoint1); 1670 PointsDerecha.push(endPoint2); 1671 PointsDerecha.push(endPoint4); 1672 PointsIzquierda.push(endPoint3); 1673 } 1674 // Se recorren los arrays de puntos para añadirlos al array de puntos que se pintan en el polÃgono halo. 1675 // El array de los puntos de la derecha se recorre en orden inverso 1676 for (var u = 0; u < PointsIzquierda.length; u++) { 1677 polygonPoints.push(PointsIzquierda[u]); 1678 } 1679 for (var v = 0; v < PointsDerecha.length; v++) { 1680 var n = PointsDerecha.length - v; 1681 polygonPoints.push(PointsDerecha[n-1]); 1682 } 1683 // Se pinta el polÃgono 1684 ruteCircles.push(new google.maps.Polygon({ 1685 clickable: false, 1686 strokeColor: "#FFFF00", 1687 strokeOpacity: 0.01, 1688 strokeWeight: 3, 1689 fillColor: "#FFFF00", 1690 fillOpacity: 0.3, 1691 map: r_map, 1692 path: polygonPoints 1693 })); 1694 //Se pinta un cÃrculo en cada extremo de la ruta 1695 ruteCircles.push(new google.maps.Circle({ 1696 map: r_map, 1697 center: rutePoints[0], 1698 radius: range, 1699 strokeColor: "#FFFF00", 1700 strokeOpacity: 0.01, 1701 fillColor: "#FFFF00", 1702 fillOpacity: 0.3 1703 })); 1704 ruteCircles.push(new google.maps.Circle({ 1705 map: r_map, 1706 center: rutePoints[rutePoints.length-1], 1707 radius: range, 1708 strokeColor: "#FFFF00", 1709 strokeOpacity: 0.01, 1710 fillColor: "#FFFF00", 1711 fillOpacity: 0.3 1712 })); 1713 } 1714 1715 getMapData(null); 1716} 1717 1718/** 1719 * Inicializa el radar de posicion 1720 * 1721 */ 1722function startRadarsPosicion() { 1723 var i_distance = parseFloat(document.getElementById("radarRange").value); 1724 1725 if (i_distance != NaN) { 1726 range = i_distance * 1000; 1727 } else { 1728 range = 0; 1729 } 1730 1731 if (ruteCircles.length > 0) { 1732 for(var t = 0; t < ruteCircles.length; t++) { 1733 ruteCircles[t].setMap(null); 1734 } 1735 1736 ruteCircles = []; 1737 } 1738 1739 /* 1740 * Crear circulo de radio adecuado y unirlo a un markador dragable, 1741 * si existe un pointer ya creado, eliminarlo antes de crear el 1742 * nuevo. 1743 */ 1744 // creo que no se usa 1745 clearPointerRadar(); 1746 var arrastras = ''; 1747 pointer = new google.maps.Marker({ 1748 map: r_map, 1749 position: r_map.getCenter(), 1750 draggable: true, 1751 icon: getLabel(MAP_CONFIG.resources_path) + "/Poi-27x27.png", 1752 title: 'Drag me!' 1753 }); 1754 1755 google.maps.event.addListener(pointer, 'dragend', function() { 1756 getMapData(null); 1757 }); 1758 1759 if (range != 0) { 1760 circle = new google.maps.Circle({ 1761 map: r_map, 1762 radius: range, 1763 fillOpacity: 0.2, 1764 strokeWeight: 0 1765 }); 1766 1767 circle.bindTo('center', pointer, 'position'); 1768 } 1769 1770 getMapData(null); 1771} 1772 1773/** 1774 * Elimina el radar de posicion. 1775 */ 1776function deleteRadarsPosicion(){ 1777 document.getElementById("radarRange").value = ""; 1778 changeRadius(); 1779 1780} 1781 1782/** 1783 * Elimina el radar de ruta. 1784 */ 1785function deleteRadarsRute() { 1786 document.getElementById("radarRange2").value = ""; 1787 changeRadiusRutas(); 1788} 1789 1790/** 1791 * Elimina el radar de posición.
1792 */ 1793function clearPointerRadar() { 1794 if (pointer != null) { 1795 pointer.setMap(null); 1796 pointer = null; 1797 } 1798 1799 if (circle != null) { 1800 circle.setMap(null); 1801 circle = null; 1802 } 1803} 1804 1805/* 1806 * Centra el mapa en la direccion introducida en el campo "direccionLugar" e inicializa el radar de posicion 1807 */ 1808function initialize() { 1809 var geocoder = new google.maps.Geocoder(); 1810 var address = document.getElementById("direccionLugar").value; 1811 1812 geocoder.geocode( {'address': address}, function(results, status) { 1813 if (status == google.maps.GeocoderStatus.OK) { 1814 r_map.setCenter(results[0].geometry.location); 1815 startRadarsPosicion(); 1816 } 1817 }) 1818} 1819 1820jQuery(document).ready(function() { 1821 jQuery("#direccionLugar").keyup(function(event) { 1822 if (event.keyCode == 13) { 1823 initialize(); 1824 } 1825 }); 1826})
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.