Ophelia
From ICO wiki
Meeskond ja rollid
- Siim Kallari (Arendaja, Projektijuht)
- Jorma Rebane (Arendaja)
- Andres Kelper (loobus)
Idee
- Ilmajaama põhine rakendus kus kasutaja saab isikustada, mida ta näha soovib.
- “Nice to have”-ina on võimalus kasutajal endal lisada oma ilmajaamu.
- “Nice to have”-ina maanteameti poolt antud info
Projekti TFS: TFS
Analüüs Link analüüsile
Lõpptoode Lõpptoode
XML Ülesanne
Ilmaandmete XML
<?xml version="1.0"?>
<WeatherStations xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Stations>
<WeatherStation>
<Name>Tallinn-Harku</Name>
<Location>
<Name>Tallinn-Harku</Name>
<Latitude>59.398122222355134</Latitude>
<Longitude>24.602891666624284</Longitude>
</Location>
<Service>
<Name>Ilmateenistus</Name>
</Service>
<Observations>
<WeatherData>
<Phenomenon>Clear</Phenomenon>
<Visibility>20</Visibility>
<Precipitations>0</Precipitations>
<AirPressure>1024.4</AirPressure>
<RelativeHumidity>77</RelativeHumidity>
<AirTemperature>11</AirTemperature>
<WindDirection>40</WindDirection>
<WindSpeed>1.1</WindSpeed>
<WindSpeedMax>1.6</WindSpeedMax>
<WaterLevel>0</WaterLevel>
<WaterTemperature>0</WaterTemperature>
<UVIndex>0</UVIndex>
<AddedAt>2018-05-31T20:48:57Z</AddedAt>
</WeatherData>
</Observations>
</WeatherStation>
<WeatherStation>
<Name>Narva</Name>
<Location>
<Name>Narva</Name>
<Latitude>59.382777777111109</Latitude>
<Longitude>28.206666666666667</Longitude>
</Location>
<Service>
<Name>Ilmateenistus</Name>
</Service>
<Observations>
<WeatherData>
<Phenomenon />
<Visibility>0</Visibility>
<Precipitations />
<AirPressure>0</AirPressure>
<RelativeHumidity>0</RelativeHumidity>
<AirTemperature>11.1</AirTemperature>
<WindDirection>0</WindDirection>
<WindSpeed>0</WindSpeed>
<WindSpeedMax>0</WindSpeedMax>
<WaterLevel>128</WaterLevel>
<WaterTemperature>17.8</WaterTemperature>
<UVIndex>0</UVIndex>
<AddedAt>2018-05-31T20:48:57Z</AddedAt>
</WeatherData>
</Observations>
</WeatherStation>
<WeatherStation>
<Name>Tartu-Tõravere</Name>
<Location>
<Name>Tartu-Tõravere</Name>
<Latitude>58.264072222179834</Latitude>
<Longitude>26.461305555767481</Longitude>
</Location>
<Service>
<Name>Ilmateenistus</Name>
</Service>
<Observations>
<WeatherData>
<Phenomenon>Clear</Phenomenon>
<Visibility>20</Visibility>
<Precipitations>0</Precipitations>
<AirPressure>1024.4</AirPressure>
<RelativeHumidity>53</RelativeHumidity>
<AirTemperature>9.4</AirTemperature>
<WindDirection>99</WindDirection>
<WindSpeed>0.7</WindSpeed>
<WindSpeedMax>1.1</WindSpeedMax>
<WaterLevel>0</WaterLevel>
<WaterTemperature>0</WaterTemperature>
<UVIndex>0</UVIndex>
<AddedAt>2018-05-31T20:48:57Z</AddedAt>
</WeatherData>
</Observations>
</WeatherStation>
<WeatherStation>
<Name>Võru</Name>
<Location>
<Name>Võru</Name>
<Latitude>57.846277777020589</Latitude>
<Longitude>27.019505554963061</Longitude>
</Location>
<Service>
<Name>Ilmateenistus</Name>
</Service>
<Observations>
<WeatherData>
<Phenomenon />
<Visibility>20</Visibility>
<Precipitations>0</Precipitations>
<AirPressure>1024.3</AirPressure>
<RelativeHumidity>62</RelativeHumidity>
<AirTemperature>10</AirTemperature>
<WindDirection>148</WindDirection>
<WindSpeed>0.4</WindSpeed>
<WindSpeedMax>0.6</WindSpeedMax>
<WaterLevel>0</WaterLevel>
<WaterTemperature>0</WaterTemperature>
<UVIndex>0</UVIndex>
<AddedAt>2018-05-31T20:48:57Z</AddedAt>
</WeatherData>
</Observations>
</WeatherStation>
</Stations>
</WeatherStations>
Ilmaandmete XSD
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="WeatherStations" nillable="true" type="WeatherStations" />
<xs:complexType name="WeatherStations">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Stations" type="ArrayOfWeatherStation" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ArrayOfWeatherStation">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="WeatherStation" nillable="true" type="WeatherStation" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="WeatherStation">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="Location" type="Location" />
<xs:element minOccurs="0" maxOccurs="1" name="Service" type="WeatherService" />
<xs:element minOccurs="0" maxOccurs="1" name="Observations" type="ArrayOfWeatherData" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Location">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="Latitude" type="xs:double" />
<xs:element minOccurs="1" maxOccurs="1" name="Longitude" type="xs:double" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="WeatherService">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ArrayOfWeatherData">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="WeatherData" nillable="true" type="WeatherData" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="WeatherData">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Phenomenon" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="Visibility" type="xs:float" />
<xs:element minOccurs="0" maxOccurs="1" name="Precipitations" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="AirPressure" type="xs:float" />
<xs:element minOccurs="1" maxOccurs="1" name="RelativeHumidity" type="xs:float" />
<xs:element minOccurs="1" maxOccurs="1" name="AirTemperature" type="xs:float" />
<xs:element minOccurs="1" maxOccurs="1" name="WindDirection" type="xs:float" />
<xs:element minOccurs="1" maxOccurs="1" name="WindSpeed" type="xs:float" />
<xs:element minOccurs="1" maxOccurs="1" name="WindSpeedMax" type="xs:float" />
<xs:element minOccurs="1" maxOccurs="1" name="WaterLevel" type="xs:float" />
<xs:element minOccurs="1" maxOccurs="1" name="WaterTemperature" type="xs:float" />
<xs:element minOccurs="1" maxOccurs="1" name="UVIndex" type="xs:float" />
<xs:element minOccurs="1" maxOccurs="1" name="AddedAt" type="xs:dateTime" />
</xs:sequence>
</xs:complexType>
</xs:schema>
XSLT: XML->HTML Hetke ilm, sorteeritud kohanime järgi, eemaldatud puudulikud andmed
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<!-- Get weather info as a HTML table -->
<xsl:template match="/WeatherStations/Stations">
<html>
<body>
<h2>Hetke ilm, sorteeritud kohanime järgi, eemaldatud puudulikud andmed</h2>
<table border="1">
<tr bgcolor="#86add7">
<th>Asukoht</th>
<th>Temperatuur</th>
<th>Õhuniiskus</th>
</tr>
<xsl:for-each select="WeatherStation">
<xsl:sort select="Name"/>
<xsl:variable name="AirTemperature" select="Observations[1]/WeatherData/AirTemperature"/>
<xsl:if test="$AirTemperature != 0">
<tr>
<td><xsl:value-of select="Name"/></td>
<td><xsl:value-of select="$AirTemperature"/>°C</td>
<xsl:variable name="RelativeHumidity" select="Observations[1]/WeatherData/RelativeHumidity"/>
<xsl:choose>
<xsl:when test="$RelativeHumidity != 0">
<td><xsl:value-of select="$RelativeHumidity"/>%</td>
</xsl:when>
<xsl:otherwise>
<td>-</td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XSLT: XML->HTML Parimad rannad, sorteeritud veetemperatuuri järgi, kirjeldatud ilmaoluga
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<!-- Get best beaches as a HTML table -->
<xsl:template match="/WeatherStations/Stations">
<html>
<body>
<h2>Parimad rannad, sorteeritud veetemperatuuri järgi, kirjeldatud ilmaoluga</h2>
<table border="1">
<tr bgcolor="#86add7">
<th>Asukoht</th>
<th>Õhk</th>
<th>Vesi</th>
<th>Briis</th>
</tr>
<xsl:for-each select="WeatherStation">
<xsl:sort select="Observations[1]/WeatherData/WaterTemperature" data-type="number" order="descending"/>
<xsl:variable name="AirTemperature" select="Observations[1]/WeatherData/AirTemperature"/>
<xsl:variable name="WaterTemperature" select="Observations[1]/WeatherData/WaterTemperature"/>
<xsl:if test="$AirTemperature != 0 and $WaterTemperature != 0">
<tr>
<td><xsl:value-of select="Name"/></td>
<td><xsl:value-of select="$AirTemperature"/>°C</td>
<td><xsl:value-of select="$WaterTemperature"/>°C</td>
<xsl:variable name="WindSpeedMax" select="Observations[1]/WeatherData/WindSpeedMax"/>
<xsl:choose>
<xsl:when test="$WindSpeedMax > 2.8">
<td>Ränk tuul</td>
</xsl:when>
<xsl:when test="$WindSpeedMax > 1.5">
<td>Mõnus briis</td>
</xsl:when>
<xsl:otherwise>
<td>Vaikne</td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Lõpptoote kasutusjuhend
Vajalikud seaded
- Install node.js
- VS2017 with ASP.NET and .NET Core support
WebOphelia
- OpheliaDAL: Update-Database
- Run WebOphelia
OpheliaKlientRakendus
- npm install
- npm run start
Seeded
- Kaks kasutajat luuakse alguses, nendega saab klientrakenduses sisselogida:
- user@example.com, parool: 123456
- admin@example.com, parool: 123456
Funktsionaalsus
Sisse logimata kasutajale laetakse kaardile markerid, mis annavad ilmainfot erinevatest eesti paikadest, kui neile peale klikkida. Tavakasutaja + admin:
- Saab endale salvestada lemmik kohtasid ja neid eemaldada
Admin
- Näeb kasutajaid ning saab anda või ära võtta neilt õigusi
Logiraamat
01.06.2018
Viimase hetke paanika. XML+XSD lisatud.
27.02.2018
Projekti analüüs Siim: Analüüsi viimistlemine Jorma/Andres: Project setup Järgmine koosolek: 06.03.2018 19:00
20.02.2018
Projekti esimene läbirääkimine, timeline paika. Skoop paika, üldine arusaam missugune projekt tuleb. Siim: Itcollege wiki Andres: TFS setup Jorma: Räägib hr. Poskaga, et teha varem valmis projekt, et lõpetada saaks. Lisaks järgmiseks koosolekuks mõelda projekti arhitektuurilise poole peale
11.02.2018
Meeskonna loomine, arutelu mida teha