问题描述
|
如何获取2 gps坐标之间的途中(航路点)的城市列表?
我有一张所有城市的桌子,拉特朗。
因此,如果我有一个开始位置(lat-lon)和结束位置(lat-lon)...
确定从路线(从表)经过(航路点)到从起点(拉特朗)到en(拉特朗)的城市的路径必须非常容易?
我看过不同的算法和方位。我还是不清楚。
解决方法
如果您使用的是介于A点和B点之间的方法,则只需查询分别位于第一个和第二个之间的纬度和经度的城市。
如果要获取从A到B的直线X英里以内的城市,则需要计算起点和坡度,然后查询距离创建的直线X英里以内的城市
如果您不是使用忽略道路的简单A点到B点方法,那么您将需要有关A和B之间实际道路的某种数据,以便我们为您提供答案。这可以使用数据库中的Node系统来完成,也可以使用那里的各种地理位置API来完成。
, 解决方案可以通过标准的离散路由算法找到
这些算法需要一组节点(起点,目的地,您的城市)和这些节点之间的边线(代表可能的道路或更普遍的位置之间的距离。)
节点和边形成一个图...起点和终点是已知的...现在您可以使用A *或djikstra之类的算法来解决沿该图的路线
这种方法的一个典型问题可能是您没有边缘的定义(位置之间可用的直接路径)。您可以通过多种方式创建这样的“道路网络”,例如:
用0初始化\“ Network_ID \”
选择您的出发地点,然后找到最近的其他地点。测量距离并将其乘以一个因子。现在,将每个位置连接到原始位置,该位置的距离小于此值,并且尚未连接到当前位置。将通过此步骤连接的所有位置添加到列表中。使用当前\“ Network_ID \”标记当前位置,对该列表中的下一个位置重复此步骤。如果列表用完了位置,请增加\“ Network_ID \”并选择一个尚未处理的随机位置,然后重复此步骤
在处理完所有位置后,您将拥有一个或多个道路网络(如果有多个,则它们尚未连接。请在它们之间添加合适的连接边缘,或者以更大的系数重新启动该过程)
您必须确保起点和终点具有相同的network_ID或两个网络都已连接
, 嗯...我已经在最小和最大之间使用了类似的方法,但并不完全相同。
尝试也许:
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
, 我知道这是一个较晚的答案,但是如果您仍在解决此问题,则应阅读以下内容:
http://dev.mysql.com/doc/refman/5.6/en/spatial-extensions.html