GPS 转换 - 像素坐标到 GPS 坐标

2024-02-20

我正在根据视频数据进行一些运动跟踪。使用一些视频处理(即转换为自上而下的视图)我获得了移动路径。我现在需要将路径的像素坐标(x,y)转换为世界坐标(纬度,经度)。

我在图像中有四个参考点及其相关的纬度和经度点。 (纬度/经度 -> 像素坐标):

(51.606733, -3.986813) -> (246, 399)
(51.607357, -3.987126) -> (407, 781)
(51.607337, -3.987266) -> (838, 781)
(51.606671, -3.987175) -> (1247, 402)

如何使用这些参考点将像素坐标转换为世界坐标?


Problem

GPS 投影到 2D 表面通常是一个棘手的问题,因为地球表面是弯曲的,而不是平坦的。但是,如果您提供的示例 GPS 数据是实际数据(顺便说一句,希望斯旺西的天气宜人!)我将假设数据集仅限于一个非常小的区域,因此您可以假设经度平行。那么问题就变成了一个简单的代数问题,你只需要两个参考点x1 != x2 and y1 != y2.

Solution

ISO 坐标为 (纬度, 经度) = (y, x),而绘制坐标为 (x, y)。我将向您展示如何执行 y(纬度)。我们需要将源(屏幕)的原点映射到目标(世界)的原点,并将源的比例映射到世界的比例。我将按如下方式命名这些变量:

screenY0 //Screen origin (pixel corresponding to zero degrees latitude)
worldY0 //World origin (zero degrees latitude)
screenYscale //Screen scale (distance between 2 pixels)
worldYscale //World scale (distance between two latitude lines)
screenYpoint //Screen point (pixel y location)
worldYpoint //World point (latitude on the ground)

我将使用以下坐标对,因为它们相距最远:

(51.606733, -3.986813) -> (246, 399)
(51.607337, -3.987266) -> (838, 781)

我们的公式将如下所示:

screenY0 + screenYscale * screenYpoint = worldY0 + worldYscale * worldYpoint.

我们知道世界原点为 0,世界尺度为 1,因此我们可以将其压缩为:

screenY0 + screenYscale * screenYpoint = worldYpoint.

我们可以代入我们的值来形成 2 个联立方程:

screenY0 + screenYscale * 399 = 51.606733 and screenY0 + screenYscale * 781 = 51.60733

Solving:

screenY0 = 51.606733 - screenYscale * 399 and screenY0 = 51.607337 - screenYscale * 781

=> 51.606733 - screenYscale * 399 = 51.607337 - screenYscale * 781 
=> screenYscale * 781 - screenYscale * 399 = 51.607337 - 51.606733
=> screenYscale * 382 = 0.000604
=> screenYscale = 0.00000158115

因此,地图上的每个像素代表 0.00000158115 经度。插入查找原点:

   screenY0 + screenYscale * 399 = 51.606733 
=> screenY0 + 0.00000158115 * 399 = 51.606733 
=> screenY0 + 0.00063087885 = 51.606733
=> screenY0 = 51.606733 - 0.00063087885
=> screenY0 = 51.6061021212

因此,0 处的像素代表现实世界中的 51.6061021212。


Formula

我们寻找现实世界纬度的公式是:

51.6061021212 + 0.00000158115 * 屏幕Y点 = 世界Y点。


Testing

让我们用其他参考纬度来测试一下:51.606671 -> 402

51.6061021212 + 0.00000158115 * screenYpoint = worldYpoint
51.6061021212 + 0.00000158115 * 402 = 51.606671
51.6061021212 + 0.0006356223 = 51.606671
51.6067377435 = 51.606671

这大约相等;考虑到 1 纬度等于 111.2 公里(地球平均半径),这对应于约 7.4 米的误差。

希望这对您有所帮助,并帮助您解决经度(又称为 x)!如果您有任何问题或希望我澄清,请发表评论。

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

