代码之家  ›  专栏  ›  技术社区  ›  logvca

计算半径并删除GPS坐标

  •  0
  • logvca  · 技术社区  · 6 年前

    我有一个问题,关于如何使用线段、投影向量或其他方法从“maps.txt”文件中删除一些“不必要的”坐标。

    在谷歌地图上创建的路径: Map1

    共275个坐标,从Google地图的“.KML”文件中提取。 Map1_2

    Map2

    当我手动操作时,它保持不变(Map2),有9个坐标。

    我有一个名为“maps.txt”的文件,其中包含坐标的行的格式如下: Obs:每行上的坐标:纬度、经度。

    -37.2012600, -59.8404600
    -37.2000200, -59.8419600
    -37.1985300, -59.8439200
    -37.1970600, -59.8458500
    -37.1959100, -59.8473500
    -37.1957800, -59.8475200
    -37.1948600, -59.8486900
    -37.1939500, -59.8498600
    -37.1931400, -59.8509400
    -37.1928400, -59.8513100
    -37.1926700, -59.8515000
    -37.1924600, -59.8517200
    -37.1922600, -59.8519200
    

    有没有什么方法可以让代码读取我的文件“maps.txt”,并使用100米的半径计算线段、向量投影、点距离? 如果代码将从文件“maps.txt”中“删除直线/不必要的坐标”,则保留这种方式(仅举一个示例):

    -37.2012600, -59.8404600
    -37.1948600, -59.8486900
    -37.1922600, -59.8519200
    

    使用Python、C、C++或其他语言。 我希望我已经说清楚了,并提前感谢您的帮助。 谢谢(:

    我会尽量解释得更好。 在下图中,我有3个坐标(1、2和3)。 坐标“1”相对于“2”坐标的半径在100m以内,但从“1”到“3”,我的值大于100m,即在这种情况下,我的文本文件“地图”中的坐标“1”、“2”和“3”。txt”。

    Example1

    在示例2中的下图中,我只需要文件“maps.txt”中的坐标“1”和“3”。 Example2

    1 回复  |  直到 6 年前
        1
  •  1
  •   sneep    6 年前

    更新:

    下面是一个将KML转换为GPX的脚本: https://gist.github.com/timabell/8791116

    下面是一个Python脚本,它似乎可以做您想要的事情(对于GPX文件): https://wiki.openstreetmap.org/wiki/User:Travelling_salesman/gpx_reduce


    上一个答案:

    我不知道你要我们把答案理解到什么程度;这个问题有点复杂,所以这里有一些伪代码供初学者使用:

    总体算法:

    1. 从1点到3点的向量。检查点2与该向量的距离。(假设阈值正常)
    2. 从点1到4的向量。检查点2和3与该向量的距离。(假设阈值正常)
    3. 从点1到5的向量。检查点2、3和4与该向量的距离。(假设阈值不正确)
    4. 第一个向量被确定:它是从点1到4。第二个向量从点4开始。
    5. 从点4到6的向量。检查点5与该向量的距离。
    6. 从点4到7的向量。检查点5和6与该向量的距离。
    7. ...

    点到矢量的距离:

    此时,我们需要做出决定:

    1. 如果我们想让它(相当)精确,我们必须找到一条垂直于我们的线并穿过这一点的线,然后找到这两条线的交点。然后,我们使用哈弗斯公式计算交点与点之间的距离。(除非我们有时坐标之间的距离更长,否则我认为我们不需要这个。)
    2. 如果我们不太在意精确性,我们可以使用下面的公式来计算“距离”,然后“通过实验”找到一个适合我们的好阈值。(此阈值只是我们在检查距离时使用的某个浮点数。如果它高于阈值,我们将开始新行。)

      https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line#Line_defined_by_two_points

      Formula

      (其中(x0,y0)是我们正在研究的点,直线穿过(x1,y1)和(x2,y2)。)