This information is collected by a php script that queries various sources of government, academic, and commercial oceanographic and meterological data. The data is gathered by instruments and buoys on and near Scripps Pier in La Jolla, California, and is updated approximately every five minutes.

This page is formatted for mobile devices at scripps.cooperbaker.com

Ocean Weather
Scripps Pier Current Conditions
Scripps Current Conditions
WATER
3.9ft
Size
WNW 9.9sec
Swell
62.8°f
Temp
AIR
N mph
Wind
°f
Temp
TIDES
0ft
Now
3.4ft
H 01:12
2.9ft
L 05:06
4.6ft
H 11:06
0.4ft
L 18:48
NOAA BULLETIN


Code
<?php

    date_default_timezone_set( 'America/Los_Angeles' );
/*
    N   0
        11.25
    NNE 22.5
        33.75
    NE  45
        56.25
    ENE 67.5
        78.75
    E   90
        101.25
    ESE 112.5
        123.75
    SE  135
        146.25
    SSE 157.5
        168.75
    S   180
        191.25
    SSW 202.5
        213.75
    SW  225
        236.25
    WSW 247.5
        258.75
    W   270
        281.25
    WNW 292.5
        303.75
    NW  315
        326.25
    NNW 337.5
        348.75
    N   360
*/

    function direction( $deg )
    {
        if(                        $deg <=  11.25   ){ return 'N'  ; }
        if( ( $deg >  11.25 ) && ( $deg <=  33.75 ) ){ return 'NNE'; }
        if( ( $deg >  33.75 ) && ( $deg <=  56.25 ) ){ return 'NE' ; }
        if( ( $deg >  56.25 ) && ( $deg <=  78.75 ) ){ return 'ENE'; }
        if( ( $deg >  78.75 ) && ( $deg <= 101.25 ) ){ return 'E'  ; }
        if( ( $deg > 101.25 ) && ( $deg <= 123.75 ) ){ return 'ESE'; }
        if( ( $deg > 123.75 ) && ( $deg <= 146.25 ) ){ return 'SE' ; }
        if( ( $deg > 146.25 ) && ( $deg <= 168.75 ) ){ return 'SSE'; }
        if( ( $deg > 168.75 ) && ( $deg <= 191.25 ) ){ return 'S'  ; }
        if( ( $deg > 191.25 ) && ( $deg <= 213.75 ) ){ return 'SSW'; }
        if( ( $deg > 213.75 ) && ( $deg <= 236.25 ) ){ return 'SW' ; }
        if( ( $deg > 236.25 ) && ( $deg <= 258.75 ) ){ return 'WSW'; }
        if( ( $deg > 258.75 ) && ( $deg <= 281.25 ) ){ return 'W'  ; }
        if( ( $deg > 281.25 ) && ( $deg <= 303.75 ) ){ return 'WNW'; }
        if( ( $deg > 303.75 ) && ( $deg <= 326.25 ) ){ return 'NW' ; }
        if( ( $deg > 326.25 ) && ( $deg <= 348.75 ) ){ return 'NNW'; }
        if(   $deg > 348.75                         ){ return 'N'  ; }
    }

    // NOAA bulletin
    //-------------------------------------------------------------------------
    // $noaaForecastUrl  = 'http://weather.noaa.gov/pub/data/raw/fz/fzus56.ksgx.srf.sgx.txt';
    $noaaForecastUrl  = 'http://tgftp.nws.noaa.gov/data/observations/marine/latest_obs/ljac1.txt';
    $noaaForecastPage = file_get_contents( $noaaForecastUrl );
    $forecastStart    = strpos( $noaaForecastPage, 'SAN DIEGO COUNTY COASTAL AREAS-' );
    $forecastLength   = strlen( $noaaForecastPage ) - $forecastStart;
    $forecastString   = substr( $noaaForecastPage, $forecastStart, $forecastLength );
    $forecastLength   = strpos( $forecastString, '$$' );
    $forecastString   = substr( $forecastString, 0, $forecastLength );
    $forecastString   = str_replace(' ','&nbsp;', $forecastString );
    $forecastString   = nl2br( $forecastString );

    // ME3170 - La Jolla Weather Station XML Feed ( air temp and wind data )
    // (view raw url in browser to see how to parse)
    //-------------------------------------------------------------------------
    $me3170XmlUrl = 'http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=ME3170';
    $me3170Xml    = file_get_contents( $me3170XmlUrl );
    $me3170Array  = new SimpleXMLElement( $me3170Xml );
    $me3170Dir    = direction( $me3170Array->wind_degrees );
    $me3170Mph    = $me3170Array->wind_mph;
    $me3170Temp   = $me3170Array->temp_f;
    $me3170Time   = $me3170Array->observation_time;
    $me3170Time   = substr( $me3170Time, 29, 8 ) ;

    // CDIP Scripps Nearshore Buoy Data Station 201 ( sea temp, wave height/period/dir )
    // 2013 10 02 22 31  0.81 10.53 289           6.77                           20.7
    //-------------------------------------------------------------------------
    $cdip201Url    = 'http://cdip.ucsd.edu/data_access/justdar.cdip?201+pm';
    $cdip201String = file_get_contents( $cdip201Url );
    $cdip201Array  = explode( "\n", $cdip201String );
    $cdip201Latest = $cdip201Array[ count( $cdip201Array ) - 2 ];
    $cdip201Temp   = substr( $cdip201Latest, 74, 4 );
    $cdip201Temp   = $cdip201Temp * 1.8 + 32;
    $cdip201Temp   = round( $cdip201Temp, 1 );
    $cdip201Dir    = substr( $cdip201Latest, 29, 3 );
    $cdip201Dir    = direction( $cdip201Dir );
    $cdip201Height = substr( $cdip201Latest, 18, 4 );
    $cdip201Height = round( ( $cdip201Height * 3.28084 ), 1 );
    $cdip201Period = substr( $cdip201Latest, 23, 5 );
    $cdip201Period = round( $cdip201Period, 1 );
    $cdip201Time   = substr( $cdip201Latest, 11, 5 );

    // NOAA tides and currents La Jolla Station 9410230 ( tide height )
    //-------------------------------------------------------------------------
    // $noaaTideHeightUrl    = 'http://tidesandcurrents.noaa.gov/api/datagetter?date=today&station=9410230&units=english&time_zone=lst_ldt&datum=MLLW&product=one_minute_water_level&format=csv';
    $noaaTideHeightUrl    = 'http://tidesandcurrents.noaa.gov/api/datagetter?begin_date='.date( 'Ymd' ).'&range=24&station=9410230&units=english&time_zone=lst_ldt&datum=MLLW&product=one_minute_water_level&format=csv';
    $noaaTideHeightCsv    = file_get_contents( $noaaTideHeightUrl );
    $noaaTideHeightArray  = explode( "\n", $noaaTideHeightCsv );
    $noaaTideHeightLatest = explode( ",", ( $noaaTideHeightArray[ count( $noaaTideHeightArray ) - 2 ] ) );
    $noaaTideHeight       = round( $noaaTideHeightLatest[ 1 ], 1 );

    // NOAA tides and currents La Jolla Station 9410230 ( tide prediction )
    //-------------------------------------------------------------------------
    $noaaTidePredictionUrl   = 'http://tidesandcurrents.noaa.gov/api/datagetter?begin_date='.date( 'Ymd' ).'&range=24&station=9410230&units=english&time_zone=lst_ldt&datum=MLLW&product=predictions&format=csv';
    $noaaTidePredictionCsv   = file_get_contents( $noaaTidePredictionUrl );
    $noaaTidePredictionArray = explode( "\n", $noaaTidePredictionCsv );

    // parse tide table array into height and time arrays
    for( $i = 1, $j = 0 ; $i < count( $noaaTidePredictionArray ) ; ++$i, ++$j )
    {
        $tempA      = explode( ",", $noaaTidePredictionArray[ $i ] );
        $tempB      = explode( " ", $tempA[ 0 ] );
        $size[ $j ] = $tempA[ 1 ];
        $time[ $j ] = $tempB[ 1 ];
    }

    // pre-load previous direction value
    if( $size[ 1 ] > $size[ 0 ] )
    {
        $dir_prev = 1;
    }
    else if( $size[ 1 ] < $size[ 0 ] )
    {
        $dir_prev = -1;
    }
    else
    {
        $dir_prev = 0;
    }

    // find max and min tides based on direction
    for( $i = 1 ; $i < count( $size ) - 1 ; ++$i )
    {
        // determine tide direction
        if( $size[ $i ] > $size[ $i - 1 ] )
        {
            $dir = 1;
        }
        else if( $size[ $i ] < $size[ $i - 1 ] )
        {
            $dir = -1;
        }
        else
        {
            $dir = 0;
        }

        // store tide info when direction changes
        if( ( $dir < $dir_prev ) && ( $dir_prev != 0 ) )
        {
            $noaaTidePrediction[] = array( $time[ $i - 1 ], round( $size[ $i - 1 ], 1 ), "H" );
        }
        else if( ( $dir > $dir_prev ) && ( $dir_prev != 0 ) )
        {
            $noaaTidePrediction[] = array( $time[ $i - 1 ], round( $size[ $i - 1 ], 1 ), "L" );
        }

        // remember previous direction
        $dir_prev = $dir;
    }
