Representação de dados espaciais. · Dados espaciais Mapas 2D Cartesianos: ( , ) Mapas em...
Embed Size (px)
Transcript of Representação de dados espaciais. · Dados espaciais Mapas 2D Cartesianos: ( , ) Mapas em...

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