Archivo:Bloop locations.png

Contenido de la página no disponible en otros idiomas.
De Wikipedia, la enciclopedia libre

Ver la imagen en su resolución original(3000 × 3000 píxeles; tamaño de archivo: 7,74 MB; tipo MIME: image/png)

Resumen

Descripción
English: Possible locations of the Bloop, an ultra-low frequency and extremely powerful underwater sound detected by the U.S. National Oceanic and Atmospheric Administration (NOAA) in 1997.
Fecha
Fuente Trabajo propio
Autor Nojhan
PNG desarrollo
InfoField
 
Este PNG gráfico fue creado con Python

Source code

This image has been generated by the following source code in Python:

Python code

source code
print "import modules...",
import sys
sys.stdout.flush()
import pickle
from mpl_toolkits.basemap import Basemap, shiftgrid, cm
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from netCDF4 import Dataset
print "ok"

# Lovecraft: 47:9'S 126:43'W
# lovecraft_lat = -47.9
# lovecraft_lon = -126.43

# August Derleth: 49:51'S 128:34'W
# derleth_lat = -49.51
# derleth_lon = -128.34

# Nemo point: 48:52.6'S 123:23.6'W
# nemo_lat = -48.526
# nemo_lon = -123.236

# The Bloop:
bransfield_strait_lat=-63
bransfield_strait_lon=-59
ross_sea_lat = -75
ross_sea_lon = -175
cape_adare_lat = -71.17
cape_adare_lon = -170.14

mid_lat = np.mean((bransfield_strait_lat,ross_sea_lat,cape_adare_lat))
mid_lon = np.mean((bransfield_strait_lon,ross_sea_lon,cape_adare_lon))


# Not necessary, because the default projection is ortho,
# but can be useful if you want another one.
def equi(m, centerlon, centerlat, radius, *args, **kwargs):
    """
    Drawing circles of a given radius around any point on earth, given the current projection.
    http://www.geophysique.be/2011/02/20/matplotlib-basemap-tutorial-09-drawing-circles/
    """
    glon1 = centerlon
    glat1 = centerlat
    X = []
    Y = []
    for azimuth in range(0, 360):
        glon2, glat2, baz = shoot(glon1, glat1, azimuth, radius)
        X.append(glon2)
        Y.append(glat2)
    X.append(X[0])
    Y.append(Y[0])

    #m.plot(X,Y,**kwargs) #Should work, but doesn't...
    X,Y = m(X,Y)
    plt.plot(X,Y,**kwargs)


def shoot(lon, lat, azimuth, maxdist=None):
    """Shooter Function
    Plotting great circles with Basemap, but knowing only the longitude,
    latitude, the azimuth and a distance. Only the origin point is known.
    Original javascript on http://williams.best.vwh.net/gccalc.htm
    Translated to python by Thomas Lecocq :
    http://www.geophysique.be/2011/02/19/matplotlib-basemap-tutorial-08-shooting-great-circles/
    """
    glat1 = lat * np.pi / 180.
    glon1 = lon * np.pi / 180.
    s = maxdist / 1.852
    faz = azimuth * np.pi / 180.

    EPS= 0.00000000005
    if ((np.abs(np.cos(glat1))<EPS) and not (np.abs(np.sin(faz))<EPS)):
        alert("Only N-S courses are meaningful, starting at a pole!")

    a=6378.13/1.852
    f=1/298.257223563
    r = 1 - f
    tu = r * np.tan(glat1)
    sf = np.sin(faz)
    cf = np.cos(faz)
    if (cf==0):
        b=0.
    else:
        b=2. * np.arctan2 (tu, cf)

    cu = 1. / np.sqrt(1 + tu * tu)
    su = tu * cu
    sa = cu * sf
    c2a = 1 - sa * sa
    x = 1. + np.sqrt(1. + c2a * (1. / (r * r) - 1.))
    x = (x - 2.) / x
    c = 1. - x
    c = (x * x / 4. + 1.) / c
    d = (0.375 * x * x - 1.) * x
    tu = s / (r * a * c)
    y = tu
    c = y + 1
    while (np.abs (y - c) > EPS):

        sy = np.sin(y)
        cy = np.cos(y)
        cz = np.cos(b + y)
        e = 2. * cz * cz - 1.
        c = y
        x = e * cy
        y = e + e - 1.
        y = (((sy * sy * 4. - 3.) * y * cz * d / 6. + x) *
              d / 4. - cz) * sy * d + tu

    b = cu * cy * cf - su * sy
    c = r * np.sqrt(sa * sa + b * b)
    d = su * cy + cu * sy * cf
    glat2 = (np.arctan2(d, c) + np.pi) % (2*np.pi) - np.pi
    c = cu * cy - su * sy * cf
    x = np.arctan2(sy * sf, c)
    c = ((-3. * c2a + 4.) * f + 4.) * c2a * f / 16.
    d = ((e * cy * c + cz) * sy * c + y) * sa
    glon2 = ((glon1 + x - (1. - c) * d * f + np.pi) % (2*np.pi)) - np.pi	

    baz = (np.arctan2(sa, b) + np.pi) % (2 * np.pi)

    glon2 *= 180./np.pi
    glat2 *= 180./np.pi
    baz *= 180./np.pi

    return (glon2, glat2, baz)


print "read in etopo5 topography/bathymetry"
url = 'http://ferret.pmel.noaa.gov/thredds/dodsC/data/PMEL/etopo5.nc'
etopodata = Dataset(url)

print "get data"