?>

<html>
<head>
    <meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0, minimal-ui">
    <link rel="apple-touch-icon-precomposed" href="phone_icon.png">

    <style type="text/css">

    body
    {
        margin:             0;
        font-size:          1em;
    }

    td
    {
        text-align:     center;
        vertical-align: bottom;
    }

    #outer_box
    {
        position:   relative;
        overflow:   visible;

        background-color:   #333333;

        top:                0px;
        left:               0px;
        right:              0px;
        bottom:             0px;

        padding:            0.5em;

        border:             0px;
        border-color:       #cc0000;
        border-style:       dotted;
    }

    #title_ruler
    {
        position:           relative;
        overflow:           hidden;

        left:               0px;
        right:              0px;

        padding-left:       0.5em;
        padding-right:      0.5em;

        background-color:   #334455;

        font-family:        helvetica, arial, sans-serif;
        font-size:          1.333em;
        font-weight:        bold;
        text-decoration:    none;
        text-align:         center;
        outline:            none;
        letter-spacing:     0px;
        color:              #ccddee;

        border:             0px;
        border-color:       #557799;
        border-style:       outset;
    }

    #category_ruler
    {
        position:           relative;
        overflow:           hidden;

        width:              100%;

        padding-left:       0.5em;
        padding-right:      0.5em;

        background-color:   #334455;

        font-family:        helvetica, arial, sans-serif;
        font-size:          0.85em;
        font-weight:        bold;
        text-decoration:    none;
        outline:            none;
        letter-spacing:     0em;
        color:              #ccddee;

        border:             0px;
        border-color:       #557799;
        border-style:       solid;
    }

    #data_row
    {
        position:           relative;
        overflow:           hidden;

        margin-bottom:      0.5em;

        background-color:   #ddeeff;

        border:             0.125em;
        border-color:       #557799;
        border-style:       outset;
    }


    #data_cell
    {
        position:           relative;
        width:              auto;

        text-align:         center;

        margin:             0px;

        border:             0px;
        border-color:       #cc0000;
        border-style:       dotted;
    }

    .data_large
    {
        padding-left:       4px;
        padding-right:      4px;
        font-family:        helvetica, arial, sans-serif;
        font-size:          1.75em;
        font-weight:        bold;
        text-decoration:    none;
        outline:            none;
        letter-spacing:     -0.05em;
        color:              #223344;
    }

    #data_small
    {
        background-color:   #557799;

        padding-left:       4px;
        padding-right:      4px;
        padding-bottom:     3px;

        font-family:        helvetica, arial, sans-serif;
        font-size:          0.75em;
        font-weight:        bold;
        text-decoration:    none;
        outline:            none;
        letter-spacing:     0px;
        color:              #ccddee;
    }

    .data_units
    {
        font-family:        helvetica, arial, sans-serif;
        font-size:          0.5em;
        font-weight:        bold;
        text-decoration:    none;
        outline:            none;
        letter-spacing:     -0.05em;
        color:              #223344;
    }

    #noaa_forecast
    {
        position:           relative;
        width:              100%;
        overflow:           auto;

        text-align:         left;

        margin:             0.5em;

        border:             0px;
        border-color:       #cc0000;
        border-style:       dotted;

        font-family:        monospace;
        font-size:          1em;
        font-weight:        bold;
        text-decoration:    none;
        outline:            none;
        letter-spacing:     -0.05em;
        color:              #223344;

    }
    </style>

