Current section
Files
Jump to
Current section
Files
lib/geo_json.ex
defmodule CoreUtils.GeoJson do
@moduledoc """
Provides functions to return workers with geojson format
"""
@spec worker_list_to_geojson([map]) :: map
def worker_list_to_geojson(worker_list) do
%{
type: "FeatureCollection",
features: get_workers_features(worker_list)
}
end
@spec get_workers_features([map]) :: list
def get_workers_features(worker_list) do
Enum.map(worker_list, &map_feature/1)
end
@spec map_feature([any]) :: map
def map_feature([worker_id, worker_vehicle_id, lon, lat, service_id, task_id, properties, inserted_at]) do
properties = properties || %{}
custom_properties = %{
inserted_at: inserted_at,
lat: lat,
lon: lon,
service_id: service_id,
task_id: task_id,
user_id: worker_id,
worker_vehicle_id: worker_vehicle_id
}
|> Enum.reject(fn {_, value} -> is_nil(value) end)
|> Map.new
%{
type: "Feature",
properties: Map.merge(properties, custom_properties),
geometry: %{
type: "Point",
coordinates: [lon, lat]
}
}
end
def map_feature([worker_id, worker_vehicle_id, lon, lat, distance]) do
%{
type: "Feature",
properties: %{
user_id: worker_id,
worker_vehicle_id: worker_vehicle_id,
lat: lat,
lon: lon,
distance: distance
},
geometry: %{
type: "Point",
coordinates: [lon, lat]
}
}
end
def map_feature([worker_id, worker_vehicle_id, lon, lat]) do
%{
type: "Feature",
properties: %{
user_id: worker_id,
worker_vehicle_id: worker_vehicle_id,
lat: lat,
lon: lon
},
geometry: %{
type: "Point",
coordinates: [lon, lat]
}
}
end
def map_feature([]), do: %{}
def map_feature(nil), do: %{}
end