如何在Python Tkinter中将纬度和经度映射到x和y?

如何在Python Tkinter中将纬度和经度映射到x和y?,python,python-3.x,tkinter,tkinter-canvas,cartesian-coordinates,Python,Python 3.x,Tkinter,Tkinter Canvas,Cartesian Coordinates,我试图在世界地图上绘制地震的纬度和经度,类似于这段视频,我试图用Python Tkinter而不是JS实现它。当我试图将纬度和经度转换为tkinter画布上的x和y坐标时,就会出现问题。我使用的是来自WebMercator维基页面的公式,我没有任何运气,它要么把它放得太远,要么完全偏离了地图 根据WebMercator上的公式,我尝试将我的世界地图图像调整到特定的宽度和高度,从(20001546)调整到(1024512)或(512512),看看这是否有什么作用,但它将点放得太远或完全放在其他地方

我试图在世界地图上绘制地震的纬度和经度,类似于这段视频,我试图用Python Tkinter而不是JS实现它。当我试图将纬度和经度转换为tkinter画布上的x和y坐标时,就会出现问题。我使用的是来自WebMercator维基页面的公式,我没有任何运气,它要么把它放得太远,要么完全偏离了地图

根据WebMercator上的公式,我尝试将我的世界地图图像调整到特定的宽度和高度,从(20001546)调整到(1024512)或(512512),看看这是否有什么作用,但它将点放得太远或完全放在其他地方。在那之后,我试着看看我是否将公式中的纬度/长度转换为弧度,但很安全,它说我根本不擅长数学,所以这是我无法理解的

这是一个将放在世界地图上的圆的类,它包括将lat和long转换为x和y的方法:

类MyOval(对象):
定义初始(自、横向、纵向):
#self.lat=数学弧度(lat)
#self.long=数学弧度(long)
self.lat=lat
self.long=long
self.x=无
self.y=None
self.oval_obj=无
def mercX(自身,长):
长=数学弧度(长)
a=((256)/(2*math.pi))*pow(2,1)
b=长+数学.pi
返回a*b
def mercY(自我,lat):
纬度=数学弧度(纬度)
a=((256)/(2*math.pi))*pow(2,1)
b=数学tan((数学pi/4)+(lat/2))
c=math.pi-math.log(b)
返回a*c
def重新绘制坐标(自身):
self.x=self.mercX(self.long)
self.y=self.mercY(self.lat)
为了放大和滚动地图,我在这里使用了python tkinter代码:

例如,我使用了(33.863,-117.4973333)的lat/long坐标系,这是加利福尼亚州的一个地方,当我运行我的程序时,它将它一直放在阿拉斯加附近的北部。谷歌地图与我的位置截图:

编辑:
这里有一个链接到我的全代码+世界地图图像都在zip:

你可以考虑使用一个开源的库,比如pMyAP3D来完成从LAT /长/高度到NED或另一个地图投影的转换:谢谢你的回应。我查看了pymap3d库,并使用了列出的函数,如ned2geodetic/geodetic2ned(以及其他函数),但它仍然没有正确绘制,我将添加一个链接到完整的代码,因为我认为它将是Easiver。您可能会考虑使用一个开源的库,如PYMAP3D来完成从LAT /长/高度到NED或另一个地图投影的转换:谢谢您的响应。我查看了pymap3d库,并使用了列出的函数,如ned2geodetic/geodetic2ned(以及其他函数),但它仍然没有正确绘制,我将添加一个指向完整代码的链接,因为我认为这样会更容易。