计算半径并移除 GPS 坐标
Calculate radius and remove GPS coordinates
我有一个关于如何使用线段、投影向量或其他方法从 "maps.txt" 文件中删除一些 "unnecessary" 坐标的问题。
在 Google 地图上创建的路径:
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" 中 "remove the line / unnecessary coordinate",以这种方式保留(仅作为示例):
-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”"and" 3 "in my text file" maps.txt ".
Example1
在示例 2 的下图中,我只需要文件中的坐标“1”和“3”"maps.txt"。
Example2
更新:
这是一个将 KML 转换为 GPX 的脚本:https://gist.github.com/timabell/8791116
这里有一个 Python 脚本,它似乎可以执行您想要的操作(对于 GPX 文件):https://wiki.openstreetmap.org/wiki/User:Travelling_salesman/gpx_reduce
上一个回答:
我不知道你要求我们回答多远;这个问题有点复杂,所以这里有一些初学者的伪代码:
整体算法:
- 从点 1 到点 3 的向量。检查点 2 与该向量的距离。 (假设阈值没问题)
- 从点 1 到点 4 的向量。检查点 2 和点 3 与该向量的距离。 (假设阈值没问题)
- 从点 1 到点 5 的向量。检查点 2、3 和 4 与该向量的距离。 (假设阈值不好)
- 确定第一个向量:从点 1 到点 4。第二个向量从点 4 开始。
- 从点 4 到点 6 的向量。检查点 5 与该向量的距离。
- 从点 4 到点 7 的向量。检查点 5 和点 6 与该向量的距离。
- ...
点与矢量的距离:
此时,我们需要做出决定:
- 如果我们希望这(相当)准确,我们必须找到一条垂直于我们的线并穿过该点的线,并找到这两条线的交点。然后,我们使用交点和点之间的半正弦公式计算距离。 (除非我们有时坐标之间的距离更长,否则我认为我们不需要这个。)
如果不太在意精确度的话,我们用下面的公式计算"distance",然后"experimentally"找一个比较好的阈值我们。 (这个阈值只是我们在检查距离时使用的一些浮点数。如果它高于阈值,我们开始新的一行。)
https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line#Line_defined_by_two_points
(其中 (x0, y0) 是我们要调查的点,直线穿过 (x1, y1) 和 (x2, y2)。)
我有一个关于如何使用线段、投影向量或其他方法从 "maps.txt" 文件中删除一些 "unnecessary" 坐标的问题。
在 Google 地图上创建的路径: 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" 中 "remove the line / unnecessary coordinate",以这种方式保留(仅作为示例):
-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”"and" 3 "in my text file" maps.txt ".
Example1
在示例 2 的下图中,我只需要文件中的坐标“1”和“3”"maps.txt"。 Example2
更新:
这是一个将 KML 转换为 GPX 的脚本:https://gist.github.com/timabell/8791116
这里有一个 Python 脚本,它似乎可以执行您想要的操作(对于 GPX 文件):https://wiki.openstreetmap.org/wiki/User:Travelling_salesman/gpx_reduce
上一个回答:
我不知道你要求我们回答多远;这个问题有点复杂,所以这里有一些初学者的伪代码:
整体算法:
- 从点 1 到点 3 的向量。检查点 2 与该向量的距离。 (假设阈值没问题)
- 从点 1 到点 4 的向量。检查点 2 和点 3 与该向量的距离。 (假设阈值没问题)
- 从点 1 到点 5 的向量。检查点 2、3 和 4 与该向量的距离。 (假设阈值不好)
- 确定第一个向量:从点 1 到点 4。第二个向量从点 4 开始。
- 从点 4 到点 6 的向量。检查点 5 与该向量的距离。
- 从点 4 到点 7 的向量。检查点 5 和点 6 与该向量的距离。
- ...
点与矢量的距离:
此时,我们需要做出决定:
- 如果我们希望这(相当)准确,我们必须找到一条垂直于我们的线并穿过该点的线,并找到这两条线的交点。然后,我们使用交点和点之间的半正弦公式计算距离。 (除非我们有时坐标之间的距离更长,否则我认为我们不需要这个。)
如果不太在意精确度的话,我们用下面的公式计算"distance",然后"experimentally"找一个比较好的阈值我们。 (这个阈值只是我们在检查距离时使用的一些浮点数。如果它高于阈值,我们开始新的一行。)
https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line#Line_defined_by_two_points
(其中 (x0, y0) 是我们要调查的点,直线穿过 (x1, y1) 和 (x2, y2)。)