Module losanalyst.classes.los_global
Expand source code
from osgeo import ogr
from typing import Union
import math
from losanalyst.classes.los import LoS
class LoSGlobal(LoS):
    """
    Class representing global LoS.
    See Also
    --------
    LoS : the basic class for representation of LoS
    """
    def __init__(self,
                 points: list,
                 observer_offset: float = 0,
                 target_offset: float = 0,
                 target_x: float = 0,
                 target_y: float = 0,
                 sampling_distance: float = None,
                 use_curvature_corrections: bool = True,
                 refraction_coefficient: float = 0.13):
        super().__init__(points,
                         is_global=True,
                         observer_offset=observer_offset,
                         target_offset=target_offset,
                         target_x=target_x,
                         target_y=target_y,
                         sampling_distance=sampling_distance,
                         use_curvature_corrections=use_curvature_corrections,
                         refraction_coefficient=refraction_coefficient)
        self.global_horizon_index = None
    def get_visible(self, return_integer: bool = False) -> Union[bool, int]:
        """
        Is the target point visible?
        Parameters
        ----------
        return_integer : bool, optional
            If the value is `True` returns values `0` or `1`. If it is `False` returns `True` or `False`.
        Returns
        -------
        bool or int
            Visibility of target point.
        """
        if return_integer:
            return int(self.visible[self.target_index])
        else:
            return self.visible[self.target_index]
    def _get_global_horizon_index(self) -> int:
        """
        Returns index of global horizon from list of points.
        Returns
        -------
        int
            Index of global horizon in `points`. If `0` then no global horizon is found.
        """
        if self.global_horizon_index is not None:
            return self.global_horizon_index
        else:
            horizon_index = 0
            for i in range(1, len(self.points) - 1):
                if self.horizon[i] and i != self.target_index:
                    horizon_index = i
            self.global_horizon_index = horizon_index
            return self.global_horizon_index
    def get_angle_difference_global_horizon(self) -> float:
        """
        Get angle difference between target point and horizon angle. Positive value means that horizon is lower than
        target point, negative value means that horizon is higher then target point.
        Returns
        -------
        float
            Value of angle difference.
        """
        horizon_angle = -90
        if self._get_global_horizon_index() != 0:
            horizon_angle = self.points[self._get_global_horizon_index()][4]
        return self.points[self.target_index][4] - horizon_angle
    def get_elevation_difference_global_horizon(self) -> float:
        """
        Get elevation difference between target point and horizon angle. Positive value means that horizon is lower than
        target point and the resulting value have to be added to target point to hide the horizon. Negative value
        means that horizon is higher then target point and it would need to lower by resulting value not to hide the
        horizon.
        Returns
        -------
        float
        """
        elev_difference_horizon = self.points[self.target_index][3] - (
                    self.points[0][3] + math.tan(math.radians(self.points[self._get_global_horizon_index()][4])) *
                    self.points[self.target_index][2])
        return elev_difference_horizon
    def get_horizon_distance(self) -> float:
        """
        Get distance of the global horizon from observer.
        Returns
        -------
        float
            Distance.
        """
        return self.points[self._get_global_horizon_index()][2]
    def get_horizon_count(self) -> int:
        """
        Get the number of horizons behind target on LoS.
        Returns
        -------
        int
        """
        return int(math.fsum(self.horizon[self.target_index+1:]))
    def __get_global_horizon_index(self) -> int:
        """
        Find the global horizon in `horizon`.
        Returns
        -------
        int
            Index in list.
        """
        index = None
        for i in range(len(self.points) - 1, -1, -1):
            if self.horizon[i]:
                index = i
                break
        return index
    def get_global_horizon(self) -> ogr.Geometry:
        """
        Get global horizon from LoS as `ogr.Geometry` point.
        Returns
        -------
        ogr.Geometry
        """
        index = self.__get_global_horizon_index()
        if index is None:
            index = -1
        return self._get_geom_at_index(index)
    def _get_max_local_horizon_index(self) -> int:
        """
        Get index of maximal local horizon (between observer and target) from `horizon`.
        Returns
        -------
        int or None
            If the result is `None`, there is no local horizon.
        """
        index = None
        for i in range(self.target_index-1, -1, -1):
            if self.horizon[i] and i != self.target_index:
                index = i
                break
        return index
    def get_max_local_horizon(self) -> ogr.Geometry:
        """
        Get maximal local horizon from LoS as `ogr.Geometry` point.
        Returns
        -------
        ogr.Geometry
        """
        index = self._get_max_local_horizon_index()
        if index is None:
            index = self.target_index
        return self._get_geom_at_index(index)Classes
