我正在尝试在世界地图上绘制地震的经度和纬度,类似于此视频https://www.youtube.com/watch?v=ZiYdOwOrGyc,并且我试图在Python Tkinter中而不是在JS中实现它。当我尝试将经纬度转换为tkinter画布上的x和y坐标时,会发生问题。我当时使用的是Web mercator Wiki页面https://en.wikipedia.org/wiki/Web_Mercator_projection中的公式,但没有运气,它要么放得太远,要么就完全不在地图上。
根据网络墨卡托上的公式,我尝试将世界地图图像的大小调整为特定的宽度和高度,从(2000,1546)到(1024,512)或(512,512),以查看是否做任何事情,但它将点放置得太远或完全不在其他地方。之后,我尝试查看是否将公式的经度/纬度转换为弧度,但是可以肯定的是,我一点也不擅长数学,所以这超出了我的范围。
这是将放置在世界地图上的圆圈的类,它包括将lat和long转换为x和y的方法:
class MyOval(object):
def __init__(self, lat, long):
#self.lat=math.radians(lat)
#self.long=math.radians(long)
self.lat=lat
self.long=long
self.x=None
self.y=None
self.oval_obj = None
def mercX(self, long):
long = math.radians(long)
a = ((256)/(2*math.pi)) * pow(2, 1)
b = long + math.pi
return a*b
def mercY(self, lat):
lat = math.radians(lat)
a = ((256)/(2*math.pi)) * pow(2, 1)
b = math.tan((math.pi/4) + (lat/2))
c = math.pi - math.log(b)
return a*c
def redraw_coords(self):
self.x = self.mercX(self.long)
self.y = self.mercY(self.lat)
放大并滚动地图,我从这里使用python tkinter代码:Tkinter canvas zoom + move/pan
作为示例,我使用了(33.863,-117.4973333)的经/纬度坐标,该坐标在加利福尼亚州的一个地方,当我运行程序时,它一直将其放置在阿拉斯加附近的最北端。谷歌地图和我的位置的屏幕截图:https://ibb.co/J77gwn4
编辑: 这是我的完整代码和世界地图图像的所有链接,均采用zip格式:https://ufile.io/5b50flpa