Packages

A Elixir wrapper to access the Overpass API.

Current section

Files

Jump to
overpass lib overpass.ex
Raw

lib/overpass.ex

defmodule Overpass do
require Logger
defmodule Response do
defstruct nodes: [], ways: [], relations: []
end
defmodule Tag do
@doc """
http://wiki.openstreetmap.org/wiki/Tags
"""
defstruct k: "", v: ""
end
defmodule Node do
@doc """
http://wiki.openstreetmap.org/wiki/Node
"""
defstruct id: "", lat: "", lon: "", tags: []
end
defmodule Way do
@doc """
http://wiki.openstreetmap.org/wiki/Way
"""
defstruct id: "", nodes: [], tags: []
@doc """
Returns a List of `%Overpass.Node{}` whith all nodes from the selected way. Set `resolve_missing` to `true` to query the nodes from the API.
"""
def get_nodes(nodes, way, resolve_missing \\ false)
def get_nodes(nodes, %Way{id: id, nodes: node_ids}, resolve_missing) when not resolve_missing do
Logger.debug fn -> inspect(id) end
Logger.debug fn -> inspect(node_ids) end
Logger.debug fn -> inspect(resolve_missing) end
result = Enum.filter(nodes,
fn %Node{id: node_id} ->
Enum.member?(node_ids, node_id)
end
)
result
end
def get_nodes(_nodes, %Way{id: id, nodes: _node_ids}, resolve_missing) when resolve_missing do
Logger.debug fn -> inspect(id) end
Logger.debug fn -> inspect(resolve_missing) end
{:ok, %Response{nodes: nodes}} = Overpass.API.query("way(#{id});node(w);out body;") |> Overpass.Parser.parse
nodes
end
end
defmodule Relation do
@doc """
http://wiki.openstreetmap.org/wiki/Relation
"""
defstruct id: "", members: [], tags: []
end
defmodule RelationMember do
@doc """
http://wiki.openstreetmap.org/wiki/Relation
"""
defstruct type: "", ref: "", role: ""
end
end