用经纬度坐标绘制城市名称

5

我希望使用Basemap软件包将城市名称绘制在德国地图上。我已经指定了经度和纬度值:

Cname=Form_Cities["name"].values    
Clat=Form_Cities["lat"].values
Clon=Form_Cities["lon"].values

此外,
map=Basemap(projection="lcc",resolution="l",width=1E6,height=1E6,lon_0=9.9167,lat_0=51.5167,fix_aspect=False)#Resturn just the empty "figure with no conotents on it
map.shadedrelief()
map.drawcountries(color="black",zorder=1,linewidth=1)

并且使用:

ax.annotate(s=Cname,xy=(Clon,Clat),xycoords="axes pixels")

我想绘制城市名称,但是它不能正常工作,而是返回异常:

值错误:对象过于复杂,无法生成所需的数组

2个回答

3

您需要在循环中绘制城市名称和标记:

...
# convert your coords to map projection coords
yp,xp = map(yp,xp)
map.plot(xp, yp, 'ro', markersize=4) # plot markers
for label, xpt, ypt in zip(point_lables, xp, yp): # add annotation (city names)
   plt.text(xpt+0.5, ypt+0.01, label, color='firebrick', fontsize=7)
...

2
我是这样解决的:
x,y=map(Clon,Clat)
[ax.annotate(s=nme,xy=(xp,yp),color="gray",alpha=0.5,fontsize=6) for nme,xp,yp in zip(Cname,x,y)

但我仍然不明白为什么我需要使用map(Clon,Clat)转换x和y坐标,因为实际上Clon和Clat必须代表llcrnrlon和llcrnrlat,如果我遵循Basemap方法的语法:

mpl_toolkits.basemap.Basemap(llcrnrlon=None, llcrnrlat=None, urcrnrlon=None, urcrnrlat=None, llcrnrx=None, llcrnry=None, urcrnrx=None, urcrnry=None, width=None, height=None, projection=’cyl’, resolution=’c’, area_thresh=None, rsphere=6370997.0, ellps=None, lat_ts=None, lat_1=None, lat_2=None, lat_0=None, lon_0=None, lon_1=None, lon_2=None, o_lon_p=None, o_lat_p=None, k_0=None, no_rot=False, suppress_ticks=True, satellite_height=35786000, boundinglat=None, fix_aspect=True, anchor=’C’, celestial=False, round=False, epsg=None, ax=None)

但我没有这样做吗:

Clat=Form_Cities["lat"].values
Clon=Form_Cities["lon"].values

还是我错了吗?

请问有人能解释一下这个吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接