Algorithm 给定纬度的最近道路&;经度

Algorithm 给定纬度的最近道路&;经度,algorithm,math,geo,Algorithm,Math,Geo,我有一个数据库,其中包含英国每条道路的所有航路点 我正在尝试构建一个导航应用程序,根据用户的纬度和经度,它将从数据库计算最近的道路并显示名称 数据库的JSON表示的片段 我遇到的问题是正确地找到最近的道路。我找不到任何合适的算法,给定一个点可以找到最近的路径/线 它不能简单地比较坐标,因为最近的道路可能位于两个方向点之间(排除了“最近点对问题”) 有人能推荐一个合适的算法吗 我能想到的最好的解决方案是加权网格/矩阵,其中道路的权重取决于它们与用户的距离&然后选择紧邻用户的最高价值道路(但这可能会

我有一个数据库,其中包含英国每条道路的所有航路点

我正在尝试构建一个导航应用程序,根据用户的纬度和经度,它将从数据库计算最近的道路并显示名称

数据库的JSON表示的片段

我遇到的问题是正确地找到最近的道路。我找不到任何合适的算法,给定一个点可以找到最近的路径/线

它不能简单地比较坐标,因为最近的道路可能位于两个方向点之间(排除了“最近点对问题”)

有人能推荐一个合适的算法吗

我能想到的最好的解决方案是加权网格/矩阵,其中道路的权重取决于它们与用户的距离&然后选择紧邻用户的最高价值道路(但这可能会很昂贵)


我想解决这个问题,而不必使用谷歌地图等web api,也不必使用PostGIS(必须使用sqlite-mobile app)

您可以使用r树或四叉树来限制搜索空间,然后使用voronoi图来查找最近的道路。然后,您可以使用道路的两个或更多点来输入voronoi图,然后在该图中搜索包含位置的voronoi单元。也许你可以试试加权voronoi图。您可以下载我的php类Additively weighted voronoi diagram@。

您可以使用r树或四叉树来限制搜索空间,然后使用voronoi diagram来查找最近的道路。然后,您可以使用道路的两个或更多点来输入voronoi图,然后在该图中搜索包含位置的voronoi单元。也许你可以试试加权voronoi图。您可以下载我的php类additivley weighted voronoi diagram@。

使用四叉树是限制搜索空间的正确方法。参数化四叉树,使其每个四叉节点的线数不超过100条

您不需要(复杂的)voronoi图

在四叉树中搜索后,结果将是与四叉节点重叠的线的列表

现在使用distanceToLineSegment(点、点0、点1);(在互联网上搜索该名称)

走最短的距离


在调用distanceToLineSegment之前,您必须在运行中转换点,以便它们位于笛卡尔空间中。使用四元节点的中心作为转换中心。

使用四元树是限制搜索空间的正确方法。参数化四叉树,使其每个四叉节点的线数不超过100条

您不需要(复杂的)voronoi图

在四叉树中搜索后,结果将是与四叉节点重叠的线的列表

现在使用distanceToLineSegment(点、点0、点1);(在互联网上搜索该名称)

走最短的距离


在调用distanceToLineSegment之前,您必须在运行中转换点,以便它们位于笛卡尔空间中。使用四节点的中心作为传输中心。

此数据库基于OpenstreetMap、Ammonth Survey、TomTom或Nokia Maps吗?现在是免费的,还是在与OS的合同内,顺便问一下,看看我的回答。此数据库基于OpenstreetMap、Ammonth Survey、TomTomTom或Nokia Maps吗?现在是免费的,还是在与OS的合同内,顺便说一句,看看我的答案
[
{
    "NAME": "Trinity Road",
    "coordinates": [
        [
            1.7595267,
            52.4778475
        ],
        [
            1.7587864,
            52.4774
        ]
    ]
},
{
    "NAME": "Wilde Street",
    "coordinates": [
        [
            1.7593497,
            52.4795499
        ],
        [
            1.7594677,
            52.4795041
        ],
        [
            1.7598164,
            52.4793277
        ]
    ]
}
]