Packages
A library for generating fake GPS data or load GPS from GPX file/string using for dev/test. The library generates GPSs for simulating a route and scalable for test workload.
Current section
Files
Jump to
Current section
Files
lib/gps_generator.ex
defmodule LocationSimulator.Gps do
@moduledoc """
Generate a random location. Get next gps from a location.
"""
require Logger
alias :math, as: Math
@doc """
Generates a random location.
"""
@spec generate_pos :: {pos_integer(), pos_integer()}
def generate_pos() do
{:rand.uniform(90), :rand.uniform(180)}
end
@doc """
Gets next location from current location.
"""
@spec generate_next_pos(float, float, integer, integer) :: {float, float}
def generate_next_pos(lati, long, step_lati \\ 1, step_long \\ 1)
when is_number(long) and is_number(lati) do
new_lati = lati + step_lati * meter_in_degree()
new_long = long + step_long * meter_in_degree() / Math.cos(lati * (Math.pi() / 180))
{new_lati, new_long}
end
@spec meter_in_degree() :: float
defp meter_in_degree() do
# Radius of the earth (km)
earth_radius = 6378.137
pi = Math.pi()
r = 2 * pi / 360
r = 1 / (r * earth_radius)
r / 1000
end
end