通过特定位置和经度获取屏幕坐标(android)

2023-11-21

我有一个增强现实的应用程序,其中存储了地铁、加油站、名胜古迹等信息以及相应的纬度和经度。

现在,根据设备的方向,我将在设备的相机视图中显示每个站点的标记。类似于 Layar 和 Wikitude。

找了三天没有间断,也没有找到人解释如何解决这个问题。


由于关于这个主题的信息非常稀疏,而且我最近在 iPhone 上解决了这个问题,我想我会向任何可以使其在 Android 上工作的人分享我的方法(除了数学函数之外,这个答案中没有任何特定于 iPhone 的内容) sin、cos 和 fmod,可以在 java.lang.Math 中找到)。这些是我采取的步骤:

  • 获取您自己的纬度/经度和当前罗盘航向(纬度1、经度1 和航向)。在 iPhone 上,CLLocation 以度为单位返回这些值,但对于这些计算,它们MUST以弧度为单位(即乘以 PI/180)
  • 获取以弧度为单位的兴趣点 (POI) 的纬度/经度(lat2 和 lon2)。
  • 使用此处找到的公式计算 lat1/lon1 和 lat2/lon2 之间的距离:http://www.movable-type.co.uk/scripts/latlong.html
  • 计算相对于北向的 lat2/lon2 角度。上面的链接也对此进行了描述,但我在让它工作时遇到了一些麻烦,这里是 C 代码:

    double latDelta = (lat2 - lat1);
    double lonDelta = (lon2 - lon1);
    double y = sin(lonDelta) * cos(lat2);
    double x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2)* cos(lonDelta);
    double angle = atan2(y, x); //not finished here yet
    double headingDeg = compass.currentHeading;
    double angleDeg = angle * 180/PI;
    double heading = headingDeg*PI/180;
    angle = fmod(angleDeg + 360, 360) * PI/180; //normalize to 0 to 360 (instead of -180 to 180), then convert back to radians
    angleDeg = angle * 180/PI;

  • 使用标准三角学,我计算 x 和 y。请记住,这些坐标位于 3D 空间中,因此我们还没有完成,因为您仍然需要将它们映射到 2D:

    x = sin(angle-heading) * distance;
    z = cos(angle-heading) * distance; //typically, z faces into the screen, but in our 2D map, it is a y-coordinate, as if you are looking from the bottom down on the world, like Google Maps

  • 最后,使用投影公式,您可以计算屏幕 x (我没有执行 y,因为这对我的项目来说不是必需的,但您需要获取加速器数据并确定设备是否垂直于地面)。投影公式可以在这里找到(滚动到最底部):http://membres.multimania.fr/amycoders/tutorials/3dbasics.html

    double screenX = (x * 256) / z

现在您可以使用此 x 坐标在屏幕上移动图像或标记。请记住几点:

  • 一切都必须以弧度为单位
  • 从您到 POI 相对于北的角度为 angleBeteweenPoints - currentHeading

(由于某种原因,我无法在这台计算机上正确格式化代码,所以如果有人想编辑这个答案,请随意)。

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

通过特定位置和经度获取屏幕坐标(android) 的相关文章

