Packages
image
0.4.0
0.72.0
0.71.0
0.70.0
0.69.0
0.68.0
0.67.0
0.67.0-dev
retired
0.66.0
0.65.0
0.64.0
0.63.0
0.62.1
0.62.0
0.61.1
0.61.0
0.60.0
0.59.3
0.59.2
0.59.1
0.59.0
0.58.0
0.57.0
0.56.1
0.56.0
0.55.2
0.55.1
retired
0.55.0
0.54.4
0.54.3
0.54.2
0.54.1
0.54.0
0.53.0
0.52.3
0.52.2
0.52.1
0.52.0
retired
0.51.0
0.50.0
0.49.0
0.48.1
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.2
0.43.1
0.43.0
0.42.0
0.41.0
0.40.0
0.39.3
0.39.2
0.39.1
0.39.0
0.38.4
0.38.3
0.38.2
0.38.1
0.38.0
0.37.0
0.36.2
0.36.1
0.36.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.1
0.31.0
0.30.0
0.29.0
0.28.2
0.28.1
0.28.0
0.27.0
0.26.0
0.25.1
0.25.0
0.24.1
0.24.0
0.23.2
0.23.1
0.23.0
0.22.1
0.22.0
0.21.0
0.20.0
retired
0.19.0
0.18.1
0.18.0
0.17.0
0.16.0
0.15.0
0.14.4
0.14.2
0.14.1
0.14.0
retired
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.10.0-rc.0
retired
0.9.0
retired
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
An approachable image processing library primarily based upon Vix and libvips that is NIF-based, fast, multi-threaded, pipelined and has a low memory footprint.
Current section
Files
Jump to
Current section
Files
lib/image/exif/data/gps.ex
defmodule Image.Exif.Gps do
@moduledoc false
# Internal representation of GPS tag in the EXIF.
@type t :: %__MODULE__{
gps_version_id: any(),
gps_latitude_ref: any(),
gps_latitude: any(),
gps_longitude_ref: any(),
gps_longitude: any(),
gps_altitude_ref: any(),
gps_altitude: any(),
gps_time_stamp: any(),
gps_satellites: any(),
gps_status: any(),
gps_measure_mode: any(),
gps_dop: any(),
gps_speed_ref: any(),
gps_speed: any(),
gps_track_ref: any(),
gps_track: any(),
gps_img_direction_ref: any(),
gps_img_direction: any(),
gps_map_datum: any(),
gps_dest_latitude_ref: any(),
gps_dest_latitude: any(),
gps_dest_longitude_ref: any(),
gps_dest_longitude: any(),
gps_dest_bearing_ref: any(),
gps_dest_bearing: any(),
gps_dest_distance_ref: any(),
gps_dest_distance: any(),
gps_processing_method: any(),
gps_area_information: any(),
gps_date_stamp: any(),
gps_differential: any(),
gps_h_positioning_error: any()
}
@fields [
:gps_version_id,
:gps_latitude_ref,
:gps_latitude,
:gps_longitude_ref,
:gps_longitude,
:gps_altitude_ref,
:gps_altitude,
:gps_time_stamp,
:gps_satellites,
:gps_status,
:gps_measure_mode,
:gps_dop,
:gps_speed_ref,
:gps_speed,
:gps_track_ref,
:gps_track,
:gps_img_direction_ref,
:gps_img_direction,
:gps_map_datum,
:gps_dest_latitude_ref,
:gps_dest_latitude,
:gps_dest_longitude_ref,
:gps_dest_longitude,
:gps_dest_bearing_ref,
:gps_dest_bearing,
:gps_dest_distance_ref,
:gps_dest_distance,
:gps_processing_method,
:gps_area_information,
:gps_date_stamp,
:gps_differential,
:gps_h_positioning_error
]
@spec fields :: [atom()]
@doc false
def fields, do: @fields
defstruct @fields
@spec inspect(data :: t()) :: String.t()
@doc """
Returns the human-readable representation of GPS data, e. g. "41°23´16˝N,2°11´50˝E".
"""
def inspect(%__MODULE__{gps_latitude: nil} = _data), do: ""
def inspect(%__MODULE__{gps_longitude: nil} = _data), do: ""
def inspect(%__MODULE__{} = data) do
# gps_latitude: [41, 23, 16.019], gps_latitude_ref: "N",
# gps_longitude: [2, 11, 49.584], gps_longitude_ref: "E"
# 41 deg 23' 16.02" N, 2 deg 11' 49.58" E
[lat_d, lat_m, lat_s] = data.gps_latitude
[lon_d, lon_m, lon_s] = data.gps_longitude
[
~s|#{lat_d}°#{lat_m}´#{round(lat_s)}˝#{data.gps_latitude_ref || "N"}|,
~s|#{lon_d}°#{lon_m}´#{round(lon_s)}˝#{data.gps_longitude_ref || "N"}|
]
|> Enum.join(",")
end
defimpl String.Chars, for: Image.Exif.Gps do
@moduledoc false
alias Image.Exif.Gps
@spec to_string(Gps.t()) :: String.t()
def to_string(data), do: Gps.inspect(data)
end
end