Ground Facility Visibility Circle

We can use the function:

ground_facility_visibility_circle(gf_wgs84::Tuple, satellite_position_norm::Number; kwargs...) -> Vector{NTuple{2, Float64}}

to compute the ground facility visibility circle from the position gf_wgs84 (WGS84) to a satellite in which its distance from the Earth's center is satellite_position_norm [m]. It returns a vector of NTuple{2, Float64} where the first element is the latitude [rad] and the second is the longitude [rad] of each point in the visibility circle.

The ground facility is specified using a tuple with its WGS84 position:

(latitude [rad], longitude [rad], altitude [m])

The following keywords are available:

  • azimuth_step::Number: The step in the azimuth used to compute the visibility circle. (Default: 0.1 |> deg2rad)
  • minimum_elevation::Number: Minimum elevation angle for communication between the satellite and the ground facility [rad]. (Default: 10 |> deg2rad)
Note

If we want to verify if a satellite has line-of-sight to a ground facility, see the function is_ground_facility_visible.

Examples

We can obtain the visibility circle between the Amazonia-1 satellite and INPE's ground station at Cuiabá, MT, Brazil, using:

julia> ground_facility_visibility_circle(
           (-(15 + 33 / 60) |> deg2rad, -(56 + 04 / 60) |> deg2rad, 0),
           7130.982e3
       )3602-element Vector{Tuple{Float64, Float64}}:
 (-0.591785092924153, -0.9785479339514876)
 (-0.5917845373222919, -0.9792067036234945)
 (-0.59178287051962, -0.979865470107842)
 (-0.5917800925248716, -0.9805242302169137)
 (-0.591776203352604, -0.981182980763179)
 (-0.5917712030231965, -0.981841718559236)
 (-0.591765091562851, -0.9825004404178551)
 (-0.5917578690035913, -0.983159143152021)
 (-0.5917495353832618, -0.9838178235749759)
 (-0.5917400907455281, -0.9844764785002631)
 ⋮
 (-0.5917578690035913, -0.9739367247509539)
 (-0.591765091562851, -0.9745954274851201)
 (-0.5917712030231965, -0.9752541493437392)
 (-0.5917762033526038, -0.9759128871397963)
 (-0.5917800925248716, -0.9765716376860615)
 (-0.59178287051962, -0.9772303977951331)
 (-0.5917845373222919, -0.9778891642794807)
 (-0.591785092924153, -0.9785479339514875)
 (-0.5917845373222919, -0.9792067036234945)

If we plot the result using Makie, we obtain:

Cuiabá ground facility visibility circle

Plotting

If the user loads the package GeoMakie.jl together with a Makie.jl backend, an extension is loaded and adds the possibility to plot the ground facility visibility circle. In this case, the following functions are available:

plot_ground_facility_visibility_circles(vgf_vc::Vector{Vector{NTuple{2, Number}}}; kwargs...) -> Figure, Axis

It plots the ground facility visibility circles in the vector vgf_vc, where each element is computed using the function ground_facility_visibility_circle. It returns the objects Figure and Axis used to plot the data. For more information, please refer to Makie.jl documentation.

The following keywords are available:

  • ground_facility_names::Union{Nothing, Vector{String}}: The user can provide a vector of Strings with the length of vgf_vc to be plotted with the visibility circles. If this parameter is nothing, no ground facility name is added to the figure. (Default = nothing)
  • theme::Symbol: Theme variant used to style the figure, applied locally through the function SatelliteAnalysis.makie_theme. It can be :light or :dark. (Default: :light)

All other kwargs... are passed to the function plot_world_map.

Note

This function plots the countries' borders in the created figure using the file with the country polygons fetched with the function fetch_country_polygons. Hence, if this file does not exist, the algorithm tries to download it.

plot_ground_facility_visibility_circles!(ax::Axis, vgf_vc::Vector{Vector{NTuple{2, Number}}}; kwargs...) -> Nothing

It plots in the Makie.jl axis ax the ground facility visibility circles in the vector vgf_vc, where each element is computed using the function ground_facility_visibility_circle.

The following keywords are available:

  • ground_facility_names::Union{Nothing, Vector{String}}: The user can provide a vector of Strings with the length of vgf_vc to be plotted with the visibility circles. If this parameter is nothing, no ground facility name is added to the figure. (Default = nothing)

The user can use this function to plot the ground facility visibility circle on top of an existing figure. Since it draws into an existing axis, it does not apply the theme provided by the function SatelliteAnalysis.makie_theme.

Example

The code:

julia> using GeoMakie, CairoMakie
julia> gf1_vc = ground_facility_visibility_circle( (-(15 + 33 / 60) |> deg2rad, -(56 + 04 / 60) |> deg2rad, 0), 7130.982e3 );
julia> gf2_vc = ground_facility_visibility_circle( (-22.6763 |> deg2rad, -44.9973 |> deg2rad, 0), 7130.982e3 );
julia> gf3_vc = ground_facility_visibility_circle( (+78.228 |> deg2rad, +15.399 |> deg2rad, 0), 7130.982e3 );
julia> fig, ax = plot_ground_facility_visibility_circles( [gf1_vc, gf2_vc, gf3_vc]; ground_facility_names = ["Cuiabá", "Cachoeira Paulista", "Svalbard"] );
julia> save("gf_visibility_circle_02.png", fig)

produces the following figure:

Ground facility visibility circles