从城市表中获取2 gps坐标之间的航点

时间:2011-05-30 20:36:52

标签: php javascript mysql gps coordinates

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

我有一张所有城市的表,lat-lon。 所以如果我有一个起始位置(lat-lon)和结束位置(lat-lon)...... 必须很容易确定城市的路径(从表格)到(路点)从开始(lat-lon)到en(lat-lon)的路径?

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

4 个答案:

答案 0 :(得分:2)

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

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

如果您没有使用简单的A点到B点忽略道路的方法,那么您需要A和B之间的实际道路上的某种数据,以便我们给您答案。这可以使用数据库中的节点系统来完成,也可以使用各种地理定位API来完成。

答案 1 :(得分:1)

可以通过标准离散路由算法找到解决方案

这些算法需要一组节点(起点,目的地,您的城市)和这些节点之间的边缘(表示可能的道路或更常见的位置之间的距离。)

节点和边形成一个图...起点和目的地已知......现在你可以使用像A *或djikstra这样的算法来解决沿这个图的路线

此方法的典型问题可能是您没有边缘定义(位置之间可用的直接路径)。您可以通过各种方式创建这样的“道路网络”,例如:

用0

初始化“Network_ID”

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

在处理完所有地点后,您有一个或多个道路网络(如果不止一个,它们尚未连接。在它们之间添加合适的连接边缘,或以更大的因素重新启动该过程)

您必须确保开始和目的地具有相同的network_ID或两个网络都已连接

答案 2 :(得分: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

答案 3 :(得分:0)

我知道这是一个迟到的答案,但如果你还在研究这个问题,你应该读一下: - http://dev.mysql.com/doc/refman/5.6/en/spatial-extensions.html