随机推荐

  • 查看 C++ 中的编译器损坏名称

    如何查看 C 中重载函数的编译器生成的损坏名称 我正在使用 VC9 但也欢迎其他编译器的答案 Edit 我发现这里所有的答案都很有用 接受我最喜欢的那个 您可以使用以下命令查看修饰的函数名称依赖步行者 在依赖项遍历器中打开任何 DLL EX
  • 如何使用 MSTest 进行 RowTest?

    我知道 MSTest 不支持RowTest和类似的测试 What do MSTests用户做什么 没有了怎么可能活下去RowTest支持 我见过DataDriven测试功能 但听起来开销太大 是否有任何 3rd 方补丁或工具可以让我这样做R
  • 如何在 Python 中生成 Azure blob SAS URL?

    我正在尝试使用以下命令动态生成 blob SAS URLazure storage blob包裹 这个解决方案仅当您拥有现已弃用的azure storage包 无法再安装 我需要一种方法来模仿BlockBlobService generat
  • 使用 emaildata 0.3.4 使用 Python 3.6 读取 .eml 文件

    我正在使用 python 3 6 1 我想读取电子邮件文件 eml 进行处理 我正在使用电子邮件数据 0 3 4包 但是每当我尝试像文档中那样导入 Text 类时 我都会收到模块错误 import email from email text
  • Tomcat 7“严重:子容器在启动期间失败”

    基本上 我写了一个springMVC应用程序 对于 Spring 来说 我的方式是新手方法 该项目在 Tomcat 6 上运行良好 我的 Tomcat 服务器无法启动并引发以下异常 Apr 29 2012 3 41 00 PM org ap
  • 将 viewbag 与 jquery 一起使用 - asp.net mvc 3

    我在控制器中将 ViewBag IsLocal 设置为 true 我想使用 jquery 检查 ViewBag 值并显示警报 Code if ViewBag IsLocal true alert yeah 我从来没有收到警报 当我使用 Fi
  • Rails 中用户指定的动态模型字段

    有谁知道 gem 或允许用户向模型添加字段的良好实现 Ex 用户希望向联系人模型添加 内部注释 字段 在界面中 他们只需选择 新字段 gt 类型 文本 Thanks 抱歉 我不知道有任何插件可以做到这一点 但我有一个实施建议 这个想法是添加
  • 如何强制焦点编辑文本

    我阅读了有关如何设置要聚焦的对象的问题 但我似乎找不到我想要做的事情的答案 使用 On Focus Listener 我完成了以下操作 Ehour setOnFocusChangeListener new OnFocusChangeList
  • QML - 启动时主窗口位置(屏幕中心)

    我可以如何执行以下操作 我想在开始时在中央屏幕上显示我的主窗口 如果使用 QtQuick 可以这样做 import QtQuick 2 2 import QtQuick Controls 1 1 import QtQuick Window
  • 在Python中创建“反向”列表的最佳方法? [复制]

    这个问题在这里已经有答案了 在Python中 创建一个新列表的最佳方法是什么 该列表的项目与其他列表的项目相同 但顺序相反 我不想修改现有列表 这是我想到的一种解决方案 new list list reversed old list 复制也
  • 生成随机SQL Server 2008时间测试数据

    我正在尝试生成一个大型数据集 其中包括 SQL Server 2008 中的时间数据类型 我的表中已经有一些非时间数据 所以我想将整个过程保留在 T SQL 中并使用插入到 select 从一个表中获取部分数据 并将其与一些生成的数据 包括
  • 在 Android 启动器中托管小部件

    我正在为 android 制作一个启动器 但我被困在小部件部分 我在互联网上搜索了大约一个半小时 试图弄清楚如何在我的应用程序中托管小部件 但没有运气 我已经浏览了一些库存启动器和 ADW 启动器代码 但两者都只有数英里的代码 这是我第一次
  • 我无法安装回形针

    我是 Rails 新手 我需要安装 Peperclip https github com thoughtbot paperclip 但我不能 我已经查看了我能找到的所有教程 但我无法找到错误在哪里 我安装了 ImageMagick 并遵循
  • 增加字体真棒图标

    我在使用一些字体很棒的图标时遇到了一些麻烦 我正在尝试增加其中一些的大小 但由于某种原因 我似乎没有做任何事情 这是我的html div class span5 bookBuild div class well well small h4
  • 如何在 Javascript 中按 15 分钟间隔对 json 集合进行分组

    假设我们在 Javascript 中有一个这样的集合 date Fri 02 May 2014 19 05 00 GMT value abc date Fri 02 May 2014 23 43 00 GMT value jkl date
  • 显示自 master 的原始分支点以来 git 分支中的所有提交

    我正在寻找一种方法来查看自分支点 并包括它 以来活动分支上的所有提交 并希望自主分支以来 例如这样的情况 A B C D master E F branch A 我想要获得提交 F E 和 B 而 F 是 HEAD And for A B
  • Google Apps 脚本电子表格评论自动化

    今天我有一个关于 Google Apps 脚本的问题 特别是电子表格 我已经看过文档了here 是的 有关a的文档Sheet在电子表格中 但我一直无法找到我要找的东西 这是西奇 1 当在 Google 电子表格中编辑单元格时 我的函数会设置
  • 安装和运行 rcpp 时出错

    我对 R 还很陌生 所以对一个愚蠢的问题表示歉意 我正在尝试让 rcpp 运行 但我陷入了 R 的无限循环 要求我重新安装 RTools 我大致遵循了以下代码这篇博文 虽然第一次休息时我手动安装了所有东西 随后我又重新安装了几次 我正在运行
  • Java:负数右移

    我对负数的右移操作感到非常困惑 这是代码 int n 15 System out println Integer toBinaryString n int mask n gt gt 31 System out println Integer
  • 通过特定位置和经度获取屏幕坐标(android)

    我有一个增强现实的应用程序 其中存储了地铁 加油站 名胜古迹等信息以及相应的纬度和经度 现在 根据设备的方向 我将在设备的相机视图中显示每个站点的标记 类似于 Layar 和 Wikitude 找了三天没有间断 也没有找到人解释如何解决这个