- class LoSGlobal (points, observer_offset=0, target_offset=0, target_x=0, target_y=0, sampling_distance=None, use_curvature_corrections=True, refraction_coefficient=0.13)
- 
Class representing global LoS. See Also- LoS
- the basic class for representation of LoS
 Constructor of Los.Parameters- points:- listof- listof- float
- List of points that represents LoS. The structure is [[X1, Y1, Z1], [X2, Y2, Z2] … [Xn, Yn, Zn]].
- is_global:- bool
- Is the LoS global?
- is_without_target:- bool
- Is the LoS without target?
- observer_offset,- target_offset:- float
- Values representing offset of observer and target.
- target_x,- target_y:- float
- Coordinates of the target point. Necessary for global LoS.
- sampling_distance:- float, optional
- Sampling distance on Los if it known. Otherwise it is estimated from points.
- use_curvature_corrections:- bool, optional
- Calculate Earth curvature corrections while analyzing LoS. Default value is True.
- refraction_coefficient:- float, optional
- Refraction coefficient. Default value is 0.13.
 Expand source codeclass LoSGlobal(LoS): """ Class representing global LoS. See Also -------- LoS : the basic class for representation of LoS """ def __init__(self, points: list, observer_offset: float = 0, target_offset: float = 0, target_x: float = 0, target_y: float = 0, sampling_distance: float = None, use_curvature_corrections: bool = True, refraction_coefficient: float = 0.13): super().__init__(points, is_global=True, observer_offset=observer_offset, target_offset=target_offset, target_x=target_x, target_y=target_y, sampling_distance=sampling_distance, use_curvature_corrections=use_curvature_corrections, refraction_coefficient=refraction_coefficient) self.global_horizon_index = None def get_visible(self, return_integer: bool = False) -> Union[bool, int]: """ Is the target point visible? Parameters ---------- return_integer : bool, optional If the value is `True` returns values `0` or `1`. If it is `False` returns `True` or `False`. Returns ------- bool or int Visibility of target point. """ if return_integer: return int(self.visible[self.target_index]) else: return self.visible[self.target_index] def _get_global_horizon_index(self) -> int: """ Returns index of global horizon from list of points. Returns ------- int Index of global horizon in `points`. If `0` then no global horizon is found. """ if self.global_horizon_index is not None: return self.global_horizon_index else: horizon_index = 0 for i in range(1, len(self.points) - 1): if self.horizon[i] and i != self.target_index: horizon_index = i self.global_horizon_index = horizon_index return self.global_horizon_index def get_angle_difference_global_horizon(self) -> float: """ Get angle difference between target point and horizon angle. Positive value means that horizon is lower than target point, negative value means that horizon is higher then target point. Returns ------- float Value of angle difference. """ horizon_angle = -90 if self._get_global_horizon_index() != 0: horizon_angle = self.points[self._get_global_horizon_index()][4] return self.points[self.target_index][4] - horizon_angle def get_elevation_difference_global_horizon(self) -> float: """ Get elevation difference between target point and horizon angle. Positive value means that horizon is lower than target point and the resulting value have to be added to target point to hide the horizon. Negative value means that horizon is higher then target point and it would need to lower by resulting value not to hide the horizon. Returns ------- float """ elev_difference_horizon = self.points[self.target_index][3] - ( self.points[0][3] + math.tan(math.radians(self.points[self._get_global_horizon_index()][4])) * self.points[self.target_index][2]) return elev_difference_horizon def get_horizon_distance(self) -> float: """ Get distance of the global horizon from observer. Returns ------- float Distance. """ return self.points[self._get_global_horizon_index()][2] def get_horizon_count(self) -> int: """ Get the number of horizons behind target on LoS. Returns ------- int """ return int(math.fsum(self.horizon[self.target_index+1:])) def __get_global_horizon_index(self) -> int: """ Find the global horizon in `horizon`. Returns ------- int Index in list. """ index = None for i in range(len(self.points) - 1, -1, -1): if self.horizon[i]: index = i break return index def get_global_horizon(self) -> ogr.Geometry: """ Get global horizon from LoS as `ogr.Geometry` point. Returns ------- ogr.Geometry """ index = self.__get_global_horizon_index() if index is None: index = -1 return self._get_geom_at_index(index) def _get_max_local_horizon_index(self) -> int: """ Get index of maximal local horizon (between observer and target) from `horizon`. Returns ------- int or None If the result is `None`, there is no local horizon. """ index = None for i in range(self.target_index-1, -1, -1): if self.horizon[i] and i != self.target_index: index = i break return index def get_max_local_horizon(self) -> ogr.Geometry: """ Get maximal local horizon from LoS as `ogr.Geometry` point. Returns ------- ogr.Geometry """ index = self._get_max_local_horizon_index() if index is None: index = self.target_index return self._get_geom_at_index(index)AncestorsMethods- def get_angle_difference_global_horizon(self)