GPS 转换 - 像素坐标到 GPS 坐标 的相关文章

  • Android 显式 Intent 抛出 NoClassDefFounderror

    我正在尝试使用明确的意图在我的 Android 应用程序中显示 MapView 尽管我没有发现我的代码有任何问题 但当我尝试启动我的活动时 我不断收到 NoClassDefFoundError 基本上 从我的主要活动 SetCriteria
  • 在带有校准点的地图上将经度和纬度转换为 X Y

    如果我有一张尺寸为 sizeX sizeY 的 jpeg 地图 以及地图上的一些校准点 X Y 经度 纬度 使用给定的经度 纬度对计算地图中相应 XY 点的算法是什么 这对我有用 没有那么多废话 int x int MAP WIDTH 36
  • Reactjs 反应谷歌地图未定义

    我正在使用react google maps包https github com tomchentw react google maps https github com tomchentw react google maps and htt
  • Java中的多点三边测量算法

    我正在尝试在我的 Android 应用程序中实现三边测量算法来确定用户的室内位置 我正在使用超宽带信标来获取到固定点的距离 我能够采用中建议的方法三边测量法 Android Java https stackoverflow com ques
  • 在地图上绘制插值数据

    我有在美国切萨皮克湾不同地点采集的物种丰富度调查数据 我想以图形方式将这些数据呈现为 热图 我有一个纬度 经度坐标和丰富度值的数据框 我将其转换为SpatialPointsDataFrame并使用了autoKrige automap 包中的
  • 使用 LocationManager 时,为什么打开 Wifi 但未连接有助于网络定位?

    这可能是偏离主题的 如果是这样 我道歉 并很高兴接受关闭标志 但我在弄清楚为什么 WIFI 打开但未连接到任何接入点 在我的 Android 设备上 时遇到问题 它vastly提高网络提供商使用时的准确性LocationManager 如果
  • 在设备所有者应用程序中启用 GPS

    根据API文档 https developer android com reference android app admin DevicePolicyManager html setSecureSetting android conten
  • 如何从 NoSQL DBMS(如 DynamoDB)存储 GPS 坐标并搜索半径范围内的地点

    我的团队需要像 DynamoDB 这样的 DBMS 来存储大量数据 主要是位置和坐标 我考虑过使用一些基于 GIS 的 DBMS 例如 PostGIS 并在 POINT 上建立索引 但 DynamoDB 似乎非常适合我们的使用 存储坐标并快
  • 寻找另一部智能手机的笛卡尔坐标?

    考虑到我有两部智能手机 A 和 B 如果我拿着智能手机 A 有没有办法确定 B 相对于我自己的位置 所以如果我们有这张图片的情况 它会告诉我 B 位于位置 2 1 利用 WiFi 信号强度来获取位置等创造性方法更受欢迎 我还可以确定两部手机
  • java 的地理图表

    谁能推荐一个 Java 组件 它可以让您创建一个漂亮的世界地图图像 突出显示某些国家 基于一些统计数据 与此图像类似的东西 类似于 Google 地理图表 但适用于 Java https developers google com char
  • 根据步行速度在 2 个 GPS 位置之间进行插值

    Problem 给定两个位置 L1 latitude1 longitude1 timestamp1 L2 latitude2 longitude2 timestamp2 以及可配置但恒定的移动速度 v 1 39 米每秒 例如 How can
  • 如何在 R 中创建具有相同色标的栅格图

    我正在使用 R 中的 raster 包从栅格文件创建一些地图 我想创建比较栅格 并排显示多个地图 为此 重要的是 无论每个地图中的值如何 所有地图使用的色标都相同 例如 如果地图 1 的值介于 0 1 之间 而地图 2 的值介于 0 0 5
  • 如何将timestamp_t转换为实际时间?

    我见过很多使用 time t 的例子 但 timestamp t 让我感到困惑 我正在做一个作业 我们需要打印出 GPS 数据 并且 GPS 设备返回一个类型 timestamp t 来表示它的时间戳和纪元时间 我尝试过使用 gmtime
  • 帮助使用 GPS 坐标,Android

    我正在使用此代码来获取我的位置并在屏幕上打印坐标 package com example alpha import android app Activity import android content Context import and
  • Android:计算两个位置之间距离的最佳方法

    我在这个主题上做了一些研究 但有很多观点并没有给出一个清晰的图像 我的问题是这样的 我正在为 Android 开发一个基于 GPS 的应用程序 在其中我想实时了解 Android LocationManager 指定的当前位置与其他位置之间
  • 如何知道jar文件是否已经在运行?

    经过谷歌研究后 我找到了很好的答案 例如 1 using jps or jps l让 jars 在 JVM 下运行 这个答案可以 但是如果用户根本没有安装java并且我使用例如 bat文件和带有java JRE的文件夹运行我的jar 另外
  • 如何在 Android 中像 Google 地图一样获得持续的位置更新?

    我正在构建一个朋友跟踪 Android 应用程序 当我的朋友激活应用程序并带着他的 GPS 和蜂窝数据离开时 我需要在我的设备上跟踪他 这就是这个概念 我已经实现了 LocationListener 类 现在我可以从 Gps 或网络获取最后
  • 通过使用 Intents 使用预装的 Google 地图而不是自己的 Activity?

    我只是想知道是否可以将地理坐标传递给谷歌地图应用程序之二意图或类似的东西 我自己编写了一个用于显示路线 坐标等的应用程序 但是让谷歌地图本身显示这些不是更优雅吗 我不知道这是否可能 但也许你们中的一个人可以回答这个问题 如果这是可能的 是否
  • 加拿大人口普查地图分区 R

    我对 R 和映射非常陌生 我想创建某些数据的映射 我有一组名为 D Montreal 的数据 显示 2010 年前往蒙特利尔的加拿大人口普查部门游客来自哪个国家 我想使用此数据创建一个地图 以显示有多少人来自不同地区 也许可以通过对根据人数
  • Swift 将十进制坐标转换为度、分、秒、方向

    我怎样才能将其转换为快速 我最好的猜测是所有 int 都变成了 var 删除所有导致 的 此外 如果有的话可以给我指出一个很好的来源来了解事物如何转换 那就太好了 NSString coordinateString int latSecon

