representação de dados espaciais. · dados espaciais mapas 2d cartesianos: ( , ) mapas em...

22
Aula 10 Representação de dados espaciais. 2018 Laboratório Numérico 1

Upload: lyduong

Post on 09-Dec-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

Aula 10

Representação de dados espaciais.

2018 Laboratório Numérico 1

Dados espaciais

Mapas 2D

Cartesianos: 𝑧(𝑥, 𝑦)

Mapas em coordenadas esféricas

Geográficos: 𝑧(𝜆, 𝜙)

Projeções (Mercator, UTM, Ortográfica, etc)

Mapas 3D

Trajetórias: 𝑓 𝑥, 𝑦, 𝑧 = 𝑘

2018 Laboratório Numérico 2

Leitura de dados xls 2D

import numpy as np;import openpyxl as pyxl;

import matplotlib.pyplot as plt

dados=['meteo_model.xlsx']

sheets=['Longitude','Latitude','qv','u','v','h'];nvar=len(sheets)

wb=pyxl.load_workbook(dados[0]) #abre o workbook

ivar=0

for variable in sheets:

ws=wb[variable]

if variable=='Longitude':

rows=ws.max_row;cols=ws.max_column;

var=np.zeros((rows,cols,nvar))

for r in range(rows):

for c in range(cols):

var[r,c,ivar]=ws.cell(row=r+1,column=c+1).value

ivar=ivar+1

2018 Laboratório Numérico 3

Mapa cartesiano(lon,lat)

lon=var[:,:,0]

lat=var[:,:,1]

qv=var[:,:,2]

u=var[:,:,3]

v=var[:,:,4]

h=var[:,:,5]

del var;

Qmap=plt.contourf(lon,lat,qv,cmap='jet')

plt.colorbar(Qmap,label=r'$q_v (g/kg)$')

plt.contour(lon,lat,h,colors='black',levels=[10])

plt.quiver(lon[::10,::10],lat[::10,::10],u[::10,::10]\

,v[::10,::10])

plt.axis('equal')

2018 Laboratório Numérico 4

Mapa na projeção UTM (transverse Mercator)

from mpl_toolkits.basemap import Basemap

plt.figure()

mymap = Basemap(height=1.2e6,width=1.2e6,\

resolution='f',area_thresh=0.1,\

projection='tmerc',lon_0=-5,lat_0=40)

mymap.drawcoastlines(linewidth=1)

mymap.drawmeridians(np.arange(0, 360, 5),\

labels=[False,False,False,True])

mymap.drawparallels(np.arange(-90, 90, 5),\

labels=[True,False,False,False])

x, y = mymap(lon,lat) #projeção cartográfica

mymap=mymap.contourf(x,y,qv,cmap='jet') #campo qv

plt.colorbar(mymap,label=r'$q_v (g/kg)$')

plt.quiver(x[::10,::10],y[::10,::10],u[::10,::10],v[::10,::10])

plt.title('Projecção UTM')

2018 Laboratório Numérico 5

Mapa na projeção UTM (transverse Mercator)

2018 Laboratório Numérico 6

Sem projeção

zoom

mymap = Basemap(height=2e5,width=2e5,\

resolution='f',area_thresh=0.1,\

projection='tmerc',lon_0=-2,lat_0=37)

2018 Laboratório Numérico 7

200 km

20

0 k

m

Projeção Mercator

plt.figure()

mymap2 = Basemap(projection='merc',\

llcrnrlat=35,urcrnrlat=45,\

llcrnrlon=-12,urcrnrlon=3,lat_ts=40,\

resolution='f')

mymap2.drawcoastlines(linewidth=1)

mymap2.drawmeridians(np.arange(0,360,5),\

labels=[False,False,False,True])

mymap2.drawparallels(np.arange(-90,90,5),\

labels=[True,False,False,False])

x, y = mymap2(lon,lat) #projeção cartográfica

mymap2=mymap2.contourf(x,y,qv,cmap='jet') #campo qv

plt.colorbar(mymap2,label=r'$q_v (g/kg)$')

plt.title('Projecção Mercator')

plt.quiver(x[::10,::10],y[::10,::10],\

u[::10,::10],v[::10,::10])

2018 Laboratório Numérico 8

Mercator

2018 Laboratório Numérico 9

Zoom Mercator

mymap2 = Basemap(projection='merc',\

llcrnrlat=36,urcrnrlat=38,\

llcrnrlon=-4,urcrnrlon=0,lat_ts=37,\

resolution='f')

2018 Laboratório Numérico 10

LowLeft

UpRight

Orthographic

plt.figure()

mymap3 =Basemap(projection='ortho',\

lat_0=40,lon_0=0,resolution='l')

mymap3.drawcoastlines(linewidth=1)

mymap3.drawmeridians(np.arange(0, 360, 5),\

labels=[False,False,False,True])

mymap3.drawparallels(np.arange(-90, 90, 5),\

labels=[True,False,False,False])

x, y = mymap3(lon,lat) #projeção cartográfica

mymap3=mymap3.contourf(x,y,qv,cmap='jet') #campo qv

plt.colorbar(mymap2,label=r'$q_v (g/kg)$')

plt.title('Projecção Ortho')#plt.quiver(x[::10,::10],y[::10,::10],u[::10,::10],v[::10,::10])

