将画布的鼠标坐标转换为地理坐标

2024-05-07

我正在尝试使用 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 个画布像素的值与画布宽度和画布高度以及所有我的值。必须做的是添加一个额外的数字:

坐标 y 到纬度:

  1. 米兰-罗马Y=450-150=300
  2. 米兰经纬度-罗马纬度=40.100-39.850=0.350
  3. 因此 Y 轴上的 300 个像素等于 0.350 度
  4. 所以 Y 轴上的 1 个像素等于 0,350/300=0.1166666...
  5. 0.11666*450(MilanY)=0.525 所以我需要添加 40.100-0.525=39.575

相应地为经度。

所以我在画布中计算城市纬度的函数是:

def callback(self,event):
    self.lat=event.y*0.1166666...+39.575
    self.long=.....

然而,该程序似乎适用于米兰和罗马之间的每个城市:

  • 然而,对于比米兰更北的每个城市(两个城市中最北的一个) 开始时选择的城市)该函数计算出的纬度为 对应的位置比应有的位置更靠南。
  • 对于每一个比罗马更南的城市来说,纬度都更大(城市比它们应该的更北)
  • 对于米兰以外的每个城市,经度都位于更东的位置
  • 对于罗马右侧的每个城市,经度都较小(左侧的城市 米兰这座位于更西边的城市正在被测量 比他们应有的更远的东方,而最远的罗马则相反 2个城市以东)

是我的思维过程有问题,还是地图比例有问题? 是否有您推荐的任何特定模块(我尝试过寻找这样的模块,但找不到任何画布 gif 的应用程序)并且有没有一种方法可以解决此问题而无需安装额外的模块?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将画布的鼠标坐标转换为地理坐标 的相关文章

  • Spacy 实体规则不适用于基数(社会安全号码)

    我已使用实体规则为社会保障号添加新标签 即使设置了 overwrite ents true 但它仍然无法识别 我验证了正则表达式是正确的 不知道我还需要做什么 我之前尝试过 ner 但结果相同 text My name is yuyyvb
  • DynamodB:如何更新排序键?

    该表有两个键 filename 分区键 和eventTime 排序键 我要更新eventTime对于某些filename Tried put item and update item 发送相同的filename与新的eventTime但这些
  • 使用管理员权限打开cmd(Windows 10)

    我有自己的 python 脚本来管理我的计算机上的 IP 地址 它主要在命令行 Windows 10 中执行netsh命令 您必须具有管理员权限 这是我自己的计算机 我是管理员 运行脚本时我已经使用管理员类型的用户 Adrian 登录 我无
  • 如何通过 python 中的函数运行列表?

    我试图通过我创建的函数运行我的列表 但不断收到错误 我不知道出了什么问题 温度 F temp f 19 21 21 21 23 功能 def fahrToCelsius tempFahrenheit return tempFahrenhei
  • Scrapy 文件管道不下载文件

    我的任务是构建一个可以下载所有内容的网络爬虫 pdfs 在给定站点中 Spider 在本地计算机和抓取集线器上运行 由于某种原因 当我运行它时 它只下载一些但不是全部的 pdf 通过查看输出中的项目可以看出这一点JSON 我已经设定MEDI
  • 获取 Keras model.summary() 作为表

    我在 Keras 中创建了相当大的模型 我正在用 LaTeX 写一篇关于它的文章 为了很好地描述 LaTeX 中的 keras 模型 我想用它创建一个 LaTeX 表 我可以手动实现它 但我想知道是否有任何 更好 的方法来实现这一点 我四处
  • 列表推导式和 for 循环中的 Lambda 表达式[重复]

    这个问题在这里已经有答案了 我想要一个 lambda 列表 作为一些繁重计算的缓存 并注意到这一点 gt gt gt j for j in lambda i for i in range 10 9 9 9 9 9 9 9 9 9 9 Alt
  • 我可以用关闭的文件对象做什么?

    当您打开文件时 它存储在一个打开的文件对象中 该对象使您可以访问该文件的各种方法 例如读取或写入 gt gt gt f open file0 gt gt gt f
  • Python 在哪些系统上不使用 IEEE-754 双精度浮点数

    Python 对 IEEE 754 浮点运算进行了各种引用 但不保证1 https docs python org 3 tutorial floatingpoint html 2 https pythondev readthedocs io
  • Flymake的临时文件可以在系统临时目录下创建吗?

    我目前正在使用以下代码在 emacs 中连接 Flymake 和 Pyflakes defun flymake create temp in system tempdir filename prefix make temp file or
  • pandas groupby 操作缺少数据

    在 pandas 数据框中 我有一列如下所示 0 M 1 E 2 L 3 M 1 4 M 2 5 M 3 6 E 1 7 E 2 8 E 3 9 E 4 10 L 1 11 L 2 12 M 1 a 13 M 1 b 14 M 1 c 15
  • 在 HTML5 中将两个图像合并到一个画布上

    我正在使用 HTML5 canvas 元素 假设我有 2 个 ImageData 对象 我想将它们组合起来放在一张画布上 假设我不关心这些图像如何组合 两个 ImageData 对象具有完全相同的像素数和形状 组合两个图像的最佳方式是什么
  • 将 Django 中的所有视图限制为经过身份验证的用户

    我是 Django 新手 我正在开发一个项目 该项目有一个登录页面作为其索引和一个注册页面 其余页面都必须仅限于登录用户 如果未经身份验证的用户尝试访问这些页面 则必须将他 她重定向到登录页面 我看到 login required装饰器会将
  • 如何将两列 pandas Dataframe 移动并堆叠为一列?

    我有一个下面提到的数据框 ETHNIC SEX USUBJID 0 HISPANIC OR LATINO F 16 1 HISPANIC OR LATINO M 8 2 HISPANIC OR LATINO Total 24 3 NOT H
  • AWS 将 MQTT 消息存储到 DynamoDB

    我构建了一个定期发送 MQTT 消息的 python 脚本 这是发送到后端的 JSON 字符串 Id 1234 Ut 1488395951 Temp 22 86 Rh 48 24 在后端 我想将 MQTT 消息存储到 DynamoDB 表中
  • 为什么从 openAI 导入 Universe 模块时出现“无效语法”错误

    当我导入时universe来自 openAI 的模块 我收到以下错误 Traceback most recent call last File
  • PyQt5按钮lambda变量变成布尔值[重复]

    这个问题在这里已经有答案了 当我运行下面的代码时 它显示如下 为什么 x 不是 x 而是变成布尔值 这种情况仅发生在传递到用 lambda 调用的函数中的第一个参数上 错误的 y home me model some file from P
  • ProcessPoolExecutor 传递多个参数

    ESPN播放器免费 class ESPNPlayerFree def init self player id match id match id team 团队名单1 277906 cA2i150s81HI3qbq1fzi za1Oq5CG
  • PyObjC + Python 3.0 问题

    默认情况下 Cocoa Python 应用程序使用默认的 Python 运行时版本 2 5 如何配置我的 Xcode 项目以便它使用较新的 Python 3 0 运行时 我尝试用新版本替换项目中包含的Python framework 但它不
  • 从 Django 运行 shell 命令

    我正在 Django 中开发一个网页 使用 apache 服务器 需要调用 shell 命令来启用 禁用一些守护进程 我尝试这样做 os system service httpd restart 1 gt HOME out 2 gt HOM

随机推荐