随机推荐

  • 上传项目后在 github 上的 django 项目中隐藏密钥

    我在 github 上上传了我的 django 项目 并且我的项目有很多提交 我不想删除我的项目并再次重新上传 将项目上传到 github 并进行大量提交后隐藏密钥的最简单方法是什么 在同一目录中manage py是 创建一个文件 其名称为
  • C++20 从带括号的值列表初始化聚合,不支持内部数组

    采用 C 20p0960 https wg21 link p0960 允许从带括号的值列表初始化聚合 确切的措辞 dcl init 17 6 2 2 https eel is c draft dcl init 17 6 2 2 says 如
  • jQuery 将 DIV 复制到另一个 DIV 中

    需要一些 jquery 帮助将一个 DIV 复制到另一个 DIV 中 并希望这是可能的 我有以下 HTML div class container div class button div div 然后我在页面的另一个位置有另一个 DIV
  • 在 crate 的 API 中发布具体类型而不是“impl Trait”有什么优势?

    在修补箱子时 我自己隐藏了内部迭代器类型 但作者说发布类型是一项功能 最佳实践是为公共 API 中公开的每个迭代器发布显式包装器结构 显然 Rust 标准库对其所有迭代器都执行此操作 为什么要这样做 更具体地说 如果实现兼容的类型std e
  • 如何查找字符串中某个字符出现的数组

    我正在 PHP 中搜索一个函数来返回字符串中字符的位置数组 输入这些参数 hello world i 将返回 4 7 提前致谢 无需循环 str Hello World letter o letterPositions array keys
  • 获取 numpy 中唯一行的位置的更快方法是什么

    我有一个唯一行的列表和另一个更大的数据数组 在示例中称为 test rows 我想知道是否有一种更快的方法来获取数据中每个唯一行的位置 我能想到的最快的方法是 import numpy uniq rows numpy array 0 1 0
  • if 条件 vs &&,是否有任何性能提升

    如果用户是所有者 我有一个条件要检查删除和文章 delete article if user owner 另一种方法是 user owner delete article 选择其中任何一个有什么好处还是它只是一种写作风格 性能不太可能成为该
  • 在 PostgreSQL 中正确处理 TIME AND TIME ZONE

    我们有一个表 其中填充了来自另一个系统的遗留报告的数据 该表的列反映了报告的相同结构 以下是该表的缩写结构 CREATE TABLE IF NOT EXISTS LEGACY TABLE REPORT DATE DATE NOT NULL
  • 如何保护 imap_open 连接的安全

    我使用 imap open 与我的邮件服务器建立连接以检查退回的电子邮件 pop3conn imap open localhost 110 pop3 MAILLOGIN MAILPWD if pop3conn false echo br n
  • 从 Github 安装 Gson

    我刚刚开始学习 Java 我正在开发的一个新项目需要 Gson 我觉得我在网上找到的所有安装说明中缺少了一些东西 它们都引用了我应该能够从 zip 文件中提取的三个 jar 文件 但是当我在 github 上查看 Gson 时 我找不到任何
  • SQL:将具有开始/结束的行扩展为单独的行

    我有这样的记录 start end total 830 1300 5 1400 1430 2 我想扩展到 instance total 830 5 831 5 832 5 1299 5 1300 5 1400 2 1401 2 1429 2
  • 触摸命令在 VSC 终端中不起作用

    我是新手 仍在尝试弄清楚如何配置我的开发环境 我在 Visual Studio Code 中使用 touch 命令时遇到错误 我可以用mkdir可以创建目录 但无法创建 php文件 这是我收到的错误 有任何想法吗 谢谢你 touch 术语
  • C++ 中的结构体和 C# 中的结构体有区别吗?

    C 中的结构体和 C 中的结构体有区别吗 在 C 中 您使用结构体来定义值类型 而不是由classes 在 C 中 结构体与类具有相同的默认可访问性级别public 所以问题应该是 C 中的结构与 C 中的类不同吗 是的 它们是 不能从 C
  • 读入文件内容rails

    我有一个表单正在尝试读取 JSON 文件以进行解析 操作 等 我在控制器中读取它时遇到问题 View 控制器 def upload json file data params datafile File read file data do
  • vim autocmd 静默执行

    我的 vimrc 文件以这样的方式配置 每次保存 Python 文件或输入 python 缓冲区 也适用于 Matlab 和 Latex 但都是相同的 时 它会默默地执行丰富的 ctags set tags tags autocmd Buf
  • 在 C# 中获取 GMT 纪元

    我需要获取 GMT 纪元的毫秒数 我可以将其用于 GMT 部分吗 DateTime Now ToUniversalTime 自纪元以来的毫秒数怎么样 这应该给你一个与时区无关的答案 TimeSpan t DateTime UtcNow ne
  • 在 wagtailadmin 的 limit_choices_to 中使用 或 Q() 对象

    姜戈 1 10 5 def limit contributor choices limit Q group name contributor Q group name Group return limit author models For
  • Android 计时器:postDelayed 与 Schedule

    我需要每 200 毫秒完成一次工作 并且需要平稳均匀 要做的任务是中等重量的 在问题 1 和问题 2 的两种情况下 搜索计时器看起来来自社区的最佳解决方案是使用处理程序 一个可运行的和postDelayed 如何在android中设置定时器
  • 将文本从 WPF DataGrid 复制到剪贴板再到 Excel

    我有 WPF DataGrid VS2010 C 我将数据从 DataGrid 复制到剪贴板并将其写入 Excel 文件 下面是我的代码 dataGrid1 SelectAllCells dataGrid1 ClipboardCopyMod
  • GPS 转换 - 像素坐标到 GPS 坐标

    我正在根据视频数据进行一些运动跟踪 使用一些视频处理 即转换为自上而下的视图 我获得了移动路径 我现在需要将路径的像素坐标 x y 转换为世界坐标 纬度 经度 我在图像中有四个参考点及其相关的纬度和经度点 纬度 经度 gt 像素坐标 51