plt.savefig('adra_ort.png')

2018 Laboratório Numérico 11

Ponto de vista

ortho

2018 Laboratório Numérico 12

zoom

Nota: xlim,ylim nasprojeções é + complicado:

teria de ser imposto nascoordenadas projetadas

Anomalia da temperatura NASA/GISS

2018 Laboratório Numérico 13

Dados GISS

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.basemap import Basemap

plt.close('all')

GISS=np.loadtxt('GISS_T_Ano_Feb2018.dat')

nx=180;ny=90

lon=np.zeros((ny,nx),dtype=float)

lat=np.copy(lon);Ta=np.copy(lon)

for k in range(len(GISS)):

ix=int(GISS[k,0])-1

iy=int(GISS[k,1])-1

lon[iy,ix]=GISS[k,2]

lat[iy,ix]=GISS[k,3]

Ta[iy,ix]=GISS[k,4]

2018 Laboratório Numérico 14

mercator

plt.figure()

mymap2 = Basemap(projection='merc',\

llcrnrlat=-85,urcrnrlat=85,\

llcrnrlon=-180,urcrnrlon=180,\

lat_ts=0,resolution='l')

mymap2.drawcoastlines(linewidth=1)

mymap2.drawmeridians(np.arange(0,360,30),\

labels=[False,False,False,True])

mymap2.drawparallels(np.arange(-90,90,20),\

labels=[True,False,False,False])

x, y = mymap2(lon,lat) #projeção cartográfica

mymap2=mymap2.contourf(x,y,Ta,cmap='jet') #campo qv

#mymap2=plt.contourf(lon,lat,Ta,cmap='jet')

plt.colorbar(mymap2,label=r'$\Delta T$')

plt.title('Anomalia da Temperature Feb 2018 (GISS)')

plt.savefig('GISS_mercator.png')

2018 Laboratório Numérico 15

ortho

plt.figure()

plt.subplot(1,2,1)

mymap2 = Basemap(\

projection='ortho‘

,lat_0=0,lon_0=0,resolution='l')…

x, y = mymap2(lon,lat)

mymap2=mymap2.contourf(x,y,Ta,cmap='jet')

plt.subplot(1,2,2)

mymap2 = Basemap(projection='ortho',lat_0=0,lon_0=180\

,resolution='l')…

x, y = mymap2(lon,lat)

mymap2=mymap2.contourf(x,y,Ta,cmap='jet')

plt.suptitle('Anomalia da Temperature Feb 2018 (GISS)')

2018 Laboratório Numérico 16

Vista do polomymap2 = Basemap(projection='ortho',\

lat_0=90,lon_0=0,resolution='l')

2018 Laboratório Numérico 17

nan

Graficos 3D

Trajetória balística com 𝑔 = 𝑐𝑜𝑛𝑠𝑡, sem atrito, sem Coriolis

𝑎 = −𝑔𝑘

𝑣 = 𝑢 𝑖 + 𝑣 𝑗 + 𝑤 𝑡 𝑘

Admitindo que o projétil parte da posição 𝑟 = (0,0,0), o tempo decorrido aré voltar ao solo (𝑧 = 0) será 𝑡𝑀𝑎𝑥 = 2 ∗ 𝑤0/𝑔

Equações da trajetória:

𝑥 = 𝑥0 + 𝑢𝑡𝑦 = 𝑦0 + 𝑣𝑡

𝑧 = 𝑧0 + 𝑤0𝑡 −1

2𝑔𝑡2

2018 Laboratório Numérico 18

Trajetória balística

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

u=[10,-10,-5];v=[10,10,-10];w0=[100,200,50]

x0=0;y0=0;z0=0;t0=0;g=9.8;cores=['green','red','blue']

plt.close('all’);fig=plt.figure(1) #cria figura 1

ax=fig.add_subplot(111,projection='3d') #cria figura 3D

for k in range(len(cores)):

tmax=2*w0[k]/g

t=np.linspace(t0,tmax,101)

x=x0+u[k]*t; y=y0+v[k]*t

z=z0+w0[k]*t-1/2*g*t**2

ax.plot(xs=x,ys=y,zs=z,color=cores[k])

ax.set_xlabel('x')

ax.set_ylabel('y’);ax.set_zlabel('z’)

ax.scatter(x[-1],y[-1],z[-1])

2018 Laboratório Numérico 19

𝑥 = 𝑥0 + 𝑢𝑡𝑦 = 𝑦0 + 𝑣𝑡

𝑧 = 𝑧0 + 𝑤0𝑡 −1

2𝑔𝑡2

Axes3d

2018 Laboratório Numérico 20

2018 Laboratório Numérico 21

from mpl_toolkits.basemap import Basemap

import matplotlib.pyplot as plt

import imageio

for i in range(330,0,-20):

my_map = Basemap(projection='ortho',\

lat_0=0, lon_0=i, resolution='l', \

area_thresh=1000.0)

my_map.bluemarble()

my_map.etopo()

plt.savefig(str(i)+'.png')

plt.show()

plt.clf()

plt.cla()

plt.close()

images = []

for f in range(330,0,-20):

images.append(imageio.imread(str(f)+\

".png"))

imageio.mimsave('movie.gif', images, \

duration=0.5)

imageio.mimsave('movie2.gif', images, duration=0.2)

2018 Laboratório Numérico 22