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

时间:2019-05-10 22:41:04

标签: python python-3.x tkinter tkinter-canvas cartesian-coordinates

我正在尝试在世界地图上绘制地震的经度和纬度,类似于此视频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

0 个答案:

没有答案