Current section
Files
Jump to
Current section
Files
lib/mbtiles.ex
defmodule Mbtiles do
@moduledoc false
require Logger
@doc """
returns the tile with specific coordinates
"""
@spec get_tile(integer, integer, integer) :: {atom, binary} | {:error, any}
def get_tile(zoom, x, y, opts \\ []) do
y = maybe_get_tms_y(y, zoom, opts[:tms])
with %{tile_data: tile} when not is_nil(tile) <- Queries.get_tile(zoom, x, y) do
tile
else
error ->
Logger.error(inspect(error), module: __MODULE__)
{:error, error}
end
end
@doc """
returns the database metadata
"""
@spec get_metadata() :: map | {:error, any}
def get_metadata() do
Queries.get_metadata()
end
@doc """
returns the possible zoom levels
"""
@spec get_all_zoom_levels() :: [integer]
def get_all_zoom_levels() do
Queries.get_all_zoom_levels()
end
@doc """
returns the possible y coordinates
"""
@spec get_all_y_coords(integer) :: [integer]
def get_all_y_coords(zoom) do
Queries.process_zoom(zoom)
end
@doc """
returns all tiles for given zoom and y coordinate
"""
@spec get_all_y_tiles(integer, integer) :: [binary]
def get_all_y_tiles(zoom, column) do
Queries.dump_tiles(zoom, column)
end
defp maybe_get_tms_y(y, z, true), do: get_tms_y(y, z)
defp maybe_get_tms_y(y, _z, _), do: y
def get_tms_y(y, z), do: round(:math.pow(2, z) - 1 - y)
def get_extension(<<0x89, 0x50, 0x4E, 0x47, _rest::bytes>>), do: :png
def get_extension(<<0xFF, _rest::bytes>>), do: :jpeg
def get_extension(<<0x1F, 0x8B, 0x08, _rest::bytes>>), do: :pbf_gz
def get_extension(<<26, _rest::bytes>>), do: :pbf
def get_extension(_tile), do: :pbf
end