我能够根据Lat和Long制作数据点图,如下所示:
其中橙色由以下点组成:
使用代码:
m = Basemap(projection='merc',llcrnrlat=-0.5,urcrnrlat=0.5,\
llcrnrlon=9,urcrnrlon=10,lat_ts=0.25,resolution='i')
m.drawcoastlines()
m.drawcountries()
# draw parallels and meridians.
parallels = np.arange(-9.,10.,0.5)
# Label the meridians and parallels
m.drawparallels(parallels,labels=[False,True,True,False])
# Draw Meridians and Labels
meridians = np.arange(-1.,1.,0.5)
m.drawmeridians(meridians,labels=[True,False,False,True])
m.drawmapboundary(fill_color='white')
x,y = m(X, Y) # This is the step that transforms the data into the map's projection
scatter = plt.scatter(x,y)
m.scatter(x,y)
其中X和Y是numpy数组。
我希望得到点击的一个点的X和Y坐标。
我可以使用以下方式获得合作:
coords = []
def onclick(event):
if plt.get_current_fig_manager().toolbar.mode != '':
return
global coords
ix, iy = event.x, event.y
print('x = %d, y = %d'%(ix, iy))
global coords
coords.append((ix, iy))
return coords
cid = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()
但这似乎回到了数字坐标。有没有办法将这些转换为各自的纬度和长度坐标?
然后我计划使用它们来查找原始X和Y数组中最近的点到我点击的位置
答案 0 :(得分:1)
首先,您需要使用数据坐标
ix, iy = event.xdata, event.ydata
然后要获得lon / lat坐标,您需要应用逆映射变换
lon, lat = m(event.xdata, event.ydata, inverse=True)