我尝试使用Python-Tkinter和Canvas
创建一个包含意大利所有城市的地图。
我发现了一张意大利地图的图片,其中有几个突出显示的城市在线,并将其插入我的Canvas
。之后,我使用一个函数来确定2个突出显示的城市的画布坐标:
import tkinter as tk
class Map():
#Creator-Function
def __init__(self,parent):
self.canvas=tk.Canvas(width=995,height=971,bg='black')
self.canvas.pack(expand=0,fill='none')
self.gif=tk.PhotoImage(file='mapOfItl.gif')
self.canvas.create_image(497.5,485.5, image = self.gif)
self.canvas.bind('<Button-1>',self.callback)
#Event on mouse-click function
def callback(self,event):
print(self.long,self.lat,event.x,971-event.y)#lat increases opposite to canvas' y coordinate
root=tk.Tk()
app=Map(root)
root.mainloop()
因此,例如我点击了罗马,得到x = 250 y = 150 和米兰并得到x = 125 y = 450
请注意,这些不是原始数字。
然后我搜索了米兰的地理坐标,发现:米兰的纬度= 40.100和经度= 19.870以及罗马的纬度= 39.850和经度= 21.975(我再次使用随机数)
之后通过减去米兰和罗马的经度/纬度和画布坐标(x =经度,y =纬度),我能够分别在经度和纬度上找到画布宽度和画布高度的1个画布像素的值而我所要做的就是增加一个额外的数字:
相应经度。
所以我在画布中计算城市纬度的功能是:
def callback(self,event):
self.lat=event.y*0.1166666...+39.575
self.long=.....
然而,该计划似乎适用于米兰和罗马之间的每个城市:
我的思维过程是否有问题,或者地图比例是否有问题? 是否有任何特定的模块你会推荐(我已经尝试过寻找这样的模块但是找不到任何用于canvas gif的应用程序)并且有没有办法解决这个问题而无需安装额外的模块?