2011-05-30 51 views
1

如何检索2 gps坐标之间的航路(航点)城市列表?在城市2 gps坐标之间获取航点表

我有一个所有城市lat-lon的表格。 所以,如果我有一个起始位置(lat-lon)和结束位置(lat-lon)...... 确定城市(从表格)通过(航点)从开始获取的路径(lat-lon)到en(lat-lon)?

我看了不同的算法和方位。仍然不清楚。

+0

y我们的城市表格包含连接数据?例如“城市A到城市B,走57路”?除非你有关于它们如何互连的数据,否则地点本身是无用的。否则,简单的答案是“在开始点和结束点之间直接驱动” – 2011-05-30 21:27:21

回答

2

如果您使用A点和B点之间的方法,那么您只需分别在第一个和第二个之间查询经度和纬度的城市。

如果您想获得从A到B的直线X英里范围内的城市,那么您需要计算起点和坡度,然后查询距离该线路X英里内的城市

如果您不使用简单的A点来忽略道路的B点方法,那么您需要A和B之间的实际道路上的某种数据,以便我们给您一个答案。这可以使用db中的Node系统完成,也可以通过使用各种地理位置API来完成。

1

解决这可以通过标准离散路由算法

这些算法需要的一组节点(开始,目的地,您的市)和边缘的那些节点之间(表示可能道路或更一般的距离来找到位置节点和边缘之间。)

形成一个图...起点和目的地是已知的...现在你可以使用像A *或djikstra算法沿着这条曲线

典型的解决途径这种方法的问题可能是你没有边缘的定义(u黑貂之间的直接路径)。你可以通过多种方式创建这样的“路网”,例如:

初始化“NETWORK_ID” 0

把你的起点位置,并找到最接近的其他位置。测量距离并乘以一个因子。现在将每个位置连接到距离小于此值且尚未连接到当前位置的原始位置。将通过此步骤连接的所有位置添加到列表中。用当前的“Network_ID”标记当前位置,为该列表上的下一个位置重复此步骤。如果列表中的地点用完了,请增加“Network_ID”并选择一个尚未处理的随机地点,然后重复步骤

所有位置都已处理后,您有一个或多个道路网络(如果多个道路网络,它们还没有连接,在它们之间添加适当的连接边缘,或者以更大的因子重新启动该过程)

您必须确保启动和目标具有相同的network_ID或两个网络已连接

1

嗯......我已经使用BETWEEN min和max来表示这样的事情,但不完全一样。 尝试可能:

SELECT * from `cities` WHERE `lat` BETWEEN 'minlat' AND 'maxlat' AND `lon` BETWEEN 'minlon' and 'maxlon'; 

类似的东西可能工作

看看MySQL的比较,在这里:

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html