# llarangeangle

Propagation range between two geolocations

Since R2022b

## Syntax

``rs = llarangeangle(lla1,lla2)``
``rs = llarangeangle(___,K)``
``rs = llarangeangle(lla1,lla2,laxes1)``
``rs = llarangeangle(lla1,lla2,laxes1,laxes2)``
``[rs,aod,aoa] = llarangeangle(___)``

## Description

example

````rs = llarangeangle(lla1,lla2)` computes the propagation range `rs` from one geolocation `lla1` to another geolocation `lla2`. The propagation range is computed using an effective earth radius factor of 4/3. If the destination is located beyond the range of the horizon of the starting location, then `rs` is `Inf`.```

example

````rs = llarangeangle(___,K)` also specifies the effective earth radius factor `K`.```

example

````rs = llarangeangle(lla1,lla2,laxes1)` also specifies the local orientation axes `laxes1` of the departure geolocation.```

example

````rs = llarangeangle(lla1,lla2,laxes1,laxes2)` also specifies the local orientation axes `laxes2` arrival point geolocation.```

example

````[rs,aod,aoa] = llarangeangle(___)` also returns the departure angle `aod` at the starting location and the path angle of arrival `aoa` at the destination.```

## Examples

collapse all

Find the propagation range between two points on the earth using the default effective earth radius of 4/3.

Specify the geolocation of the first point.

```lat1 = 42.861119; lon1 = 72.108272; alt1 = 936.95;```

Specify the geolocation of the second point.

```lat2 = 42.384144; lon2 = 71.173108; alt2 = 55.7784;```

Call the `llarangeangle` function.

```lla1 = [lat1 lon1 alt1]; lla2 = [lat2 lon2 alt2]; [d,aod,aoa] = llarangeangle(lla1,lla2)```
```d = 9.3111e+04 ```
```aod = 2×1 -124.4107 0.8568 ```
```aoa = 2×1 54.9561 -0.2276 ```

Compute the propagation range.

Compute the propagated range and departure angles from a transmitter at Norfolk, Virginia (37N, 76W), with an altitude of 20 km, to a receiver at Hickman, Virginia (37N, 80W), with an altitude of 300 m. Assume the effective earth radius factor is 1.16.

```lla1 = [37 -76 20e3]; lla2 = [37 -80 300]; [d,aod,aoa] = llarangeangle(lla1,lla2,1.16)```
```d = 3.5634e+05 ```
```aod = 2×1 -88.7961 4.5457 ```
```aoa = 2×1 88.7961 -1.7908 ```

Compute the propagation range from a source point to two closely-spaced arrival points. Use an effective earth radius factor of 1.36

Specify the source geolocation.

```lat1 = 42.861119; lon1 = 72.108272; alt1 = 936.95;```

Specify the first arrival geolocation.

```lat2 = 42.384144; lon2 = 71.173108; alt2 = 55.7784;```

Specify the second arrival geolocation.

```lat3 = 42.384500; lon3 = 71.173000; alt3 = 20;```

Compute the range in kilometers between the positions.

```lla1 = [lat1 lon1 alt1]; lla2 = [lat2 lon2 alt2; lat3 lon3 alt3]; rs = llarangeangle(lla1,lla2,1.36)/1000.0```
```rs = 1×2 93.1116 93.0963 ```

Compute the propagation range between two points. Set the local orientation axes at the departure and arrival points.

Specify the geolocation and local orientation axes of the departure point.

```lat1 = 42.861119; lon1 = 72.108272; alt1 = 936.95; laxes1 = rotz(30);```

Specify the geolocation and local orientation axes of the arrival point.

```lat2 = 42.384144; lon2 = 71.173108; alt2 = 55.7784; laxes2 = rotx(45);```

Compute the propagation range in kilometers.

```rs = llarangeangle([lat1 lon1 alt1], ... [lat2 lon2 alt2],4/3,laxes1,laxes2)/1000.0```
```rs = 93.1115 ```

