首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过特定位置和经度获取屏幕坐标(android)

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

Stack Overflow用户
提问于 2011-03-16 00:24:01
回答 1查看 5.9K关注 0票数 8

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

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

它花了三天时间不停地寻找,也没有找到任何人来解释如何解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-08 23:28:16

由于关于这个话题的信息非常稀少,而且我最近在iPhone上解决了这个问题,我想我会把我的方法分享给任何可以让它在安卓上工作的人(除了可以在java.lang.Math中找到的数学函数sin、cos和fmod之外,在这个答案中并没有真正特定于iPhone的东西)。以下是我采取的步骤:

  • 获取您自己的经度/经度和当前罗盘航向(lat1、lon1和航向)。在经纬仪上,CLLocation以度为单位返回这些值,但对于这些计算,它们必须以弧度为单位(即乘以PI/180),并以弧度为单位获得兴趣点的经度(经纬度和经度),并使用此处找到的公式计算经纬度1/经度1和经纬度2/经度2之间的距离:http://www.movable-type.co.uk/scripts/latlong.html
  • Calculate
  • lat2
  • lat2。这在上面的链接中也有描述,但我在运行时遇到了一些问题,以下是用于此的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,y,a,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,因为它对我的项目不是必需的,但你需要获得加速器数据,并计算出设备是否垂直于地面)。

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

double screenX = (x * 256) / z

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

所有的东西都必须以弧度为单位,从你到currentHeading的角度是angleBeteweenPoints -

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5314724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档