网格数据/底图不匹配 - 我做错了什么?

时间:2014-04-24 09:02:50

标签: python numpy mapping projection

我正在学习如何在python中处理空间数据,并遇到了一个问题:我试图将一些网格化数据叠加到底图实例上,但投影看起来并不像匹配。谁能告诉我我做错了什么?

我一直认为lon / lat位置是绝对的,投影应该由底图实例处理 - 这不是这种情况吗?基本上,我的错误是在网格坐标转换阶段还是绘图阶段?

非常感谢!

我的例子:

首先,下载gridded data

import numpy as np
import pyproj
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

# Import the gridded data I want to plot
# NB: the header describes the grid layout: LL corner is -200000 eastings, -200000 northings, in the British National Grid (BNG, EPSG:27700) system. The 'no data' value is -9999
grid = np.loadtxt('grid_data.txt', skiprows = 6, dtype = 'float')
grid = np.ma.masked_where(grid<0,grid)

# Take a look at the grid: it's a map of the UK!
plt.imshow(grid)

# Define a BNG coordinate grid for the data, based on information in the header:
   # LLcorner eastings = -200000
   # LLcorner northings = -200000
   # grid box size = 5000
   # All units in metres
lle = -200000 + 2500 # because we want to plot the box point at the centre of each box, not its lower left corner.
lln = -200000 + 2500
delta = 5000
nn,ne = grid.shape

ns = np.arange(0.,nn,1)*delta + lln
es = np.arange(0.,ne,1)*delta + lle

# convert to mesh of eastings/northings.
eastings,northings = np.meshgrid(es,ns)

# convert mesh to lon/lat (wgs84) using pyproj:
bng = pyproj.Proj(init='epsg:27700')
wgs84 = pyproj.Proj(init='epsg:4326')
lons,lats = pyproj.transform(bng,wgs84,eastings,northings)

lats = lats[::-1] # because otherwise the map is upside down (differences between imshow and pcolormesh)

# Get a basemap of the UK
m = Basemap(projection='merc',llcrnrlon=-15 ,llcrnrlat=47.8,urcrnrlon=7.2 ,urcrnrlat=62.5,resolution='h')

# project the lon/lat grids onto map coordinates
x,y = m(lons,lats)

# Draw the map!
m.drawcoastlines()
m.pcolormesh(x,y,grid,cmap=plt.cm.jet)
plt.show()

0 个答案:

没有答案