- 
Get angle difference between target point and horizon angle. Positive value means that horizon is lower than target point, negative value means that horizon is higher then target point. Returns- float
- Value of angle difference.
 Expand source codedef get_angle_difference_global_horizon(self) -> float: """ Get angle difference between target point and horizon angle. Positive value means that horizon is lower than target point, negative value means that horizon is higher then target point. Returns ------- float Value of angle difference. """ horizon_angle = -90 if self._get_global_horizon_index() != 0: horizon_angle = self.points[self._get_global_horizon_index()][4] return self.points[self.target_index][4] - horizon_angle
- def get_elevation_difference_global_horizon(self)
- 
Get elevation difference between target point and horizon angle. Positive value means that horizon is lower than target point and the resulting value have to be added to target point to hide the horizon. Negative value means that horizon is higher then target point and it would need to lower by resulting value not to hide the horizon. Returns- float
 Expand source codedef get_elevation_difference_global_horizon(self) -> float: """ Get elevation difference between target point and horizon angle. Positive value means that horizon is lower than target point and the resulting value have to be added to target point to hide the horizon. Negative value means that horizon is higher then target point and it would need to lower by resulting value not to hide the horizon. Returns ------- float """ elev_difference_horizon = self.points[self.target_index][3] - ( self.points[0][3] + math.tan(math.radians(self.points[self._get_global_horizon_index()][4])) * self.points[self.target_index][2]) return elev_difference_horizon
- def get_global_horizon(self)
- 
Get global horizon from LoS as ogr.Geometrypoint.Returns- ogr.Geometry
 Expand source codedef get_global_horizon(self) -> ogr.Geometry: """ Get global horizon from LoS as `ogr.Geometry` point. Returns ------- ogr.Geometry """ index = self.__get_global_horizon_index() if index is None: index = -1 return self._get_geom_at_index(index)
- def get_horizon_count(self)
- 
Get the number of horizons behind target on LoS. Returns- int
 Expand source codedef get_horizon_count(self) -> int: """ Get the number of horizons behind target on LoS. Returns ------- int """ return int(math.fsum(self.horizon[self.target_index+1:]))
- def get_horizon_distance(self)
- 
Get distance of the global horizon from observer. Returns- float
- Distance.
 Expand source codedef get_horizon_distance(self) -> float: """ Get distance of the global horizon from observer. Returns ------- float Distance. """ return self.points[self._get_global_horizon_index()][2]
- def get_max_local_horizon(self)
- 
Get maximal local horizon from LoS as ogr.Geometrypoint.Returns- ogr.Geometry
 Expand source codedef get_max_local_horizon(self) -> ogr.Geometry: """ Get maximal local horizon from LoS as `ogr.Geometry` point. Returns ------- ogr.Geometry """ index = self._get_max_local_horizon_index() if index is None: index = self.target_index return self._get_geom_at_index(index)
- def get_visible(self, return_integer=False)
- 
Is the target point visible? Parameters- return_integer:- bool, optional
- If the value is Truereturns values0or1. If it isFalsereturnsTrueorFalse.
 Returns- boolor- int
- Visibility of target point.
 Expand source codedef get_visible(self, return_integer: bool = False) -> Union[bool, int]: """ Is the target point visible? Parameters ---------- return_integer : bool, optional If the value is `True` returns values `0` or `1`. If it is `False` returns `True` or `False`. Returns ------- bool or int Visibility of target point. """ if return_integer: return int(self.visible[self.target_index]) else: return self.visible[self.target_index]
 Inherited members