prolog:计算两个坐标之间的距离

时间:2017-03-25 16:12:33

标签: prolog coordinates distance

我想用它们的坐标计算两个位置之间的距离。我见过这个question,它有不同语言的实现。由于我是prolog的初学者,如果任何人都可以构建一个可以执行此类操作的prolog子句,那将非常有用。

我发现这个python函数更简单:

from math import cos, asin, sqrt
def distance(lat1, lon1, lat2, lon2):
    p = 0.017453292519943295
    a = 0.5 - cos((lat2 - lat1) * p)/2 + cos(lat1 * p) * cos(lat2 * p) * (1 - cos((lon2 - lon1) * p)) / 2
    return 12742 * asin(sqrt(a))

1 个答案:

答案 0 :(得分:1)

我自己制作了谓词。它在下面给出:

distance(Lat1, Lon1, Lat2, Lon2, Dis):-
    P is 0.017453292519943295,
    A is (0.5 - cos((Lat2 - Lat1) * P) / 2 + cos(Lat1 * P) * cos(Lat2 * P) * (1 - cos((Lon2 - Lon1) * P)) / 2),
    Dis is (12742 * asin(sqrt(A))).

运行坐标的样本(23.700042,90.452103)和(23.767968,90.425657);输出是:

?- main.
Distance is: 8.01840452822046
true.

我已经给出了一个在线坐标距离计算器的结果,下面显示了prolog的结果足够准确。 Online coordinate distance calculator