Python GPS半径/距离

时间:2018-04-17 04:06:45

标签: python gps coordinates coordinate-systems

我在带有GPS坐标的“file.txt”中有一个列表,其中我的格式为“纬度,经度”。我将尝试用Python来解释我想要的示例或代码,我尝试学习的语言。

GPS =当前位置+ RADIUS / MARGIN = 0.9(900米)

使用连接到Raspberry Pi3(Raspbian)的GPS模块,将从“/ dev / ttyS0”中的序列中“收集”当前GPS位置。

根据我在“file.txt”中的坐标列表,我需要知道我当前的位置(使用900米的RADIUS / MARGIN)是TRUE还是FALSE。

file.txt的

-34.61517, -58.38124
-34.61517, -58.38124
-34.61527, -58.38123
-34.61586, -58.38121
-34.61647, -58.38118
-34.61762, -58.38113
-34.61851, -58.38109
-34.61871, -58.38109
-34.61902, -58.38108
-34.61927, -58.38108
-34.61953, -58.38108
-34.61975, -58.38106
-34.61979, -58.38112
-34.6198, -58.38113
-34.61981, -58.38115
-34.61983, -58.38116
-34.61986, -58.38117
-34.61993, -58.38118
-34.62011, -58.38119
-34.62037, -58.38121
-34.62059, -58.38122
-34.62075, -58.38122
-34.6209, -58.38122
-34.62143, -58.38117
-34.62157, -58.38115
-34.62168, -58.38115
-34.6218, -58.38114
-34.62191, -58.38115
-34.62199, -58.38116
-34.62206, -58.38119
-34.62218, -58.38123
-34.62227, -58.38128
-34.62234, -58.38134
-34.62241, -58.3814
-34.62249, -58.38149
-34.62254, -58.38156
-34.62261, -58.38168
-34.62266, -58.38179
-34.62273, -58.38194
-34.62276, -58.38201
-34.62283, -58.38238
-34.62282, -58.38261
-34.62281, -58.38291
-34.62281, -58.38309
-34.62281, -58.38313
-34.62281, -58.3836
-34.62281, -58.38388
-34.62282, -58.38434
-34.62282, -58.38442
-34.62283, -58.3845
-34.62283, -58.38463
-34.62285, -58.38499
-34.62287, -58.3853
-34.6229, -58.38581
-34.62291, -58.38589
-34.62292, -58.38597
-34.62297, -58.38653
-34,623, -58,3868
-34.62303, -58.3871
-34,623, -58,38713
-34.62299, -58.38714
-34.62298, -58.38715
-34.62298, -58.38716
-34.62297, -58.38717
-34.62297, -58.38728
-34.62297, -58.38735
-34.62298, -58.38755
-34.62299, -58.3877
-34.62305, -58.38829
-34.62308, -58.38848
-34.6231, -58.38865
-34.62311, -58.38874
-34.62316, -58.3892
-34.62318, -58.38933

Sample Image 1

这在Python中可行吗? 提前致谢(:

1 个答案:

答案 0 :(得分:0)

我不明白你是否想要了解这一点。这个解决方案是指问题“给定一个点和我当前的位置,我的距离是否小于特定值?”。

如果是这种情况并且距离足够小(小于1 km),则可以使用毕达哥拉斯定理:

distance = c*6371*180/pi*sqrt((currentPosition.lat - targetLat)**2 + 
                     (currentPosition.long - targetLong)**2)

其中c是您必须在您的区域中找到的系数(例如,在意大利它是0.8,只是划分实际值 - 您可以使用谷歌地图获得它 - 通过结果得到c设置为1),6371是地球的半径和pi是3.14159;然后你可以将距离与你想要的最大距离进行比较

distance < maxDistance

在这种情况下,maxDistance为0.9。

请注意,这个公式是近似的,但是,考虑到您正在处理的距离较远,它可以足够准确。如果距离较高,则应使用三角法(例如,如果要比较两个不同大洲的两个点,则无效)。在这种情况下,这是你应该使用的公式 - 大圆公式:

distance = 6371*acos(sin(lat1)*sin(lat2)+cos(lat1)cos(lat2)cos(long1-long2))

其中(lat1,long1)和(lat2,long2)是您正在测量的两个点的球形坐标。然后将距离与maxDistance进行比较,就像上一个表达式一样,你就完成了。

如果你想解决txt文件中一组点的问题,只需读取这些值并使用for循环或for-each迭代它们。

参考https://en.wikipedia.org/wiki/Great-circle_distance了解更多详情。