Giter VIP home page Giter VIP logo

mhl-buoy-data's Introduction

MHL Buoy Data

build status

MHL buoys track swell conditions off the coast of NSW Australia. This will parse their GIF graphs so the data can be used in other ways.

Learn more about these graphs here: http://new.mhl.nsw.gov.au/data/realtime/wave/

Turns this

Sydney buoy

Into this

{ 
  direction: 138.46, 
  hsig: 0.97, 
  hmax: 1.75, 
  tsig: 5.94, 
  tp1: 5.1 
}

I'm only interested in the latest readings, that's what this object outlines.

Installation

npm install mhl-buoy-data

Usage

mhl-buoy-data exports a function that takes 2 parameters: a path to the gif and a callback. The callback will be called once the gif has been parsed. The callback will receive an argument that is an object representing the current conditions for the buoy.

Here's a little bit from the tests showing how it's used.

var parseMHLGraph = require('mhl-buoy-data')
var assert        = require('assert')

// You can pass a path to a local gif, or a URL
parseMHLGraph('./test/fixtures/syddir-1.gif', function(err, conditions) {
  assert.equal(conditions.direction, 138.46) // Degrees true north
  assert.equal(conditions.hmax, 1.75)        // Metres
  assert.equal(conditions.hsig, 0.97)        // Metres
  assert.equal(conditions.tp1, 5.1)          // Seconds
  assert.equal(conditions.tsig, 5.94)        // Seconds
})

Glossary

From the MHL's glossary:

Hmax

Maximum wave height in a recorded burst of raw data.

Hsig

Significant wave height = average height of the waves which comprise the highest 33% of waves in a given sample period (typically 20 to 30 minutes).

Direction

The direction from which ocean waves approach a location. Generally, the principal wave direction is represented by the direction which corresponds to the peak period of the energy spectrum (TP1).

Tsig

Significant period = average period of the waves used to define Hsig

Tp1

Period of the peak of the energy spectrum.

Also...

  • This is certainly a work in progress and there's a good chance that values are slightly off. Things will be ironed out over time.
  • There's a little GIF decoder in here too. It was hastily hacked and the code is a horror, but that'll improve when I extract it. Big thanks to the GIF spec and https://github.com/shachaf/jsgif. JS Gif in particular was handy, and I pulled across some things like the LZW decoder.

License

MHL Buoy Data is released under the MIT license.

mhl-buoy-data's People

Contributors

dylanfm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

flimble

mhl-buoy-data's Issues

When value isn't retrieved, search an additional pixel to the left

This searches back to the left from the right to locate where the data is on the graph. When 2 or more points have the same value, there's a layering. This means whatever value is beneath cannot be read. In this case, sometimes by shifting the search 1 pixel further to the left will fetch the data correctly, albeit a tiny bit earlier in time I guess.

Error in buoys worker, when parsing gif

https://bugsnag.com/errors/5125d6b3d0ae0b80248a5e02/events/newest

Feb 26 21:10:22 buoys app/scheduler.5165:  Error: Error: TypeError: Cannot read property '0' of undefined 
Feb 26 21:10:23 buoys app/scheduler.5165:      at /app/worker.coffee:34:21 
Feb 26 21:10:23 buoys app/scheduler.5165:      at parseMHLGraph (/app/node_modules/mhl-buoy-data/index.js:174:7) 
Feb 26 21:10:23 buoys app/scheduler.5165:      at parseGif (/app/node_modules/mhl-buoy-data/gif.js:364:7) 
Feb 26 21:10:23 buoys app/scheduler.5165:      at IncomingMessage.getImageData (/app/node_modules/mhl-buoy-data/gif.js:18:9) 
Feb 26 21:10:23 buoys app/scheduler.5165:      at IncomingMessage.EventEmitter.emit (events.js:126:20) 
Feb 26 21:10:23 buoys app/scheduler.5165:      at IncomingMessage._emitEnd (http.js:366:10) 
Feb 26 21:10:23 buoys app/scheduler.5165:      at HTTPParser.parserOnMessageComplete [as onMessageComplete] (http.js:149:23) 
Feb 26 21:10:23 buoys app/scheduler.5165:      at Socket.socketOnData [as ondata] (http.js:1367:20) 
Feb 26 21:10:23 buoys app/scheduler.5165:      at TCP.onread (net.js:403:27)

Image that's triggering this error:

edeno-1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.