RadioPlan

From Maria GDK Wiki
Revision as of 08:38, 27 January 2026 by Oaa (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

General

RadioPlan is the module for handling radios and radioplanning. Functionality is controlled via the interface IMariaRadioPlanLayer

public interface IMariaRadioPlanLayer : IMariaLayer

Data model

Radio

The radio is a general purpose radio. It can have different properties like frequency and technology.

Radio is attached to a Site and a RadioNet

public Radio(Guid id, string name, Site site, RadioSystem radioSystem, SignalPower txPower, double loss, SignalPower rxSensitivity, Frequency frequency)

Site

The site holds the position for one or more radios.

public Site(Guid id, string name, GeoPos location)

RadioNet

The radio net holds a group of radios of same technology

public RadioNet(Guid id, string name, NetworkType networkType, RadioSystem radioSystem)

Antenna

A single antenna can be applied to the cell, with properties like

public string AntennaTypeName { get; }
public double Height { get; }

public Azimuth Direction { get; set; }
public Tilt ElectricalTilt { get; set; }
public Tilt MechanicalTilt { get; set; }

AntennaType

The list of availble antenna types is available from the Antenna Service which are handeled by the AntennaCache:

var antennaTypes = await RadioPlanLayer.AntennaCache.GetAsync();

From the AntennaType we get the string AntennaTypeName which is set on the Antenna object. Antenna cache can return antenna types valid for a specific radio frequency.

Task<IEnumerable<AntennaType>> GetAntennaTypeForFrequencyAsync(Frequency frequency);

Data model store

Site store

Sites are stored IRadioPlanSiteStore IMariaRadioPlanLayer.RadioStore

Save a new Site:

 Site = new Site(Guid.NewGuid(), Name, Location);
 _radioPlanLayer.SiteStore.AddOrUpdate(Site);

Get all sites:

var sites = _radioPlanLayer.SiteStore.Get();

Get a speficic site:

var site = _radioPlanLayer.SiteStore.Get(siteId);

Remove a site from store:

RadioPlanLayer.SiteStore.Remove(site);

Radio store

Radios are stored to IRadioPlanRadioStore IMariaRadioPlanLayer.RadioStore

Similar to SiteStore, this interface uses AddOrUpdate, Get and Remove.

Radio net store

A radio net is a collection of radios connected.

Similar to SiteStore, this interface uses AddOrUpdate, Get and Remove.

Situation

The collections of site, radios and radio nets can be saved to a situation file.

Situation data can be stored in to persistent storage system with help of IMariaRadioPlanLayer.Serialize

Example saving to a file:

byte[] situationBytes = _radioPlanLayer.Serialize(_parent.DrawObjectCommonFactory);
File.WriteAllBytesAsync(filePath, situationBytes);

Situation data can be restored from persistent storage system with help of IMariaRadioPlanLayer.DeSerialize Example reading from a file:

byte[] situationBytes =  await System.IO.File.ReadAllBytesAsync(filePath);
_radioPlanLayer.DeSerialize(situationBytes, _parent.DrawObjectCommonFactory);


comment:

Coverage predictions

Calculate coverage

Coverage calculations are controlled via the interce IRadioCoverage in IMariaRadioPlanLayer.RadioCoverage

To create a coverage file, we need to define some parameters, the most important is the selection of propagation model.

The list of propagation models can be found like this:

_propagationModels = new ReadOnlyCollection<string>(_radioPlanLayer.RadioCoverage.RadioPropagationModelRepository.PropagationModels.Select(m => m.Name).ToList());

Properties for the Coverage calculation is stored in

record CoverageProperties(int Resolution, int Size, AreaShape CalculationAreaShape, string PropagationModel, RxHeight RxHeight);

Coverage calculation is started with

var jobIdString = await _radioPlanLayer.RadioCoverage.StartCoverageCalculationForRadio(radio, coverageProperties);

If successfull, jobIdString returns a Guid as string for the job. Else the text string return error message. Progress can be checked with RequestCalculationJobStatus.

CalculationJobStatus status = await _radioPlanLayer.RadioCoverage.RequestCalculationJobStatus(jobId);

Coverage plotting

To show coverage plots in the map some setup is needed

For which radios coverage plot is requested is handeled with IMariaRadioPlanLayer.IRadioCoverage.Add

Example adding all radios in a radionet:

foreach (var radio in radioNet.Radios)
{
    _radioPlanLayer.RadioCoverage.Add(radio);
}

Example removing a single radio from the plot:

RadioPlanLayer.RadioCoverage.Remove(radio);

IMariaRadioPlanLayer.IRadioCoverage.Visible must be set to true, to show plot

IMariaRadioPlanLayer.IRadioCoverage.PlotType controls the type of plot to be shown

See: Radio plan Coverage plots page

Coverage contours

For coverage plots, or group of coverage plots, coverage contours can be calculated and displayerd

See: Radio plan coverage contours page

See: Radio plan Coverage contours page

Connectivity Lines

Connectivity lines can be shown between radios in a radio net.

See: Radio plan connectirvity line page

See: Radio plan Connectivity lines page

Settings

RadioPlanSettings

Radio plan settings is available from IMariaRadioPlanLayer.Settings

These settings is used to control:

  • Setting for creating coverage predictions
  • Colour schemas for plots
  • Settings for creating conectivity lines
  • Settings for creating coverage contour polygons

See: Radio plan Settings pages

SettingsServices

The radioplan module uses external services for

  • Antenna store
  • Coverage calculations