def topopickle(etopodata,name):
    import sys
    print "\t"+name+"...",
    sys.stdout.flush()
    filename = "rlyeh_"+name+".pickle"
    try:
        with open(filename,"r") as fd:
            print "load...",
            var = pickle.load(fd)
    except IOError:
        print "copy...",
        var = etopodata.variables[name][:]
        with open(filename,"w") as fd:
            print "dump...",
            pickle.dump(var,fd)
    print "ok"
    return var

topoin = topopickle(etopodata,"ROSE")
lons   = topopickle(etopodata,"ETOPO05_X")
lats   = topopickle(etopodata,"ETOPO05_Y")
print "shift data so lons go from -180 to 180 instead of 20 to 380...",
sys.stdout.flush()
topoin,lons = shiftgrid(180.,topoin,lons,start=False)
print "ok"


# create the figure and axes instances.
fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8])

print "setup basemap"
# set up orthographic m projection with
# perspective of satellite looking down at 50N, 100W.
# use low resolution coastlines.
m = Basemap(projection='ortho',lat_0=mid_lat,lon_0=mid_lon,resolution='l')
m.bluemarble()

# Generic Mapping Tools colormaps:
# GMT_drywet, GMT_gebco, GMT_globe, GMT_haxby GMT_no_green, GMT_ocean, GMT_polar,
# GMT_red2green, GMT_relief, GMT_split, GMT_wysiwyg

print "transform to nx x ny regularly spaced native projection grid"
# step=5000.
step=10000.
nx = int((m.xmax-m.xmin)/step)+1; ny = int((m.ymax-m.ymin)/step)+1
topodat = m.transform_scalar(topoin,lons,lats,nx,ny)

print "plot topography/bathymetry as shadows"
from matplotlib.colors import LightSource
ls = LightSource(azdeg = 45, altdeg = 220, hsv_min_val=0.0, hsv_max_val=1.0,
        hsv_min_sat=0.0, hsv_max_sat=1.0)
# convert data to rgb array including shading from light source.
# (must specify color m)
rgb = ls.shade(topodat, cm.GMT_ocean)
im = m.imshow(rgb, alpha=0.15)

print "draw coastlines, country boundaries, fill continents"
m.drawcoastlines(linewidth=0.25)
# draw the edge of the map projection region
m.drawmapboundary(fill_color='white')
# draw lat/lon grid lines every 30 degrees.
m.drawmeridians(np.arange(  0,360,30), color="black" )
m.drawparallels(np.arange(-90,90 ,30), color="black" )

print "draw points"
psize=5
font = {'family' : 'serif',
        'weight' : 'normal',
        'size'   : 12}
matplotlib.rc('font', **font)

# x,y = m( lovecraft_lon, lovecraft_lat )
# m.scatter(x,y,psize,marker='o', color='white')
# plt.text(x+50000,y+50000+50000, "Lovecraft", color='white')
# 
# x,y = m( derleth_lon, derleth_lat )
# m.scatter(x,y,psize,marker='o',color='white')
# plt.text(x+50000-120000,y+50000, "Derleth", color='white', horizontalalignment="right")

# x,y = m( nemo_lon, nemo_lat )
# m.scatter(x,y,psize*3,marker='+',color='#555555')
# plt.text(x+50000+50000,y+50000-80000, "Nemo", color="#555555", verticalalignment="top")
# 
# equi(m, nemo_lon, nemo_lat, radius=2688, color="#555555" )

pcolor="darkred"
offset=150000

x,y = m( bransfield_strait_lon, bransfield_strait_lat )
m.scatter(x,y,psize*3,marker='+',color=pcolor)
plt.text(x-offset,y-offset, "Bransfield strait", color=pcolor,
        horizontalalignment="right", verticalalignment="top")

x,y = m( ross_sea_lon, ross_sea_lat )
m.scatter(x,y,psize*3,marker='+',color=pcolor)
plt.text(x-offset,y, "Ross sea", color=pcolor,
        horizontalalignment="right", verticalalignment="bottom")

x,y = m( cape_adare_lon, cape_adare_lat )
m.scatter(x,y,psize*3,marker='+',color=pcolor)
plt.text(x-offset,y, "Cape Adare", color=pcolor,
        horizontalalignment="right", verticalalignment="bottom")

plt.savefig("Bloop_locations.png", dpi=600, bbox_inches='tight')
# plt.show()



Licencia

Yo, el titular de los derechos de autor de esta obra, la publico en los términos de la siguiente licencia:
w:es:Creative Commons
atribución compartir igual
Este archivo se encuentra bajo la licencia Creative Commons Genérica de Atribución/Compartir-Igual 3.0.
Eres libre:
  • de compartir – de copiar, distribuir y transmitir el trabajo
  • de remezclar – de adaptar el trabajo
Bajo las siguientes condiciones:
  • atribución – Debes otorgar el crédito correspondiente, proporcionar un enlace a la licencia e indicar si realizaste algún cambio. Puedes hacerlo de cualquier manera razonable pero no de manera que sugiera que el licenciante te respalda a ti o al uso que hagas del trabajo.
  • compartir igual – En caso de mezclar, transformar o modificar este trabajo, deberás distribuir el trabajo resultante bajo la misma licencia o una compatible como el original.

Leyendas

Añade una explicación corta acerca de lo que representa este archivo

Elementos representados en este archivo

representa a

f657c6674bc04aa3a5718fd957289b1e145d6de6

8 118 923 byte

3000 píxel

3000 píxel

Historial del archivo

Haz clic sobre una fecha y hora para ver el archivo tal como apareció en ese momento.

Fecha y horaMiniaturaDimensionesUsuarioComentario
actual21:46 12 feb 2013Miniatura de la versión del 21:46 12 feb 20133000 × 3000 (7,74 MB)NojhanUser created page with UploadWizard

La siguiente página usa este archivo:

Uso global del archivo

Las wikis siguientes utilizan este archivo:

Metadatos