Почему график, который я сделал с помощью базовой карты, изогнут - PullRequest
0 голосов
/ 25 апреля 2020

Мой код и рисунок прилагаются. Вы можете видеть, что моя карта изогнута во фрейме, но я не могу найти соответствующую опцию, чтобы исправить ее в базовой карте. Что мне делать (моя проекция tmer c)

Мой код и рисунок прилагаются. Вы можете видеть, что моя карта изогнута во фрейме, но я не могу найти соответствующую опцию, чтобы исправить ее в базовой карте. Что мне делать (моя проекция tmer c)

import os
import gdal, osr
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.basemap import Basemap, cm
import pyproj
img='D:/Thesis/aodrepair/temp/result/inter/monthave/20181.tif'
ds=gdal.Open(img)
band=ds.GetRasterBand(1)
elevation = band.ReadAsArray()
elevation[elevation==32767]=0
x0, dx, dxdy, y0, dydx, dy = ds.GetGeoTransform()
nrows, ncols = elevation.shape
x1 = x0 + dx * ncols
y1 = y0 + dy * nrows
latst=np.linspace(x0,x1,ncols)
lonst=np.linspace(y0,y1,nrows)
lont, latt = np.meshgrid(latst, lonst)
lon_0t=(x0+x1)/2#计算中心坐标
lat_0t=(y0+y1)/2#计算中心坐标
lo=lont.reshape((ncols*nrows))
la=latt.reshape((ncols*nrows))
projlatlon=np.column_stack((lo,la))
coor=np.zeros((len(projlatlon),2))
p1 = pyproj.Proj(init='epsg:32650')
for i in range(len(projlatlon)):
    coor[i,0],coor[i,1]= p1(projlatlon[i,0],projlatlon[i,1],inverse=True)
coor=coor.reshape((nrows,ncols,2))
lonst2=coor[:,:,0]
latst2=coor[:,:,1]
map = Basemap(projection = 'tmerc',area_thresh=10000,resolution='i',anchor='E',ellps='WGS84',lat_0 = 33.86499240539949, lon_0 = 121.20569578770636,width=3915000,height=3600000)

xit, yit = map(lonst2, latst2)
map.drawcoastlines(linewidth=0.5)
map.drawcountries(linewidth=0.5)
map.drawparallels(np.arange(-80., 81, 20.), labels=[1, 0, 0, 0], fontsize=12)
map.drawmeridians(np.arange(-180., 181., 20.), labels=[0, 0, 0, 1], fontsize=12)
plt.annotate(u"East\nChina\nSea", xy=(0.55,0.32), xycoords='axes fraction',
             color='k', fontsize=5,fontstyle='italic')
plt.annotate(u"Sea\n of\nJapan", xy=(0.75,0.67), xycoords='axes fraction',
             color='k', fontsize=5,fontstyle='italic')
plt.annotate(u" South\nChina Sea", xy=(0.25,0.05), xycoords='axes fraction',
             color='k', fontsize=5,fontstyle='italic')
plt.annotate(u"Pacific\nOcean", xy=(0.8,0.15), xycoords='axes fraction',
             color='k', fontsize=5,fontstyle='italic')
levels=map.pcolor(xit, yit,elevation)#latst1, lonst1 xit, yit
cbar = map.colorbar(levels, location='right', pad="2%")
plt.show()
...