Documentation for this module may be created at Module:Sandbox/Hellknowz/CoordDistance/doc

local main = {}

function main.HaversineDistance(frame)

    local lat1 = frame.args["lat1"]
    local lon1 = frame.args["lon1"]
    local lat2 = frame.args["lat2"]
    local lon2 = frame.args["lon2"]
    local radius = 6371 -- km

    local dlat = math.rad(lat2-lat1)
    local dlon = math.rad(lon2-lon1)
    local a = math.sin(dlat/2) * math.sin(dlat/2) + math.cos(math.rad(lat1)) * math.cos(math.rad(lat2)) * math.sin(dlon/2) * math.sin(dlon/2)
    local c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
    return radius * c

end

return main