{"version":3,"sources":["webpack:///$_lazy_route_resource lazy namespace object","webpack:///src/app/app-routing.module.ts","webpack:///src/app/app.component.ts","webpack:///src/app/app.component.html","webpack:///src/app/app.module.ts","webpack:///src/app/components/alertes/alertes.component.ts","webpack:///src/app/components/alertes/alertes.component.html","webpack:///src/app/components/botons/botons.component.ts","webpack:///src/app/components/botons/botons.component.html","webpack:///src/app/components/cercador-switch/cercador-switch.component.ts","webpack:///src/app/components/cercador-switch/cercador-switch.component.html","webpack:///src/app/components/fuel-dialog/fuel-dialog.component.ts","webpack:///src/app/components/fuel-dialog/fuel-dialog.component.html","webpack:///src/app/components/llista-incidencies/llista-incidencies.component.ts","webpack:///src/app/components/llista-incidencies/llista-incidencies.component.html","webpack:///src/app/components/llista-rutes/llista-rutes.component.ts","webpack:///src/app/components/llista-rutes/llista-rutes.component.html","webpack:///src/app/components/map-container/map-container.component.ts","webpack:///src/app/components/map-container/map-container.component.html","webpack:///src/app/components/markers/camera/camera.component.ts","webpack:///src/app/components/markers/camera/camera.component.html","webpack:///src/app/components/markers/gas-station/gas-station.component.ts","webpack:///src/app/components/markers/gas-station/gas-station.component.html","webpack:///src/app/components/markers/incidencia-llista/incidencia-llista.component.ts","webpack:///src/app/components/markers/incidencia-llista/incidencia-llista.component.html","webpack:///src/app/components/markers/incidencia/incidencia.component.ts","webpack:///src/app/components/markers/incidencia/incidencia.component.html","webpack:///src/app/components/markers/park-nride/park-nride.component.ts","webpack:///src/app/components/markers/park-nride/park-nride.component.html","webpack:///src/app/components/markers/parking/parking.component.ts","webpack:///src/app/components/markers/parking/parking.component.html","webpack:///src/app/components/markers/radar/radar.component.ts","webpack:///src/app/components/markers/radar/radar.component.html","webpack:///src/app/components/markers/tram-perill/tram-perill.component.ts","webpack:///src/app/components/markers/tram-perill/tram-perill.component.html","webpack:///src/app/components/print-directions/print-directions.component.ts","webpack:///src/app/components/print-directions/print-directions.component.html","webpack:///src/app/components/rutes/rutes.component.ts","webpack:///src/app/components/rutes/rutes.component.html","webpack:///src/app/components/serveis/serveis.component.ts","webpack:///src/app/components/serveis/serveis.component.html","webpack:///src/app/components/share-dialog/share-dialog.component.ts","webpack:///src/app/components/share-dialog/share-dialog.component.html","webpack:///src/app/components/shared/loader/loader.component.ts","webpack:///src/app/components/shared/loader/loader.component.html","webpack:///src/app/components/trafic/trafic.component.ts","webpack:///src/app/components/trafic/trafic.component.html","webpack:///src/app/components/zoom-dialog/zoom-dialog.component.ts","webpack:///src/app/components/zoom-dialog/zoom-dialog.component.html","webpack:///src/app/mercator-projection.ts","webpack:///src/app/services/checkboxes.service.ts","webpack:///src/app/services/dades.service.ts","webpack:///src/app/services/directions.service.ts","webpack:///src/app/services/inrix.service.ts","webpack:///src/app/services/loader.interceptor.ts","webpack:///src/app/services/loader.service.ts","webpack:///src/environments/environment.ts","webpack:///src/main.ts","webpack:///src/styles.ts"],"names":["webpackEmptyAsyncContext","req","Promise","resolve","then","e","Error","code","keys","module","exports","id","routes","path","component","AppRoutingModule","forRoot","imports","AppComponent","title","selector","templateUrl","styleUrls","AppModule","provide","useClass","multi","declarations","entryComponents","providers","bootstrap","AlertesComponent","checkboxesService","CONGESTION","CONES","ROADWORKS","INCIDENT","METEO","CAMERA","MOUNTAINPASS","alertes","checkboxes","screenMode","setScreenMode","window","screen","width","layer","indexOf","deleteCheckbox","addCheckbox","getCheckboxes","subscribe","data","i","includes","toggleCheckbox","BotonsComponent","dialog","localeId","selectedLayer","selectedLanguage","mostrarBotons","console","log","map","getMapTypeId","setMapTypeId","print","dialogRef","open","autoFocus","height","maxWidth","maxHeight","changeMapType","openShareDialog","toggleButtons","CercadorSwitchComponent","directionsService","elementRef","searchText","rutaTrobada","espLatLngBounds","google","maps","LatLngBounds","LatLng","directionsEmitter","searchEmitter","submenus","selectedSubmenu","rutaCalculada","showRouteDetails","directionsMode","screenHeight","screenWidth","submenu","setTimeout","searchFocus","nativeElement","focus","innerHeight","style","setProperty","innerWidth","waypoints","emit","resultat","getShortestRoute","getInrixShortestRoute","length","newOption","event","deleteDirections","autocomplete","place","getPlace","geometry","elements","document","getElementsByClassName","inputElement","places","Autocomplete","bounds","addListener","onPlaceChanged","preuKm","setPreuKm","setSearchAutocomplete","searchElements","changes","r","value","llistaIncidencies","FuelDialogComponent","tipusVehicle","consumVehicle","combustible","preuCombustible","close","saved","closeDialog","save","clickEmitter","LlistaIncidenciesComponent","resolver","mostraLlistat","expandMenu","setScreenSize","bindedLlistaIncidencies","cdRef","LlistaRutesComponent","router","ngZone","deleteEmitter","routeDetails","selectedRouteIndex","urlImg","iconNames","inrixFlag","route","calcDistance","calcDuration","calcFuel","run","navigateByUrl","step","getMap","panTo","start_location","instructionsHTML","instructions","setZoom","infowindow","InfoWindow","position","content","selectedRoute","detectChanges","utfString","encoded","replace","setPanel","getElementById","getRoutes","getRouteNotFoundFlag","routeNotFoundFlag","getInrix","inrixData","getInrixFlag","remove","MapContainerComponent","dadesService","inrixService","injector","appRef","sanitizer","updateSubject","center","markerCluster","loadedLayers","Map","serveis","zoomLayers","activeLayers","alertesVisibles","alertesFeatures","alertesVisiblesFeatures","meteoIds","raccMapType","StyledMapType","name","isInrixVisible","mapProperties","zoom","disableDefaultUI","styles","gestureHandling","mapTypeControlOptions","mapTypeIds","fullscreenControl","mapTypeControl","streetViewControl","nord_est","getNorthEast","sud_oest","getSouthWest","nord_oest","lng","lat","sud_est","percentatge","x1","x2","y1","y2","x1n","x2n","y1n","y2n","getBounds","extendedSW","extendedNE","newBounds","SWactual","NEactual","marginBounds","startsWith","trafficMode","time","split","trafficTime","changeInrixTraffic","getZoom","forEach","has","removeLayer","toggleLayer","index","splice","push","ret","needsZoom","openAcceptZoomDialog","addLayer","geojson","extendBounds","set","getLayer","formatBounds","features","feature","addMarker","properties","get","updateVisibleMarkers","key","setMap","findIndex","alerta","removeMarkers","Array","from","values","delete","markersIncidenciesVisibles","layerValue","layerKey","markerValue","markerKey","contains","getPosition","alertaValue","alertaKey","filter","next","marker","Marker","coordinates","icon","url","getIconUrl","scaledSize","getIconSize","setContent","loadInfoWindow","nomCausa","causeId","levelOfService","size","Size","compRef","destroy","compFactory","resolveComponentFactory","create","instance","attachView","hostView","div","createElement","appendChild","location","fitBounds","viewport","dialogConfig","acceptZoom","afterClosed","getInrixService","overlayMapTypes","getLength","removeAt","events","snapshot","queryParamMap","latLng","parseFloat","setCenter","parseInt","layers","getAll","clearCheckboxes","mapElement","mapTypes","imagePath","maxZoom","gridSize","zoomOnClick","ignoreHidden","initInrixTraffic","checkZoomLayers","checkBoundsRefresh","updateZoomLayer","addListenerOnce","readQueryParams","updateActiveLayers","updateSubscription","refreshActiveLayers","emitRefreshToChild","getTokenObservable","tokenOBJ","trafficLayer","ImageMapType","getTileUrl","tile","getTileURLInrix","tileSize","minZoom","radius","insertAt","mercatorRange","pixelOrigin","Point","pixelsPerLonDegree","pixelsPerLonRadian","Math","PI","projection","topLeftCenter","date","searchPlace","onEventDirections","toggleTraffic","CameraComponent","titol","baseUrl","protocol","hostname","port","params","iconUrl","image","source","GasStationComponent","companiesLogo","company","getUrl","address","timetable","prices","price","pricesDate","IncidenciaLlistaComponent","meteoId","MVCObject","showWindow","road","start_kp","end_kp","city","cause","substring","toLowerCase","comments","direction","showMarker","IncidenciaComponent","ParkNRideComponent","station","nomEst","nrPlaces","operador","occupied","plOcupades","ParkingComponent","nom","adressa","poblacio","horari","tarifes","phone","telefon","type","tipus","capacitat","urlParkopedia","RadarComponent","description","latitude","longitude","imageUrl","speed","TramPerillComponent","TEXT_PERILL","levelOfServiceText","PrintDirectionsComponent","getActiveRoute","staticMapBaseUrl","showMap","stepVisible","scale","markers","end_location","pathStyle","stepLocation","toPrecision","drawInrixRoute","Waypoint","RutesComponent","toggleEmitter","preuKmEmitter","selectedOption","idAutoIncrement","options","viewValue","lletres","checkAutocomplete","waypointValues","waypoint","selected","previousIndex","currentIndex","element","place_id","formatted_address","newWaypoint","obj","a","result","ServeisComponent","RADAR","GAS_STATION","TRAMS_PERILL","PARKING","PARKANDRIDE","ShareDialogComponent","LoaderComponent","loaderService","color","mode","show","isLoading","TraficComponent","trafficEmitter","consultarTransit","showOptions","modes","selectedMode","floor","ceil","showSelectionBar","translate","label","Low","hora","numberToTime","trunc","minuts","horaRes","toString","minRes","horaString","minutsString","date1","date2","getFullYear","getMonth","getDate","Date","sameDate","minDate","maxDate","setNewMin","setNewMax","horaInicialitzacio","timeValue","setHours","dateZulu","getHours","toISOString","toggle","lastUpdate","now","hores","dateTime","toTimeString","timeToNumber","newMin","newOptions","Object","assign","minLimit","newMax","maxLimit","formattedDate","setFullYear","initTime","initDate","onSelect","emitEvent","ZoomDialogComponent","accepted","MercatorProjection","MERCATOR_RANGE","optMin","optMax","max","min","deg","rad","optPoint","me","point","origin","x","siny","bound","sin","degreesToRadians","y","latRadians","radiansToDegrees","atan","exp","fromPointToLatLng","pow","CheckboxesService","_checked","checkedData","checked","asObservable","servei","providedIn","DadesService","http","urlApi","DirectionsService","directionsRenderer","DirectionsRenderer","polylineOptions","strokeColor","strokeOpacity","strokeWeight","zIndex","suppressMarkers","hideRouteList","directionsPreviewRenderer","preserveViewport","_routeNotFound","_routes","routesData","polylines","previewRoutes","imgUrl","_inrixFlag","_inrixData","avoidTolls","start","end","waypointsLocations","getWaypoints","slice","routeAlternatives","request","destination","travelMode","TravelMode","provideRouteAlternatives","status","deleteMarkers","setDirections","addMarkers","setRouteIndex","drawRoutesPreview","latlng","query","fields","placesService","findPlaceFromQuery","PlacesServiceStatus","OK","waypointsLatLng","waypointString","latLngString","getFastestPathUrl","toPromise","duration","secondsToHours","trip","travelTimeMinutes","distance","totalDistance","fuel","toFixed","summary","text","routePoints","getInrixPath","points","getInrixBounds","boundingBox","addInrixMarkers","deletePreviews","deleteRenderer","polilyne","Polyline","polilyne2","southWest","corner2","corner1","northEast","lngLatPoints","latLngPoints","markerIndex","waypointsStrings","stopover","getRouteIndex","PlacesService","getDirections","routeIndex","renderer","calculatePath","legs","leg","markerStart","markerEnd","steps","seconds","hrsString","minString","secondsString","InrixService","_BEARER_TOKEN","inrixSubject","_urlTilesApi","urlTilesInrix","_urlRoutingApi","_urlProxy","paramOpacity","paramRoadsegmenttype","urlTilesApi","getQuadKey","urlRoutingApi","token","quadKey","digit","mask","_token","LoaderInterceptor","handle","pipe","hide","LoaderService","environment","production","apiInfotransitHost","inrixTokenHost","bootstrapModule","catch","err","error","STYLE","featureType","elementType","stylers","saturation","visibility"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","file":"main-es5.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"./$$_lazy_route_resource lazy recursive\";","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { PrintDirectionsComponent } from './components/print-directions/print-directions.component';\r\nimport { MapContainerComponent } from './components/map-container/map-container.component';\r\n\r\nconst routes: Routes = [\r\n {path: \"**/:lat/:lng\", component: MapContainerComponent},\r\n {path: 'print', component: PrintDirectionsComponent},\r\n {path: \"**\", component: MapContainerComponent}\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class AppRoutingModule { }","import { Component, ChangeDetectorRef } from '@angular/core';\r\nimport { MapContainerComponent } from './components/map-container/map-container.component';\r\nimport { Router } from '@angular/router';\r\n\r\n\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.css']\r\n})\r\nexport class AppComponent {\r\n \r\n title = 'infotransit';\r\n}\r\n\r\n","","import { BrowserModule } from '@angular/platform-browser';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { AppComponent } from './app.component';\r\nimport { MapContainerComponent } from './components/map-container/map-container.component';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatSlideToggleModule} from '@angular/material/slide-toggle';\r\nimport {MatChipsModule} from '@angular/material/chips';\r\nimport {MatCardModule} from '@angular/material/card';\r\nimport {MatInputModule} from '@angular/material/input';\r\nimport {MatToolbarModule} from '@angular/material/toolbar';\r\nimport {MatDatepickerModule} from '@angular/material/datepicker';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { ServeisComponent } from './components/serveis/serveis.component';\r\nimport { FlexLayoutModule } from '@angular/flex-layout';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { CercadorSwitchComponent } from './components/cercador-switch/cercador-switch.component';\r\nimport { AlertesComponent } from './components/alertes/alertes.component';\r\nimport { RutesComponent } from './components/rutes/rutes.component';\r\nimport { TraficComponent } from './components/trafic/trafic.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatNativeDateModule} from '@angular/material/core';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { Ng5SliderModule } from 'ng5-slider';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { LoaderComponent } from './components/shared/loader/loader.component';\r\nimport { LoaderService } from './services/loader.service';\r\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { LoaderInterceptor } from './services/loader.interceptor';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { ZoomDialogComponent } from './components/zoom-dialog/zoom-dialog.component';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { CheckboxesService } from './services/checkboxes.service';\r\nimport { IncidenciaComponent } from './components/markers/incidencia/incidencia.component';\r\nimport { LlistaIncidenciesComponent } from './components/llista-incidencies/llista-incidencies.component';\r\nimport { IncidenciaLlistaComponent } from './components/markers/incidencia-llista/incidencia-llista.component';\r\nimport { CameraComponent } from './components/markers/camera/camera.component';\r\nimport { RadarComponent } from './components/markers/radar/radar.component';\r\nimport { ParkingComponent } from './components/markers/parking/parking.component';\r\nimport { ParkNRideComponent } from './components/markers/park-nride/park-nride.component';\r\nimport { GasStationComponent } from './components/markers/gas-station/gas-station.component';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\nimport { TramPerillComponent } from './components/markers/tram-perill/tram-perill.component';\r\nimport { DirectionsService } from './services/directions.service';\r\nimport { LlistaRutesComponent } from './components/llista-rutes/llista-rutes.component';\r\nimport { FuelDialogComponent } from './components/fuel-dialog/fuel-dialog.component';\r\nimport { BotonsComponent } from './components/botons/botons.component';\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { PrintDirectionsComponent } from './components/print-directions/print-directions.component';\r\nimport { ShareDialogComponent } from './components/share-dialog/share-dialog.component';\r\nimport localeCa from '@angular/common/locales/ca';\r\nimport { registerLocaleData } from '@angular/common';\r\n\r\n\r\nregisterLocaleData(localeCa);\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n MapContainerComponent,\r\n ServeisComponent,\r\n CercadorSwitchComponent,\r\n AlertesComponent,\r\n RutesComponent,\r\n TraficComponent,\r\n LoaderComponent,\r\n ZoomDialogComponent,\r\n IncidenciaComponent,\r\n LlistaIncidenciesComponent,\r\n IncidenciaLlistaComponent,\r\n CameraComponent,\r\n RadarComponent,\r\n ParkingComponent,\r\n ParkNRideComponent,\r\n GasStationComponent,\r\n TramPerillComponent,\r\n LlistaRutesComponent,\r\n FuelDialogComponent,\r\n BotonsComponent,\r\n PrintDirectionsComponent,\r\n ShareDialogComponent\r\n ],\r\n imports: [\r\n BrowserModule,\r\n BrowserAnimationsModule,\r\n MatSliderModule,\r\n MatButtonToggleModule,\r\n MatIconModule,\r\n MatSlideToggleModule,\r\n MatChipsModule,\r\n MatCardModule,\r\n MatInputModule,\r\n MatToolbarModule,\r\n MatTabsModule,\r\n FlexLayoutModule,\r\n MatCheckboxModule,\r\n MatSelectModule,\r\n DragDropModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule,\r\n HttpClientModule,\r\n Ng5SliderModule,\r\n MatProgressSpinnerModule,\r\n MatDialogModule,\r\n MatButtonModule,\r\n FontAwesomeModule,\r\n AppRoutingModule,\r\n MatProgressBarModule\r\n ],\r\n entryComponents: [\r\n ZoomDialogComponent, IncidenciaComponent, CameraComponent, RadarComponent, ParkingComponent,\r\n ParkNRideComponent, GasStationComponent, TramPerillComponent, FuelDialogComponent, ShareDialogComponent\r\n ],\r\n\r\n providers: [\r\n LoaderService,\r\n { provide: HTTP_INTERCEPTORS, useClass: LoaderInterceptor, multi: true },\r\n CheckboxesService,\r\n DirectionsService\r\n ],\r\n bootstrap: [AppComponent]\r\n})\r\nexport class AppModule { }\r\n","import { Component, OnInit, HostListener } from '@angular/core';\r\nimport { CheckboxesService } from '../../services/checkboxes.service'\r\n\r\n/**\r\n * Component que s'encarrega de mostrar a l'usuari les opcions disponibles per carregar capes de marcadors d'incidències\r\n */\r\n@Component({\r\n selector: 'app-alertes',\r\n templateUrl: './alertes.component.html',\r\n styleUrls: ['./alertes.component.css']\r\n})\r\nexport class AlertesComponent implements OnInit {\r\n\r\n /**\r\n * @ignore\r\n */\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.setScreenMode();\r\n }\r\n\r\n /**\r\n * Valor constant que indica la posició del tipus d'alerta `CONGESTION` a l'array `alertes`\r\n */\r\n CONGESTION = 0;\r\n\r\n /**\r\n * Valor constant que indica la posició del tipus d'alerta `CONES` a l'array `alertes`\r\n */\r\n CONES = 1;\r\n\r\n /**\r\n * Valor constant que indica la posició del tipus d'alerta `ROADWORKS` a l'array `alertes`\r\n */\r\n ROADWORKS = 2;\r\n\r\n /**\r\n * Valor constant que indica la posició del tipus d'alerta `INCIDENT` a l'array `alertes`\r\n */\r\n INCIDENT = 3;\r\n\r\n /**\r\n * Valor constant que indica la posició del tipus d'alerta `METEO` a l'array `alertes`\r\n */\r\n METEO = 4;\r\n\r\n /**\r\n * Valor constant que indica la posició del tipus d'alerta `CAMERA` a l'array `alertes`\r\n */\r\n CAMERA = 5;\r\n\r\n /**\r\n * Valor constant que indica la posició del tipus d'alerta `MOUNTAINPASS` a l'array `alertes`\r\n */\r\n MOUNTAINPASS = 6;\r\n\r\n /**\r\n * Tots els tipus d'incidències disonibles\r\n */\r\n alertes: string[] = ['CONGESTION','CONES','ROADWORKS','INCIDENT','METEO','CAMERA','MOUNTAINPASS'];\r\n\r\n /**\r\n * Tenint en compte les constants de posició pels diferents tipus d'incidències, indica si estan activats o no els seus respectius checkboxes\r\n */\r\n checkboxes: boolean[] = [false,false,false,false,false,false];\r\n\r\n /**\r\n * Indica el mode de pantalla en que està l'aplicació (escriptori, mòbil vertical o mòbil horitzontal\r\n */\r\n screenMode: string = ''; \r\n\r\n\r\n /**\r\n * Canvia la propietat `screenMode` d'acord amb la mida de la pantalla de l'usuari\r\n */\r\n setScreenMode(): void{\r\n if(window.screen.width < 568)\r\n this.screenMode = 'portrait';\r\n else if(window.screen.width < 824)\r\n this.screenMode = 'landscape';\r\n else \r\n this.screenMode = 'desktop';\r\n }\r\n \r\n /**\r\n * Activa o desactiva una de les capes de marcadors d'incidències\r\n * @param {string} layer Nom de la capa de marcadors que volem activar o desactivar\r\n */\r\n toggleCheckbox(layer: string): void{\r\n if(this.checkboxes[this.alertes.indexOf(layer)]) this.checkboxesService.deleteCheckbox(layer);\r\n else this.checkboxesService.addCheckbox(layer);\r\n }\r\n\r\n /**\r\n * Constructor del component\r\n * @param checkboxesService {CheckboxesService} Servei que conté els noms de les capes de marcadors activades\r\n */\r\n constructor(private checkboxesService: CheckboxesService) { }\r\n\r\n /**\r\n * Inicialitza el component configurant la pàgina segons la mida de la pantalla. Es subscriu al sevei checkboxesService\r\n */\r\n ngOnInit() {\r\n\r\n this.setScreenMode();\r\n \r\n this.checkboxesService.getCheckboxes().subscribe(data => {\r\n for(var i = 0; i < 7; i++){\r\n if(data.includes(this.alertes[i])) this.checkboxes[i] = true;\r\n else this.checkboxes[i] = false;\r\n }\r\n });\r\n\r\n \r\n\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n Congestión\r\n
\r\n
\r\n Conos\r\n
\r\n
\r\n
\r\n
\r\n Obras\r\n
\r\n
\r\n Incidencias\r\n
\r\n
\r\n
\r\n
\r\n Meteorología\r\n
\r\n
\r\n Cámaras\r\n
\r\n
\r\n
\r\n
\r\n Puertos de montaña\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n
\r\n\r\n
\r\n \r\n
\r\n Congestión\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Conos\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Obras\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Incidencias\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Meteo\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Cámaras\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Puertos\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n\r\n\r\n\r\n
\r\n\r\n
\r\n \r\n
\r\n Congestión\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Conos\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Obras\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Incidencias\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Meteo\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Cámaras\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Puertos\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n \r\n","import { Component, OnInit, Input, Inject, LOCALE_ID } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ShareDialogComponent } from '../share-dialog/share-dialog.component';\r\n\r\n/**\r\n * Conjunt de botons que ofereixen diferents funcionalitats a l'aplicació, com canviar el tipus de mapa,\r\n * imprimir una imatge d'aquest, compartir la pàgina, enviar feedback o canviar d'idioma\r\n */\r\n@Component({\r\n selector: 'app-botons',\r\n templateUrl: './botons.component.html',\r\n styleUrls: ['./botons.component.css']\r\n})\r\nexport class BotonsComponent implements OnInit {\r\n\r\n /**\r\n * Constructor del component\r\n * @param dialog {MatDialog} finestra per obrir i donar opcions per compartir\r\n * @param localeId {string} idioma actual de la pàgina\r\n */\r\n constructor(public dialog: MatDialog, @Inject(LOCALE_ID) protected localeId: string) { }\r\n\r\n /**\r\n * El mapa amb el que poden interactuar els botons\r\n */\r\n @Input() map : google.maps.Map; \r\n\r\n /**\r\n * Tipus de mapa seleccionat\r\n */\r\n selectedLayer : string = \"racc\"; \r\n\r\n /**\r\n * idioma seleccionat\r\n */\r\n selectedLanguage : string = this.localeId;\r\n\r\n /**\r\n * Pel mode mòbil, indica si es volen mostrar els botons o no\r\n */\r\n mostrarBotons: boolean = false; \r\n\r\n /**\r\n * Donat un identificador de tipus de mapa, canvia l'aparença del mapa pel tipus seleccionat\r\n */\r\n changeMapType(): void {\r\n console.log(this.map.getMapTypeId());\r\n this.map.setMapTypeId(this.selectedLayer);\r\n console.log(this.map.getMapTypeId());\r\n }\r\n\r\n /**\r\n * Imprimeix el mapa\r\n */\r\n print(): void{\r\n window.print();\r\n }\r\n\r\n /**\r\n * Activa o desactiva els botons\r\n */\r\n toggleButtons(): void{\r\n this.mostrarBotons = !this.mostrarBotons;\r\n }\r\n\r\n /**\r\n * Obre la finestra per mostrar les opcions de compartir la pàgina\r\n */\r\n openShareDialog(): void{\r\n const dialogRef = this.dialog.open(ShareDialogComponent,\r\n {\r\n autoFocus: false,\r\n width: '50%',\r\n height: '50%',\r\n maxWidth: '100vw',\r\n maxHeight: '100vh',\r\n \r\n }\r\n );\r\n\r\n }\r\n\r\n \r\n /**\r\n * Inicialitza el component\r\n */\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n RACC\r\n \r\n \r\n Relieve\r\n \r\n \r\n Satélite\r\n \r\n \r\n Híbrido\r\n \r\n \r\n \r\n
\r\n
\"Imprimir
\r\n
\"Compartir\"
\r\n \"Dar\r\n
\r\n \r\n \r\n \r\n \r\n \"\" Español\r\n \r\n \r\n \r\n \r\n \r\n \"\" Català\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n RACC\r\n \r\n \r\n Relieve\r\n \r\n \r\n Satélite\r\n \r\n \r\n Híbrido\r\n \r\n \r\n \r\n
\r\n
\"Imprimir
\r\n
\"Compartir\"
\r\n \"Dar\r\n
\r\n \r\n \r\n \r\n \r\n \"\" Español\r\n \r\n \r\n \r\n \r\n \r\n \"\" Català\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \"Desplegar\r\n \r\n
\r\n
\r\n","import { Component, OnInit, Output, EventEmitter, Input, HostListener, ViewChildren, Query, QueryList, ElementRef, ViewChild, AfterViewChecked, AfterContentInit, AfterContentChecked, AfterViewInit } from '@angular/core';\r\nimport { THIS_EXPR } from '@angular/compiler/src/output/output_ast';\r\nimport { faSearch } from '@fortawesome/free-solid-svg-icons';\r\nimport { DirectionsService } from 'src/app/services/directions.service';\r\nimport { ɵELEMENT_PROBE_PROVIDERS } from '@angular/platform-browser';\r\n\r\n/**\r\n * Component encarregat de donar a l'usuari opcions per cercar ubicacions i seleccionar els submenús disponibles\r\n */\r\n@Component({\r\n selector: 'app-cercador-switch',\r\n templateUrl: './cercador-switch.component.html',\r\n styleUrls: ['./cercador-switch.component.css']\r\n})\r\nexport class CercadorSwitchComponent implements OnInit, AfterViewInit{\r\n\r\n /**\r\n * @ignore\r\n */\r\n searchText: string = \"\"; \r\n\r\n /**\r\n * @ignore\r\n */\r\n rutaTrobada: boolean = true;\r\n \r\n /**\r\n * Límits del mapa per mostrar Espanya i les Illes Canàries\r\n */\r\n espLatLngBounds = new google.maps.LatLngBounds(\r\n new google.maps.LatLng(26.709041066163724, -20.306056689891875),\r\n new google.maps.LatLng(44.811251049443776, 5.182224560108125) \r\n );\r\n\r\n /**\r\n * Instància del mapa de l'aplicació\r\n */\r\n @Input() map: google.maps.Map;\r\n\r\n\r\n /**\r\n * Finestra d'informació provinent del mapa map\r\n */\r\n @Input() infowindow: google.maps.InfoWindow;\r\n\r\n /**\r\n * Llista d'incidències visibles al mapa \r\n */\r\n @Input() set setLlistaIncidencies(value) {\r\n this.llistaIncidencies = value;\r\n }\r\n\r\n\r\n /**\r\n * Emet els valors de les ubicacions de les rutes\r\n */\r\n @Output() directionsEmitter = new EventEmitter();\r\n\r\n /**\r\n * Emet un indicador de que s'ha fet la cerca d'una ubicació\r\n */\r\n @Output() searchEmitter = new EventEmitter();\r\n\r\n /**\r\n * Conté tots els marcadors d'incidències presents al mapa\r\n */\r\n llistaIncidencies; \r\n\r\n /**\r\n * @ignore\r\n */\r\n @ViewChildren('search') searchElements: QueryList;\r\n\r\n /**\r\n * @ignore\r\n */\r\n @ViewChild('searchFocus') searchFocus: ElementRef;\r\n\r\n /**\r\n * @ignore\r\n */\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.setScreenMode();\r\n \r\n }\r\n\r\n /**\r\n * Retorna la llista d'incidències visibles al mapa\r\n */\r\n get getLlistaIncidencies(){\r\n return this.llistaIncidencies;\r\n }\r\n\r\n /**\r\n * Noms dels submenus disponibles\r\n */\r\n submenus = [\"rutes\", \"alertes\", \"serveis\"];\r\n\r\n /**\r\n * Subemenú seleccionat\r\n */\r\n selectedSubmenu = \"\";\r\n\r\n /**\r\n * Indica si s'ha fet el càlcul o no d'una ruta\r\n */\r\n rutaCalculada: boolean = false;\r\n\r\n /**\r\n * Indica si l'usuari vol veure els detalls de la ruta (només per mòbil horitzontal)\r\n */\r\n showRouteDetails: boolean = false;\r\n\r\n /**\r\n * Indica el mode seleccionat per l'usuari per calcular la ruta\r\n */\r\n directionsMode: string = \"\";\r\n\r\n /**\r\n * Indica en què mode es troba la pantalla (escriptori, mòbil vertical o mòbil horitzontal)\r\n */\r\n screenMode: string = '';\r\n\r\n /**\r\n * Indica l'altura de la pantalla\r\n */\r\n screenHeight: number = 100; \r\n\r\n /**\r\n * Indica l'amplada de la pantalla\r\n */\r\n screenWidth: number = 100;\r\n\r\n /**\r\n * S'executa quan es selecciona un dels submenús i l'obre o el tanca en funció de l'estat actual\r\n * @param {string} submenu Nom del submenú escollit\r\n */\r\n onSelect(submenu: string): void {\r\n if(submenu===this.selectedSubmenu) this.selectedSubmenu = \"\";\r\n else{\r\n this.selectedSubmenu = submenu;\r\n if(this.selectedSubmenu === 'cerca'){\r\n setTimeout(() => {\r\n this.searchFocus.nativeElement.focus();\r\n },0)\r\n \r\n }\r\n } \r\n }\r\n\r\n \r\n /**\r\n * Canvia la propietat `screenMode` d'acord amb la mida de la pantalla de l'usuari\r\n */\r\n setScreenMode(): void{\r\n this.screenHeight = window.innerHeight;\r\n this.elementRef.nativeElement.style.setProperty('--height',this.screenHeight + 'px');\r\n this.screenWidth = window.innerWidth;\r\n this.elementRef.nativeElement.style.setProperty('--width',this.screenWidth + 'px');\r\n if(window.innerWidth < 568)\r\n this.screenMode = 'portrait';\r\n else if(window.innerWidth < 824)\r\n this.screenMode = 'landscape';\r\n else \r\n this.screenMode = 'desktop';\r\n }\r\n\r\n /**\r\n * Fa la petició als servidors de rutes per calcular les rutes donats una sèrie de waypoints\r\n * @param {string[]} waypoints texts que contenen les ubicacions per les quals passa la ruta que vol calcular l'usuari \r\n */\r\n onEventDirections(waypoints: string[]){\r\n this.rutaTrobada = true;\r\n this.directionsEmitter.emit(waypoints);\r\n this.rutaCalculada = true;\r\n this.showRouteDetails = true;\r\n var resultat;\r\n if(this.directionsMode === 'evitaPeatges') resultat = this.directionsService.getShortestRoute(waypoints, true);\r\n else if(this.directionsMode === 'mesRapidaTrafic') resultat = this.directionsService.getInrixShortestRoute(waypoints);\r\n else resultat = this.directionsService.getShortestRoute(waypoints,false)\r\n if(resultat.length === 0) this.rutaTrobada = false;\r\n }\r\n\r\n /**\r\n * Canvia el mode de càlcul de ruta\r\n * @param {tring} newOption opció escollida per l'usuari\r\n */\r\n onEventDirectionsOption(newOption: string){\r\n this.directionsMode = newOption;\r\n }\r\n\r\n /**\r\n * Activa o desactiva la informació de rutes al mapa\r\n * @param event boolean indicant si s'activa o desactiva la informació sobre rutes al mapa\r\n */\r\n onEventToggleDirections(event: boolean){\r\n this.rutaCalculada = event;\r\n if(event === false) this.directionsService.deleteDirections();\r\n }\r\n\r\n /**\r\n * Quan es detecta un canvi d'ubicació en l'autocompletat de Google Maps, s'emet la ubicació d'aquest al mapa\r\n * @param {google.maps.places.Autocomplete} autocomplete objecte d'autocompletat de Google Maps\r\n */\r\n onPlaceChanged(autocomplete: google.maps.places.Autocomplete){\r\n var place = autocomplete.getPlace();\r\n if(place.geometry){\r\n this.searchEmitter.emit(place.geometry)\r\n }\r\n }\r\n\r\n /**\r\n * Inicialitza el servei d'autocompletat dels inputs \r\n */\r\n setSearchAutocomplete(): void {\r\n var elements= document.getElementsByClassName(\"search\");\r\n for(var i = 0; i < elements.length; i++){\r\n var inputElement: HTMLInputElement = elements[i];\r\n let autocomplete = new google.maps.places.Autocomplete(inputElement, {bounds: this.espLatLngBounds});\r\n autocomplete.addListener('place_changed', () => this.onPlaceChanged(autocomplete));\r\n }\r\n }\r\n\r\n /**\r\n * Indica al servei de rutes quin és el preu per kilòmetre\r\n * @param {number} preuKm preu per kilòmetre calculat a partir dels paràmetres introduits per l'usuari\r\n */\r\n setPreuKm(preuKm: number){\r\n this.directionsService.setPreuKm(preuKm);\r\n }\r\n\r\n /**\r\n * Constructor del component\r\n * @param {DirectionsService} directionsService Servei de rutes\r\n * @param {ElementRef} elementRef Serveix per mantenir referències a elements de la plantilla del component\r\n */\r\n constructor(private directionsService: DirectionsService, private elementRef: ElementRef) { }\r\n\r\n /**\r\n * Inicialitza el mode de pantalla i els serveis d'autocompletat \r\n */\r\n ngOnInit() {\r\n this.setScreenMode();\r\n this.setSearchAutocomplete();\r\n }\r\n \r\n /**\r\n * Escolta els canvis en els elements de la plantilla que serveixen per fer cerques d'ubicacions\r\n */\r\n ngAfterViewInit(): void {\r\n //Called after ngAfterContentInit when the component's view has been initialized. Applies to components only.\r\n //Add 'implements AfterViewInit' to the class.\r\n this.searchElements.changes.subscribe( r => {\r\n this.setSearchAutocomplete();\r\n })\r\n }\r\n \r\n\r\n}\r\n","\r\n
\r\n \r\n
\r\n \"Logo\r\n
\r\n\r\n
\r\n \r\n
\r\n search\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \"{{submenu}}\"\r\n
\r\n {submenu, select, rutes {Rutas} alertes {Alertas} serveis {Servicios} }\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n\r\n
\r\n
\r\n \"Logo\r\n
\r\n \r\n
\r\n \r\n
\r\n search\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \"{{submenu}}\"\r\n
\r\n {submenu, select, rutes {Rutas} alertes {Alertas} serveis {Servicios} }\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n\r\n \r\n \r\n\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n\r\n
\r\n\r\n
\r\n \"Logo\r\n
\r\n\r\n
\r\n
\r\n search\r\n
\r\n Buscar\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \"{{submenu}}\"\r\n
\r\n {submenu, select, rutes {Rutas} alertes {Alertas} serveis {Servicios} }\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n search\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\"TornarTornar a calcular ruta
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n\r\n\r\n
","import { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n/**\r\n * Finestra per configurar els paràmetres de l'usuari sobre el consum del seu vehicle per fer la ruta\r\n */\r\n@Component({\r\n selector: 'app-fuel-dialog',\r\n templateUrl: './fuel-dialog.component.html',\r\n styleUrls: ['./fuel-dialog.component.css']\r\n})\r\nexport class FuelDialogComponent {\r\n\r\n /**\r\n * Constructor del component\r\n * @param {MatDialogRef} dialogRef Inicialitza la finestra amb aquest component\r\n * @param {any} data Conté les dades que l'usuari pot configurar, com el combustible, el tipus de vehicle... \r\n */\r\n constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: any) { }\r\n\r\n /**\r\n * Tipus de vehicle \r\n */\r\n tipusVehicle: string = this.data.tipusVehicle;\r\n\r\n /**\r\n * Consum del vehicle\r\n */\r\n consumVehicle: number = this.data.consumVehicle;\r\n\r\n /**\r\n * Combustible que fa servir el vehicle\r\n */\r\n combustible: string = this.data.combustible;\r\n\r\n /**\r\n * Preu del combustible actual\r\n */\r\n preuCombustible: number = this.data.preuCombustible;\r\n\r\n /**\r\n * Tanca la finestra de configuració\r\n */\r\n closeDialog() {\r\n this.dialogRef.close({\r\n saved: false\r\n });\r\n }\r\n\r\n /**\r\n * Tanca la finestra d'informació i guarda els canvis que ha fet l'usuari en els paràmetres configurables\r\n */\r\n save() {\r\n this.dialogRef.close({\r\n saved: true,\r\n tipusVehicle: this.tipusVehicle,\r\n consumVehicle: this.consumVehicle,\r\n combustible: this.combustible,\r\n preuCombustible: this.preuCombustible\r\n })\r\n }\r\n\r\n}\r\n","

Configurar combustible

\r\n
\r\n

Las aproximaciones del gasto de combustible se basan en la siguiente información:

\r\n \r\n \r\n Compacto\r\n Estándar\r\n Consumo elevado\r\n \r\n \r\n \r\n \r\n l/100kms\r\n \r\n \r\n \r\n Gasolina\r\n Diésel\r\n \r\n \r\n \r\n \r\n €/L\r\n \r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n","import { Component, OnInit, Input, ComponentFactoryResolver, Injector, ApplicationRef, ComponentRef, Output, EventEmitter, HostListener, ElementRef } from '@angular/core';\r\nimport { IncidenciaLlistaComponent } from '../markers/incidencia-llista/incidencia-llista.component';\r\n\r\n/**\r\n * Component amb un llistat d'incidències visibles als límits del mapa\r\n */\r\n@Component({\r\n selector: 'app-llista-incidencies',\r\n templateUrl: './llista-incidencies.component.html',\r\n styleUrls: ['./llista-incidencies.component.css']\r\n})\r\nexport class LlistaIncidenciesComponent implements OnInit {\r\n\r\n /**\r\n * Constructor del component\r\n * @param {ComponentFactoryResolver} resolver Serveix com a Factory pels components que es carreguen dins la finestra d'informació del mapa \r\n * @param {ElementRef} elementRef Serveix per mantenir una referència d'algun element de la plantilla del component \r\n */\r\n constructor(private resolver: ComponentFactoryResolver, private elementRef: ElementRef) { }\r\n\r\n /**\r\n * Conté tots els marcadors d'incidències presents al mapa\r\n */\r\n private llistaIncidencies; \r\n\r\n /**\r\n * @ignore\r\n */\r\n private bindedLlistaIncidencies;\r\n \r\n /**\r\n * Mapa de l'aplicació \r\n */\r\n @Input() map: google.maps.Map; \r\n\r\n /**\r\n * Finestra d'informació del mapa map\r\n */\r\n @Input() infowindow: google.maps.InfoWindow;\r\n\r\n /**\r\n * Inicialitza el valor del llistat d'incidències visibles\r\n */\r\n @Input() set setLlistaIncidencies(value) {\r\n this.llistaIncidencies = value;\r\n }\r\n\r\n /**\r\n * Emet al mapa l'event de click sobre una incidència per mostrare el seu marcador\r\n */\r\n @Output() clickEmitter = new EventEmitter();\r\n\r\n /**\r\n * @ignore\r\n */\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.setScreenSize();\r\n }\r\n\r\n /**\r\n * Retorna la llista d'incidències\r\n */\r\n get getLlistaIncidencies() {\r\n this.bindedLlistaIncidencies = this.llistaIncidencies;\r\n return this.bindedLlistaIncidencies;\r\n }\r\n\r\n /**\r\n * Indica si s'ha de mostrar o no el llsitat\r\n */\r\n mostraLlistat = false;\r\n\r\n /**\r\n * Indica si s'ha d'expandir o no el llistat\r\n */\r\n expandMenu = false;\r\n\r\n /**\r\n * Indica l'altura de la pantalla\r\n */\r\n screenHeight: number = 100;\r\n\r\n /**\r\n * Indica l'amplada de la pantalla\r\n */\r\n screenWidth: number = 100; // Indica l'amplada de la pantalla\r\n\r\n\r\n /**\r\n * Actualitza els valors de l'alçada i amplada de la pantalla\r\n */\r\n setScreenSize(): void{\r\n this.screenHeight = window.innerHeight;\r\n this.elementRef.nativeElement.style.setProperty('--height', this.screenHeight + 'px');\r\n this.screenWidth = window.innerWidth;\r\n this.elementRef.nativeElement.style.setProperty('--width', this.screenWidth + 'px');\r\n }\r\n\r\n /**\r\n * Canvia el valor de la variable mostraLlistat\r\n */\r\n toggleLlistat(){\r\n this.mostraLlistat = !this.mostraLlistat;\r\n }\r\n\r\n /**\r\n * Expandeix o redueix la llista d'incidències en la vista de mòbil horitzontal\r\n */\r\n toggleExpand(){\r\n this.expandMenu = !this.expandMenu;\r\n }\r\n\r\n /**\r\n * Inicialitza el mode de pantalla de l'aplicació\r\n */\r\n ngOnInit() {\r\n this.setScreenSize();\r\n }\r\n\r\n}\r\n","
0\">\r\n\r\n
\r\n Lista de incidencias de circulación\r\n 0 && mostraLlistat\" src='assets/img/arrowButton.svg'>\r\n
\r\n \r\n
\r\n
    0) || !mostraLlistat\" >\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n
\r\n
\r\n\r\n
\r\n\r\n
0\">\r\n\r\n
\r\n Lista de incidencias de circulación\r\n 0 && mostraLlistat\" src='assets/img/arrowButton.svg'>\r\n
\r\n \r\n
\r\n
    0) || !mostraLlistat\" >\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n
0\">\r\n\r\n
\r\n Incidencias\r\n 0 && mostraLlistat\" src='assets/img/arrowButton.svg'>\r\n
\r\n \r\n
0) || !mostraLlistat\">\r\n\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n
\r\n\r\n\r\n\r\n\r\n","import { Component, OnInit, Input, ChangeDetectorRef, Output, EventEmitter, ElementRef, HostListener, OnDestroy, NgZone } from '@angular/core';\r\nimport { trigger, state, style, animate, transition } from '@angular/animations' \r\nimport { DirectionsService } from 'src/app/services/directions.service';\r\nimport { Router } from '@angular/router';\r\nimport { utf8_encode, utf8_decode } from 'locutus/php/xml';\r\n\r\n/**\r\n * Conté la informació necessària per mostrar una ruta calculada pel servei Inrix\r\n */\r\ninterface InrixData {\r\n /**\r\n * Punts per dibuixar la ruta\r\n */\r\n routePoints: google.maps.LatLng[],\r\n\r\n /**\r\n * Duració de la ruta\r\n */\r\n duration: string,\r\n\r\n /**\r\n * Distància total de la ruta\r\n */\r\n distance: string,\r\n\r\n /**\r\n * Consum de combustible de la ruta\r\n */\r\n fuel: string,\r\n\r\n /**\r\n * Resum de la ruta\r\n */\r\n summary: string,\r\n \r\n}\r\n\r\n/**\r\n * Conté informació resumida i detallada sobre les rutes calculades\r\n */\r\n@Component({\r\n selector: 'app-llista-rutes',\r\n templateUrl: './llista-rutes.component.html',\r\n styleUrls: ['./llista-rutes.component.css']\r\n})\r\nexport class LlistaRutesComponent implements OnInit {\r\n\r\n /**\r\n * Constructor del component\r\n * @param {DirectionsService} directionsService Servei de rutes de l'aplicació\r\n * @param {ChangeDetectorRef} cdRef Detecta els canvis del html\r\n * @param {ElementRef} elementRef Serveix per mantenir referència a elements de la plantilla del component\r\n * @param {Router} router Instància de router de l'aplicació\r\n * @param {NgZone} ngZone \r\n */\r\n constructor(public directionsService: DirectionsService,public cdRef:ChangeDetectorRef, private elementRef: ElementRef, private router:Router,\r\n private ngZone: NgZone) { }\r\n\r\n /**\r\n * Emet un valor quan l'usuari vol esborrar la informació sobre rutes \r\n */\r\n @Output() deleteEmitter = new EventEmitter();\r\n\r\n /**\r\n * Preu per kilòmetre de la ruta\r\n */\r\n @Input() preuKm: number;\r\n\r\n /**\r\n * @ignore\r\n */\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.setScreenSize();\r\n };\r\n\r\n /**\r\n * Conté les rutes calculades pel servei de Google Maps Directions\r\n */\r\n routes: google.maps.DirectionsRoute[];\r\n\r\n /**\r\n * Indica si s'ha trobat o no una ruta\r\n */\r\n routeNotFoundFlag: boolean;\r\n\r\n /**\r\n * Indica si l'usuari vol mostrar o no els detalls d'una ruta\r\n */\r\n routeDetails: boolean = false;\r\n\r\n /**\r\n * Índex de la ruta de Google Maps Directiosn seleccionada\r\n */\r\n selectedRouteIndex: number = 0;\r\n\r\n /**\r\n * Finestra d'informació per mostrar les indicacions al mapa\r\n */\r\n infowindow: google.maps.InfoWindow;\r\n\r\n /**\r\n * @ignore\r\n */\r\n urlImg: string = \"assets/img/\";\r\n\r\n /**\r\n * @ignore\r\n */\r\n iconNames = [\"routeIconA.svg\",\"routeIconB.svg\",\"routeIconC.svg\",\"routeIconD.svg\",\"routeIconE.svg\",\"routeIconF.svg\",\"routeIconG.svg\",\"routeIconH.svg\"]\r\n \r\n /**\r\n * Ruta de Google Maps Directions seleccionada\r\n */\r\n selectedRoute: google.maps.DirectionsRoute;\r\n\r\n /**\r\n * Dades provinents del servei d'Inrix\r\n */\r\n inrixData: InrixData;\r\n\r\n /**\r\n * Indica si s'ha fet servir o no el servei de rutes d'Inrix\r\n */\r\n inrixFlag:boolean = false;\r\n\r\n /**\r\n * Indica l'altura de la pantalla\r\n */\r\n screenHeight: number = 100; \r\n\r\n /**\r\n * Indica l'amplada de la pantalla\r\n */\r\n screenWidth: number = 100; \r\n\r\n\r\n /**\r\n * Actualitza els valors de l'alçada i amplada de la pantalla\r\n */\r\n setScreenSize(): void{\r\n this.screenHeight = window.innerHeight;\r\n this.elementRef.nativeElement.style.setProperty('--height', this.screenHeight + 'px');\r\n this.screenWidth = window.innerWidth;\r\n this.elementRef.nativeElement.style.setProperty('--width', this.screenWidth + 'px');\r\n \r\n }\r\n\r\n /**\r\n * Donada una ruta, calcula la distància total que s'ha de recòrrer\r\n * @param {google.maps.DirectionsRoute} route ruta de Google Maps Directions \r\n * @returns {string} Text amb la distància \r\n */\r\n getDistance(route: google.maps.DirectionsRoute): string {\r\n return this.directionsService.calcDistance(route);\r\n }\r\n \r\n /**\r\n * Donada una ruta, calcula la duració total per recòrrer-la\r\n * @param {google.maps.DirectionsRoute} route ruta de Google Maps Directions \r\n * @returns {string} Text amb la duració\r\n */\r\n getDuration(route: google.maps.DirectionsRoute): string {\r\n return this.directionsService.calcDuration(route);\r\n }\r\n\r\n /**\r\n * Donada una ruta, calcula el consum en € de combustible \r\n * @param {google.maps.DirectionsRoute} route ruta de Google Maps Directions\r\n * @returns {string} Text amb el consum\r\n */\r\n getFuel(route: google.maps.DirectionsRoute): number {\r\n return this.directionsService.calcFuel(route);\r\n }\r\n\r\n\r\n /**\r\n * Canvia la URL de la pàgina per imprimir \r\n */\r\n navigateToPrint(): void{\r\n this.ngZone.run(() => {\r\n //this.cdRef.detectChanges();\r\n this.router.navigateByUrl('/print');\r\n })\r\n \r\n }\r\n \r\n /**\r\n * Centra el mapa a l'step passat per paràmetre i mostra les instruccions en una finestra d'informació\r\n * @param step l'step que s'ha seleccionat\r\n */\r\n selectStep(step: google.maps.DirectionsStep): void{\r\n var map = this.directionsService.getMap();\r\n map.panTo(step.start_location);\r\n var instructionsHTML = \"
\" + step.instructions + \"
\"\r\n map.setZoom(15);\r\n this.infowindow.close();\r\n this.infowindow = new google.maps.InfoWindow({\r\n position: step.start_location,\r\n content: instructionsHTML\r\n });\r\n }\r\n\r\n /**\r\n * Selecciona la ruta a mostrar\r\n * @param {google.maps.DirectionsRoute} route Canvia la ruta seleccionada al mapa\r\n */\r\n selectRoute(route: google.maps.DirectionsRoute): void{\r\n this.selectedRoute = route;\r\n\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n /**\r\n * Fa la conversió a utf8 per canviar valors de caràcters no imprimibles\r\n * @param utfString text sense codificar\r\n * @returns {string} Text codificat\r\n */\r\n convertString(utfString: string): string{\r\n var encoded: string = utf8_decode(utfString);\r\n encoded = encoded.replace('Ü','Ó');\r\n \r\n return encoded;\r\n }\r\n\r\n\r\n /**\r\n * Inicialitza les propietats del component i es subscriu als diferents serveis de rutes de l'aplicació\r\n */\r\n ngOnInit() {\r\n this.setScreenSize();\r\n this.infowindow = new google.maps.InfoWindow();\r\n this.directionsService.setPanel(document.getElementById(\"route-steps-container\"));\r\n this.directionsService.getRoutes().subscribe(data => {\r\n this.routes = data;\r\n this.selectedRoute = data[0];\r\n if(data.length === 0){\r\n this.routeDetails = false;\r\n this.infowindow.close();\r\n }\r\n this.cdRef.detectChanges();\r\n });\r\n\r\n this.directionsService.getRouteNotFoundFlag().subscribe(data => {\r\n this.routeNotFoundFlag = data;\r\n })\r\n\r\n this.directionsService.getInrix().subscribe(data => {\r\n this.inrixData = data;\r\n if (!this.cdRef['destroyed']) {\r\n this.cdRef.detectChanges();\r\n }\r\n });\r\n\r\n this.directionsService.getInrixFlag().subscribe( value => {\r\n this.inrixFlag = value;\r\n })\r\n \r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnDestroy(): void {\r\n //Called once, before the instance is destroyed.\r\n //Add 'implements OnDestroy' to the class.\r\n this.elementRef.nativeElement.remove();\r\n }\r\n\r\n\r\n}","
\r\n
\r\n Rutas sugeridas\r\n \r\n \r\n \"Borrar\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n Por {{route.summary}}\r\n Detalle de la ruta\r\n
\r\n
\r\n \r\n \"Icona{{getDistance(route)}}\r\n \r\n \r\n \"Icona{{getDuration(route)}}\r\n \r\n \r\n \"Icona{{getFuel(route) | number}}€\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n {{convertString(inrixData.summary)}}\r\n \"Imprimir\"\r\n
\r\n
\r\n \r\n \"Icona{{inrixData.distance}}\r\n \r\n \r\n \"Icona{{inrixData.duration}}\r\n \r\n \r\n \"Icona{{inrixData.fuel}}\r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n No se ha encontrado ninguna ruta. Introduce una dirección válida.\r\n
\r\n\r\n\r\n
0\">\r\n
\r\n \"TornarVolver a resultados\r\n \"Imprimir\"\r\n
\r\n
\r\n
\r\n
\r\n
\"\"
\r\n
\r\n
{{leg.start_address}}
\r\n
Aproximadamente {{leg.duration.text}}
\r\n
\r\n
\r\n
\r\n
\r\n {{iStep + 1 }}.\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {{step.distance.text}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\"\"
\r\n
\r\n
{{routes[selectedRouteIndex].legs[routes[selectedRouteIndex].legs.length-1].end_address}}
\r\n
\r\n
\r\n
\r\n \r\n \r\n
","import { Component, OnInit, Injector, ApplicationRef, Inject } from '@angular/core';\r\nimport { ComponentFactoryResolver, ComponentRef } from '@angular/core';\r\nimport { IncidenciaComponent } from '../markers/incidencia/incidencia.component';\r\n/// \r\nimport { default as MarkerClusterer } from '@google/markerclustererplus';\r\nimport { DadesService } from '../../services/dades.service';\r\nimport { MatDialog, MatDialogRef, MAT_DIALOG_DATA, MatDialogConfig } from '@angular/material/dialog';\r\nimport { ZoomDialogComponent } from '../zoom-dialog/zoom-dialog.component';\r\nimport { CheckboxesService } from '../../services/checkboxes.service';\r\nimport { InrixService } from '../../services/inrix.service';\r\nimport { MercatorProjection } from '../../mercator-projection';\r\nimport { Observable, interval, Subscription, Subject } from 'rxjs';\r\nimport { switchMap } from 'rxjs/operators';\r\nimport { CameraComponent } from '../markers/camera/camera.component';\r\nimport { RadarComponent } from '../markers/radar/radar.component';\r\nimport { ParkingComponent } from '../markers/parking/parking.component';\r\nimport { ParkNRideComponent } from '../markers/park-nride/park-nride.component';\r\nimport { GasStationComponent } from '../markers/gas-station/gas-station.component';\r\nimport { TramPerillComponent } from '../markers/tram-perill/tram-perill.component';\r\nimport { DirectionsService } from '../../services/directions.service';\r\nimport { STYLE } from '../../../styles';\r\nimport { ActivatedRoute, ParamMap } from '@angular/router';\r\nimport { http_build_query } from 'locutus/php/url';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport * as jQuery from 'jquery';\r\n\r\n/**\r\n * Component principal de l'aplicació. S'encarrega de fer tots els canvis necessaris al mapa per mostrar la informació que l'usuari ha escollit\r\n * fent servir els altres components de l'aplicació.\r\n */\r\n@Component({\r\n selector: \"app-map-container\",\r\n templateUrl: \"./map-container.component.html\",\r\n styleUrls: [\"./map-container.component.css\"]\r\n})\r\nexport class MapContainerComponent implements OnInit {\r\n /**\r\n * Constructor del component\r\n * @param {DadesService} dadesService Servei que connecta amb l'API Infotransit\r\n * @param {CheckboxesService} checkboxesService Servei que conté els noms de les capes de marcadors activades\r\n * @param {DirectionsService} directionsService Servei de càlcul de rutes de l'aplicació\r\n * @param {MatDialog} dialog Obre la finestra per preguntar si es vol fer zoom\r\n * @param {InrixService} inrixService Servei que connecta amb Inrix\r\n * @param {ComponentFactoryResolver} resolver Carrega components dinàmicament per injectar-los a la finestra d'informació de l'aplicació \r\n * @param {Injector} injector Injecta informació als components carregats dinàmicament\r\n * @param {ApplicationRef} appRef Manté una referència a elements de l'aplicació\r\n * @param {ActivatedRoute} route Indica la ruta URL actual de l'aplicació\r\n */\r\n constructor(private dadesService: DadesService, private checkboxesService: CheckboxesService, private directionsService: DirectionsService,\r\n public dialog: MatDialog, private inrixService: InrixService, private resolver: ComponentFactoryResolver,\r\n private injector: Injector, private appRef: ApplicationRef, private route: ActivatedRoute, private sanitizer: DomSanitizer) { }\r\n\r\n /**\r\n * Referència a component\r\n */\r\n compRef: ComponentRef;\r\n\r\n /**\r\n * Objecte únic. Tot treballa entorn aquest instància del mapa\r\n */\r\n map: google.maps.Map;\r\n\r\n /**\r\n * Bounds del mapa extesos. Si no sortim d'aquests bounds, no es carreguen noves dades de les capes amb zoom (ja estan carregades)\r\n */\r\n marginBounds: google.maps.LatLngBounds; // \r\n\r\n /**\r\n * Variable pel càlcul de bounds extesos. Indica el límit sud-oest\r\n */\r\n SWactual;\r\n\r\n /**\r\n * Variable pel càlcul de bounds extesos. Indica el límit nord-est\r\n */\r\n NEactual;\r\n\r\n /**\r\n * Ens podem subscriure per executar algunes funcions cada cert temps\r\n */\r\n updateSubscription: Subscription;\r\n\r\n /**\r\n * Subject per emetre events\r\n */\r\n updateSubject: Subject = new Subject();\r\n\r\n /**\r\n * Centre del mapa\r\n */\r\n center = new google.maps.LatLng(40.38937, -3.511634);\r\n\r\n /**\r\n * Gestiona el clustering del mapa\r\n */\r\n markerCluster: MarkerClusterer = new MarkerClusterer(this.map);\r\n\r\n /**\r\n * Per cada capa que afegim, es crea una nova parella key=nomCapa i value=array de marcadors d'aquesta capa\r\n */\r\n loadedLayers: Map> = new Map();\r\n\r\n /**\r\n * Nom de les capes del tipus alerta\r\n */\r\n alertes = [\"ROADWORKS\", \"CONGESTION\", \"INCIDENT\", \"MOUNTAINPASS\", \"METEO\", \"CONES\"];\r\n\r\n /**\r\n * Nom de les capes del tipus servei\r\n */\r\n serveis = [\"GAS_STATION\", \"RADAR\", \"PARKING\", \"PARKANDRIDE\", \"TRAMS_PERILL\"];\r\n\r\n /**\r\n * Nom de les capes que necessiten un zoom mínim per ser mostrades\r\n */\r\n zoomLayers = [\"CAMERA\", \"RADAR\", \"GAS_STATION\", \"PARKING\", \"PARKANDRIDE\"];\r\n\r\n /**\r\n * Indica les capes que estan activades en cada moment\r\n */\r\n activeLayers = [];\r\n\r\n /**\r\n * Marcadors de les capes d'incidències que són visibles als bounds del mapa actual\r\n */\r\n alertesVisibles = new Map();\r\n\r\n /**\r\n * Conté les features d'incidències carregades al mapa\r\n */\r\n alertesFeatures = [];\r\n\r\n /**\r\n * Conté les features d'incidències carregades al mapa i a dins dels bounds actuals\r\n */\r\n alertesVisiblesFeatures = [];\r\n\r\n /**\r\n * Identificador de la causa d'incidència meteorològica\r\n */\r\n meteoId: string;\r\n\r\n /**\r\n * Per cada identificador de causa indica el seu nom en castellà\r\n */\r\n meteoIds: Map = new Map([[\"20\", \"Niebla\"], [\"28\", \"Cadenas\"], [\"21\", \"Hielo\"], [\"42\", \"Inundaciones\"], [\"26\", \"Lluvia\"], [\"27\", \"Nieve\"], [\"33\", \"Viento\"]]);\r\n\r\n /**\r\n * Finestra d'informació del mapa. Només hi ha una que canvia el seu contingut en funció del marcador clicat\r\n */\r\n infowindow = new google.maps.InfoWindow();\r\n\r\n /**\r\n * Capa de tràfic INRIX\r\n */\r\n trafficLayer: google.maps.ImageMapType;\r\n\r\n /**\r\n * Determina si el tràfic està en mode directe o mode previsió\r\n */\r\n trafficMode: string;\r\n\r\n /**\r\n * En format ISO, indica la hora per la qual es fa la previsió de trànsit amb INRIX\r\n */\r\n trafficTime: string;\r\n /**\r\n * Tipus de mapa RACC\r\n */\r\n raccMapType = new google.maps.StyledMapType(STYLE, { name: 'racc' });\r\n isInrixVisible = false;\r\n /**\r\n * Opcions del mapa\r\n */\r\n mapProperties: google.maps.MapOptions = {\r\n zoom: 7,\r\n center: this.center,\r\n disableDefaultUI: false,\r\n styles: STYLE,\r\n gestureHandling: 'greedy',\r\n mapTypeControlOptions: {\r\n mapTypeIds: ['roadmap', 'satellite', 'hybrid', 'terrain']\r\n },\r\n fullscreenControl: false,\r\n mapTypeControl: false,\r\n streetViewControl: false\r\n\r\n };\r\n\r\n /**\r\n * Retorna els bounds passats per paràmetre segons el format de la base de dades\r\n * @param {google.maps.LatLngBounds} bounds Límits del mapa\r\n * @returns {string} El format que es retorna és un String amb \",,,\"\r\n */\r\n formatBounds(bounds: google.maps.LatLngBounds): string {\r\n var nord_est = bounds.getNorthEast();\r\n var sud_oest = bounds.getSouthWest();\r\n var nord_oest = sud_oest.lng() + \",\" + nord_est.lat();\r\n var sud_est = nord_est.lng() + \",\" + sud_oest.lat();\r\n return nord_oest + \",\" + sud_est;\r\n }\r\n\r\n /**\r\n * Donats els bounds del mapa actuals, genera uns bounds amb els límits extesos segons el paràmetre percentatge\r\n * @param percentatge percentatge pel qual es vol ampliar els bounds del mapa. Valor decimal\r\n * @return {google.maps.LatLngBounds} Límits extesos del mapa\r\n */\r\n extendBounds(percentatge: number): google.maps.LatLngBounds {\r\n var x1, x2, y1, y2, x1n, x2n, y1n, y2n;\r\n var bounds = this.map.getBounds();\r\n\r\n x1 = bounds.getSouthWest().lng();\r\n y1 = bounds.getSouthWest().lat();\r\n\r\n x2 = bounds.getNorthEast().lng();\r\n y2 = bounds.getNorthEast().lat();\r\n\r\n x1n = x1 - (x2 - x1) * percentatge;\r\n y1n = y1 - (y2 - y1) * percentatge;\r\n\r\n x2n = x2 + (x2 - x1) * percentatge;\r\n y2n = y2 + (y2 - y1) * percentatge;\r\n\r\n var extendedSW = new google.maps.LatLng(y1n, x1n);\r\n var extendedNE = new google.maps.LatLng(y2n, x2n);\r\n\r\n var newBounds = new google.maps.LatLngBounds(\r\n extendedSW,\r\n extendedNE\r\n );\r\n\r\n return newBounds;\r\n }\r\n\r\n /**\r\n * Verifica que el mapa s'ha mogut el suficient com per tornar a fer una crida a base de dades per obtenir nous marcadors\r\n * @param percentatge percentatge de quantitat de pantalla que s'ha d'haver mogut per fer una nova crida\r\n * @returns {boolean} Indica si s'han de refrescar els límits extesos o no\r\n */\r\n checkBoundsRefresh(): boolean {\r\n\r\n var bounds = this.map.getBounds();\r\n var SWactual = bounds.getSouthWest();\r\n var NEactual = bounds.getNorthEast();\r\n\r\n if (\r\n SWactual.lat() < this.marginBounds.getSouthWest().lat() || SWactual.lng() < this.marginBounds.getSouthWest().lng() ||\r\n NEactual.lat() > this.marginBounds.getNorthEast().lat() || NEactual.lng() > this.marginBounds.getNorthEast().lng()\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Activa o desactiva la capa de tràfic del mapa\r\n * @param {string} event text que identifica l'event\r\n */\r\n toggleTraffic(event: string): void {\r\n\r\n if (event === 'toggle') {\r\n\r\n this.isInrixVisible = !this.isInrixVisible;\r\n }\r\n else if (event.startsWith('Trànsit en previsió')) {\r\n this.trafficMode = 'Trànsit en previsió';\r\n var time = event.split('|')[1];\r\n this.trafficTime = time;\r\n }\r\n else if (event.startsWith('Trànsit en directe')) {\r\n this.trafficMode = 'Trànsit en directe';\r\n this.trafficTime = \"\";\r\n\r\n } else {\r\n this.trafficTime = event;\r\n }\r\n\r\n this.changeInrixTraffic();\r\n\r\n }\r\n\r\n /**\r\n * Verifica si la capa que es vol carregar és una de les que necessita un zoom mínim per mostrar-se\r\n * @param {string} layer nom de la capa\r\n * @returns {boolean} Retorna si s'ha de fer zoom o no per veure la capa que s'acaba d'activar\r\n */\r\n needsZoom(layer: string): boolean {\r\n return this.zoomLayers.includes(layer) && this.map.getZoom() < 10;\r\n }\r\n\r\n /**\r\n * Si el mapa no té el zoom mínim, elimina les capes que necessiten aquest zoom mínim\r\n */\r\n checkZoomLayers(): void {\r\n if (this.map.getZoom() < 10) {\r\n this.zoomLayers.forEach(layer => {\r\n if (this.loadedLayers.has(layer)) {\r\n this.removeLayer(layer);\r\n this.checkboxesService.deleteCheckbox(layer);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Carrega o esborra les capes del mapa segons si estan o no activades\r\n * @param {string[]} activeLayers llista amb capes activades per l'usuari actualment\r\n */\r\n updateActiveLayers(activeLayers: string[]): void {\r\n //Esborrem del mapa les layers que han desactivat\r\n this.activeLayers.forEach(layer => {\r\n if (!activeLayers.includes(layer)) {\r\n this.toggleLayer(layer);\r\n var index = this.activeLayers.indexOf(layer);\r\n this.activeLayers.splice(index, 1);\r\n }\r\n })\r\n //Afegim al mapa les layers que s'han activat\r\n activeLayers.forEach(layer => {\r\n if (!this.activeLayers.includes(layer)) {\r\n if (this.toggleLayer(layer)) this.activeLayers.push(layer);\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Carrega o esborra els marcadors de la capa \"layer\". Retorna cert si s'ha afegit o tret alguna capa. Fals altrament\r\n * @param {string} layer nom de la capa\r\n */\r\n toggleLayer(layer: string): boolean {\r\n var ret = true;\r\n if (this.loadedLayers.has(layer)) {\r\n this.removeLayer(layer);\r\n } else {\r\n if (this.needsZoom(layer) && !this.activeLayers.includes(layer)) {\r\n this.openAcceptZoomDialog(layer);\r\n }\r\n else if (!this.needsZoom(layer)) {\r\n this.addLayer(layer);\r\n ret = true;\r\n }\r\n }\r\n this.infowindow.close();\r\n return ret;\r\n }\r\n\r\n /**\r\n * Afegeix una capa de marcadors al mapa carregant un geojson per HTTP GET.\r\n * Es crea una nova entrada al diccionari \"loadedLayers\" d'aquest objecte amb key= i value=\r\n * @param {string} layer nom de la capa que volem afegir\r\n */\r\n addLayer(layer: string) {\r\n var geojson;\r\n if (!this.marginBounds) this.marginBounds = new google.maps.LatLngBounds();\r\n else this.marginBounds = this.extendBounds(0.8);\r\n this.loadedLayers.set(layer, new Map());\r\n if (layer === 'PARKING') this.addLayer('PARKANDRIDE');\r\n this.dadesService\r\n .getLayer(layer, this.formatBounds(this.marginBounds))\r\n .subscribe(data => {\r\n geojson = data;\r\n geojson.features.forEach(feature => {\r\n this.addMarker(feature, layer);\r\n feature.properties.layer = layer;\r\n this.alertesFeatures.push(feature);\r\n });\r\n this.loadedLayers.get(layer).forEach((value) => {\r\n this.markerCluster.addMarker(value);\r\n\r\n })\r\n this.updateVisibleMarkers();\r\n });\r\n }\r\n\r\n /**\r\n * Treu del mapa els marcadors corresponents a una capa. També s'esborra l'entrada al diccionari\r\n * @param {string} layer nom de la capa que volem esborrar\r\n */\r\n removeLayer(layer: string) {\r\n this.loadedLayers.get(layer).forEach((value, key) => {\r\n value.setMap(null);\r\n var index = this.alertesFeatures.findIndex(alerta => alerta.properties.id === key);\r\n this.alertesFeatures.splice(index, 1);\r\n });\r\n this.markerCluster.removeMarkers(Array.from(this.loadedLayers.get(layer).values()));\r\n this.loadedLayers.delete(layer);\r\n if (layer === \"PARKING\") this.removeLayer('PARKANDRIDE');\r\n this.updateVisibleMarkers();\r\n }\r\n\r\n /**\r\n * Torna a carregar totes les capes actives al mapa\r\n */\r\n refreshActiveLayers() {\r\n this.activeLayers.forEach(layer => {\r\n this.removeLayer(layer);\r\n this.addLayer(layer);\r\n })\r\n }\r\n\r\n /**\r\n * Actualitza el contingut de l'array que conté els marcadors visibles dins els bounds actual de les capes d'alertes\r\n */\r\n updateVisibleMarkers(): void {\r\n let bounds = this.map.getBounds(); // Límits del mapa\r\n var markersIncidenciesVisibles = new Map();\r\n\r\n\r\n // Tots els marcadors visibles al mapa\r\n this.loadedLayers.forEach((layerValue, layerKey) => {\r\n if (this.alertes.includes(layerKey)) {\r\n layerValue.forEach((markerValue, markerKey) => {\r\n if (bounds.contains(markerValue.getPosition())) markersIncidenciesVisibles.set(markerKey, markerValue);\r\n })\r\n }\r\n });\r\n\r\n //Esborrem de alertesVisibles aquelles que ja no són visibles\r\n this.alertesVisibles.forEach((alertaValue, alertaKey) => {\r\n if (!markersIncidenciesVisibles.has(alertaKey)) this.alertesVisibles.delete(alertaKey);\r\n });\r\n\r\n //Afegim a alertesVisibles els marcadors visibles que abans no hi eren\r\n markersIncidenciesVisibles.forEach((markerValue, markerKey) => {\r\n this.alertesVisibles.set(markerKey, markerValue);\r\n })\r\n\r\n\r\n this.alertesVisiblesFeatures = this.alertesFeatures.filter(alerta => this.alertesVisibles.has(alerta.properties.id));\r\n }\r\n\r\n\r\n /**\r\n * Emet un event per l'updateSubject que pot ser escoltat pels components fills\r\n */\r\n emitRefreshToChild() {\r\n this.updateSubject.next()\r\n }\r\n\r\n /**\r\n * Actualitza els marcadors de la capa amb identificador `layer` que necessiten un zoom mínim per mostrar-se\r\n * @param {string} layer nom de la capa que es vol actualitzar\r\n */\r\n updateZoomLayer(layer: string) {\r\n if (this.loadedLayers.has(layer)) {\r\n var geojson;\r\n this.dadesService\r\n .getLayer(layer, this.formatBounds(this.marginBounds))\r\n .subscribe(data => {\r\n geojson = data;\r\n geojson.features.forEach(feature => {\r\n var marker;\r\n if (!this.loadedLayers.get(layer).has(feature.properties.id)) {\r\n marker = this.addMarker(feature, layer);\r\n this.markerCluster.addMarker(marker);\r\n }\r\n })\r\n })\r\n\r\n }\r\n }\r\n\r\n /**\r\n * Afegeix un marcador al mapa tenint en compte les propiertats del feature i la capa a la qual pertany\r\n * @param {json} feature conté la informació i la localització del nou marcador a afegir\r\n * @param {json} layer indica la capa a la qual pertany aquest marcador\r\n */\r\n addMarker(feature, layer) {\r\n let marker = new google.maps.Marker({\r\n position: {\r\n lat: feature.geometry.coordinates[1],\r\n lng: feature.geometry.coordinates[0]\r\n },\r\n icon: {\r\n url: this.getIconUrl(feature, layer),\r\n scaledSize: this.getIconSize(feature, layer)\r\n },\r\n map: this.map\r\n });\r\n marker.addListener(\"click\", () => {\r\n this.infowindow.setContent(this.loadInfoWindow(feature, layer));\r\n this.infowindow.open(this.map, marker);\r\n });\r\n this.loadedLayers.get(layer).set(feature.properties.id, marker);\r\n return marker;\r\n }\r\n\r\n /**\r\n * Donat una feature que pertany a un layer, retorna la url de la imatge que correspon a la icona d'aquest marcador\r\n * @param {json} feature conté la informació i la localització del nou marcador a afegir\r\n * @param {json} layer indica la capa a la qual pertany aquest marcador\r\n */\r\n getIconUrl(feature, layer) {\r\n var url: string;\r\n if (layer === \"METEO\") {\r\n var nomCausa = this.meteoIds.get(feature.properties.causeId);\r\n url = 'assets/img/' + nomCausa;\r\n if (feature.properties.levelOfService === '5') url = url + 'Negro';\r\n }\r\n else if (layer === \"TRAMS_PERILL\") {\r\n url = 'assets/img/eurorap' + feature.properties.levelOfService;\r\n }\r\n else url = 'assets/img/' + layer + '_MARKER';\r\n\r\n return url + '.svg';\r\n }\r\n\r\n /**\r\n * Retorna la mida de la icona del marcador depenent del tipus d'aquest\r\n * @param {json} feature conté la informació i la localització del nou marcador a afegir\r\n * @param {json} layer indica la capa a la qual pertany aquest marcador\r\n */\r\n getIconSize(feature, layer) {\r\n var size = new google.maps.Size(53.29, 61);\r\n if (layer === \"METEO\" && feature.properties.levelOfService === '5') size = new google.maps.Size(58.62, 67.1);\r\n return size;\r\n }\r\n\r\n /**\r\n * Genera i retorna el contingut d'un component que conté la informació a mostrar a la infowindow\r\n * @param {string} feature Conté les dades del marcador al qual li volem afegir la finestra d'informació\r\n * @param {string} layer Identificador de la capa a la qual pertany el feature \r\n * @returns {HTMLDivElement} HTML amb informació a mostrar a la finestra\r\n */\r\n loadInfoWindow(feature, layer): HTMLDivElement {\r\n if (this.compRef) this.compRef.destroy();\r\n var compFactory;\r\n if (this.alertes.includes(layer)) compFactory = this.resolver.resolveComponentFactory(IncidenciaComponent);\r\n else if (layer === \"CAMERA\") compFactory = this.resolver.resolveComponentFactory(CameraComponent);\r\n else if (layer === \"RADAR\") compFactory = this.resolver.resolveComponentFactory(RadarComponent);\r\n else if (layer === \"PARKING\") compFactory = this.resolver.resolveComponentFactory(ParkingComponent);\r\n else if (layer === \"PARKANDRIDE\") compFactory = this.resolver.resolveComponentFactory(ParkNRideComponent);\r\n else if (layer === \"GAS_STATION\") compFactory = this.resolver.resolveComponentFactory(GasStationComponent);\r\n else if (layer === \"TRAMS_PERILL\") compFactory = this.resolver.resolveComponentFactory(TramPerillComponent);\r\n this.compRef = compFactory.create(this.injector);\r\n this.compRef.instance.feature = feature;\r\n this.compRef.instance.layer = layer;\r\n this.appRef.attachView(this.compRef.hostView);\r\n let div = document.createElement('div');\r\n div.appendChild(this.compRef.location.nativeElement);\r\n return div;\r\n }\r\n\r\n /**\r\n * Centra el mapa en la ubicació buscada\r\n * @param {google.maps.places.PlaceGeometry} place ubicació que s'ha cercat per l'usuari \r\n */\r\n searchPlace(place: google.maps.places.PlaceGeometry) {\r\n this.map.fitBounds(place.viewport);\r\n }\r\n\r\n\r\n /**\r\n * Obre un dialog per preguntar a l'usuari si accepta fer zoom per carregar la capa layer. Retorna cert si s'accepta, fals altrament\r\n * @param {string} layer capa que es vol carregar que necessita un zoom mínim\r\n */\r\n openAcceptZoomDialog(layer: string) {\r\n var ret = false;\r\n const dialogConfig = new MatDialogConfig();\r\n dialogConfig.autoFocus = false;\r\n\r\n dialogConfig.data = {\r\n acceptZoom: false\r\n };\r\n\r\n const dialogRef = this.dialog.open(ZoomDialogComponent, dialogConfig);\r\n\r\n dialogRef.afterClosed().subscribe(data => {\r\n if (data) {\r\n //Zoom acceptat\r\n ret = true;\r\n this.map.setZoom(10);\r\n this.addLayer(layer);\r\n return ret = true;\r\n }\r\n else {\r\n ret = false\r\n this.checkboxesService.deleteCheckbox(layer);\r\n return ret;\r\n }\r\n });\r\n\r\n }\r\n\r\n\r\n\r\n /***********************\r\n * *\r\n * FUNCIONS INRIX *\r\n * * \r\n ***********************/\r\n\r\n /**\r\n * Inicialitza la capa de tràfic cridant l'API de INRIX\r\n */\r\n initInrixTraffic() {\r\n this.inrixService.getInrixService();\r\n }\r\n\r\n /**\r\n * Canvia la capa de trànsit del mapa cridant a l'API de INRIX\r\n */\r\n changeInrixTraffic() {\r\n if (this.map.overlayMapTypes.getLength() > 0) {\r\n this.map.overlayMapTypes.removeAt(0);\r\n }\r\n if (this.isInrixVisible) {\r\n this.inrixService.getInrixService();\r\n }\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n onEventDirections(events) {\r\n }\r\n\r\n\r\n /**\r\n * Llegeix els paràmetres de la URL i carrega el mapa segons la informació d'aquests paràmetres\r\n */\r\n readQueryParams(): void {\r\n\r\n if (this.route.snapshot.queryParamMap.has('lat')\r\n && this.route.snapshot.queryParamMap.has('lng')\r\n && this.route.snapshot.queryParamMap.has('zoom')\r\n && this.route.snapshot.queryParamMap.has('layers')) {\r\n var lat = this.route.snapshot.queryParamMap.get('lat');\r\n var lng = this.route.snapshot.queryParamMap.get('lng');\r\n var latLng = new google.maps.LatLng(parseFloat(lat), parseFloat(lng));\r\n this.map.setCenter(latLng);\r\n\r\n var zoom = this.route.snapshot.queryParamMap.get('zoom');\r\n this.map.setZoom(parseInt(zoom));\r\n\r\n var layers = this.route.snapshot.queryParamMap.getAll('layers');\r\n this.checkboxesService.clearCheckboxes();\r\n layers.forEach(layer => {\r\n this.checkboxesService.addCheckbox(layer);\r\n })\r\n }\r\n\r\n\r\n }\r\n\r\n /**\r\n * Inicialitza el component, inicialitzant el mapa, el MarkerClusterer, la capa de tràfic...\r\n * Afegeix event listeners i se subscriu a varis serveis\r\n */\r\n ngOnInit() {\r\n var mapElement = document.getElementById(\"map\"); //Element HTML que contindrà el mapa\r\n this.map = new google.maps.Map(mapElement, this.mapProperties);\r\n this.map.mapTypes.set('racc', this.raccMapType);\r\n this.map.setMapTypeId('racc');\r\n this.directionsService.setMap(this.map);\r\n this.directionsService.deleteDirections();\r\n\r\n //Inicialització del MarkerCluster\r\n this.markerCluster = new MarkerClusterer(this.map, [], {\r\n imagePath: \"assets/img/m\",\r\n maxZoom: 18,\r\n gridSize: 80,\r\n zoomOnClick: true,\r\n ignoreHidden: true,\r\n\r\n });\r\n\r\n\r\n //Inicialització capa tràfic\r\n this.initInrixTraffic();\r\n\r\n /**\r\n * Events del mapa\r\n */\r\n this.map.addListener(\"zoom_changed\", () => {\r\n this.checkZoomLayers();\r\n });\r\n\r\n this.map.addListener(\"click\", () => {\r\n this.infowindow.close();\r\n });\r\n\r\n this.map.addListener(\"idle\", () => {\r\n if (this.map.getZoom() >= 10 && this.checkBoundsRefresh()) {\r\n this.marginBounds = this.extendBounds(0.8);\r\n this.zoomLayers.forEach(layer => this.updateZoomLayer(layer));\r\n }\r\n this.updateVisibleMarkers();\r\n\r\n });\r\n\r\n //Afegim un listenerOnce per detectar quan el mapa s'ha carregat per complet la primera vegada\r\n google.maps.event.addListenerOnce(this.map, 'idle', event => {\r\n this.readQueryParams();\r\n this.checkboxesService.getCheckboxes().subscribe(data => {\r\n\r\n this.updateActiveLayers(data);\r\n })\r\n });\r\n\r\n this.updateSubscription = interval(90000).subscribe(() => {\r\n this.refreshActiveLayers();\r\n if (this.map.overlayMapTypes.getLength() > 0) this.changeInrixTraffic();\r\n this.emitRefreshToChild();\r\n });\r\n\r\n\r\n this.inrixService.getTokenObservable().subscribe((tokenOBJ) => {\r\n\r\n this.trafficLayer = new google.maps.ImageMapType({\r\n getTileUrl: (tile, zoom) => {\r\n return this.getTileURLInrix(tile, zoom);\r\n },\r\n tileSize: new google.maps.Size(256, 256),\r\n minZoom: 0,\r\n maxZoom: 20,\r\n name: 'Inrix'\r\n });\r\n\r\n this.trafficLayer.radius = 1738000;\r\n this.map.mapTypes.set('Inrix', this.trafficLayer);\r\n if (this.isInrixVisible) {\r\n this.map.overlayMapTypes.insertAt(0, this.trafficLayer);\r\n }\r\n\r\n });\r\n\r\n\r\n }\r\n\r\n\r\n getTileURLInrix(tile, zoom) {\r\n var mercatorRange = 256;\r\n var pixelOrigin = new google.maps.Point(mercatorRange / 2, mercatorRange / 2);\r\n var pixelsPerLonDegree = mercatorRange / 360;\r\n var pixelsPerLonRadian = mercatorRange / (2 * Math.PI);\r\n var projection = new MercatorProjection(pixelOrigin, pixelsPerLonDegree, pixelsPerLonRadian);\r\n var center = \"\" + projection.topLeftCenter(zoom).lat() + \"|\" + projection.topLeftCenter(zoom).lng();\r\n let date = this.trafficMode === 'Trànsit en previsió' ? this.trafficTime : \"\";\r\n\r\n var url = this.inrixService.getTileUrl(tile, zoom, center, this.trafficMode, date);\r\n \r\n return url;\r\n }\r\n}\r\n","
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \"\"\r\n \r\n
\r\n","import { Component, OnInit, Input, Inject, LOCALE_ID } from '@angular/core';\r\n\r\n/**\r\n * Component per mostrar el marcador d'una càmera\r\n */\r\n@Component({\r\n selector: 'app-camera',\r\n templateUrl: './camera.component.html',\r\n styleUrls: ['./camera.component.css']\r\n})\r\nexport class CameraComponent implements OnInit {\r\n\r\n /**\r\n * Feature que conté les propietats per crear el marcador\r\n */\r\n @Input() feature;\r\n\r\n /**\r\n * Capa a la qual pertany el marcador\r\n */\r\n @Input() layer;\r\n\r\n /**\r\n * Conté les propietats del feature\r\n */\r\n properties; \r\n\r\n /**\r\n * Url de la icona a mostrar\r\n */\r\n iconUrl: string;\r\n\r\n /**\r\n * Localització de la càmera\r\n */\r\n location: string;\r\n \r\n /**\r\n * URL de la imatge de la càmera\r\n */\r\n image: string;\r\n\r\n /**\r\n * Font d'informació \r\n */\r\n source: string;\r\n\r\n /**\r\n * Text per compartir marcador\r\n */\r\n shareText: string; \r\n\r\n /**\r\n * Constructor del component\r\n * @param {string} localeId indica l'idioma actual de la pàgina \r\n */\r\n constructor(@Inject(LOCALE_ID) protected localeId: string) { }\r\n\r\n /**\r\n * Retorna el text per compartir el marcador\r\n * @returns {string} text per compartir el marcador\r\n */\r\n generateShareText(): string{\r\n var titol;\r\n if(this.localeId === 'es') titol = 'Cámara%20de%20tráfico'\r\n else titol = 'Càmera%20de%20trànsit';\r\n\r\n return titol + ':%20' + this.location + \"%20\";\r\n }\r\n\r\n /**\r\n * Retorna la url que mostra el mapa centrat en el marcador\r\n * @returns {string} url que mostra el mapa centrat en el marcador\r\n */\r\n generateShareUrl(): string{\r\n var baseUrl = window.location.protocol + \"//\" + window.location.hostname + \":\" + window.location.port + '/infotransit';\r\n var params = \"/%3Flat%3D\" + this.feature.geometry.coordinates[1]\r\n + \"%26lng%3D\" + this.feature.geometry.coordinates[0]\r\n + \"%26zoom%3D\" + \"15\"\r\n + \"%26layers%3D\" + this.layer;\r\n return baseUrl + params;\r\n }\r\n\r\n /**\r\n * inicialitza les propietats del component\r\n */\r\n ngOnInit() {\r\n\r\n this.properties = this.feature.properties;\r\n this.iconUrl = 'assets/img/' + this.layer + '_MARKER.svg';\r\n\r\n this.location = this.properties.location;\r\n this.image = this.properties.image;\r\n this.source = this.properties.source;\r\n\r\n }\r\n\r\n}\r\n","
\r\n \"Cámara\"\r\n Cámara de tráfico\r\n
\r\n\r\n
\r\n \r\n \"Fotografía\r\n \r\n
\r\n Localización: {{ location }}\r\n
\r\n \r\n
\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n Fuente: {{ source }}\r\n
\r\n\r\n
\r\n \r\n \"\"\r\n \r\n \r\n \"\"\r\n \r\n
\r\n
\r\n\r\n","import { Component, OnInit, Input } from '@angular/core';\r\n\r\n/**\r\n * Component per mostrar el marcador d'una benzinera\r\n */\r\n@Component({\r\n selector: 'app-gas-station',\r\n templateUrl: './gas-station.component.html',\r\n styleUrls: ['./gas-station.component.css']\r\n})\r\nexport class GasStationComponent implements OnInit {\r\n\r\n /**\r\n * Feature que conté les propietats per crear el marcador\r\n */\r\n @Input() feature;\r\n\r\n /**\r\n * Capa a la qual pertany el marcador\r\n */\r\n @Input() layer; \r\n\r\n /**\r\n * Conté les propietats del feature\r\n */\r\n properties; \r\n\r\n /**\r\n * URL del logo de la gasolinera\r\n */\r\n iconUrl: string; \r\n\r\n /**\r\n * Nom de la companyia \r\n */\r\n company: string;\r\n\r\n /**\r\n * Direcció de la gasolinera\r\n */\r\n address: string;\r\n\r\n /**\r\n * Informació sobre l'horari de la gasolinera\r\n */\r\n timetable: string;\r\n\r\n /**\r\n * Preus dels carburants en aquesta gasolinera\r\n */\r\n prices;\r\n\r\n /**\r\n * Data a la qual fan referència els preus indicats\r\n */\r\n pricesDate: string;\r\n \r\n /**\r\n * Font d'informació\r\n */\r\n source: string;\r\n\r\n /**\r\n * @ignore\r\n */\r\n companiesLogo: string[] = [\"BP\",\"CAMPSA\",\"CEPSA\",\"GALP\",\"PETRONOR\",\"REPSOL\",\"SHELL\"]\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor() { }\r\n\r\n /**\r\n * inicialitza les propietats del component\r\n */\r\n ngOnInit() {\r\n\r\n this.properties = this.feature.properties;\r\n this.company = this.properties.company;\r\n this.iconUrl = this.getUrl();\r\n this.address = this.properties.address;\r\n this.timetable = this.properties.timetable;\r\n this.prices = this.properties.prices.price;\r\n this.prices = this.prices.filter(price => price.value !== '');\r\n this.pricesDate = this.properties.pricesDate;\r\n this.source = this.properties.source;\r\n }\r\n\r\n /**\r\n * Retorna la URL de la icona del marcador depenent de a quina capa pertany\r\n * @returns {string} URL de la icona del marcador depenent de a quina capa pertany\r\n */\r\n getUrl(){\r\n var url: string;\r\n var company = this.company.split(' ')[0];\r\n if(this.companiesLogo.includes(company)){\r\n url = 'assets/img/logo_' + company + '.gif';\r\n }\r\n else url = 'assets/img/' + this.layer + '_MARKER.svg';\r\n\r\n return url ;\r\n\r\n }\r\n\r\n}\r\n","
\r\n \"Gasolinera\"\r\n Gasolinera {{ company }}\r\n
\r\n\r\n\r\n
\r\n
\r\n Dirección: {{address}}\r\n
\r\n \r\n
\r\n Horario: {{timetable}}\r\n
\r\n \r\n
\r\n Precio de los carburantes:\r\n
    \r\n
  • \r\n {{carburante.title}}: {{carburante.value}} €/l\r\n
  • \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n Los precios indicados hacen referencia al {{pricesDate}}\r\n
\r\n Fuente: {{source}}\r\n
","import { Component, OnInit, Input, ComponentFactoryResolver, Injector, ComponentRef, ApplicationRef, Output, EventEmitter } from '@angular/core';\r\nimport { IncidenciaComponent } from '../incidencia/incidencia.component';\r\n\r\n/**\r\n * Component per mostrar el marcador d'una incidència a la llista d'incidències de l'aplicació\r\n */\r\n@Component({\r\n selector: 'app-incidencia-llista',\r\n templateUrl: './incidencia-llista.component.html',\r\n styleUrls: ['./incidencia-llista.component.css']\r\n})\r\nexport class IncidenciaLlistaComponent implements OnInit {\r\n\r\n /**\r\n * Feature que conté les propietats per crear el marcador\r\n */\r\n @Input() feature;\r\n\r\n /**\r\n * Capa a la qual pertany el marcador\r\n */\r\n @Input() layer;\r\n\r\n /**\r\n * Instància de mapa de l'aplicació\r\n */\r\n @Input() map: google.maps.Map; \r\n\r\n /**\r\n * Finestra d'informació del mapa \r\n */\r\n @Input() infowindow: google.maps.InfoWindow; \r\n\r\n /**\r\n * Emet un valor si es clica a un marcador per centrar el mapa en aquest\r\n */\r\n @Output() clickEmitter = new EventEmitter();\r\n\r\n /**\r\n * Conté les propietats del feature\r\n */\r\n properties; \r\n\r\n /**\r\n * Url de la icona a mostrar\r\n */\r\n iconUrl: string; \r\n\r\n /**\r\n * Carretera on s'ha produt la incidència\r\n */\r\n road: string; \r\n\r\n /**\r\n * Punt kilomètric inicial de la incidència \r\n */\r\n start_kp: string;\r\n\r\n /**\r\n * Punt kilomètric final de la incidència \r\n */\r\n end_kp: string; \r\n\r\n /**\r\n * Ciutat on s'ha produit la incidència\r\n */\r\n city: string;\r\n\r\n /**\r\n * Causa per la qual s'ha produit la incidència\r\n */\r\n cause: string;\r\n\r\n /**\r\n * Comentaris sobre la incidència\r\n */\r\n comments: string;\r\n \r\n /**\r\n * Direcció de la carretera en la qual s'ha produit la incidència\r\n */\r\n direction: string;\r\n\r\n /**\r\n * Font d'informació \r\n */\r\n source: string;\r\n\r\n /**\r\n * Nivell de perill de la incidència\r\n */\r\n levelOfService: string;\r\n\r\n /**\r\n * Identificador de la causa d'incidència meteorològica\r\n */\r\n meteoId: string;\r\n\r\n /**\r\n * Indica per cada identificador d'incidència meteorològica el seu nom en castellà\r\n */\r\n meteoIds: Map = new Map([[\"20\",\"Niebla\"],[\"28\",\"Cadenas\"],[\"21\",\"Hielo\"],[\"42\",\"Inundaciones\"],[\"26\",\"Lluvia\"],[\"27\",\"Nieve\"],[\"33\",\"Viento\"]])\r\n\r\n /**\r\n * Constructor del component\r\n * @param {ComponentFactoryResolver} resolver Carrega components dinàmicament per injectar-los a la finestra d'informació de l'aplicació \r\n * @param {Injector} injector Injecta informació als components carregats dinàmicament\r\n * @param {ApplicationRef} appRef Manté una referència a elements de l'aplicació\r\n */\r\n constructor(private resolver: ComponentFactoryResolver, private injector: Injector, private appRef: ApplicationRef) { }\r\n\r\n /**\r\n * @ignore\r\n */\r\n compRef: ComponentRef;\r\n\r\n \r\n\r\n /**\r\n * Retorna la URL de la icona del marcador depenent de a quina capa pertany\r\n * @returns {string} URL de la icona del marcador depenent de a quina capa pertany\r\n */\r\n getUrl(){\r\n var url: string;\r\n if(this.layer === \"METEO\"){\r\n var nomCausa = this.meteoIds.get(this.meteoId);\r\n url = 'assets/img/' + nomCausa + 'Lista';\r\n }\r\n else url = 'assets/img/' + this.layer;\r\n\r\n return url + '.svg';\r\n\r\n }\r\n\r\n\r\n /**\r\n * Obre la finestra d'informació de la incidència\r\n */\r\n showMarker(){\r\n var coordinates = new google.maps.MVCObject();\r\n coordinates.set(\"position\", new google.maps.LatLng(this.feature.geometry.coordinates[1],this.feature.geometry.coordinates[0]));\r\n coordinates.set(\"anchorPoint\", new google.maps.Point(0, -61));\r\n this.infowindow.setContent(this.loadInfoWindow(this.feature, this.layer));\r\n this.infowindow.open(this.map, coordinates);\r\n this.clickEmitter.emit();\r\n this.showWindow();\r\n }\r\n\r\n /**\r\n * Centra el mapa en la incidència seleccionada i mostra la seva finestra d'informació\r\n */\r\n showWindow(){\r\n var coordinates = new google.maps.MVCObject();\r\n coordinates.set(\"position\", new google.maps.LatLng(this.feature.geometry.coordinates[1],this.feature.geometry.coordinates[0]));\r\n this.map.panTo(coordinates.get(\"position\"));\r\n this.map.setZoom(15);\r\n }\r\n\r\n /**\r\n * Genera i retorna el contingut d'un component que conté la informació a mostrar a la infowindow\r\n * @param {json} feature Conté les dades del marcador al qual li volem afegir la finestra d'informació\r\n * @param {json} layer Identificador de la capa a la qual pertany el feature \r\n * @returns {HTMLDivElement} HTML amb informació a mostrar a la finestra\r\n */\r\n loadInfoWindow(feature, layer): HTMLDivElement{\r\n if(this.compRef) this.compRef.destroy();\r\n var compFactory;\r\n compFactory = this.resolver.resolveComponentFactory(IncidenciaComponent);\r\n this.compRef = compFactory.create(this.injector);\r\n this.compRef.instance.feature = feature;\r\n this.compRef.instance.layer = layer;\r\n this.appRef.attachView(this.compRef.hostView);\r\n let div = document.createElement('div');\r\n div.appendChild(this.compRef.location.nativeElement);\r\n return div;\r\n }\r\n\r\n /**\r\n * Inicialitza les propietats de la incidència\r\n */\r\n ngOnInit() {\r\n this.properties = this.feature.properties;\r\n this.road = this.properties.road;\r\n this.start_kp = this.properties.start_kp;\r\n this.end_kp = this.properties.end_kp;\r\n this.city = this.properties.city;\r\n this.cause = this.properties.cause[0] +\r\n this.properties.cause.substring(1).toLowerCase();\r\n this.meteoId = this.properties.causeId;\r\n this.levelOfService = this.properties.levelOfService;\r\n this.iconUrl = this.getUrl();\r\n this.source = this.properties.source;\r\n this.comments = this.properties.comments;\r\n this.direction = this.properties.direction;\r\n }\r\n\r\n}\r\n","
\r\n \"Icona\r\n\r\n
\r\n {{road}} (Km {{start_kp}} - {{end_kp}})\r\n\r\n
\r\n
\r\n Ciudad: {{ city }}\r\n
\r\n \r\n
\r\n Causa: {{ cause }}\r\n
\r\n \r\n
\r\n Comentarios: {{ comments }}\r\n
\r\n \r\n
\r\n Dirección: {{ direction }}\r\n
\r\n
\r\n\r\n
\r\n Fuente: {{ source }}\r\n
\r\n
\r\n \r\n
\r\n \r\n ","import { Component, OnInit, Input, Inject, LOCALE_ID } from '@angular/core';\r\n\r\n/**\r\n * Component per mostrar el marcador d'una incidència\r\n */\r\n@Component({\r\n selector: 'app-incidencia',\r\n templateUrl: './incidencia.component.html',\r\n styleUrls: ['./incidencia.component.css']\r\n})\r\nexport class IncidenciaComponent implements OnInit {\r\n\r\n /**\r\n * Feature que conté les propietats per crear el marcador\r\n */\r\n @Input() feature;\r\n\r\n /**\r\n * Capa a la qual pertany el marcador\r\n */\r\n @Input() layer;\r\n\r\n /**\r\n * Conté les propietats del feature\r\n */\r\n properties;\r\n \r\n /**\r\n * Url de la icona a mostrar\r\n */\r\n iconUrl: string;\r\n \r\n /**\r\n * Carretera on s'ha produt la incidència\r\n */\r\n road: string;\r\n\r\n /**\r\n * Punt kilomètric inicial de la incidència \r\n */\r\n start_kp: string; \r\n\r\n /**\r\n * Punt kilomètric final de la incidència \r\n */\r\n end_kp: string;\r\n\r\n /**\r\n * Ciutat on s'ha produit la incidència\r\n */\r\n city: string; \r\n\r\n /**\r\n * Causa per la qual s'ha produit la incidència\r\n */\r\n cause: string; \r\n\r\n /**\r\n * Comentaris sobre la incidència\r\n */\r\n comments: string;\r\n\r\n /**\r\n * Direcció de la carretera en la qual s'ha produit la incidència\r\n */\r\n direction: string;\r\n\r\n /**\r\n * Font d'informació \r\n */\r\n source: string;\r\n\r\n /**\r\n * Nivell de perill de la incidència\r\n */\r\n levelOfService: string;\r\n \r\n /**\r\n * Identificador de la causa d'incidència meteorològica\r\n */\r\n meteoId: string;\r\n\r\n /**\r\n * Indica per cada identificador d'incidència meteorològica el seu nom en castellà\r\n */\r\n meteoIds: Map = new Map([[\"20\",\"Niebla\"],[\"28\",\"Cadenas\"],[\"21\",\"Hielo\"],[\"42\",\"Inundaciones\"],[\"26\",\"Lluvia\"],[\"27\",\"Nieve\"],[\"33\",\"Viento\"]])\r\n\r\n \r\n /**\r\n * Constructor del component\r\n * @param {string} localeId indica l'idioma actual de la pàgina \r\n */\r\n constructor(@Inject(LOCALE_ID) protected localeId: string) { }\r\n\r\n /**\r\n * Retorna el text per compartir el marcador\r\n * @returns {string} text per compartir el marcador\r\n */\r\n generateShareText(): string{\r\n var titol;\r\n if(this.localeId === 'es'){\r\n titol = this.cause + \"%20en%20\";\r\n } \r\n else titol = this.cause + \"%20a%20\";\r\n return titol + this.road + \"%20Km%20\" + this.start_kp + \"%20-%20\" + this.end_kp + \"%20\" + this.city + \".%20#infotransit\";\r\n }\r\n\r\n /**\r\n * Retorna la url que mostra el mapa centrat en el marcador\r\n * @returns {string} url que mostra el mapa centrat en el marcador\r\n */\r\n generateShareUrl(): string{\r\n var baseUrl = window.location.protocol + \"//\" + window.location.hostname + \":\" + window.location.port + '/infotransit';\r\n var params = \"/%3Flat%3D\" + this.feature.geometry.coordinates[1]\r\n + \"%26lng%3D\" + this.feature.geometry.coordinates[0]\r\n + \"%26zoom%3D\" + \"15\"\r\n + \"%26layers%3D\" + this.layer;\r\n return baseUrl + params;\r\n }\r\n\r\n /**\r\n * inicialitza les propietats del component\r\n */\r\n ngOnInit() {\r\n this.properties = this.feature.properties;\r\n this.road = this.properties.road;\r\n this.start_kp = this.properties.start_kp;\r\n this.end_kp = this.properties.end_kp;\r\n this.city = this.properties.city;\r\n this.meteoId = this.properties.causeId;\r\n this.cause = this.properties.cause[0] +\r\n this.properties.cause.substring(1).toLowerCase();\r\n this.levelOfService = this.properties.levelOfService;\r\n this.iconUrl = this.getUrl();\r\n this.source = this.properties.source;\r\n this.comments = this.properties.comments;\r\n this.direction = this.properties.direction;\r\n }\r\n\r\n /**\r\n * Retorna la URL de la icona del marcador depenent de a quina capa pertany\r\n * @returns {string} URL de la icona del marcador depenent de a quina capa pertany\r\n */\r\n getUrl(){\r\n var url: string;\r\n if(this.layer === \"METEO\"){\r\n var nomCausa = this.meteoIds.get(this.meteoId);\r\n url = 'assets/img/' + nomCausa;\r\n if(this.levelOfService === '5') url = url + 'Negro';\r\n }\r\n else url = 'assets/img/' + this.layer + '_MARKER';\r\n \r\n return url + '.svg';\r\n\r\n }\r\n\r\n}\r\n\r\n\r\n","
\r\n \"Incidencia\"\r\n {{road}} (Km {{start_kp}} - {{end_kp}})\r\n
\r\n\r\n
\r\n
\r\n Ciudad: {{ city }}\r\n
\r\n \r\n
\r\n Causa: {{ cause }}\r\n
\r\n \r\n
\r\n Comentarios: {{ comments }}\r\n
\r\n \r\n
\r\n Dirección: {{ direction }}\r\n
\r\n\r\n \r\n
\r\n\r\n
\r\n
\r\n Fuente: {{ source }}\r\n
\r\n \r\n
\r\n \r\n \"\"\r\n \r\n \r\n \"\"\r\n \r\n
\r\n \r\n
\r\n\r\n\r\n\r\n\r\n\r\n","import { Component, OnInit, Input } from '@angular/core';\r\n\r\n/**\r\n * Component per mostrar el marcador d'un parking del tipus Park & Ride\r\n */ \r\n@Component({\r\n selector: 'app-park-nride',\r\n templateUrl: './park-nride.component.html',\r\n styleUrls: ['./park-nride.component.css']\r\n})\r\nexport class ParkNRideComponent implements OnInit {\r\n\r\n /**\r\n * Feature que conté les propietats per crear el marcador\r\n */\r\n @Input() feature;\r\n\r\n /**\r\n * Capa a la qual pertany el marcador\r\n */\r\n @Input() layer;\r\n\r\n /**\r\n * Conté les propietats del feature\r\n */\r\n properties;\r\n\r\n /**\r\n * Url de la icona a mostrar\r\n */\r\n iconUrl: string;\r\n\r\n /**\r\n * Nom de la estació a la qual pertany el Park&Ride\r\n */\r\n station: string\r\n\r\n /**\r\n * Capacitat del pàrking\r\n */\r\n size: number; \r\n\r\n /**\r\n * Operador del pàrking\r\n */\r\n operador: string;\r\n\r\n /**\r\n * Ocupació del pàrking\r\n */\r\n occupied: number; \r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor() { }\r\n\r\n /**\r\n * Inicialitza les propietats del marcador\r\n */\r\n ngOnInit() {\r\n\r\n this.properties = this.feature.properties;\r\n this.iconUrl = this.iconUrl = 'assets/img/' + this.layer + '_MARKER.svg';\r\n this.station = this.properties.nomEst;\r\n this.size = this.properties.nrPlaces;\r\n this.operador = this.properties.operador;\r\n this.occupied = this.properties.plOcupades;\r\n\r\n }\r\n\r\n}\r\n","
\r\n \"Icona\r\n Park & Ride {{ station }}\r\n
\r\n\r\n
\r\n
0\">\r\n Capacidad: {{size}}\r\n
\r\n\r\n
0\">\r\n Ocupadas: {{occupied}}\r\n
\r\n
\r\n\r\n
\r\n Operador: {{operador}}\r\n
\r\n","import { Component, OnInit, Input } from '@angular/core';\r\n\r\n/**\r\n * Component per mostrar el marcador d'un parking\r\n */ \r\n@Component({\r\n selector: 'app-parking',\r\n templateUrl: './parking.component.html',\r\n styleUrls: ['./parking.component.css']\r\n})\r\nexport class ParkingComponent implements OnInit {\r\n\r\n /**\r\n * Feature que conté les propietats per crear el marcador\r\n */\r\n @Input() feature;\r\n\r\n /**\r\n * Capa a la qual pertany el marcador\r\n */\r\n @Input() layer;\r\n\r\n /**\r\n * Conté les propietats del feature\r\n */\r\n properties;\r\n\r\n /**\r\n * Url de la icona a mostrar\r\n */\r\n iconUrl: string;\r\n\r\n /**\r\n * Nom del pàrking\r\n */\r\n name: string; \r\n\r\n /**\r\n * Adreça del pàrking\r\n */\r\n address: string;\r\n\r\n /**\r\n * Horari del pàrking\r\n */\r\n timetable: string;\r\n\r\n /**\r\n * Tarifes del pàrking\r\n */\r\n price: string;\r\n\r\n /**\r\n * Número de telèfon del pàrking\r\n */\r\n phone: string;\r\n\r\n /**\r\n * Tipus de pàrking\r\n */\r\n type: string;\r\n\r\n /**\r\n * Capacitat del pàrking\r\n */\r\n size: number;\r\n\r\n /**\r\n * Operador del parking\r\n */\r\n operador: string;\r\n\r\n /**\r\n * URL del pàrking al portal Parkopedia\r\n */\r\n urlParkopedia: string; \r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor() { }\r\n\r\n /**\r\n * Inicialitza les propietats del component\r\n */\r\n ngOnInit() {\r\n\r\n this.properties = this.feature.properties;\r\n this.iconUrl = 'assets/img/' + this.layer + '_MARKER.svg';\r\n this.name = this.properties.nom;\r\n this.address = this.properties.adressa;\r\n if(this.properties.poblacio) this.properties.address = this.properties.address + \", \" + this.properties.poblacio;\r\n this.timetable = this.properties.horari;\r\n this.price = this.properties.tarifes;\r\n this.phone = this.properties.telefon;\r\n this.type = this.properties.tipus;\r\n this.size = this.properties.capacitat;\r\n this.operador = this.properties.operador;\r\n this.urlParkopedia = this.properties.url;\r\n }\r\n\r\n}\r\n","
\r\n \"Icona\r\n PARKING {{ name }}\r\n
\r\n\r\n
\r\n
\r\n Dirección: {{address}}\r\n
\r\n \r\n
\r\n Horario: {{timetable}}\r\n
\r\n \r\n
\r\n Tarifas: {{price}}\r\n
\r\n \r\n
\r\n Teléfono: {{phone}}\r\n
\r\n \r\n
\r\n Tipo: {{type}}\r\n
\r\n \r\n
0\">\r\n Capacidad: {{size}}\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n
\r\n Operador: {{operador}}\r\n \r\n
\r\n\r\n","import { Component, OnInit, Input } from '@angular/core';\r\n\r\n/**\r\n * Component per mostrar el marcador d'un radar\r\n */ \r\n@Component({\r\n selector: 'app-radar',\r\n templateUrl: './radar.component.html',\r\n styleUrls: ['./radar.component.css']\r\n})\r\nexport class RadarComponent implements OnInit {\r\n\r\n /**\r\n * Feature que conté les propietats per crear el marcador\r\n */\r\n @Input() feature;\r\n\r\n /**\r\n * Capa a la qual pertany el marcador\r\n */\r\n @Input() layer;\r\n\r\n /**\r\n * Conté les propietats del feature\r\n */\r\n properties;\r\n\r\n /**\r\n * Url de la icona a mostrar\r\n */\r\n iconUrl: string;\r\n\r\n /**\r\n * Descripció del tipus de radar que es tracta\r\n */\r\n description: string; \r\n\r\n /**\r\n * URL de API google maps per obtenir imatge de localització del radar\r\n */\r\n imageUrl: string;\r\n\r\n /**\r\n * Tipus de radar \r\n */\r\n type: string;\r\n\r\n /**\r\n * Velocitat màxima del radar\r\n */\r\n speed: string;\r\n\r\n /**\r\n * Direcció en la qual esà colocat el radar\r\n */\r\n direction: string;\r\n\r\n /**\r\n * Latitud de les coordenades del radar\r\n */\r\n latitude: string; \r\n\r\n /**\r\n * Longitud de les coordenades del radar\r\n */\r\n longitude: string;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor() { }\r\n\r\n /**\r\n * Inicialitza les propietats del component\r\n */\r\n ngOnInit() {\r\n\r\n\r\n this.properties = this.feature.properties;\r\n this.iconUrl = 'assets/img/' + this.layer + '_MARKER.svg';\r\n this.description = this.properties.description;\r\n this.latitude = this.feature.geometry.coordinates[1];\r\n this.longitude = this.feature.geometry.coordinates[0];\r\n this.imageUrl = \"https://maps.googleapis.com/maps/api/staticmap?center=\" +\r\n this.latitude + \",\" + this.longitude +\r\n \"&zoom=\" + \"16\" +\r\n \"&size=\" + \"225x135\" +\r\n \"&format=\" + \"png\" +\r\n \"&scale=\" + \"1\" + \r\n \"&maptype=\" + \"hybrid\" + \r\n \"&markers=\" + \"color:red|\" + this.latitude + \",\" + this.longitude +\r\n \"&key=\" + \"AIzaSyCA1dCbPTgK0I-8FCWpAk2Qs4U6TGcZbG0\";\r\n \r\n this.type = this.properties.description;\r\n this.speed = this.properties.speed;\r\n this.direction = this.properties.direction;\r\n\r\n }\r\n\r\n}\r\n","
\r\n \"Icona\r\n {{ description }}\r\n
\r\n\r\n\r\n\r\n
\r\n \r\n\r\n
\r\n Tipo: {{type}}\r\n
\r\n\r\n
\r\n Límite de velocidad: {{ speed }} km/h\r\n
\r\n\r\n
\r\n Dirección: {{direction}}\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n","import { Component, OnInit, Input, Inject, LOCALE_ID } from '@angular/core';\r\n\r\n/**\r\n * Component per mostrar el marcador d'un parking del tipus Trams de perill\r\n */ \r\n@Component({\r\n selector: 'app-tram-perill',\r\n templateUrl: './tram-perill.component.html',\r\n styleUrls: ['./tram-perill.component.css']\r\n})\r\nexport class TramPerillComponent implements OnInit {\r\n\r\n /**\r\n * Feature que conté les propietats per crear el marcador\r\n */\r\n @Input() feature;\r\n\r\n /**\r\n * Capa a la qual pertany el marcador\r\n */\r\n @Input() layer;\r\n\r\n /**\r\n * Textos indicant els invells de perill\r\n */\r\n TEXT_PERILL: string[] = [\"Muy bajo\",\"Bajo\",\"Medio\",\"Elevado\",\"Muy elevado\"];\r\n\r\n /**\r\n * Conté les propietats del feature\r\n */\r\n properties;\r\n\r\n /**\r\n * Url de la icona a mostrar\r\n */\r\n iconUrl: string;\r\n\r\n /**\r\n * Carretera on s'ha produt la incidència\r\n */\r\n road: string;\r\n\r\n /**\r\n * Punt kilomètric inicial de la incidència \r\n */\r\n start_kp: string;\r\n\r\n /**\r\n * Punt kilomètric final de la incidència \r\n */\r\n end_kp: string;\r\n\r\n /**\r\n * Font d'informació \r\n */\r\n source: string;\r\n\r\n /**\r\n * Nivell de perill de la incidència\r\n */\r\n levelOfService: string;\r\n\r\n /**\r\n * Descripció del nivell de perill\r\n */\r\n levelOfServiceText: string; \r\n\r\n /**\r\n * Constructor del component\r\n * @param {string} localeId indica l'idioma actual de la pàgina \r\n */\r\n constructor(@Inject(LOCALE_ID) protected localeId: string) { }\r\n\r\n /**\r\n * Retorna el text per compartir el marcador\r\n * @returns {string} text per compartir el marcador\r\n */\r\n generateShareText(): string{\r\n var titol;\r\n if(this.localeId === 'es') titol = \"Tramo%20con%20nivel%20de%20riesgo%20\" + this.levelOfServiceText + \"%20en%20\"\r\n else titol = titol = \"Tram%20amb%20nivell%20de%20risc%20\" + this.levelOfServiceText +\"a%20\";\r\n\r\n return titol + this.road + \"%20Km%20\" + this.start_kp + \"%20-%20\" + this.end_kp + \".%20#infotransit\" ;\r\n }\r\n\r\n /**\r\n * Retorna la url que mostra el mapa centrat en el marcador\r\n * @returns {string} url que mostra el mapa centrat en el marcador\r\n */\r\n generateShareUrl(): string{\r\n var baseUrl = window.location.protocol + \"//\" + window.location.hostname + \":\" + window.location.port + '/infotransit';\r\n var params = \"/%3Flat%3D\" + this.feature.geometry.coordinates[1]\r\n + \"%26lng%3D\" + this.feature.geometry.coordinates[0]\r\n + \"%26zoom%3D\" + \"15\"\r\n + \"%26layers%3D\" + this.layer;\r\n return baseUrl + params;\r\n }\r\n\r\n /**\r\n * inicialitza les propietats del component\r\n */\r\n ngOnInit() {\r\n\r\n this.properties = this.feature.properties;\r\n this.road = this.properties.road;\r\n this.start_kp = this.properties.start_kp;\r\n this.end_kp = this.properties.end_kp;\r\n this.levelOfService = this.properties.levelOfService;\r\n this.levelOfServiceText = this.TEXT_PERILL[parseInt(this.levelOfService)-1]\r\n this.iconUrl = this.getUrl();\r\n this.source = this.properties.source;\r\n\r\n }\r\n\r\n /**\r\n * Retorna la URL de la icona del marcador depenent de a quina capa pertany\r\n * @returns {string} URL de la icona del marcador depenent de a quina capa pertany\r\n */\r\n getUrl(){\r\n var url: string;\r\n url = 'assets/img/eurorap' + this.levelOfService + '.svg';\r\n return url;\r\n\r\n }\r\n\r\n}\r\n","
\r\n \"Icona\r\n Tramo con nivel de riesgo\r\n
\r\n\r\n
\r\n\r\n
\r\n {{road}} entre el Km {{start_kp}} y el Km {{end_kp}}\r\n
\r\n
\r\n Nivel de riesgo: {{ levelOfServiceText }}\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n Fuente: RACC\r\n
\r\n \r\n
\r\n \r\n \"\"\r\n \r\n \r\n \"\"\r\n \r\n
\r\n \r\n
\r\n\r\n\r\n\r\n\r\n\r\n","import { Component, OnInit, ChangeDetectorRef, SimpleChanges } from '@angular/core';\r\nimport { DirectionsService } from 'src/app/services/directions.service';\r\nimport { url } from 'inspector';\r\nimport { LatLng } from '@google/maps';\r\n\r\n\r\n\r\n/**\r\n * Pàgina per configurar la impressió d'una ruta\r\n */\r\n@Component({\r\n selector: 'app-print-directions',\r\n templateUrl: './print-directions.component.html',\r\n styleUrls: ['./print-directions.component.css']\r\n})\r\nexport class PrintDirectionsComponent implements OnInit {\r\n\r\n /**\r\n * Constructor del component\r\n * @param {DirectionsService} directionsService Servei de càlcul de rutes de l'aplicació\r\n * @param {ChangeDetectorRef} cdRef Detecta els canvis en la plantilla del component\r\n */\r\n constructor(private directionsService: DirectionsService, public cdRef:ChangeDetectorRef) { }\r\n\r\n /**\r\n * Mapa on es dibuixa la ruta\r\n */\r\n map: google.maps.Map; \r\n\r\n /**\r\n * Ruta per imprimir\r\n */\r\n route: google.maps.DirectionsRoute = this.directionsService.getActiveRoute();\r\n\r\n /**\r\n * URL de l'API de Google Maps Static Map Service\r\n */\r\n staticMapBaseUrl: string = 'https://maps.googleapis.com/maps/api/staticmap?';\r\n\r\n /**\r\n * Indica si es vol mostrar o no el mapa amb la ruta\r\n */\r\n showMap: boolean = true;\r\n\r\n /**\r\n * Passos de la ruta que tenen el mini-mapa visible\r\n */\r\n stepVisible: boolean[] = [];\r\n\r\n /**\r\n * @ignore\r\n */\r\n urlImg: string = \"assets/img/\";\r\n\r\n /**\r\n * @ignore\r\n */\r\n iconNames = [\"routeIconA.svg\",\"routeIconB.svg\",\"routeIconC.svg\",\"routeIconD.svg\",\"routeIconE.svg\",\"routeIconF.svg\",\"routeIconG.svg\",\"routeIconH.svg\"]\r\n \r\n /**\r\n * Dades relacionades amb el càlcul de rutes de Inrix\r\n */\r\n inrixData;\r\n \r\n /**\r\n * Indica si el càlcul de la ruta s'ha fet amb el servei d'Inrix o no\r\n */\r\n inrixFlag : boolean = false;\r\n\r\n /**\r\n * Centre del mapa\r\n */\r\n center = new google.maps.LatLng(40.38937, -3.511634); // Centre del mapa\r\n \r\n /**\r\n * Opcions per la creació del mapa\r\n */\r\n mapProperties: google.maps.MapOptions = {\r\n zoom: 7,\r\n center: this.center, \r\n gestureHandling: 'greedy'\r\n };\r\n\r\n /**\r\n * Donat un pas d'una ruta, retorna una url que conté un mapa estàtic amb el pas dibuixat\r\n * @param {google.maps.DirectionsStep} step Pas d'una ruta\r\n * @returns {string} url que conté un mapa estàtic amb el pas dibuixat\r\n */\r\n getStaticMapUrl(step: google.maps.DirectionsStep): string{\r\n this.stepVisible.push(false);\r\n var size = 'size=200x200';\r\n var scale = '&scale=200';\r\n var markers = '&markers=color:0xCC3232%7Clabel:A%7C' + step.start_location.lat() + ',' + step.start_location.lng()\r\n + '&markers=color:0x2DC937%7Clabel:B%7C' + step.end_location.lat() + ',' + step.end_location.lng();\r\n var pathStyle = '&path=color:0xFFD401FF%7Cweight:5';\r\n step.path.forEach(stepLocation => {\r\n pathStyle += '%7C' + stepLocation.lat().toPrecision(8) + ',' + stepLocation.lng().toPrecision(8);\r\n\r\n })\r\n var key = \"&key=AIzaSyCA1dCbPTgK0I-8FCWpAk2Qs4U6TGcZbG0\";\r\n return this.staticMapBaseUrl + size + scale + markers + pathStyle + key;\r\n }\r\n\r\n /**\r\n * Retorna la distància total calculada pel servei de rutes\r\n * @returns {string} Distància de la ruta en format text\r\n */\r\n getDistance(): string {\r\n return this.directionsService.calcDistance(this.route);\r\n }\r\n \r\n /**\r\n * Retorna la duració total calculada pel servei de rutes\r\n * @returns {string} Duració de la ruta en format text\r\n */\r\n getDuration(): string {\r\n return this.directionsService.calcDuration(this.route);\r\n }\r\n\r\n /**\r\n * Retorna el consum de combuscitble total calculat pel servei de rutes\r\n * @returns {number} Distància de la ruta en format text\r\n */\r\n getFuel(): number {\r\n return this.directionsService.calcFuel(this.route);\r\n }\r\n\r\n /**\r\n * Activa o desactiva el mapa que mostra la ruta sencera\r\n */\r\n toggleMap(): void{\r\n this.showMap = !this.showMap;\r\n }\r\n\r\n /**\r\n * activa o desactiva el minimapa d'aquest pas\r\n * @param {number} index indica l'índex de l'array de passos per aquest pas\r\n */\r\n toggleStepMap(index: number): void{\r\n this.stepVisible[index] = !this.stepVisible[index];\r\n }\r\n\r\n /**\r\n * Imprimeix la pàgina\r\n */\r\n print(): void{\r\n window.print();\r\n }\r\n\r\n\r\n /**\r\n * Inicialitza el component creant el mapa, pintant la ruta i subscribint-se als serveis de rutes\r\n */\r\n ngOnInit() {\r\n var mapElement = document.getElementById('mapPrint'); //Element HTML que contindrà el mapa\r\n this.map = new google.maps.Map(mapElement, this.mapProperties);\r\n this.directionsService.setMap(this.map);\r\n this.directionsService.getInrix().subscribe( data => {\r\n this.inrixData = data;\r\n ;\r\n })\r\n this.directionsService.getInrixFlag().subscribe( value => {\r\n this.inrixFlag = value;\r\n if(this.inrixFlag){\r\n this.map.fitBounds(this.inrixData.bounds);\r\n this.directionsService.drawInrixRoute();\r\n } \r\n \r\n })\r\n \r\n }\r\n\r\n\r\n}\r\n","
\r\n
\r\n \"\"\r\n
\r\n
Incluir mapa grande
\r\n
En cada punto de la ruta puedes obtener un mapa detallado
\r\n
\r\n \r\n
\r\n
\r\n Imprimir\r\n
\r\n
\r\n\r\n
\r\n \r\n \"Icona\r\n {{getDistance()}}\r\n {{inrixData.distance}}\r\n \r\n \r\n \"Icona\r\n {{getDuration()}}\r\n {{inrixData.duration}}\r\n \r\n \r\n \"Icona\r\n {{getFuel() | number}}€\r\n {{inrixData.fuel}}\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\"\"
\r\n
\r\n
{{leg.start_address}}
\r\n
Aproximadamente {{leg.duration.text}}
\r\n
\r\n
\r\n
\r\n
\r\n {{iStep + 1 }}.\r\n
\r\n
\r\n
\r\n
Mostrar mapa
\r\n
\"\"
\r\n
\r\n
\r\n
\r\n {{step.distance.text}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\"\"
\r\n
\r\n
{{route.legs[route.legs.length-1].end_address}}
\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n","import { Component, OnInit, Output, EventEmitter, ViewChildren, QueryList, ElementRef, SimpleChanges, AfterViewChecked, ChangeDetectorRef, HostListener, AfterContentChecked } from '@angular/core';\r\nimport {CdkDragDrop, moveItemInArray} from '@angular/cdk/drag-drop';\r\nimport { Location } from '@angular/common';\r\nimport { DirectionsService } from 'src/app/services/directions.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { FuelDialogComponent } from '../fuel-dialog/fuel-dialog.component';\r\n\r\n\r\n/**\r\n * Representa una opció per calcular la ruta\r\n */\r\nexport interface Option {\r\n value: string;\r\n viewValue: string;\r\n}\r\n\r\n/**\r\n * Representa un punt d'ubicació de la ruta\r\n */\r\nexport class Waypoint{\r\n value: string;\r\n autocomplete: boolean;\r\n id: string;\r\n}\r\n\r\n/**\r\n * Aquest component conté la interfícia necessària per que l'usuari calculi les rutes\r\n */\r\n@Component({\r\n selector: 'app-rutes',\r\n templateUrl: './rutes.component.html',\r\n styleUrls: ['./rutes.component.css']\r\n})\r\nexport class RutesComponent implements OnInit{\r\n\r\n @Output() directionsEmitter = new EventEmitter();\r\n @Output() toggleEmitter = new EventEmitter();\r\n @Output() preuKmEmitter = new EventEmitter();\r\n @ViewChildren('waypoint') waypointChildren: QueryList>;\r\n @Output() selectedOption = new EventEmitter();\r\n\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.setScreenMode();\r\n }\r\n\r\n constructor(public dialog: MatDialog) { }\r\n\r\n idAutoIncrement = 2;\r\n rutaCalculada: boolean = false;\r\n\r\n tipusVehicle: string = \"compacte\"; // Indica el tipus de vehicle pel qual es vol fer el càlcul de ruta\r\n consumVehicle: number = 6.21; // Indica el consum del vehicle que s'espera per fer el càlcul de ruta\r\n combustible: string = \"diesel\"; // Indica el combustible que fa servir el combustible pel qual s'espera fer el càlcul de ruta\r\n preuCombustible: number = 1.25; // Preu del combustible que fa servir el vehicle pel qual es fa el càlcul de ruta\r\n\r\n screenMode: string = ''; // Indica el mode de pantalla en que està l'aplicació (escriptori, mòbil vertical o mòbil horitzontal)\r\n\r\n \r\n //Bounds ESP (+ Canàries).\r\n espLatLngBounds = new google.maps.LatLngBounds(\r\n new google.maps.LatLng(26.709041066163724, -20.306056689891875),\r\n new google.maps.LatLng(44.811251049443776, 5.182224560108125) \r\n );\r\n\r\n emitCalculateEvent() {\r\n this.checkAutocomplete();\r\n var waypointValues: string[] = [];\r\n this.waypoints.forEach(waypoint => waypointValues.push(waypoint.value));\r\n this.preuKmEmitter.emit(this.consumVehicle / 100 * this.preuCombustible)\r\n this.directionsEmitter.emit(waypointValues);\r\n this.toggleEmitter.emit(true);\r\n }\r\n\r\n \r\n\r\n selectOption(selected: string){\r\n this.selectedOption.emit(selected);\r\n }\r\n\r\n options: Option[] = [\r\n {value: 'mesCurta', viewValue: 'Més curta'},\r\n {value: 'evitaPeatges', viewValue: 'Evitar peatges'},\r\n {value: 'mesRapidaTrafic', viewValue: 'Més ràpida considerant tràfic'}\r\n ];\r\n\r\n lletres = ['A','B','C','D','E','F','G','H'];\r\n \r\n waypoints: Waypoint[] = [\r\n {value: '', autocomplete: false, id: 'waypoint0'},\r\n {value: '', autocomplete: false, id: 'waypoint1'}\r\n ];\r\n\r\n drop(event: CdkDragDrop) {\r\n moveItemInArray(this.waypoints, event.previousIndex, event.currentIndex);\r\n }\r\n\r\n checkAutocomplete() {\r\n this.waypoints.forEach(element => {\r\n if(!element.autocomplete){\r\n let autocomplete = new google.maps.places.Autocomplete(document.getElementById(element.id), {bounds: this.espLatLngBounds});\r\n autocomplete.set('waypoint',element);\r\n autocomplete.addListener('place_changed', (event)=>{\r\n if(!autocomplete.getPlace().place_id) autocomplete.get(\"waypoint\").value = autocomplete.getPlace().name;\r\n else {\r\n autocomplete.get(\"waypoint\").value = autocomplete.getPlace().formatted_address;\r\n } \r\n \r\n });\r\n\r\n element.autocomplete = true;\r\n } \r\n });\r\n }\r\n\r\n setScreenMode(): void{\r\n if(window.innerWidth < 568)\r\n this.screenMode = 'portrait';\r\n else if(window.innerWidth < 824)\r\n this.screenMode = 'landscape';\r\n else \r\n this.screenMode = 'desktop';\r\n }\r\n\r\n\r\n addWaypoint(){\r\n let newWaypoint: Waypoint = {value: '', autocomplete: false, id: 'waypoint' + this.idAutoIncrement};\r\n this.idAutoIncrement++;\r\n this.waypoints.push(newWaypoint);\r\n }\r\n\r\n deleteWaypoint(waypoint: Waypoint){\r\n this.waypoints = this.waypoints.filter(obj => obj.id !== waypoint.id);\r\n }\r\n\r\n swapWaypoints(){\r\n var a = this.waypoints[0];\r\n this.waypoints[0] = this.waypoints[1];\r\n this.waypoints[1] = a;\r\n }\r\n\r\n openFuelDialog(): void{\r\n const dialogRef = this.dialog.open(FuelDialogComponent,\r\n {\r\n autoFocus: false,\r\n width: '80%',\r\n height: '80%',\r\n maxWidth: '100vw',\r\n maxHeight: '100vh',\r\n data: {\r\n tipusVehicle: this.tipusVehicle,\r\n consumVehicle: this.consumVehicle,\r\n combustible: this.combustible,\r\n preuCombustible: this.preuCombustible,\r\n }\r\n }\r\n );\r\n\r\n dialogRef.afterClosed().subscribe(result => {\r\n if(result.saved){\r\n this.tipusVehicle = result.tipusVehicle;\r\n this.consumVehicle = result.consumVehicle;\r\n this.combustible = result.combustible;\r\n this.preuCombustible = result.preuCombustible;\r\n }\r\n })\r\n\r\n }\r\n\r\n \r\n\r\n ngOnInit() {\r\n this.setScreenMode();\r\n }\r\n\r\n\r\n\r\n}\r\n","
\r\n
\r\n \r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n
{{lletres[i]}}
\r\n \r\n 2 && i > 1 \">\r\n
\r\n
\r\n
waypoints.length\">\r\n \"\"\r\n
\r\n
\r\n \r\n
\r\n
\r\n
Añadir ubicación\r\n
\r\n
\r\n
\"Opcions
\r\n
\r\n Calcular ruta\r\n
\r\n
\r\n \r\n
\r\n \r\n\r\n
\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n \r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n
{{lletres[i]}}
\r\n \r\n 2 && i > 1 \">\r\n
\r\n
\r\n
waypoints.length\">\r\n \"\"\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\"Afegir
\r\n
\r\n
\r\n
\"Opcions
\r\n
\r\n Calcular ruta\r\n
\r\n
\r\n \r\n
\r\n \r\n\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n \r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n
{{lletres[i]}}
\r\n \r\n 2 && i > 1 \">\r\n
\r\n
\r\n
waypoints.length\">\r\n \"\"\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\"Afegir
\r\n
\r\n
\r\n
\"Opcions
\r\n
\r\n Calcular Ruta\r\n
\r\n
\r\n \r\n
\r\n \r\n\r\n
\r\n\r\n \r\n \r\n\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { CheckboxesService } from '../../services/checkboxes.service'\r\n\r\n\r\n\r\n@Component({\r\n selector: 'app-serveis',\r\n templateUrl: './serveis.component.html',\r\n styleUrls: ['./serveis.component.css']\r\n})\r\nexport class ServeisComponent implements OnInit {\r\n\r\n //CONSTANTS PER ARRAY SERVEIS\r\n RADAR = 0;\r\n GAS_STATION = 1;\r\n TRAMS_PERILL = 2;\r\n PARKING = 3;\r\n PARKANDRIDE = 4;\r\n\r\n serveis: string[] = ['RADAR','GAS_STATION','TRAMS_PERILL','PARKING','PARKANDRIDE'];\r\n checkboxes: boolean[] = [false,false,false,false,false];\r\n\r\n\r\n toggleCheckbox(layer: string){\r\n if(this.checkboxes[this.serveis.indexOf(layer)]) this.checkboxesService.deleteCheckbox(layer);\r\n else this.checkboxesService.addCheckbox(layer);\r\n }\r\n\r\n constructor(private checkboxesService: CheckboxesService) { }\r\n\r\n ngOnInit() {\r\n this.checkboxesService.getCheckboxes().subscribe(data => {\r\n for(var i = 0; i < 5; i++){\r\n if(data.includes(this.serveis[i])) this.checkboxes[i] = true;\r\n else this.checkboxes[i] = false;\r\n }\r\n })\r\n\r\n }\r\n\r\n\r\n\r\n\r\n}\r\n","
\r\n
\r\n
\r\n \"Radars\"Radares\r\n
\r\n
\r\n \"Gasolineres\"Gasolineras\r\n
\r\n
\r\n
\r\n
\r\n \"TramsTramos de peligro\r\n
\r\n
\r\n \"Pàrkings\"Párkings\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n
\r\n\r\n
\r\n \r\n
\r\n Radares\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Gasolineras\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Peligro\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Incidencias\r\n
\r\n
\r\n\r\n\r\n
\r\n\r\n\r\n\r\n
\r\n\r\n
\r\n \r\n
\r\n Radares\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Gasolineras\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Peligro\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n Incidencias\r\n
\r\n
\r\n\r\n \r\n\r\n
","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n\r\n@Component({\r\n selector: 'app-share-dialog',\r\n templateUrl: './share-dialog.component.html',\r\n styleUrls: ['./share-dialog.component.css']\r\n})\r\nexport class ShareDialogComponent{\r\n\r\n constructor(public dialogRef: MatDialogRef) { }\r\n\r\n fromName: string; // Qui envia el missatge\r\n toName: string; // A qui s'envia el missatge\r\n email: string; // Email de qui envia el missatge\r\n comment: string; // Comentari pel missatge\r\n closeDialog() {\r\n this.dialogRef.close({\r\n saved: false\r\n });\r\n }\r\n\r\n send() {\r\n this.dialogRef.close({\r\n saved: false,\r\n });\r\n\r\n \r\n\r\n }\r\n\r\n}\r\n","

Comparte RACC Infotransit

\r\n
\r\n \"\"\r\n \r\n \"\"\r\n \r\n \r\n \"\"\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { LoaderService } from '../../../services/loader.service';\r\n\r\n\r\n@Component({\r\n selector: 'app-loader',\r\n templateUrl: './loader.component.html',\r\n styleUrls: ['./loader.component.css']\r\n})\r\n\r\n\r\nexport class LoaderComponent implements OnInit {\r\n color = 'primary';\r\n mode = 'indeterminate';\r\n value = 50;\r\n show: boolean = false;\r\n isLoading: Subject = this.loaderService.isLoading;\r\n constructor(private loaderService: LoaderService){}\r\n\r\n\r\n ngOnInit(): void {\r\n\r\n /*this.isLoading.subscribe( value => {\r\n var delayInMilliseconds = 0; //1 second\r\n setTimeout(f => {\r\n if(value !== this.show) this.show = value\r\n },delayInMilliseconds);\r\n })*/\r\n\r\n }\r\n}\r\n","
\r\n \r\n \r\n
","import { Component, OnInit, Output, EventEmitter, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { Options, LabelType } from 'ng5-slider';\r\nimport { Subscription, Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-trafic',\r\n templateUrl: './trafic.component.html',\r\n styleUrls: ['./trafic.component.css']\r\n})\r\nexport class TraficComponent implements OnInit{\r\n\r\n private updateSubscription: Subscription;\r\n\r\n @Input() events: Observable;\r\n\r\n\r\n @Output() trafficEmitter = new EventEmitter(); // Emisor d'events cap a component pare\r\n\r\n consultarTransit = false; // Indica si l'usuari vol consultar o no el trànsit\r\n showOptions = false; // Indica si l'usuari vol mostrar les opcions de ltrànsit o no\r\n modes = ['Trànsit en directe','Trànsit en previsió']; // Modes de trànsit disponibles\r\n selectedMode = this.modes[0]; // Mode de trànsit seleccionat \r\n timeValue: number; // Valor entre 0 i 95 que indica una hora del dia, múltiple de 15 minuts (00:00 = 0,00:15 = 1,00:30 = 2,00:45 = 3, 01:00 = 4, ... , 23:45 = 95)\r\n horaInicialitzacio; // Hora en que s'ha iniciat l'aplicació\r\n date: Date; // Data en que s'està fent la previsió\r\n formattedDate: string; // Data actual amb format dd/mm/yyyy\r\n minDate: Date; // Data mínima per la qual es pot fer previsió\r\n maxDate: Date; // Data màxima per la qual es pot fer previsió\r\n lastUpdate: number; // Moment en que s'ha fet la darrera actualització de les capes\r\n /*\r\n ngOnChanges(changes: SimpleChanges) {\r\n console.log(\"canvis al input de TraficComponent\");\r\n console.log(changes);\r\n }\r\n*/\r\n options: Options = { // Propietats de l'slider per escollir hora del dia per fer la previsió\r\n floor: 0,\r\n ceil: 95,\r\n showSelectionBar: true,\r\n translate: (value: number, label: LabelType): string => {\r\n switch (label) {\r\n case LabelType.Low:\r\n var hora = this.numberToTime(value);\r\n return '
' + hora + '
';\r\n default:\r\n return '';\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Retorna una hora en el format \"hh:mm\" donat value, que representa una hora del dia \r\n * @param value Value >= 0 i <= 96. Cada número representa una hora del dia múltiple de 15 minuts (00:00 = 0,00:15 = 1,00:30 = 2,00:45 = 3, 01:00 = 4, ... , 23:45 = 95)\r\n */\r\n numberToTime(value: number): string{\r\n var hora = Math.trunc(value/96*24);\r\n var minuts = (value % 4)*15;\r\n var horaRes = hora.toString();\r\n var minRes = minuts.toString();\r\n if(hora <= 9) horaRes = \"0\" + horaRes;\r\n if(minuts <= 0) minRes = minRes + \"0\";\r\n return horaRes + \":\" + minRes;\r\n }\r\n\r\n /**\r\n * Retorna un valor >= 0 i <= 96. Cada número representa una hora del dia múltiple de 15 minuts (00:00 = 0,00:15 = 1,00:30 = 2,00:45 = 3, 01:00 = 4, ... , 23:45 = 95)\r\n * @param time Hora del dia en format \"hh:mm\"\r\n */\r\n timeToNumber(time: string): number{\r\n var horaString = time.split(':')[0];\r\n var minutsString = time.split(':')[1];\r\n var hora = Math.trunc(parseInt(horaString) * 96 / 24);\r\n var minuts = 4 / (60 / parseInt(minutsString));\r\n return hora + minuts;\r\n }\r\n\r\n /**\r\n * Compara dues dates i retorna cert si tenen el mateix dia, mes i hora\r\n */\r\n sameDate(date1: Date, date2: Date): boolean{\r\n return date1.getFullYear() === date2.getFullYear() \r\n && date1.getMonth() === date2.getMonth() \r\n && date1.getDate() === date2.getDate();\r\n\r\n }\r\n\r\n\r\n /**\r\n * Actualitza la data i l'hora segons l'input de l'usuari. També canvia els límits de l'slider\r\n * @param event La nova data entrada per l'usuari\r\n */\r\n changeDate(event){\r\n this.date = new Date(event);\r\n if(!this.sameDate(this.date,this.minDate) && !this.sameDate(this.date,this.maxDate)){\r\n this.setNewMin(0);\r\n this.setNewMax(95);\r\n }\r\n else if(this.sameDate(this.date,this.minDate)){ //Mínim: Quart d'hora següent més proper a l'hora actual\r\n this.setNewMin(this.horaInicialitzacio);\r\n this.setNewMax(95);\r\n if(this.timeValue < this.horaInicialitzacio) this.timeValue = this.horaInicialitzacio;\r\n }\r\n else if(this.sameDate(this.date,this.maxDate)){ //Màxim: Quart d'hora anterior més proper a l'hora actual - 1 de l'any següent\r\n this.setNewMin(0);\r\n this.setNewMax(this.horaInicialitzacio-5); \r\n if(this.timeValue > this.horaInicialitzacio) this.timeValue = this.horaInicialitzacio-5;\r\n }\r\n var hora = this.numberToTime(this.timeValue).split(':');\r\n this.date.setHours(parseInt(hora[0]),parseInt(hora[1])); \r\n var dateZulu = new Date(this.date);\r\n dateZulu.setHours(dateZulu.getHours() + 1);\r\n this.trafficEmitter.emit(dateZulu.toISOString()); //toISOString fa servir hora Zulu, -1 hora local\r\n \r\n }\r\n\r\n /**\r\n * Actualitza l'hora de l'objecte date que conté la data del component. S'activa quan es fan canvis al slider\r\n */\r\n updateTime(){\r\n var hora = this.numberToTime(this.timeValue).split(':');\r\n this.date.setHours(parseInt(hora[0]),parseInt(hora[1])); \r\n var dateZulu = new Date(this.date);\r\n dateZulu.setHours(dateZulu.getHours() + 1);\r\n this.trafficEmitter.emit(dateZulu.toISOString()); //toISOString fa servir hora Zulu, -1 hora local\r\n }\r\n\r\n\r\n /**\r\n * Emet l'event cap al component pare\r\n * @param toggle indica si l'event a emetre és activar/desactivar la capa de trànsit\r\n */\r\n emitEvent(toggle: boolean) {\r\n if(toggle){\r\n this.consultarTransit = !this.consultarTransit;\r\n this.trafficEmitter.emit('toggle');\r\n }\r\n \r\n }\r\n\r\n /**\r\n * Mostra o amaga les opcions del tràfic\r\n */\r\n toggleOptions() {\r\n this.showOptions = !this.showOptions;\r\n }\r\n\r\n /**\r\n * Canvia el mode de trànsit seleccionat\r\n */\r\n onSelect(){\r\n if(this.selectedMode === 'Trànsit en previsió') this.selectedMode = 'Trànsit en directe';\r\n else if(this.selectedMode === 'Trànsit en directe') this.selectedMode = 'Trànsit en previsió';\r\n this.trafficEmitter.emit(this.selectedMode + '|' + this.date.toISOString());\r\n /* \r\n if(this.consultarTransit){\r\n if(this.selectedMode === 'Trànsit en previsió')\r\n this.trafficEmitter.emit(this.selectedMode + '|' + this.date.toISOString());\r\n else\r\n this.trafficEmitter.emit(this.selectedMode);\r\n }*/\r\n }\r\n\r\n\r\n /**\r\n * Inicialitza la data pel dia d'avui i l'hora actual determinada per la seva inicialització (+15 minuts hora actual)\r\n */\r\n initDate(){\r\n this.date = new Date();\r\n var hora = this.numberToTime(this.timeValue).split(':');\r\n this.date.setHours(parseInt(hora[0]),parseInt(hora[1]),0,0);\r\n }\r\n\r\n /**\r\n * Inicialitza l'hora per la previsió de trànsit, 15 minuts per davant de l'hora actual\r\n */\r\n initTime(){\r\n this.lastUpdate = Date.now();\r\n var hores;\r\n var minuts; \r\n var dateTime = new Date().toTimeString().split(':');\r\n\r\n //sumem 15 minuts per previsió\r\n hores = parseInt(dateTime[0]);\r\n minuts = parseInt(dateTime[1]) + 15;\r\n if(minuts >= 60){\r\n hores++;\r\n minuts = 0;\r\n }\r\n else{\r\n minuts = Math.trunc(minuts/15);\r\n minuts *= 15;\r\n }\r\n\r\n this.timeValue = this.timeToNumber(hores + ':' + minuts);\r\n }\r\n\r\n /**\r\n * Canvia el mínim valor que pot obtenir el slider per escollir l'hora\r\n */\r\n setNewMin(newMin: number): void {\r\n const newOptions: Options = Object.assign({}, this.options);\r\n newOptions.minLimit = newMin;\r\n this.options = newOptions;\r\n }\r\n\r\n /**\r\n * Canvia el màxim valor que pot obtenir el slider per escollir l'hora\r\n */\r\n setNewMax(newMax: number): void {\r\n const newOptions: Options = Object.assign({}, this.options);\r\n newOptions.maxLimit = newMax;\r\n this.options = newOptions;\r\n }\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit() {\r\n this.formattedDate = new Date().toISOString().split('T')[0];\r\n this.minDate = new Date();\r\n this.maxDate = new Date(this.minDate); \r\n this.maxDate.setFullYear(this.maxDate.getFullYear() + 1);\r\n this.initTime();\r\n this.initDate();\r\n this.horaInicialitzacio = this.timeValue;\r\n this.setNewMin(this.timeValue);\r\n\r\n this.updateSubscription = this.events.subscribe(() =>{\r\n this.lastUpdate = Date.now();\r\n });\r\n }\r\n\r\n}\r\n","\r\n
\r\n\r\n
\r\n
\r\n
\r\n {selectedMode, select, Trànsit en directe {Tránsito en directo} Trànsit en previsió {Tránsito en previsión}}\r\n
\r\n
\"\"
\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \"icona\r\n \r\n
\r\n
\r\n\r\n\r\n
\r\n\r\n
\r\n
\r\n Lento\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n Rápido\r\n
\r\n \r\n\r\n\r\n\r\n\r\n","import { Component, Inject } from '@angular/core';\r\nimport {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-zoom-dialog',\r\n templateUrl: './zoom-dialog.component.html',\r\n styleUrls: ['./zoom-dialog.component.css']\r\n})\r\nexport class ZoomDialogComponent{\r\n\r\n\r\n constructor(public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) data) {}\r\n\r\n close(accepted: boolean){\r\n this.dialogRef.close(accepted);\r\n }\r\n\r\n \r\n\r\n}\r\n","

Atención

\r\n
\r\n

Aumente el nivel de zoom para visualizar los elementos seleccionados

\r\n
\r\n
\r\n \r\n \r\n
\r\n","/// \r\n\r\nexport class MercatorProjection {\r\n constructor(public pixelOrigin: google.maps.Point,\r\n public pixelsPerLonDegree: number,\r\n public pixelsPerLonRadian: number\r\n ) { } \r\n\r\n MERCATOR_RANGE = 256;\r\n\r\n bound(value, optMin?, optMax?) {\r\n if(optMin != null) value = Math.max(value,optMin);\r\n if(optMax != null) value = Math.min(value,optMax);\r\n return value;\r\n }\r\n\r\n degreesToRadians(deg): number {\r\n return deg * (Math.PI / 180);\r\n }\r\n\r\n radiansToDegrees(rad): number {\r\n return rad / (Math.PI / 180);\r\n }\r\n\r\n\r\n\r\n fromLatLngToPoint(latLng: any, optPoint: any): any {\r\n var me = this;\r\n var point = optPoint || new google.maps.Point(0,0);\r\n var origin = me.pixelOrigin;\r\n\r\n point.x = origin.x + latLng.lng() * me.pixelsPerLonDegree;\r\n\r\n var siny = this.bound(Math.sin(this.degreesToRadians(latLng.lat())),-0.9999,0.9999);\r\n point.y = origin.y + 0.5 * Math.log((1+siny) / (1 - siny)) * -me.pixelsPerLonRadian;\r\n return point;\r\n }\r\n\r\n fromPointToLatLng(point): google.maps.LatLng {\r\n var me = this;\r\n\r\n var origin = me.pixelOrigin;\r\n var lng = (point.x - origin.x) / me.pixelsPerLonDegree;\r\n var latRadians = (point.y - origin.x) / -me.pixelsPerLonRadian;\r\n var lat = this.radiansToDegrees( 2 * Math.atan(Math.exp(latRadians)) - Math.PI / 2);\r\n return new google.maps.LatLng(lat, lng);\r\n }\r\n\r\n topLeftCenter(zoom: any): google.maps.LatLng {\r\n return this.fromPointToLatLng(new google.maps.Point(this.MERCATOR_RANGE / Math.pow(2, zoom + 1), this.MERCATOR_RANGE / Math.pow(2, zoom + 1)));\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs/BehaviorSubject';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CheckboxesService {\r\n\r\n alertes = [\"ROADWORKS\",\"CONGESTION\",\"INCIDENT\",\"MOUNTAINPASS\",\"METEO\",\"CONES\"]; // Nom de les capes del tipus alertes\r\n serveis = [\"GAS_STATION\",\"RADAR\",\"PARKING\",\"PARKANDRIDE\",\"TRAMS_PERILL\"]; // Nom de les capes del tipus servei\r\n zoomLayers = [\"CAMERA\", \"RADAR\", \"GAS_STATION\", \"PARKING\", \"PARKANDRIDE\"]; //Nom de les capes que necessiten un zoom mínim per ser mostrades\r\n\r\n /**BehaviorSubject = Subject però hem d'inicialitzar el seu valor */\r\n private _checked = new BehaviorSubject([]);\r\n private checkedData = ['CONGESTION','METEO','MOUNTAINPASS'];\r\n readonly checked = this._checked.asObservable();\r\n\r\n getCheckboxes() {\r\n this._checked.next(this.checkedData);\r\n return this._checked.asObservable();\r\n }\r\n\r\n addCheckbox(servei: string): void {\r\n if(this.alertes.includes(servei) || this.serveis.includes(servei) || this.zoomLayers.includes(servei)){\r\n this.checkedData.push(servei);\r\n this._checked.next(this.checkedData);\r\n }\r\n\r\n }\r\n\r\n deleteCheckbox(servei: string): void {\r\n var index = this.checkedData.indexOf(servei);\r\n this.checkedData.splice(index,1);\r\n this._checked.next(this.checkedData);\r\n }\r\n\r\n clearCheckboxes(): void{\r\n this.checkedData = [];\r\n this._checked.next(this.checkedData);\r\n }\r\n\r\n constructor() { }\r\n\r\n\r\n}\r\n","import { Injectable, Inject, LOCALE_ID } from \"@angular/core\";\r\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\r\nimport { Observable } from \"rxjs\";\r\nimport { environment } from '../../environments/environment';\r\n\r\n@Injectable({\r\n providedIn: \"root\"\r\n})\r\nexport class DadesService {\r\n features: any = null;\r\n urlApi = window.location.protocol + '//' + window.location.hostname + '/api/InfotransitAPI.asmx/';\r\n alertes = [\"ROADWORKS\",\"CONGESTION\",\"INCIDENCE\",\"MOUNTAINPASS\",\"METEO\",\"CONES\"];\r\n serveis = [\"GAS_STATION\",\"RADAR\",\"PARKING\",\"PARKANDRIDE\",\"TRAMS_PERILL\"]; // Nom de les capes del tipus servei\r\n\r\n constructor(private http: HttpClient, @Inject(LOCALE_ID) protected localeId: string) {}\r\n\r\n getLayer(layer: string, bounds:string) {\r\n \r\n if(this.alertes.includes(layer)) {\r\n var url = this.urlApi + 'GetIncidencies?' + \r\n 'bbox=-27.0666950941295,44.03133255621614,9.6496134996205,26.813039629431152' + //bounds +\r\n '&lang=' + this.localeId +\r\n '&outputFormat=geojson' + \r\n '&incidentType=' + layer\r\n return this.http.get(url) \r\n }\r\n else if(layer === \"CAMERA\"){\r\n var url = this.urlApi + 'getCameras?' + \r\n 'bbox=' + bounds +\r\n '&lang=' + this.localeId +\r\n '&outputFormat=geojson'\r\n return this.http.get(url) \r\n }\r\n else if(this.serveis.includes(layer)){\r\n if(layer===\"PARKING\"){\r\n var url = this.urlApi + 'GetPoisWeb?' +\r\n 'bbox=' + bounds +\r\n '&poiType=PARKING&incidentType=' + \r\n '&lang=' + this.localeId +\r\n '&outputFormat=geojson'\r\n return this.http.get(url) \r\n }\r\n else if(layer === \"PARKANDRIDE\"){\r\n var url = this.urlApi + 'GetPoisWeb?' +\r\n 'bbox=' + bounds +\r\n '&poiType=PARKANDRIDE&incidentType=' + \r\n '&lang=' + this.localeId +\r\n '&outputFormat=geojson'\r\n return this.http.get(url) \r\n }\r\n else if(layer===\"RADAR\"){\r\n var url = this.urlApi + 'getRadars?' + \r\n 'bbox=' + bounds +\r\n '&lang=' + this.localeId +\r\n '&outputFormat=geojson'\r\n return this.http.get(url)\r\n }\r\n else if(layer === \"GAS_STATION\"){\r\n var url = this.urlApi + 'getGasStations?' + \r\n 'bbox=' + bounds +\r\n '&lang=' + this.localeId +\r\n '&outputFormat=geojson'\r\n return this.http.get(url)\r\n }\r\n else if(layer === \"TRAMS_PERILL\"){\r\n var url = this.urlApi + 'GetTrams?' +\r\n 'bbox=-27.0666950941295,44.03133255621614,9.6496134996205,26.813039629431152' + \r\n '&lang=' + this.localeId +\r\n '&outputFormat=geojson';\r\n return this.http.get(url);\r\n }\r\n }\r\n \r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { InrixService } from './inrix.service';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { first, delay } from 'rxjs/operators';\r\nimport { JsonPipe } from '@angular/common';\r\n\r\n/**\r\n * Conté la informació necessària per mostrar una ruta calculada pel servei Inrix\r\n */\r\ninterface InrixData {\r\n /**\r\n * Punts per dibuixar la ruta\r\n */\r\n routePoints: google.maps.LatLng[],\r\n\r\n /**\r\n * Duració de la ruta\r\n */\r\n duration: string,\r\n\r\n /**\r\n * Distància total de la ruta\r\n */\r\n distance: string,\r\n\r\n /**\r\n * Consum de combustible de la ruta\r\n */\r\n fuel: string,\r\n\r\n /**\r\n * Resum de la ruta\r\n */\r\n summary: string,\r\n\r\n /**\r\n * Límits en que es pot veure tota la ruta \r\n */\r\n bounds: google.maps.LatLngBounds\r\n \r\n}\r\n\r\n/**\r\n * Servei que permet fer càlcul de rutes i mostrar-les al mapa, connectant-se al servei Google Maps Directions i Inrix\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DirectionsService {\r\n\r\n /**\r\n * Instància del mapa\r\n */\r\n map: google.maps.Map;\r\n\r\n /**\r\n * Servei per buscar ubicacions al mapa\r\n */\r\n placesService: google.maps.places.PlacesService;\r\n\r\n /**\r\n * Instància de Google Maps Directions\r\n */\r\n directionsService = new google.maps.DirectionsService();\r\n\r\n /**\r\n * S'ocupa de renderitzar els resultats de DirectionsService\r\n */\r\n directionsRenderer = new google.maps.DirectionsRenderer({\r\n polylineOptions: {\r\n strokeColor: \"#000CFF\",\r\n strokeOpacity: 1,\r\n strokeWeight: 5,\r\n zIndex: 1\r\n },\r\n suppressMarkers: true,\r\n hideRouteList: true\r\n });\r\n\r\n /**\r\n * Altres Renderers que serveixen per dibuixar rutes que no estan seleccionades\r\n */\r\n directionsPreviewRenderer = new google.maps.DirectionsRenderer({\r\n polylineOptions: {\r\n strokeColor: \"#000CFF\",\r\n strokeOpacity: .4,\r\n strokeWeight: 5,\r\n zIndex: 1\r\n },\r\n preserveViewport: true,\r\n suppressMarkers: true\r\n });\r\n\r\n /**\r\n * Indica si la ruta no s'ha trobat\r\n */\r\n private _routeNotFound = new BehaviorSubject(false);\r\n\r\n /**\r\n * Conté les rutes calculades\r\n */\r\n private _routes = new BehaviorSubject([]);\r\n\r\n /**\r\n * @ignore\r\n */\r\n private routesData = [];\r\n\r\n /**\r\n * @ignore\r\n */\r\n readonly routes = this._routes.asObservable();\r\n\r\n /**\r\n * Línies dibuixades al mapa que representen rutes\r\n */\r\n private polylines: google.maps.Polyline[] = [];\r\n\r\n /**\r\n * Rutes renderitzades \r\n */\r\n private previewRoutes: google.maps.DirectionsRenderer[] = [];\r\n\r\n /**\r\n * Marcadors per indicar les parades de la ruta\r\n */\r\n private markers: google.maps.Marker[] = [];\r\n\r\n /**\r\n * @ignore\r\n */\r\n imgUrl: string = \"assets/img/\";\r\n\r\n /**\r\n * @ignore\r\n */\r\n iconNames: string[] = [\"routeIconA.svg\",\"routeIconB.svg\",\"routeIconC.svg\",\"routeIconD.svg\",\"routeIconE.svg\",\"routeIconF.svg\",\"routeIconG.svg\",\"routeIconH.svg\"]\r\n \r\n /**\r\n * Preu per kilòmetre de la ruta\r\n */\r\n preuKm: number = 0;\r\n \r\n /**\r\n * @ignore\r\n */\r\n private _inrixFlag = new BehaviorSubject(false);\r\n \r\n /**\r\n * Indica si el càlcul de la ruta s'esta fent a través del servei Inrix\r\n */\r\n inrixFlag: boolean = false;\r\n\r\n /**\r\n * Dades relacionades amb la ruta calculada per Inrix\r\n */\r\n inrixData: InrixData;\r\n\r\n /**\r\n * @ignore\r\n */\r\n private _inrixData = new BehaviorSubject(this.inrixData);\r\n\r\n /**\r\n * Constructor del component\r\n * @param inrixService Servei per fer crides a Inrix\r\n * @param http Client http\r\n */\r\n constructor(private inrixService: InrixService, private http: HttpClient) { }\r\n\r\n /**\r\n * Retorna les rutes calculades pel Google Maps Directions\r\n */\r\n getRoutes() {\r\n this._routes.next(this.routesData);\r\n return this._routes.asObservable();\r\n }\r\n\r\n /**\r\n * Retorna les dades de la ruta calculada per Inrix\r\n */\r\n getInrix() {\r\n this._inrixData.next(this.inrixData);\r\n return this._inrixData.asObservable();\r\n }\r\n\r\n /**\r\n * Retorna InrixFlag\r\n */\r\n getInrixFlag() {\r\n this._inrixFlag.next(this.inrixFlag);\r\n return this._inrixFlag.asObservable();\r\n }\r\n\r\n /**\r\n * Retorna si s'ha trobat o no una ruta\r\n */\r\n getRouteNotFoundFlag(){\r\n return this._routeNotFound.asObservable();\r\n }\r\n\r\n /**\r\n * Donada una array de direccions representades en strings, calcula la ruta \r\n * @param {string[]} waypoints array de strings amb la direcció dels diferents punts de la ruta\r\n * @param {Boolean} avoidTolls indica si es volen evitar els peatges o no\r\n */\r\n getShortestRoute(waypoints: string[], avoidTolls: Boolean){\r\n this.deleteDirections();\r\n this.inrixFlag = false;\r\n this._inrixFlag.next(this.inrixFlag);\r\n var start = waypoints[0];\r\n var end = waypoints[waypoints.length-1];\r\n var waypointsLocations = this.getWaypoints(waypoints.slice(1,waypoints.length-1))\r\n var routeAlternatives: boolean = waypointsLocations.length === 0; \r\n var request: google.maps.DirectionsRequest = {\r\n origin: start,\r\n destination: end,\r\n travelMode: google.maps.TravelMode['DRIVING'],\r\n provideRouteAlternatives: routeAlternatives,\r\n waypoints: waypointsLocations,\r\n };\r\n if(avoidTolls) request.avoidTolls = true;\r\n this.directionsService.route(request, (result,status) => {\r\n if( status === 'OK') {\r\n this._routeNotFound.next(false);\r\n this.setMap(this.map);\r\n this.deleteMarkers();\r\n this.directionsRenderer.setDirections(result);\r\n this.addMarkers();\r\n this.directionsPreviewRenderer.setDirections(result);\r\n this.directionsPreviewRenderer.setRouteIndex(-1);\r\n if(result.routes.length > 0){\r\n this.routesData = result.routes;\r\n this._routes.next(this.routesData);\r\n this.drawRoutesPreview(result);\r\n }\r\n }\r\n else{\r\n this._routeNotFound.next(true);\r\n this.deleteDirections();\r\n this.routesData = [];\r\n }\r\n })\r\n\r\n return this.routesData;\r\n }\r\n\r\n /**\r\n * Donada location, retorna la latitud i longitud segons el servei de localització de Google Maps\r\n * @param {string} location Nom o descripció d'una localització\r\n */\r\n findLatLng(location: string){\r\n var latlng = \"\";\r\n var lat, lng;\r\n var request: google.maps.places.FindPlaceFromQueryRequest = {\r\n query: location,\r\n fields: ['name','geometry']\r\n }\r\n this.placesService.findPlaceFromQuery(request, (result, status) => {\r\n if(status === google.maps.places.PlacesServiceStatus.OK) {\r\n lat = result[0].geometry.location.lat().toString();\r\n lng = result[0].geometry.location.lng().toString();\r\n return lat + ',' + lng;\r\n }\r\n });\r\n\r\n \r\n }\r\n\r\n /**\r\n * Donada una array de direccions representades en strings, calcula la ruta més ràpida segons el servei Inrix \r\n * @param {string[]} waypoints array de strings amb la direcció dels diferents punts de la ruta\r\n */\r\n getInrixShortestRoute(waypoints: string[]){\r\n this.deleteDirections();\r\n this.inrixFlag = true;\r\n this._inrixFlag.next(this.inrixFlag);\r\n var request: google.maps.places.FindPlaceFromQueryRequest;\r\n\r\n var waypointsLatLng: string[] = [];\r\n var waypointsLocations: google.maps.LatLng[] = [];\r\n waypoints.forEach((waypointString,index) => {\r\n this.placesService.findPlaceFromQuery({query: waypointString, fields:['name','geometry']}, (result, status) => {\r\n\r\n if(status === google.maps.places.PlacesServiceStatus.OK) {\r\n var lat = result[0].geometry.location.lat().toString();\r\n var lng = result[0].geometry.location.lng().toString();\r\n var location = new google.maps.LatLng(result[0].geometry.location.lat(),result[0].geometry.location.lng());\r\n waypointsLocations.push(location);\r\n var latLngString = lat + ',' + lng;\r\n waypointsLatLng.push(latLngString);\r\n \r\n if(index === waypoints.length-1 && waypointsLatLng.length == waypoints.length){\r\n\r\n this.http.get(this.inrixService.getFastestPathUrl(waypointsLatLng)).toPromise().then( (data:any) => {\r\n var duration = this.secondsToHours(data.result.trip.routes[0].travelTimeMinutes * 60)\r\n var distance = data.result.trip.routes[0].totalDistance + \" km\";\r\n var fuel = (parseInt(data.result.trip.routes[0].totalDistance) * this.preuKm).toFixed(3).toString() + \" €\";\r\n var summary = data.result.trip.routes[0].summary.text;\r\n this.inrixData = {\r\n distance: distance,\r\n duration: duration,\r\n fuel: fuel,\r\n summary: summary,\r\n routePoints: this.getInrixPath(data.result.trip.routes[0].points.coordinates),\r\n bounds: this.getInrixBounds(data.result.trip.routes[0].boundingBox)\r\n }\r\n this.drawInrixRoute();\r\n this.addInrixMarkers(waypointsLocations);\r\n this.map.fitBounds(this.getInrixBounds(data.result.trip.routes[0].boundingBox));\r\n this._inrixData.next(this.inrixData);\r\n \r\n });\r\n }\r\n }\r\n });\r\n\r\n \r\n });\r\n\r\n return [waypointsLatLng];\r\n }\r\n\r\n /**\r\n * Dibuixa al mapa la ruta calculada per Inrix\r\n */\r\n drawInrixRoute(): void{\r\n this.deletePreviews();\r\n this.deleteRenderer();\r\n this.addInrixMarkers([this.inrixData.routePoints[0],this.inrixData.routePoints[this.inrixData.routePoints.length-1]])\r\n var polilyne = new google.maps.Polyline({\r\n strokeColor: \"#FFFFFF\",\r\n strokeOpacity: 1,\r\n strokeWeight: 9,\r\n zIndex: -1,\r\n map: this.map,\r\n path: this.inrixData.routePoints\r\n });\r\n var polilyne2 = new google.maps.Polyline({\r\n strokeColor: \"#000CFF\",\r\n strokeOpacity: 1,\r\n strokeWeight: 5,\r\n zIndex: 1,\r\n map: this.map,\r\n path: this.inrixData.routePoints\r\n });\r\n\r\n this.polylines.push(polilyne,polilyne2);\r\n }\r\n\r\n /**\r\n * Donat un boundingBox en format inrix, retorna els mateixos bounds en format google.maps.LatLngBounds \r\n * @param boundingBox conté dos punts que representen uns bounds en format nw,se\r\n * @returns {google.maps.LatLngBounds} Els límits en que es veu tota la ruta format google.maps.LatLngBounds\r\n */\r\n getInrixBounds(boundingBox): google.maps.LatLngBounds{\r\n var southWest = new google.maps.LatLng(boundingBox.corner2.coordinates[0][1], boundingBox.corner1.coordinates[0][0])\r\n var northEast = new google.maps.LatLng(boundingBox.corner1.coordinates[0][1], boundingBox.corner2.coordinates[0][0])\r\n return new google.maps.LatLngBounds(southWest,northEast);\r\n }\r\n\r\n /**\r\n * Donada una llista de coordenades en format longitud, latitud, retorna una llista de google.maps.LatLng amb les mateixes posiciones\r\n * @param lngLatPoints Llista de coordenades en format longitud, latitud\r\n * @returns {google.maps.LatLng[]} Llista de google.maps.LatLng amb tots els punts geomètrics per on passa la ruta\r\n */\r\n getInrixPath(lngLatPoints): google.maps.LatLng[]{\r\n var latLngPoints: google.maps.LatLng[] = [];\r\n lngLatPoints.forEach(point => {\r\n var lat = point[1];\r\n var lng = point[0];\r\n var latlng = new google.maps.LatLng(lat,lng);\r\n latLngPoints.push(latlng);\r\n });\r\n\r\n return latLngPoints;\r\n }\r\n\r\n /**\r\n * Donada una llista de coordenades amb els waypoints de la ruta Inrix, pinta al marcadors a aquestes coordenades\r\n * @param waypoints els waypoints de la ruta Inrix\r\n */\r\n addInrixMarkers(waypoints): void {\r\n var markerIndex = 0;\r\n var map = this.getMap();\r\n waypoints.forEach( waypoint => {\r\n var marker = new google.maps.Marker({\r\n position: waypoint,\r\n icon: {\r\n url: this.imgUrl + this.iconNames[markerIndex],\r\n scaledSize: new google.maps.Size(40,50)\r\n },\r\n map: map\r\n });\r\n this.markers.push(marker);\r\n markerIndex++;\r\n\r\n })\r\n\r\n }\r\n\r\n /**\r\n * Donada una array que conté strings d'adreces, retorna una array de DirectionsWaypoint que conté aquestes adreces\r\n * @param {string[]} waypointsStrings Adreces per on passa una ruta\r\n * @returns {google.maps.DirectionsWaypoint[]} Punts per on passa la ruta en format google.maps.DirectionsWaypoint\r\n */\r\n getWaypoints(waypointsStrings: string[]): google.maps.DirectionsWaypoint[]{\r\n var waypoints: google.maps.DirectionsWaypoint[] = [];\r\n waypointsStrings.forEach(waypointString => {\r\n let waypoint: google.maps.DirectionsWaypoint = {\r\n location: waypointString,\r\n stopover: true\r\n };\r\n\r\n waypoints.push(waypoint);\r\n })\r\n\r\n\r\n return waypoints;\r\n }\r\n\r\n /**\r\n * Selecciona quina ruta s'activa en cada moment\r\n * @param {number} index indica índex de la ruta seleccionada dins l'array de rutes\r\n */\r\n setActiveRoute(index: number): void{\r\n this.deleteMarkers();\r\n this.directionsRenderer.setRouteIndex(index);\r\n this.addMarkers();\r\n }\r\n\r\n /**\r\n * Retorna la ruta seleccionada per l'usuari\r\n * @returns {google.maps.DirectionsWaypoint} ruta seleccionada per l'usuari\r\n */\r\n getActiveRoute(): google.maps.DirectionsRoute{\r\n return this.routesData[this.directionsRenderer.getRouteIndex()];\r\n }\r\n\r\n /**\r\n * Selecciona quina ruta es posa en mode preview\r\n * @param {number} index indica índex de la ruta seleccionada dins l'array de rutes\r\n */\r\n setPreviewRoute(index: number): void{\r\n this.directionsPreviewRenderer.setRouteIndex(index);\r\n }\r\n\r\n /**\r\n * Actualitza el valor del preu per kilòmetre de la ruta\r\n * @param preuKm nou preu per kilòmetre\r\n */\r\n setPreuKm(preuKm: number): void {\r\n this.preuKm = preuKm;\r\n }\r\n\r\n /**\r\n * Indica al servei el mapa on s'han de mostrar els resultats\r\n * @param {google.maps.Map} map mapa al qual volem mostrar les rutes calculades\r\n */\r\n setMap(map: google.maps.Map): void{\r\n this.map = map;\r\n this.placesService = new google.maps.places.PlacesService(this.map);\r\n this.directionsRenderer.setMap(map);\r\n this.directionsPreviewRenderer.setMap(map);\r\n if(this.directionsRenderer.getDirections()) this.addMarkers();\r\n }\r\n\r\n /**\r\n * Retorna el mapa al qual es mostren les rutes\r\n * @returns {google.maps.Map} Mapa al qual es mostren les rutes\r\n */\r\n getMap(): google.maps.Map{\r\n return this.map;\r\n }\r\n\r\n /**\r\n * Indica on s'ha de mostrar la informació sobre la o les rutes calculades\r\n * @param div element del document al qual volem posar la informació\r\n */\r\n setPanel(div: any): void{\r\n this.directionsRenderer.setPanel(div);\r\n }\r\n\r\n /**\r\n * Pinta al mapa les diferents rutes calculades amb diferents colors\r\n * @param {google.maps.DirectionsResult} result rutes calculades\r\n */\r\n drawRoutesPreview(result: google.maps.DirectionsResult): void{\r\n this.deletePreviews();\r\n result.routes.forEach( (route,routeIndex) => {\r\n var renderer = new google.maps.DirectionsRenderer({\r\n polylineOptions: {\r\n strokeColor: \"#A7A7A7\",\r\n strokeOpacity: 1,\r\n strokeWeight: 5,\r\n zIndex: -1\r\n },\r\n suppressMarkers: true\r\n });\r\n renderer.setMap(this.map);\r\n renderer.setRouteIndex(routeIndex);\r\n renderer.setDirections(result);\r\n var polilyne = new google.maps.Polyline({\r\n strokeColor: \"#FFFFFF\",\r\n strokeOpacity: 1,\r\n strokeWeight: 9,\r\n zIndex: -1,\r\n map: this.map,\r\n path: this.calculatePath(renderer.getDirections().routes[routeIndex])\r\n });\r\n this.polylines.push(polilyne);\r\n this.previewRoutes.push(renderer);\r\n })\r\n }\r\n\r\n\r\n /**\r\n * Esborra les polylines que hem afegit al mapa\r\n */\r\n deletePreviews(): void{\r\n this.polylines.forEach(polilyne => polilyne.setMap(null) );\r\n this.previewRoutes.forEach(renderer => renderer.setMap(null));\r\n this.polylines = [];\r\n this.previewRoutes = [];\r\n }\r\n\r\n /**\r\n * Esborra el renderer del mapa\r\n */\r\n deleteRenderer(): void {\r\n this.directionsRenderer.setMap(null); \r\n }\r\n\r\n /**\r\n * Esborra tota la informació del mapa relacionada amb rutes\r\n */\r\n deleteDirections(): void{\r\n this.deleteMarkers();\r\n this.deletePreviews();\r\n this.directionsRenderer.setMap(null);\r\n this.directionsPreviewRenderer.setMap(null);\r\n this._routes.next([]);\r\n this.inrixData = null;\r\n this._inrixData.next(this.inrixData);\r\n\r\n }\r\n\r\n \r\n /**\r\n * Afegeix els marcadors als waypoints de la ruta seleccionada\r\n */\r\n addMarkers(): void{\r\n var index = this.directionsRenderer.getRouteIndex();\r\n var markerIndex = 0;\r\n var legs: google.maps.DirectionsLeg[] = this.directionsRenderer.getDirections().routes[index].legs;\r\n var map = this.directionsRenderer.getMap();\r\n legs.forEach( (leg,index) => {\r\n var markerStart = new google.maps.Marker({\r\n position: leg.start_location,\r\n icon: {\r\n url: this.imgUrl + this.iconNames[markerIndex],\r\n scaledSize: new google.maps.Size(40,50)\r\n },\r\n map: map\r\n });\r\n this.markers.push(markerStart);\r\n markerIndex++;\r\n\r\n if(index === legs.length-1){\r\n var markerEnd = new google.maps.Marker({\r\n position: leg.end_location,\r\n icon: {\r\n url: this.imgUrl + this.iconNames[markerIndex],\r\n scaledSize: new google.maps.Size(40,50)\r\n },\r\n map: map\r\n });\r\n this.markers.push(markerEnd);\r\n markerIndex++;\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Esborra els marcadors de la ruta seleccionada\r\n */\r\n deleteMarkers(): void{\r\n this.markers.forEach(marker => marker.setMap(null));\r\n this.markers = [];\r\n }\r\n\r\n /**\r\n * Donada una ruta, retorna una array que conté el path d'aquesta ruta\r\n * @param {google.maps.DirectionsRoute} route ruta per la qual volem calcular el path\r\n * @returns {google.maps.LatLng[]} Path de la ruta en format google.maps.LatLng\r\n */\r\n calculatePath(route: google.maps.DirectionsRoute): google.maps.LatLng[]{\r\n var path = [];\r\n route.legs.forEach(leg => {\r\n leg.steps.forEach(step => {\r\n step.path.forEach( latlng => {\r\n path.push(latlng);\r\n })\r\n })\r\n })\r\n\r\n return path;\r\n }\r\n\r\n /**\r\n * Donada una ruta, calcula la seva distància total i retorna aquesta distància en format de text\r\n * @param {google.maps.DirectionsRoute} route ruta per la qual volem calcular la distància\r\n * @returns Distància en format text\r\n */\r\n calcDistance(route:google.maps.DirectionsRoute): string{\r\n var distance = 0;\r\n route.legs.forEach( leg => {\r\n distance += leg.distance.value;\r\n })\r\n\r\n if(distance < 1000) return distance + \" m\";\r\n else return (distance/1000).toFixed(2) + \" km\";\r\n }\r\n\r\n /**\r\n * Donada una ruta, retorna un string amb el temps que es triga en completar-la\r\n * @param {google.maps.DirectionsRoute} route ruta per la qual volem calcular la duració\r\n * @returns Duració en format text\r\n */\r\n calcDuration(route: google.maps.DirectionsRoute): string{\r\n var duration = 0;\r\n route.legs.forEach( leg => {\r\n duration += leg.duration.value;\r\n })\r\n\r\n return this.secondsToHours(duration);\r\n }\r\n\r\n /**\r\n * Donada una ruta i un preu per km, retorna el preu total del combustible per la ruta\r\n * @param {google.maps.DirectionsRoute} route ruta per la qual volem calcular el consum de combustible\r\n * @param {number} preuKm Cost en € de combustible per cada km\r\n */\r\n calcFuel(route: google.maps.DirectionsRoute): number{\r\n var distance = 0;\r\n route.legs.forEach( leg => {\r\n distance += leg.distance.value;\r\n })\r\n\r\n return ((distance/1000)*this.preuKm);\r\n }\r\n\r\n /**\r\n * Donat uns segons, retorna una string que representa aquest temps en hores i/o minuts\r\n * @param {number} seconds segons a convertir en una string d'hores i minuts\r\n * @returns {string} retorna el temp en hores i/o minuts\r\n */\r\n secondsToHours(seconds: number): string{\r\n var hrsString = Math.floor(seconds/3600).toString();\r\n var min = Math.floor((seconds%3600)/60);\r\n var minString = Math.floor((seconds%3600)/60).toString();\r\n var secondsString = (seconds % 60).toString();\r\n if(seconds<10) secondsString = \"0\" + secondsString;\r\n if(min) minString = \"0\" + minString;\r\n if (hrsString === \"0\") return min + \"min\";\r\n else return hrsString + \"h \" + min + \"min\";\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject, Observable } from 'rxjs';\r\nimport { environment } from '../../environments/environment';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class InrixService {\r\n\r\n private _BEARER_TOKEN: string = 'Bearer ';\r\n private _token: string;\r\n private inrixSubject = new Subject();\r\n\r\n private _urlTilesApi = environment.urlTilesInrix; //'http://192.168.0.96/tiles/TilesService.asmx/GetTile?options=';\r\n private _urlRoutingApi = 'http://eu.api.inrix.com/Traffic/Inrix.ashx';\r\n private _urlProxy = 'http://localhost:4200/infotransit/assets/Inrix.json'; //*/ window.location.protocol + '//' + window.location.hostname + '/infotransit/assets/Inrix.json';\r\n \r\n private paramOpacity = \"90\";\r\n private paramRoadsegmenttype = \"XDS\";\r\n \r\n\r\n // GET / SET ---------------------------------------------------------------\r\n public get BEARER_TOKEN(): string { return this._BEARER_TOKEN; }\r\n public set BEARER_TOKEN(value: string) { this._BEARER_TOKEN = value; }\r\n public get token(): string { return this._token; }\r\n public set token(value: string) { this._token = value; }\r\n public get urlTilesApi() { return this._urlTilesApi; }\r\n public set urlTilesApi(value) { this._urlTilesApi = value; }\r\n public get urlRoutingApi() { return this._urlRoutingApi; }\r\n public set urlRoutingApi(value) { this._urlRoutingApi = value; }\r\n public get urlProxy() { return this._urlProxy; }\r\n public set urlProxy(value) { this._urlProxy = value; }\r\n\r\n constructor() { }\r\n \r\n getInrixService() {\r\n this.inrixSubject.next();\r\n }\r\n\r\n getTokenObservable(): Observable {\r\n return this.inrixSubject.asObservable();\r\n }\r\n\r\n /**\r\n * Retorna la url amb els paràmetres necessaris per aconseguir una tile donat un punt, un zoom i un centre\r\n */\r\n getTileUrl(tile: google.maps.Point, zoom: number, center: string, trafficMode: string, date: string): string {\r\n\r\n let url = this.urlTilesApi\r\n + this.getQuadKey(tile, zoom)\r\n + \"?coverage=255\" // 255=\"Total Fusion (TM)\" - i.e. light up every road we can / 8 = Real-time core + extended coverage. ;\r\n + \"&format=png\" // we have a good browser, give us PNGs for better quality\r\n + \"&layers=T\" // just give us the traffic tile layer\r\n + \"&penWidth=\" + ((zoom / 4 * 3) + 1) // make the pen width adjustable based on zoom\r\n + \"&opacity=\" + this.paramOpacity\r\n + \"&frcLevel=1,2\" + (zoom > 10 ? (zoom > 11 ? \",3,4,5\" : \",3\") : \"\");\r\n + \"&roadsegmenttype=\" + this.paramRoadsegmenttype;\r\n if (trafficMode === 'Trànsit en previsió') url += '&starttime=' + date;\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Retorna la url amb els paràmetres necessaris per aconseguir una ruta\r\n * @param waypoints \r\n */\r\n getFastestPathUrl(waypoints: string[]) {\r\n var url: string;\r\n url = this.urlRoutingApi + \"?Action=FindRoute\"\r\n + \"&Units=1\"\r\n + \"&MaxAlternates=0\"\r\n + \"&UseTraffic=true\"\r\n + \"&RouteOutputFields=S,P,B\";\r\n for (var i = 0; i < waypoints.length; i++) {\r\n url += '&wp_' + (i + 1).toString() + '=' + waypoints[i];\r\n }\r\n\r\n\r\n return url + \"&Token=\" + this.token + \"&format=json\";\r\n }\r\n\r\n\r\n /**\r\n * Calculem el quadKey des de les coordenades x, y i el zoom\r\n * @param tile google.maps.Point tile.x and tile.y\r\n * @param zoom zoom map\r\n */\r\n getQuadKey(tile: google.maps.Point, zoom: number): string {\r\n var quadKey: string = '';\r\n\r\n for (let i = zoom; i > 0; i--) {\r\n let digit = 0;\r\n let mask = 1 << (i - 1);\r\n\r\n if ((tile.x & mask) != 0) {\r\n digit++;\r\n }\r\n\r\n if ((tile.y & mask) != 0) {\r\n digit++;\r\n digit++;\r\n }\r\n\r\n quadKey += digit;\r\n }\r\n\r\n return quadKey;\r\n }\r\n\r\n}\r\n","import { Injectable, ChangeDetectorRef } from \"@angular/core\";\r\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from \"@angular/common/http\";\r\nimport { Observable } from \"rxjs\";\r\nimport { finalize, takeUntil } from \"rxjs/operators\";\r\nimport { LoaderService } from './loader.service';\r\n\r\n@Injectable()\r\nexport class LoaderInterceptor implements HttpInterceptor {\r\n \r\n\r\n constructor(public loaderService: LoaderService) { }\r\n intercept(req: HttpRequest, next: HttpHandler): Observable> { \r\n this.loaderService.show();\r\n return next.handle(req).pipe(\r\n finalize(() => {\r\n this.loaderService.hide();\r\n })\r\n );\r\n \r\n \r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class LoaderService {\r\n isLoading = new Subject();\r\n \r\n show() {\r\n this.isLoading.next(true);\r\n }\r\n hide() {\r\n this.isLoading.next(false);\r\n }\r\n}","// This file can be replaced during build by using the `fileReplacements` array.\r\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\r\n// The list of file replacements can be found in `angular.json`.\r\n\r\nexport const environment = {\r\n production: false,\r\n apiInfotransitHost: \"http://localhost\",\r\n inrixTokenHost: \"http://localhost\",\r\n urlTilesInrix: \"http://infotransit.racc.es/tiles/TilesService.asmx/GetTile?options=\"\r\n};\r\n\r\n/*\r\n * For easier debugging in development mode, you can import the following file\r\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\r\n *\r\n * This import should be commented out in production mode because it will have a negative impact\r\n * on performance if an error is thrown.\r\n */\r\n// import 'zone.js/dist/zone-error'; // Included with Angular CLI.\r\n","import 'hammerjs';\r\nimport { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule)\r\n .catch(err => console.error(err));\r\n","export const STYLE: google.maps.MapTypeStyle[] = [\r\n {\r\n featureType: \"road\",\r\n elementType: \"geometry.fill\",\r\n stylers: [\r\n {\r\n saturation: -100\r\n }\r\n ]\r\n },\r\n {\r\n featureType: \"road\",\r\n elementType: \"geometry.stroke\",\r\n stylers: [\r\n {\r\n saturation: -100\r\n },\r\n {\r\n visibility: \"on\"\r\n }\r\n ]\r\n },\r\n {\r\n featureType: \"road\",\r\n elementType: \"labels\",\r\n stylers: [\r\n {\r\n saturation: -75\r\n }\r\n ]\r\n },\r\n {\r\n featureType: \"road.arterial\",\r\n elementType: \"geometry\",\r\n stylers: [\r\n {\r\n color: \"#dddddd\"\r\n },\r\n {\r\n saturation: -100\r\n }\r\n ]\r\n },\r\n {\r\n featureType: \"road.local\",\r\n elementType: \"geometry.fill\",\r\n stylers: [\r\n {\r\n color: \"#dddddd\"\r\n },\r\n {\r\n saturation: -100\r\n }\r\n ]\r\n }\r\n];"]}