Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[MySQL] Regenbuien halen uit neerslag data

Pagina: 1
Acties:

  • mrmartijn
  • Registratie: Augustus 2010
  • Laatst online: 06-11 14:33
Ik zit met een probleem waarvan ik niet de juiste zoektermen in google kan vinden. ik heb een weerstation die elke minuut een regel naar mysql schrijft met de meetdata. 1 van de velden is de hoeveelheid mm regen die die minuut is gevallen. Nu ben ik een statestieken website aan het maken (php) en daar heb ik nu enkele grafieken en tabellen op staan ( http://klant.daling-agro.nl/weather/ ) maar nu wil ik daar ook een lijst van losse regenbuien op hebben staan.

nu moet ik dus een manier bedenken om uit mysql te krijgen
27-07-2013 13:00 - 13:12 55mm
27-07-2013 13:55 - 13:58 23mm

is er een simpele manier om in mysql een tijdrange te krijgen van momenten dat een veld een paar keer achter elkaar 0 is? de regenmeter heeft een preciesie van 0.2 mm per klik dus het kan voorkomen dat er een meting van 0 in een minuut uit komt als er die minuut minder dan 0.2 mm regen is gevallen.

http://blog.brixit.nl - Programming, electronics and guitars. http://debestesupermarktpizza.nl - pizza


  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:34

Onbekend

...

Dat is nauwelijks te doen met 1 query.

Wat je beter kunt doen is in een aparte tabel de regenbuien zelf registreren. Als je vaak de website opvraagt, hoeft hij niet steeds opnieuw diezelfde regenbuien te berekenen.

Om een volledige regenbui te registreren kan je in php een loopje maken die de regels zoekt:
- Lees het laatste record. Is de neerslag > 0? Dan is de bui nog bezig.
- Anders, zoek het laatste record waar de neerslag > 0 is. Is dit record ouder dan X minuten geleden? Dan is de bui volledig afgelopen.
- Lees nu het laatste record waar de neerslag = 0, maar met een tijd die eerder is dan het vorige gevonden record.
- Je hebt nu het begin en eind van de bui gevonden.

Speel ook Balls Connect en Repeat


  • Piemol
  • Registratie: Januari 2006
  • Laatst online: 22-11 14:03
Interessante vraag, een pure mysql oplossing is er niet dat ik weet.

Zelf zou ik een hybride oplossing maken.

Als je alle regenbuien zou willen bekijken:
1. Eerste tijdstip zoeken waarop er neerslag is
2. Vervolgens vanaf dat tijdstip zoeken naar eerst volgende meetpunt dat er weer geen neerslag is
3. Dat definieren als 1 regenbui
4. Vanaf einde regenbui weer naar stap 1.
5. Elke regenbui start en eindtijdstippen in een aparte regenbuien tabel opslaan, en dan kun je vervolgens met de tijdstippen van een regenbui i.c.m. de neerslagstatistieken alle kanten op.
Met de definities van een bui zou je kunnen spelen, of verschillende tabellen opbouwen met verschillende bui-definities.
Hiermee bedoel ik: een bui eindigt zodra er één meetpunt achter elkaar niets is gevallen.
Of: een bui eindigt als er 5 minuten lang niets meer is gevallen.
Etc.

En dan kun je vervolgens met de statistieken en de gedefinieerde buien allerlei andere dingetjes berekenen.

edit:
oei net niet de eerste reactie :)

  • mrmartijn
  • Registratie: Augustus 2010
  • Laatst online: 06-11 14:33
Met 1 meetpunt ga ik heel veel buien krijgen. voorbeeld van mijn meetdata in de mysql tabel van 1 bui.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
0
0
0
0
0
0
0.2
0
0.2
0
0
0.2
0
0.2
0.2
0
0.2
0
0.4
0.2
0.4
0.4
0.6
0
0
0.2
0
0
0
0
0
0
0.2
0
0
0
0


Ik denk dat het inderdaad het handigste is om met php de regenbuien te berekenen en in een andere tabel te updaten.

http://blog.brixit.nl - Programming, electronics and guitars. http://debestesupermarktpizza.nl - pizza


  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:34

Onbekend

...

Misschien dat je het einde van een regenbui moet definiëren op het moment dat er 15 minuten achter elkaar geen regen meer is gevallen.
Mensen zullen ruimtes van 5 minuten droog en dan weer regen beschouwen als 1 bui denk ik.


@Piemol:
Leuk, twee reacties die onafhankelijk van elkaar zijn getypt met vrijwel de zelfde oplossing. Een enkel verschil is dat ik in de tijd terugkijk. :)

[ Voor 7% gewijzigd door Onbekend op 28-07-2013 18:10 ]

Speel ook Balls Connect en Repeat


  • Z-Dragon
  • Registratie: December 2002
  • Laatst online: 22-11 23:52
Ik ben het oneens met de suggestie om regenbuien apart als zodanig te registeren. Duplicatie van data en de definitie van een regenbui kan naderhand veranderen. Deze data is prima; nu alleen nog een stored procedure schrijven die de data omvormt, want met een enkele query wordt dat inderdaad lastig. Caching van de pagina zelf neemt wel de druk van de database/PHP.

Als je toch regenbuien gaat registeren, zou dat in plaats hiervan moeten zijn. Dan moeten gewoon meteen start- en einddata worden weggeschreven. Gebruik de database niet als buffer.

[ Voor 29% gewijzigd door Z-Dragon op 28-07-2013 18:33 ]

^ Wat hij zegt.


  • Piemol
  • Registratie: Januari 2006
  • Laatst online: 22-11 14:03
Ik zou persoonlijk de ruwe data op deze wijze blijven registreren, aparte tabellen maken met 'regenbuien' + definities hiervan.
Dan kan je een onbeperkt aantal soorten buien of weersomstandigheden destilleren uit de ruwe data, en vervolgens ook gemiddelden e.d. laten berekenen en opslaan.
De meetdata verandert toch niet meer, definities van buien eigenlijk ook niet zomaar.
Dus dan kun je ze net zo goed in een aparte tabel opslaan.

Maar goed dat zijn mijn two cents :)

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Piemol schreef op zondag 28 juli 2013 @ 17:44:
Interessante vraag, een pure mysql oplossing is er niet dat ik weet.
Het kan natuurlijk wel, niet dat het efficiënt zal zijn. Zie pedorus in "[SQL] gaten vinden in een getallen reeks is het mogelijk?" voor een richting. Met wat verdere uitwerking krijg je dit probleem desnoods ook wel voor elkaar. ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Piemol
  • Registratie: Januari 2006
  • Laatst online: 22-11 14:03
@ mrmartijn / TS:
Heb je al een mooie oplossing gemaakt die je met ons zou willen delen?
Dat zou wel leuk zijn voor de meedenkerts !
Of heb je een of meerdere ideeën geprobeerd?
Pagina: 1