<title>Scripps Pier Current Conditions</title>
</head>
<body bgcolor="#333333">

<!--
    <div id="bgnd">
        <img src="http://cdip.ucsd.edu/recent/model_images/san_diego.png" class="bgnd_img">
    </div>
-->

    <div id="outer_box">
        <div id="data_row">
            <div id="title_ruler">
                Scripps Current Conditions
            </div>
        </div>
        <div id="data_row">
            <div id="category_ruler">
                WATER
            </div>
            <table cellspacing="0" cellpadding="0" border="0" width="100%">
                <tr>
                    <td>
                        <div id="data_cell">
                            <span class="data_large">
                                <?php echo( $cdip201Height ) ?><span class="data_units">ft</span></span>

                                <!-- 00.0<span class="data_units">ft</span></span> -->

                            <br>
                            <div id="data_small">
                                Size
                            </div>
                        </div>
                    </td>
                    <td>
                        <div id="data_cell">
                            <span class="data_large">
                                <?php echo( $cdip201Dir." ".$cdip201Period ) ?><span class="data_units">sec</span></span>

                                <!-- WNW 00.0<span class="data_units">sec</span></span> -->

                            <br>
                            <div id="data_small">
                               Swell
                            </div>
                        </div>
                    </td>
                    <td>
                        <div id="data_cell">
                            <span class="data_large">
                                <?php echo( $cdip201Temp ) ?>&deg;<span class="data_units">f</span></span>

                                <!-- 00.0&deg;</span></span> -->

                            <br>
                            <div id="data_small">
                                Temp
                            </div>
                        </div>
                    </td>
                </tr>
            </table>
        </div>
        <div id="data_row">
            <div id="category_ruler">
                AIR
            </div>
            <table cellspacing="0" cellpadding="0" border="0" width="100%">
                <tr>
                    <td>
                        <div id="data_cell">
                            <span class="data_large">
                                <?php echo( $me3170Dir." ".$me3170Mph ); ?><span class="data_units">mph</span></span>

                               <!--  WSW 00.0<span class="data_units">mph</span></span> -->

                            <br>
                            <div id="data_small">
                                Wind
                            </div>
                        </div>
                    </td>
                    <td>
                        <div id="data_cell">
                            <span class="data_large">
                                <?php echo( $me3170Temp ); ?>&deg;<span class="data_units">f</span></span>

                                <!-- 00.0&deg;</span> -->

                            <br>
                            <div id="data_small">
                                Temp
                            </div>
                        </div>
                    </td>
                </tr>
            </table>
        </div>
        <div id="data_row">
            <div id="category_ruler">
                TIDES
            </div>
            <table cellspacing="0" cellpadding="0" border="0" width="100%">
                <tr>
                    <td>
                        <div id="data_cell">
                            <span class="data_large">
                                <?php echo( $noaaTideHeight ); ?><span class="data_units">ft</span></span>
                                <br>
                                <div id="data_small">
                                    Now
                                </div>
                        </div>
                    </td>
            <?php
                for( $i = 0 ; $i < count( $noaaTidePrediction ) ; ++$i )
                {
                    echo(  '<td>' );
                    echo(  '<div id="data_cell">' );
                    echo(  '    <span class="data_large">' );
                    echo(  '        '.$noaaTidePrediction[ $i ][ 1 ].'<span class="data_units">ft</span></span>' );
                    echo(  '        <br>' );
                    echo(  '        <div id="data_small">' );
                    echo(  '            '.$noaaTidePrediction[ $i ][ 2 ].' '.$noaaTidePrediction[ $i ][ 0 ] );
                    echo(  '        </div>' );
                    echo(  '</div>' );
                    echo(  '</td>' );
                }
            ?>

                </tr>
            </table>

            <!--
            <table cellspacing="0" cellpadding="0" border="0" width="100%"> <tr> <td> <div id="data_cell"> <span class="data_large">-0.0<span class="data_units">ft</span></span><br> <div id="data_small"> Now </div> </div> </td> <td> <div id="data_cell"> <span class="data_large">-0.0<span class="data_units">ft</span></span><br> <div id="data_small"> L 00:00 </div> </div> </td> <td> <div id="data_cell"> <span class="data_large">-0.0<span class="data_units">ft</span></span><br> <div id="data_small"> H 00:00 </div> </div> </td> <td> <div id="data_cell"> <span class="data_large">-0.0<span class="data_units">ft</span></span><br> <div id="data_small"> L 00:00 </div> </div> </td> <td> <div id="data_cell"> <span class="data_large">-0.0<span class="data_units">ft</span></span><br> <div id="data_small"> H 00:00 </div> </div> </td> </tr> </table>
            -->

        </div>
        <div id="data_row">
            <div id="category_ruler">
                NOAA BULLETIN
            </div>
            <div id="noaa_forecast">
                <?php echo( $forecastString ); ?>
            </div>
        </div>
<!--
        <br>
        <br>
        <?php
            /*
            // tide height parser debug
            for( $i = 0 ; $i < count( $size ) ; $i++ )
            {
                echo $time[ $i ].' '.$size[ $i ].'<br>';
            }
            */

        ?>
-->
    </div>
</body>
</html>