Compute the propagation range between two points. Set the local orientation axes at the departure point.

Specify the geolocation of the departure point.

```lat1 = 42.861119; lon1 = 72.108272; alt1 = 936.95;```

Specify the geolocation of the arrival point.

```lat2 = 42.384144; lon2 = 71.173108; alt2 = 55.7784;```

Choose a local coordinate axes matrix at the departure point.

`laxes1 = rotz(30);`

Compute the propagation range in kilometers.

`rs = llarangeangle([lat1 lon1 alt1],[lat2 lon2 alt2],4/3,laxes1)/1000.0`
```rs = 93.1115 ```

## Input Arguments

collapse all

First geolocation, specified as an M-by-3 real-valued matrix. Each row defines a different geolocation in the form ```[latitude longitude altitude]```. Latitude values lie in the range `[-90 90]` with zero at the Equator. Longitude values lie in the range `[-180 180]` with zero at Greenwich. Altitude values are measured from mean sea level (MSL). Latitude and longitude units are in degrees. Altitude units are in meters.

If both `lla1` and `lla2` have multiple rows, then `lla1` and `lla2` must have identical sizes. Each row in `lla1` corresponds to a row in `lla2`.

Example: `[45,0,100]`

Data Types: `single` | `double`

Second geolocation, specified as an M-by-3 real-valued matrix. Each row defines a different geolocation in the form ```[latitude longitude altitude]```. Latitude values lie in the range `[-90 90]` with zero at the Equator. Longitude values lie in the range `[-180 180]` with zero at Greenwich. Altitude values are measured from mean sea level (MSL). Latitude and longitude units are in degrees. Altitude units are in meters.

If both `lla1` and `lla2` have multiple rows, then `lla1` and `lla2` must have identical sizes. Each row in `lla1` corresponds to a row in `lla2`.

Example: `[46,0,100]`

Data Types: `single` | `double`

Effective earth radius factor, specified as a positive scalar. Units are dimensionless.

Data Types: `single` | `double`

Local orientation axes of departure, specified as a real-valued 3-by-3 matrix or a 3-by-3-by-M real-valued array. If `laxes1` is a matrix, then all locations specified in `lla1` have the same orientation. Each column in `laxes1` specifies the x, y, and z coordinate axes in the form of `[x;y;z]` in ECEF coordinates. If `laxes1` is a 3-by-3-by-M array, then each page corresponds to a location specified in `lla1`. This argument has no impact on the value of `rs`. Units are dimensionless.

Data Types: `double`

Local orientation axes of arrival, specified as a 3-by-3 real-valued matrix or a 3-by-3-by-M real-valued array. If `laxes2` is a matrix, then all locations specified in `lla2` have the same orientation. Each column in `laxes2` specifies the x, y, and z coordinate axes in the form of `[x;y;z]` in earth-centered earth fixed (ECEF) coordinates. If `laxes2` is a 3-by-3-by-M array, then each page corresponds to a location specified in `lla2`. This argument has no impact on the value of `rs`. Units are dimensionless.

Data Types: `double`

## Output Arguments

collapse all

Propagation range, returned as a scalar or real-valued length-M vector. M is the number of geolocations specified in the `lla1` and `lla2` arguments.

Data Types: `double`

Angle of departure of signal from geolocation `lla1` to geolocation `lla2`. `aod` is a 2-by-M matrix whose columns represent the departure directions in the form of `[azimuth; elevation]`.

Data Types: `double`

Angle of arrival of signal at geolocation `lla2` from geolocation `lla1`. `apa` is a 2-by-M matrix whose columns represent the arrival directions in the form of ```[azimuth; elevation]```.

Data Types: `double`

 G. Robertshaw, "Effective earth radius for refraction of radio waves at altitudes above 1 km," in IEEE Transactions on Antennas and Propagation, vol. 34, no. 9, pp. 1099-1105, September 1986, doi: 10.1109/TAP.1986.1143948.