Как сопоставить широту и долготу с x и y в Python Tkinter? - PullRequest
1 голос
/ 11 мая 2019

Я пытаюсь отобразить широту и долготу землетрясений на карте мира, аналогично этому видео - https://www.youtube.com/watch?v=ZiYdOwOrGyc, и я пытаюсь реализовать ее в Python Tkinter, а не в JS.Проблема возникает, когда я пытаюсь преобразовать широту и долготу в координаты x и y на холсте tkinter.Я использовал формулы из вики-страницы web mercator https://en.wikipedia.org/wiki/Web_Mercator_projection, и мне не повезло, он либо слишком далеко или слишком далеко от карты.

В соответствии с формулами наЯ попытался изменить размер изображения карты мира до определенной ширины и высоты от (2000, 1546) до (1024, 512) или (512, 512), чтобы увидеть, что это что-то сделало, но это ставит точку слишком далекоили где-то еще целиком.После этого я попытался увидеть, если бы, среди прочего, я преобразовал широту / долготу в радианы для формул, но безопасно сказать, что я совсем не хорош в математике, так что это за мной.

Этокласс для круга, который будет помещен на карту мира, и он включает методы для преобразования широты и долготы в 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), это место в Калифорнии, и когда я запускаю свойзапрограммируйте, что все это на север, около Аляски.Снимок экрана Google Maps против моего места размещения: https://ibb.co/J77gwn4

РЕДАКТИРОВАТЬ: Вот ссылка на мой полный код + изображение карты мира все в zip: https://ufile.io/5b50flpa

...