Source code for alvinxy.alvinxy

'''
AlvinXY Utility Module

All of this is based on WHOI's original implementations in C and MATLAB.

'''

from math import *
import numpy as np

[docs]def mdeglat(lat): ''' Provides meters-per-degree latitude at a given latitude Args: lat (float): latitude Returns: float: meters-per-degree value ''' latrad = lat*2.0*pi/360.0 ; dy = 111132.09 - 566.05 * cos(2.0*latrad) \ + 1.20 * cos(4.0*latrad) \ - 0.002 * cos(6.0*latrad) return dy
[docs]def mdeglon(lat): ''' Provides meters-per-degree longitude at a given latitude Args: lat (float): latitude in decimal degrees Returns: float: meters per degree longitude ''' latrad = lat*2.0*pi/360.0 dx = 111415.13 * cos(latrad) \ - 94.55 * cos(3.0*latrad) \ + 0.12 * cos(5.0*latrad) return dx
[docs]def ll2xy(lat, lon, orglat, orglon): ''' AlvinXY: Lat/Long to X/Y Converts Lat/Lon (WGS84) to Alvin XYs using a Mercator projection. Args: lat (float): Latitude of location lon (float): Longitude of location orglat (float): Latitude of origin location orglon (float): Longitude of origin location Returns: tuple: (x,y) where... x is Easting in m (Alvin local grid) y is Northing in m (Alvin local grid) ''' x = (lon - orglon) * mdeglon(orglat); y = (lat - orglat) * mdeglat(orglat); return (x,y)
[docs]def xy2ll(x, y, orglat, orglon): ''' X/Y to Lat/Lon Converts Alvin XYs to Lat/Lon (WGS84) using a Mercator projection. Args: x (float): Easting in m (Alvin local grid) x (float): Northing in m (Alvin local grid) orglat (float): Latitude of origin location orglon (float): Longitude of origin location Returns: tuple: (lat,lon) ''' lon = x/mdeglon(orglat) + orglon lat = y/mdeglat(orglat) + orglat return (lat, lon) # Vectorize
vxy2ll = np.vectorize(xy2ll) vll2xy = np.vectorize(ll2xy)