什么算法计算地图上从A点到B点的方向?

地图提供商(例如Google或Yahoo! Maps)如何提供方向?

我的意思是,他们可能有某种形式的真实数据,当然包括距离,但也可能包括行驶速度,人行道的存在,火车时刻表等。但是假设数据格式较简单,比如一个非常大的有向图边缘权重反映距离。 我希望能够快速计算从任意点到另一个点的方向。 有时这些点将在一起(在一个城市内),而有时它们将相隔很远(越野)。

像Dijkstra算法这样的图算法不起作用,因为图形是巨大的。 幸运的是,像A *这样的启发式算法可能会起作用。 但是,我们的数据非常有条理,也许某种分层方法可能有用吗? (例如,存储远离某些“关键”点之间的预先计算方向,以及一些局部方向。然后,两个远点的方向将涉及到关键点的本地方向,到另一个关键点的全局方向,然后是本地方向方向再次。)

在实践中实际使用了哪些算法?

PS。 这个问题的动机是通过在线地图方向找到怪癖。 与三角形不等式相反,有时谷歌地图认为XZ需要更长时间,并且比使用XYZ中的中间点更远。 但也许他们的步行路线也会针对另一个参数进行优化?

PPS。 这是对三角不等式的另一个违反,它暗示(对我来说)他们使用某种分层方法: XZXYZ 。 前者似乎使用着名的Boulevard de Sebastopol,尽管它稍微偏离了方向。

编辑 :这些例子似乎都不再起作用,但两者都是在原始帖子时完成的。


#1楼

我已经在路由工作了几年,最近我的客户需求引发了一系列的活动,我发现A *很快就够了; 实际上没有必要寻找优化或更复杂的算法。 在巨大的图表上进行路由不是问题。

但速度取决于拥有整个路由网络,我指的是分别在内存中表示路径段和连接点的弧和节点的有向图。 主要的时间开销是创建此网络所需的时间。 基于普通笔记本电脑运行Windows的一些粗略数字,以及整个西班牙的路由:创建网络的时间:10-15秒;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 方位角和俯仰角是通过查表法计算空中任意两的角度的。 首先,我们需要定义一个表格,将所有可能的方位角和俯仰角组合存储起来。假设我们以1度为步长,方位角从0度到359度,俯仰角从-90度到90度,我们需要一个数组来存储这些角度。 接下来,在FPGA代码中,我们可以引入输入信号,包括两个的坐标(经度和纬度)。我们可以通过坐标转换运算得到两个的方位角和俯仰角。 然后,在代码中,我们可以使用查找表法来计算方位角和俯仰角,即根据输入的方位角和俯仰角的值,从表格中索引对应的数值,并将其作为输出信号。 最后,我们可以将计算得到的方位角和俯仰角输出到相应的目标设备,例如显示屏、控制系统等。 使用查表法计算空中任意两的方位角和俯仰角的FPGA代码可以提供实时的角度计算,并且具有高速、精确和可调节的特。这种方法可以应用于航空导航、雷达系统、地图服务等领域。 ### 回答2: 方位角和俯仰角是用来描述空中两之间的位置关系的指标。方位角是指一个相对于参考方向的旋转角度,一般以北方为参照,逆时针方向为正。俯仰角是指一个相对于参考平面的偏转角度,一般以水平面为参照,上升方向为正。 在计算空中任意两的方位角和俯仰角时,可以使用查表法,将已知的的方位角和俯仰角的数值存储在一个查找表中,根据给定的在查找表中查找对应的数值即可得到结果。 以下是一个简单的使用FPGA编写的查表法计算空中任意两的方位角和俯仰角的代码示例: ''' module Lookup_Table ( input wire [7:0] point_A, // A在查找表中的索引 input wire [7:0] point_B, // B在查找表中的索引 output reg [7:0] azimuth_angle, // 方位角 output reg [7:0] elevation_angle // 俯仰角 ); reg [7:0] lookup_table [255:0]; // 查找表,存储方位角和俯仰角数值 initial begin // 初始化查找表 // 将A和B的方位角和俯仰角数值存储在查找表中 // 注意查找表的索引需要和A和B相对应 lookup_table[0] = 0; // A的方位角 lookup_table[1] = 45; // A的俯仰角 lookup_table[2] = 90; // B的方位角 lookup_table[3] = 60; // B的俯仰角 // 其他数据省略... // 根据输入的A和B的索引值,在查找表中查找对应的方位角和俯仰角数值 azimuth_angle <= lookup_table[point_A]; elevation_angle <= lookup_table[point_B]; end endmodule ''' 以上是一个简单的FPGA代码示例,使用查表法计算空中任意两的方位角和俯仰角。其中,查找表的初始化部分需要根据实际需求来编写,将每个的方位角和俯仰角数值存储在查找表中。在计算时,通过输入的A和B的索引值,从查找表中查找对应的方位角和俯仰角数值,并输出给相应的输出端口。 ### 回答3: 方位角和俯仰角是描述空中两位置关系的角度,可以使用三角函数计算。FPGA代码实现查表法计算空中任意两求方位角俯仰角的步骤如下: 1. 创建一个包含预先计算好方位角和俯仰角的查找表。这个查找表可以是一个二维数组,其中每个元素存储某个方位角和俯仰角对应的数值。 2. 输入两的空间坐标,将坐标转换为极坐标形式。通过使用三角函数,可以计算出两之间的水平距离和高度差。 3. 使用计算得到的水平距离和高度差,从查找表中找到相应的方位角和俯仰角。 4. 输出得到的方位角和俯仰角。 具体的FPGA代码可以按照以下步骤进行编写: 1. 定义并初始化查找表,填充其中的方位角和俯仰角数值。 2. 从输入端口获取两的空间坐标。 3. 将坐标转换为极坐标形式,计算水平距离和高度差。 4. 使用水平距离和高度差,在查找表中查找对应的方位角和俯仰角。 5. 将方位角和俯仰角输出到输出端口。 需要注意的是,查表法计算空中任意两求方位角和俯仰角的精度受限于查找表的分辨率。为了提高计算精度,可以增加查找表的尺寸或者使用插值算法。对于更高精度的计算,可以考虑使用更复杂的算法,如三角函数的数值逼近或迭代求解等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值