{ "version": 3, "sources": ["src/app/observations/geocoding.service.ts", "src/app/observations/observation-marker-observer.service.ts", "src/app/observations/observation-marker-weather-station.service.ts", "src/app/observations/observation-marker-webcam.service.ts", "src/app/observations/observations.service.ts", "src/app/providers/map-service/elevation.service.ts", "src/app/providers/map-service/coordinate-data.service.ts"], "sourcesContent": ["import { Injectable, inject } from \"@angular/core\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { Observable } from \"rxjs\";\nimport { FeatureCollection, Point } from \"geojson\";\n\n@Injectable()\nexport class GeocodingService {\n private http = inject(HttpClient);\n private translateService = inject(TranslateService);\n\n private readonly osmNominatimApi = \"https://nominatim.openstreetmap.org/search\";\n private readonly osmNominatimCountries = \"at,it\";\n\n searchLocation(query: string, limit = 8): Observable> {\n // https://nominatim.org/release-docs/develop/api/Search/\n const { osmNominatimApi, osmNominatimCountries } = this;\n const params: Record = {\n \"accept-language\": this.translateService.currentLang,\n countrycodes: osmNominatimCountries,\n format: \"geojson\",\n limit: String(limit),\n q: query,\n };\n return this.http.get>(osmNominatimApi, { params });\n }\n}\n\nexport interface GeocodingProperties {\n place_id: number;\n osm_type: string;\n osm_id: number;\n display_name: string;\n place_rank: number;\n category: string;\n type: string;\n importance: number;\n}\n", "import { Injectable, inject } from \"@angular/core\";\nimport { Marker } from \"leaflet\";\nimport { GenericObservation } from \"./models/generic-observation.model\";\nimport { makeIcon } from \"./make-icon\";\nimport { ObservationMarkerService } from \"./observation-marker.service\";\n\n@Injectable()\nexport class ObservationMarkerObserverService> {\n private observationMarkerService = inject>(ObservationMarkerService);\n\n createMarker(observation: T, isHighlighted = false): Marker | undefined {\n try {\n const filterSelectionValue = isHighlighted ? this.observationMarkerService.highlighted : undefined;\n const icon = makeIcon(\n observation.aspect,\n \"#898989\",\n filterSelectionValue?.radius ?? 20,\n filterSelectionValue?.color ?? \"#ca0020\",\n filterSelectionValue?.borderColor ?? \"#000\",\n filterSelectionValue?.labelColor ?? \"#000\",\n filterSelectionValue?.labelFontSize ?? 12,\n undefined,\n this.observationMarkerService.getLabel(observation),\n );\n return this.observationMarkerService.createMarkerForIcon(observation, icon, filterSelectionValue);\n } catch (e) {\n console.error(e);\n throw e;\n }\n }\n}\n", "import { inject, Injectable } from \"@angular/core\";\nimport { Marker } from \"leaflet\";\nimport { degreeToAspect, GenericObservation } from \"./models/generic-observation.model\";\nimport { Aspect } from \"../enums/enums\";\nimport { makeIcon } from \"./make-icon\";\nimport { ObservationMarkerService } from \"./observation-marker.service\";\nimport type { FeatureProperties } from \"../../../observations-api/src/fetch/weather-stations\";\n\nconst snowHeightThresholds = [0, 1, 10, 25, 50, 100, 200, 300, 1000];\nconst elevationColors = {\n \"0\": \"#FFFFFE\",\n \"1\": \"#FFFFB3\",\n \"2\": \"#B0FFBC\",\n \"3\": \"#8CFFFF\",\n \"4\": \"#03CDFF\",\n \"5\": \"#0481FF\",\n \"6\": \"#035BBE\",\n \"7\": \"#784BFF\",\n \"8\": \"#CC0CE8\",\n};\n\nconst snowDifferenceThresholds = [-20, -10, -5, 1, 5, 10, 20, 30, 50, 75, 500];\nconst snowDifferenceColors = {\n \"0\": \"#ff6464\",\n \"1\": \"#ffa0a0\",\n \"2\": \"#ffd2d2\",\n \"3\": \"#fff\",\n \"4\": \"#FFFFB3\",\n \"5\": \"#B0FFBC\",\n \"6\": \"#8CFFFF\",\n \"7\": \"#03CDFF\",\n \"8\": \"#0481FF\",\n \"9\": \"#035BBE\",\n \"10\": \"#784BFF\",\n \"11\": \"#CC0CE8\",\n};\n\nconst drySnowfallLevelThresholds = [0, 500, 700, 900, 1100, 1300, 1500, 1700, 1900, 2100, 2500, 2700];\nconst drySnowfallLevelColors = {\n \"0\": \"#9f80ff\",\n \"1\": \"#784cff\",\n \"2\": \"#0f5abe\",\n \"3\": \"#1380ff\",\n \"4\": \"#19cdff\",\n \"5\": \"#8fffff\",\n \"6\": \"#b0ffbc\",\n \"7\": \"#ffff73\",\n \"8\": \"#ffbe7d\",\n \"9\": \"#ff9b41\",\n \"10\": \"#ff5a41\",\n \"11\": \"#ff1e23\",\n \"12\": \"#fa3c96\",\n};\n\nconst temperatureThresholds = [-25, -20, -15, -10, -5, 0, 5, 10, 15, 20, 25, 100];\nconst temperatureColors = {\n \"0\": \"#9f80ff\",\n \"1\": \"#784cff\",\n \"2\": \"#0f5abe\",\n \"3\": \"#1380ff\",\n \"4\": \"#19cdff\",\n \"5\": \"#8fffff\",\n \"6\": \"#b0ffbc\",\n \"7\": \"#ffff73\",\n \"8\": \"#ffbe7d\",\n \"9\": \"#ff9b41\",\n \"10\": \"#ff5a41\",\n \"11\": \"#ff1e23\",\n \"12\": \"#fa3c96\",\n};\n\nconst dewPointThresholds = [-25, -20, -15, -10, -5, -3, -2, -1.5, -1, -0.8, -0.6, -0.4, -0.2, 100];\nconst dewPointColors = {\n \"0\": \"#9f80ff\",\n \"1\": \"#784cff\",\n \"2\": \"#0f5abe\",\n \"3\": \"#1380ff\",\n \"4\": \"#19cdff\",\n \"5\": \"#8fffff\",\n \"6\": \"#b0ffbc\",\n \"7\": \"#ffff73\",\n \"8\": \"#ffbe7d\",\n \"9\": \"#fc9272\",\n \"10\": \"#fb6a4a\",\n \"11\": \"#ef3b2c\",\n \"12\": \"#cb181d\",\n \"13\": \"#a50f15\",\n \"14\": \"#67000d\",\n};\n\nconst relativeHumidityThresholds = [20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 150];\nconst relativeHumidityColors = {\n \"0\": \"#fff\",\n \"1\": \"#ced1d8\",\n \"2\": \"#9ca4b1\",\n \"3\": \"#648594\",\n \"4\": \"#4499c0\",\n \"5\": \"#1cafe2\",\n \"6\": \"#1cc3ef\",\n \"7\": \"#76cfc9\",\n \"8\": \"#c4dd99\",\n \"9\": \"#f0de70\",\n \"10\": \"#f9c442\",\n \"11\": \"#fbad0b\",\n \"12\": \"#ff8b00\",\n \"13\": \"#fc6d04\",\n \"14\": \"#ff4802\",\n \"15\": \"#dc3000\",\n \"16\": \"#b31901\",\n \"17\": \"#8a0007\",\n};\n\nconst surfaceHoarThresholds = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 100];\nconst surfaceHoarColors = {\n \"0\": \"#fff\",\n \"1\": \"#f7fbff\",\n \"2\": \"#deebf7\",\n \"3\": \"#c6dbef\",\n \"4\": \"#9ecae1\",\n \"5\": \"#6baed6\",\n \"6\": \"#4292c6\",\n \"7\": \"#2171b5\",\n \"8\": \"#08519c\",\n \"9\": \"#08306b\",\n};\n\nconst globalRadiationThresholds = [200, 400, 600, 800, 1000, 1200, 2000];\nconst windThresholds = [5, 10, 20, 40, 60, 80, 300];\nconst windColors = {\n \"0\": \"#ffff64\",\n \"1\": \"#c8ff64\",\n \"2\": \"#96ff96\",\n \"3\": \"#32c8ff\",\n \"4\": \"#6496ff\",\n \"5\": \"#9664ff\",\n \"6\": \"#ff3232\",\n};\n\n// FATMAP\nconst aspectColors = {\n [Aspect.N]: \"#2f74f9\",\n [Aspect.NE]: \"#96c0fc\",\n [Aspect.E]: \"#b3b3b3\",\n [Aspect.SE]: \"#f6ba91\",\n [Aspect.S]: \"#ef6d25\",\n [Aspect.SW]: \"#6c300b\",\n [Aspect.W]: \"#000000\",\n [Aspect.NW]: \"#113570\",\n};\n\nexport enum WeatherStationParameter {\n GlobalRadiation = \"GlobalRadiation\",\n SnowHeight = \"SnowHeight\",\n SnowDifference = \"SnowDifference\",\n AirTemperature = \"AirTemperature\",\n AirTemperatureMax = \"AirTemperatureMax\",\n AirTemperatureMin = \"AirTemperatureMin\",\n SurfaceTemperature = \"SurfaceTemperature\",\n SurfaceHoar = \"SurfaceHoar\",\n SurfaceHoarCalc = \"SurfaceHoarCalc\",\n DewPoint = \"DewPoint\",\n RelativeHumidity = \"RelativeHumidity\",\n WindDirection = \"WindDirection\",\n WindSpeed = \"WindSpeed\",\n WindGust = \"WindGust\",\n DrySnowfallLevel = \"DrySnowfallLevel\",\n}\n\n@Injectable()\nexport class ObservationMarkerWeatherStationService>> {\n private observationMarkerService = inject>(ObservationMarkerService);\n\n public weatherStationLabel: WeatherStationParameter | undefined = undefined;\n\n readonly allParameters: WeatherStationParameter[] = Object.values(WeatherStationParameter);\n\n createMarker(observation: T, isHighlighted = false): Marker | undefined {\n try {\n const filterSelectionValue = isHighlighted ? this.observationMarkerService.highlighted : undefined;\n const icon = makeIcon(\n observation.aspect,\n \"#898989\",\n filterSelectionValue?.radius ?? 30,\n filterSelectionValue?.color ?? this.toMarkerColor(observation),\n filterSelectionValue?.borderColor ?? \"#555555\",\n filterSelectionValue?.labelColor ?? \"#000\",\n filterSelectionValue?.labelFontSize ?? 10,\n undefined,\n this.getLabel(observation),\n );\n return this.observationMarkerService.createMarkerForIcon(observation, icon, filterSelectionValue);\n } catch (e) {\n console.error(e);\n throw e;\n }\n }\n\n toLabelKey(parameter: WeatherStationParameter): `observations.weatherStations.tooltips.${string}` {\n switch (parameter) {\n case WeatherStationParameter.SnowHeight:\n return \"observations.weatherStations.tooltips.snowHeight\";\n case WeatherStationParameter.SnowDifference:\n return \"observations.weatherStations.tooltips.snowDifference\";\n case WeatherStationParameter.AirTemperature:\n return \"observations.weatherStations.tooltips.airTemperature\";\n case WeatherStationParameter.AirTemperatureMax:\n return \"observations.weatherStations.tooltips.airTemperatureMax\";\n case WeatherStationParameter.AirTemperatureMin:\n return \"observations.weatherStations.tooltips.airTemperatureMin\";\n case WeatherStationParameter.SurfaceTemperature:\n return \"observations.weatherStations.tooltips.surfaceTemperature\";\n case WeatherStationParameter.DewPoint:\n return \"observations.weatherStations.tooltips.dewPoint\";\n case WeatherStationParameter.SurfaceHoar:\n return \"observations.weatherStations.tooltips.surfaceHoar\";\n case WeatherStationParameter.SurfaceHoarCalc:\n return \"observations.weatherStations.tooltips.surfaceHoarCalc\";\n case WeatherStationParameter.WindSpeed:\n return \"observations.weatherStations.tooltips.windSpeed\";\n case WeatherStationParameter.WindGust:\n return \"observations.weatherStations.tooltips.windGust\";\n case WeatherStationParameter.WindDirection:\n return \"observations.weatherStations.tooltips.windDirection\";\n case WeatherStationParameter.RelativeHumidity:\n return \"observations.weatherStations.tooltips.relativeHumidity\";\n case WeatherStationParameter.GlobalRadiation:\n return \"observations.weatherStations.tooltips.globalRadiation\";\n case WeatherStationParameter.DrySnowfallLevel:\n return \"observations.weatherStations.tooltips.drySnowfallLevel\";\n }\n }\n\n toIcon(parameter: WeatherStationParameter): `ph ph-${string}` {\n switch (parameter) {\n case WeatherStationParameter.SnowHeight:\n return \"ph ph-arrows-vertical\";\n case WeatherStationParameter.SnowDifference:\n return \"ph ph-trend-up\";\n case WeatherStationParameter.AirTemperature:\n return \"ph ph-thermometer-simple\";\n case WeatherStationParameter.AirTemperatureMax:\n return \"ph ph-thermometer-simple\";\n case WeatherStationParameter.AirTemperatureMin:\n return \"ph ph-thermometer-simple\";\n case WeatherStationParameter.SurfaceTemperature:\n return \"ph ph-thermometer-cold\";\n case WeatherStationParameter.DewPoint:\n return \"ph ph-thermometer-hot\";\n case WeatherStationParameter.SurfaceHoar:\n return \"ph ph-caret-down\";\n case WeatherStationParameter.SurfaceHoarCalc:\n return \"ph ph-caret-line-down\";\n case WeatherStationParameter.WindSpeed:\n return \"ph ph-wind\";\n case WeatherStationParameter.WindGust:\n return \"ph ph-tornado\";\n case WeatherStationParameter.WindDirection:\n return \"ph ph-arrow-up-right\";\n case WeatherStationParameter.RelativeHumidity:\n return \"ph ph-drop\";\n case WeatherStationParameter.GlobalRadiation:\n return \"ph ph-sun\";\n case WeatherStationParameter.DrySnowfallLevel:\n return \"ph ph-drop-half\";\n }\n }\n\n toStatistics(observation: T): FeatureProperties[\"statistics\"][keyof FeatureProperties[\"statistics\"]] {\n const data: FeatureProperties = observation.$data;\n const statistics = data.statistics;\n switch (this.weatherStationLabel) {\n case WeatherStationParameter.GlobalRadiation:\n return statistics?.ISWR;\n case WeatherStationParameter.SnowHeight:\n return statistics?.HS;\n case WeatherStationParameter.SnowDifference:\n return statistics?.HS;\n case WeatherStationParameter.AirTemperature:\n return statistics?.TA;\n case WeatherStationParameter.AirTemperatureMax:\n return statistics?.TA;\n case WeatherStationParameter.AirTemperatureMin:\n return statistics?.TA;\n case WeatherStationParameter.SurfaceTemperature:\n return statistics?.TSS;\n case WeatherStationParameter.DewPoint:\n return statistics?.TD;\n case WeatherStationParameter.RelativeHumidity:\n return statistics?.RH;\n case WeatherStationParameter.WindSpeed:\n return statistics?.VW;\n case WeatherStationParameter.WindDirection:\n return statistics?.DW;\n case WeatherStationParameter.WindGust:\n return statistics?.VW_MAX;\n case WeatherStationParameter.DrySnowfallLevel:\n return statistics?.SnowLine;\n default:\n return undefined;\n }\n }\n\n toValue(observation: T): number {\n const data: FeatureProperties = observation.$data;\n switch (this.weatherStationLabel) {\n case WeatherStationParameter.GlobalRadiation:\n return this.toStatistics(observation)?.average;\n case WeatherStationParameter.SnowHeight:\n return this.toStatistics(observation)?.average;\n case WeatherStationParameter.SnowDifference:\n return this.toStatistics(observation)?.delta;\n case WeatherStationParameter.AirTemperature:\n return this.toStatistics(observation)?.average;\n case WeatherStationParameter.AirTemperatureMax:\n return this.toStatistics(observation)?.max;\n case WeatherStationParameter.AirTemperatureMin:\n return this.toStatistics(observation)?.min;\n case WeatherStationParameter.SurfaceTemperature:\n return this.toStatistics(observation)?.average;\n case WeatherStationParameter.SurfaceHoar:\n return this.getSurfaceHoar(data);\n case WeatherStationParameter.SurfaceHoarCalc:\n return this.calcSurfaceHoarProbability(data);\n case WeatherStationParameter.DewPoint:\n return this.toStatistics(observation)?.average;\n case WeatherStationParameter.RelativeHumidity:\n return this.toStatistics(observation)?.average;\n case WeatherStationParameter.WindSpeed:\n return this.toStatistics(observation)?.average;\n case WeatherStationParameter.WindDirection:\n return this.toStatistics(observation)?.median;\n case WeatherStationParameter.WindGust:\n return this.toStatistics(observation)?.max;\n case WeatherStationParameter.DrySnowfallLevel:\n return this.toStatistics(observation)?.max;\n default:\n return NaN;\n }\n }\n\n toMarkerColor(observation: T): string {\n const value = this.toValue(observation);\n if (typeof value !== \"number\" || !isFinite(value)) {\n return \"white\";\n }\n switch (this.weatherStationLabel) {\n case WeatherStationParameter.GlobalRadiation:\n return this.globalRadiationColor(value);\n case WeatherStationParameter.SnowHeight:\n return this.snowHeightColor(value);\n case WeatherStationParameter.SnowDifference:\n return this.snowDifferenceColor(value);\n case WeatherStationParameter.AirTemperature:\n return this.temperatureColor(value);\n case WeatherStationParameter.AirTemperatureMax:\n return this.temperatureColor(value);\n case WeatherStationParameter.AirTemperatureMin:\n return this.temperatureColor(value);\n case WeatherStationParameter.SurfaceTemperature:\n return this.temperatureColor(value);\n case WeatherStationParameter.SurfaceHoar:\n return this.surfaceHoarColor(value);\n case WeatherStationParameter.SurfaceHoarCalc:\n return this.surfaceHoarColor(value);\n case WeatherStationParameter.DewPoint:\n return this.dewPointColor(value);\n case WeatherStationParameter.RelativeHumidity:\n return this.relativeHumidityColor(value);\n case WeatherStationParameter.WindSpeed:\n return this.windColor(value);\n case WeatherStationParameter.WindDirection:\n return value ? aspectColors[degreeToAspect(value)] : \"white\";\n case WeatherStationParameter.WindGust:\n return this.windColor(value);\n case WeatherStationParameter.DrySnowfallLevel:\n return this.drySnowfallLevelColor(value);\n default:\n return \"white\";\n }\n }\n\n private getSurfaceHoar(data: T[\"$data\"]): number {\n const tempDiff = data.TD - data.OFT;\n if (data.OFT < 0 && tempDiff > 0) {\n return tempDiff;\n } else {\n return undefined;\n }\n }\n\n // Lehning et. al. 2002\n private calcSurfaceHoarProbability(data: T[\"$data\"]): number {\n const grainSize = 1; // assumption\n //z0 0.5 to 2.4 mm for snow surfaces.\n const z0 = (0.003 + grainSize / 5) / 1000; //Lehning 2000, for grainSize = 1 mm only 0,203\n\n const lw = 2256 * 1000;\n const li = 2838 * 1000;\n\n let result = -1;\n\n if (data.HS > 0 && data.OFT <= 0) {\n const satp_w = 610.5 * Math.exp((lw * data.LT) / (461.9 * (data.LT + 273.16) * 273.16));\n const satp_i = 610.5 * Math.exp((li * data.OFT) / (461.9 * (data.OFT + 273.16) * 273.16));\n result =\n ((((-Math.pow(0.4, 2) * data.WG) / (0.74 * Math.pow(Math.log(2 / z0), 2))) * 0.622 * li) / (287 * data.LT)) *\n (satp_w * data.RH - satp_i);\n }\n\n return result;\n }\n\n private snowHeightColor(snowHeight: number) {\n const index = snowHeightThresholds.findIndex((e) => e >= snowHeight);\n return index >= 0 ? elevationColors[index] : \"white\";\n }\n\n private snowDifferenceColor(snowDifference: number) {\n const index = snowDifferenceThresholds.findIndex((e) => e >= snowDifference);\n return index >= 0 ? snowDifferenceColors[index] : \"white\";\n }\n\n private drySnowfallLevelColor(value: number) {\n const index = drySnowfallLevelThresholds.findIndex((e) => e >= value);\n return index >= 0 ? drySnowfallLevelColors[index] : \"white\";\n }\n\n private temperatureColor(temperature: number) {\n const index = temperatureThresholds.findIndex((e) => e >= temperature);\n return index >= 0 ? temperatureColors[index] : \"white\";\n }\n\n private surfaceHoarColor(surfaceHoar: number) {\n const index = surfaceHoarThresholds.findIndex((e) => e >= surfaceHoar);\n return index >= 0 ? surfaceHoarColors[index] : \"white\";\n }\n\n private dewPointColor(dewPoint: number) {\n const index = dewPointThresholds.findIndex((e) => e >= dewPoint);\n return index >= 0 ? dewPointColors[index] : \"white\";\n }\n\n private relativeHumidityColor(relativeHumidity: number) {\n const index = relativeHumidityThresholds.findIndex((e) => e >= relativeHumidity);\n return index >= 0 ? relativeHumidityColors[index] : \"white\";\n }\n\n private windColor(wind: number) {\n const index = windThresholds.findIndex((e) => e >= wind);\n return index >= 0 ? windColors[index] : \"white\";\n }\n\n private globalRadiationColor(globalRadiation: number) {\n const index = globalRadiationThresholds.findIndex((e) => e >= globalRadiation);\n return index >= 0 ? windColors[index] : \"white\";\n }\n\n private getLabel(observation: T) {\n const value = this.toValue(observation);\n if (typeof value !== \"number\" || !isFinite(value)) {\n return \"\";\n } else if (this.weatherStationLabel === WeatherStationParameter.WindDirection) {\n return degreeToAspect(value);\n } else if (this.weatherStationLabel === WeatherStationParameter.DrySnowfallLevel) {\n return Math.round(value / 100);\n } else {\n return Math.round(value);\n }\n }\n}\n", "import { Injectable, inject } from \"@angular/core\";\nimport { Marker } from \"leaflet\";\nimport { GenericObservation } from \"./models/generic-observation.model\";\nimport { makeIcon } from \"./make-icon\";\nimport { ObservationMarkerService } from \"./observation-marker.service\";\n\n@Injectable()\nexport class ObservationMarkerWebcamService> {\n private observationMarkerService = inject>(ObservationMarkerService);\n\n createMarker(observation: T, isHighlighted = false): Marker | undefined {\n try {\n const filterSelectionValue = isHighlighted ? this.observationMarkerService.highlighted : undefined;\n const icon = makeIcon(\n observation.aspect,\n \"#898989\",\n filterSelectionValue?.radius ?? 20,\n filterSelectionValue?.color ?? \"black\",\n filterSelectionValue?.borderColor ?? \"#000\",\n filterSelectionValue?.labelColor ?? \"#000\",\n filterSelectionValue?.labelFontSize ?? 6,\n undefined,\n this.observationMarkerService.getLabel(observation),\n );\n return this.observationMarkerService.createMarkerForIcon(observation, icon, filterSelectionValue);\n } catch (e) {\n console.error(e);\n throw e;\n }\n }\n}\n", "import { inject, Injectable } from \"@angular/core\";\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\nimport { AuthenticationService } from \"../providers/authentication-service/authentication.service\";\nimport { ConstantsService } from \"../providers/constants-service/constants.service\";\nimport { GenericObservation } from \"./models/generic-observation.model\";\nimport { Observable } from \"rxjs\";\nimport { map, mergeAll } from \"rxjs/operators\";\nimport { ObservationFilterService } from \"./observation-filter.service\";\nimport { environment } from \"../../environments/environment\";\nimport { formatDate } from \"@angular/common\";\nimport { saveAs } from \"file-saver\";\n\n@Injectable()\nexport class AlbinaObservationsService {\n private http = inject(HttpClient);\n private filter = inject>(ObservationFilterService);\n private authenticationService = inject(AuthenticationService);\n private constantsService = inject(ConstantsService);\n\n getGenericObservations(): Observable {\n const url = environment.apiBaseUrl + \"../api_ext/observations\";\n return this.getGenericObservations0(url, this.filter.dateRangeParams);\n }\n\n getObservers(): Observable {\n const url = environment.apiBaseUrl + \"../api_ext/observers\";\n return this.getGenericObservations0(url);\n }\n\n getWeatherStations(): Observable {\n const url = environment.apiBaseUrl + \"../api_ext/weather-stations\";\n return this.getGenericObservations0(url, this.filter.dateRangeParams);\n }\n\n getGenericWebcams(): Observable {\n const url = environment.apiBaseUrl + \"../api_ext/webcams\";\n return this.getGenericObservations0(url);\n }\n\n private getGenericObservations0(url: string, params = {}): Observable {\n return this.http.get(url, { params }).pipe(\n mergeAll(),\n map((o) => ({\n ...o,\n eventDate: o.eventDate ? new Date(o.eventDate) : undefined,\n reportDate: o.reportDate ? new Date(o.reportDate) : undefined,\n })),\n );\n }\n\n postObservation(observation: GenericObservation): Observable {\n const body = this.serializeObservation(observation);\n const url = environment.apiBaseUrl + \"../api_ext/observations\";\n return this.http.post(url, body);\n }\n\n private serializeObservation(observation: GenericObservation) {\n return {\n ...observation,\n eventDate: observation.eventDate instanceof Date ? getISOString(observation.eventDate) : observation.eventDate,\n reportDate:\n observation.reportDate instanceof Date ? getISOString(observation.reportDate) : observation.reportDate,\n };\n }\n\n async deleteObservation(observation: GenericObservation): Promise {\n const body = this.serializeObservation(observation);\n const url = environment.apiBaseUrl + \"../api_ext/observations\";\n await this.http.delete(url, { body }).toPromise();\n }\n\n getStatistics() {\n if (!this.filter.startDate || !this.filter.endDate) {\n return;\n }\n const url =\n this.constantsService.getServerUrl() +\n \"observations/export?\" +\n this.constantsService\n .createSearchParams([\n [\"startDate\", this.constantsService.getISOStringWithTimezoneOffset(this.filter.startDate)],\n [\"endDate\", this.constantsService.getISOStringWithTimezoneOffset(this.filter.endDate)],\n ])\n .toString();\n const headers = new HttpHeaders({ Accept: \"text/csv\" });\n this.http.get(url, { headers, responseType: \"blob\" }).subscribe((blob) => {\n const startDate = this.constantsService.getISODateString(this.filter.startDate);\n const endDate = this.constantsService.getISODateString(this.filter.endDate);\n const filename = `observations_${startDate}_${endDate}.csv`;\n saveAs(blob, filename);\n console.log(\"Observations loaded.\");\n });\n }\n}\n\nfunction getISOString(date: Date) {\n // like Date.toISOString(), but not using UTC\n return formatDate(date, \"yyyy-MM-ddTHH:mm:ss\", \"en-US\");\n}\n", "import { Injectable, inject } from \"@angular/core\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { Observable } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\n\ninterface Request {\n Koordinate: string;\n CRS: number;\n name: \"hoehenservice\";\n}\n\ninterface Response {\n abfragestatus: \"erfolgreich\" | \"Die Abfrage-Koordinaten befinden sich nicht in Österreich.\";\n abfragekoordinaten: {\n rechtswert: number;\n hochwert: number;\n CRS: number;\n };\n hoeheDTM: number;\n hoeheDSM: number;\n einheit: string;\n datengrundlage: string;\n flugjahr: string;\n voibos: string;\n}\n\n@Injectable()\nexport class ElevationService {\n private http = inject(HttpClient);\n\n private CRS = 4326;\n private readonly url = \"https://voibos.rechenraum.com/voibos/voibos\";\n\n getElevation(lat: number, lng: number): Observable {\n const params = {\n Koordinate: `${lng},${lat}`,\n CRS: this.CRS,\n name: \"hoehenservice\",\n };\n\n return this.http.get(this.url, { params }).pipe(\n map((res: Response) => {\n if (res.abfragestatus !== \"erfolgreich\") return;\n\n const elevation = Math.round(res.hoeheDTM);\n return elevation;\n }),\n );\n }\n}\n", "//implement a service which returns the height, aspect name and angle of two coordinates using plane.model.ts\n\nimport { Injectable, inject } from \"@angular/core\";\nimport { ElevationService } from \"../map-service/elevation.service\";\nimport { Observable } from \"rxjs\";\n\ninterface Point {\n lat: number;\n lng: number;\n elevation: number;\n}\n\nexport interface PlaneData {\n height: number;\n aspect: string;\n slope: number;\n}\n\nexport interface Plane {\n EARTH_RADIUS: number;\n ASPECTS: string[];\n lat: number;\n lng: number;\n\n getCoordData(lat: number, lng: number): Observable;\n}\n\n@Injectable()\nexport class CoordinateDataService implements Plane {\n private elevationService = inject(ElevationService);\n\n public EARTH_RADIUS = 6371000;\n public ASPECTS = [\"N\", \"NE\", \"E\", \"SE\", \"S\", \"SW\", \"W\", \"NW\"];\n public lat: number;\n public lng: number;\n\n private p1: Point;\n private p2: Point;\n private p3: Point;\n\n //public function to set coordinates, fetch height for each point, return aspectName and angle of plane\n public getCoordData(lat: number, lng: number): Observable {\n this.setCoordinates(lat, lng);\n\n const p1Elevation = this.elevationService.getElevation(this.p1.lat, this.p1.lng);\n\n const p2Elevation = this.elevationService.getElevation(this.p2.lat, this.p2.lng);\n\n const p3Elevation = this.elevationService.getElevation(this.p3.lat, this.p3.lng);\n\n return new Observable((observer) => {\n p1Elevation.subscribe((elevation) => {\n this.p1.elevation = elevation;\n p2Elevation.subscribe((elevation) => {\n this.p2.elevation = elevation;\n p3Elevation.subscribe((elevation) => {\n this.p3.elevation = elevation;\n\n observer.next({\n height: this.p1.elevation,\n aspect: this.getAspectName(),\n slope: this.getAngle(),\n });\n });\n });\n });\n });\n }\n\n private addMetersToCoords(lat: number, lng: number, d_lat = 0, d_lng = 0) {\n const new_lat = lat + (d_lat / this.EARTH_RADIUS) * (180 / Math.PI);\n const new_lng = lng + ((d_lng / this.EARTH_RADIUS) * (180 / Math.PI)) / Math.cos((lat * Math.PI) / 180);\n\n return { lat: new_lat, lng: new_lng };\n }\n\n private setCoordinates(lat: number, lng: number) {\n this.lat = lat;\n this.lng = lng;\n\n this.p1 = { lat, lng, elevation: 0 };\n const p2Coords = this.addMetersToCoords(lat, lng, 10, 0);\n this.p2 = { lat: p2Coords.lat, lng: p2Coords.lng, elevation: 0 };\n const p3Coords = this.addMetersToCoords(lat, lng, 0, 10);\n this.p3 = { lat: p3Coords.lat, lng: p3Coords.lng, elevation: 0 };\n }\n\n private subtractVectors(v1: number[], v2: number[]) {\n // v1 - v2\n const d_lat = (((v1[0] - v2[0]) * Math.PI) / 180) * this.EARTH_RADIUS;\n const d_lng =\n (((v1[1] - v2[1]) * Math.PI) / 180) * this.EARTH_RADIUS * Math.cos((((v1[0] + v2[0]) / 2) * Math.PI) / 180);\n\n return [d_lat, d_lng, v1[2] - v2[2]];\n }\n\n private crossProduct(v1: number[], v2: number[]) {\n // v1 x v2\n return [v1[1] * v2[2] - v1[2] * v2[1], v1[2] * v2[0] - v1[0] * v2[2], v1[0] * v2[1] - v1[1] * v2[0]];\n }\n\n private getNormalVector() {\n const v1 = this.subtractVectors(\n [this.p1.lat, this.p1.lng, this.p1.elevation],\n [this.p2.lat, this.p2.lng, this.p2.elevation],\n );\n const v2 = this.subtractVectors(\n [this.p1.lat, this.p1.lng, this.p1.elevation],\n [this.p3.lat, this.p3.lng, this.p3.elevation],\n );\n\n const normalVector = this.crossProduct(v1, v2);\n if (normalVector[2] < 0) {\n normalVector[0] = -normalVector[0];\n normalVector[1] = -normalVector[1];\n normalVector[2] = -normalVector[2];\n }\n\n return normalVector;\n }\n\n private getVectorLength(v: number[]) {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);\n }\n\n private normalizeVector(v: number[]) {\n const length = this.getVectorLength(v);\n return [v[0] / length, v[1] / length, v[2] / length];\n }\n\n private radToDeg(rad: number) {\n return (rad * 180) / Math.PI;\n }\n\n private getAngleBetweenVectors(v1: number[], v2: number[]) {\n const dotProduct = v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];\n const l1 = this.getVectorLength(v1);\n const l2 = this.getVectorLength(v2);\n const angle = Math.acos(dotProduct / (l1 * l2));\n\n return this.radToDeg(angle);\n }\n\n private getAspect(): number {\n const normalVector = this.getNormalVector();\n const normalizedNormalVector = this.normalizeVector(normalVector);\n\n const aspect = Math.atan2(normalizedNormalVector[1], normalizedNormalVector[0]);\n const aspectDeg = this.radToDeg(aspect);\n\n if (aspectDeg < 0) return 360 + aspectDeg;\n\n return aspectDeg;\n }\n\n private getAngle(): number {\n const normalVector = this.getNormalVector();\n const verticalVector = [0, 0, 1];\n const angle = this.getAngleBetweenVectors(verticalVector, normalVector);\n return angle;\n }\n\n private getAspectName(): string {\n const index = Math.round(this.getAspect() / 45) % 8;\n return this.ASPECTS[index];\n }\n}\n"], "mappings": "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", "names": ["GeocodingService", "constructor", "http", "inject", "HttpClient", "translateService", "TranslateService", "osmNominatimApi", "osmNominatimCountries", "searchLocation", "query", "limit", "params", "currentLang", "countrycodes", "format", "String", "q", "get", "factory", "\u0275fac", "ObservationMarkerObserverService", "constructor", "observationMarkerService", "inject", "ObservationMarkerService", "createMarker", "observation", "isHighlighted", "filterSelectionValue", "highlighted", "undefined", "icon", "makeIcon", "aspect", "radius", "color", "borderColor", "labelColor", "labelFontSize", "getLabel", "createMarkerForIcon", "e", "console", "error", "factory", "\u0275fac", "snowHeightThresholds", "elevationColors", "snowDifferenceThresholds", "snowDifferenceColors", "drySnowfallLevelThresholds", "drySnowfallLevelColors", "temperatureThresholds", "temperatureColors", "dewPointThresholds", "dewPointColors", "relativeHumidityThresholds", "relativeHumidityColors", "surfaceHoarThresholds", "surfaceHoarColors", "globalRadiationThresholds", "windThresholds", "windColors", "aspectColors", "Aspect", "N", "NE", "E", "SE", "S", "SW", "W", "NW", "WeatherStationParameter", "ObservationMarkerWeatherStationService", "constructor", "observationMarkerService", "inject", "ObservationMarkerService", "weatherStationLabel", "undefined", "allParameters", "Object", "values", "createMarker", "observation", "isHighlighted", "filterSelectionValue", "highlighted", "icon", "makeIcon", "aspect", "radius", "color", "toMarkerColor", "borderColor", "labelColor", "labelFontSize", "getLabel", "createMarkerForIcon", "e", "console", "error", "toLabelKey", "parameter", "SnowHeight", "SnowDifference", "AirTemperature", "AirTemperatureMax", "AirTemperatureMin", "SurfaceTemperature", "DewPoint", "SurfaceHoar", "SurfaceHoarCalc", "WindSpeed", "WindGust", "WindDirection", "RelativeHumidity", "GlobalRadiation", "DrySnowfallLevel", "toIcon", "toStatistics", "statistics", "$data", "ISWR", "HS", "TA", "TSS", "TD", "RH", "VW", "DW", "VW_MAX", "SnowLine", "toValue", "data", "average", "delta", "max", "min", "getSurfaceHoar", "calcSurfaceHoarProbability", "median", "NaN", "value", "isFinite", "globalRadiationColor", "snowHeightColor", "snowDifferenceColor", "temperatureColor", "surfaceHoarColor", "dewPointColor", "relativeHumidityColor", "windColor", "degreeToAspect", "drySnowfallLevelColor", "tempDiff", "OFT", "result", "satp_w", "Math", "exp", "lw", "LT", "satp_i", "li", "pow", "WG", "log", "z0", "snowHeight", "index", "findIndex", "snowDifference", "temperature", "surfaceHoar", "dewPoint", "relativeHumidity", "wind", "globalRadiation", "round", "factory", "\u0275fac", "ObservationMarkerWebcamService", "constructor", "observationMarkerService", "inject", "ObservationMarkerService", "createMarker", "observation", "isHighlighted", "filterSelectionValue", "highlighted", "undefined", "icon", "makeIcon", "aspect", "radius", "color", "borderColor", "labelColor", "labelFontSize", "getLabel", "createMarkerForIcon", "e", "console", "error", "factory", "\u0275fac", "import_file_saver", "AlbinaObservationsService", "constructor", "http", "inject", "HttpClient", "filter", "ObservationFilterService", "authenticationService", "AuthenticationService", "constantsService", "ConstantsService", "getGenericObservations", "url", "environment", "apiBaseUrl", "getGenericObservations0", "dateRangeParams", "getObservers", "getWeatherStations", "getGenericWebcams", "params", "get", "pipe", "mergeAll", "map", "o", "__spreadProps", "__spreadValues", "eventDate", "Date", "undefined", "reportDate", "postObservation", "observation", "body", "serializeObservation", "post", "getISOString", "deleteObservation", "__async", "delete", "toPromise", "getStatistics", "startDate", "endDate", "getServerUrl", "createSearchParams", "getISOStringWithTimezoneOffset", "toString", "headers", "HttpHeaders", "Accept", "responseType", "subscribe", "blob", "getISODateString", "filename", "saveAs", "console", "log", "factory", "\u0275fac", "date", "formatDate", "ElevationService", "constructor", "http", "inject", "HttpClient", "CRS", "url", "getElevation", "lat", "lng", "params", "Koordinate", "name", "get", "pipe", "map", "res", "abfragestatus", "Math", "round", "hoeheDTM", "factory", "\u0275fac", "CoordinateDataService", "constructor", "elevationService", "inject", "ElevationService", "EARTH_RADIUS", "ASPECTS", "getCoordData", "lat", "lng", "setCoordinates", "p1Elevation", "getElevation", "p1", "p2Elevation", "p2", "p3Elevation", "p3", "Observable", "observer", "subscribe", "elevation", "next", "height", "aspect", "getAspectName", "slope", "getAngle", "addMetersToCoords", "d_lat", "d_lng", "new_lat", "Math", "PI", "new_lng", "cos", "p2Coords", "p3Coords", "subtractVectors", "v1", "v2", "crossProduct", "getNormalVector", "normalVector", "getVectorLength", "v", "sqrt", "normalizeVector", "length", "radToDeg", "rad", "getAngleBetweenVectors", "dotProduct", "l1", "l2", "angle", "acos", "getAspect", "normalizedNormalVector", "atan2", "aspectDeg", "verticalVector", "index", "round", "factory", "\u0275fac"] }