# Rectangle - Прямоугольник

class axipy.Rectangle

  Базовые классы: `Geometry`

  Геометрический объект типа прямоугольник.

  Пример.

      r1 = Rectangle(0, 0, 40, 20)  # Создадим объект через перечень координат.
      r2 = Rectangle(Rect(0, 0, 40, 20))  # Создадим объект передав объект :class:`Rect`.
      r3 = Rectangle([0, 0, 40, 20])  # Создадим объект передав списком :class:`list`.

  Конструктор класса:

  `__init__`(*par[, cs]) | Конструктор класса.

  Классовые методы:

  `distance_by_points`(start, end[, cs]) | Производит расчет расстояния между двумя точками и азимут от первой до второй точки.
  `from_geojson`(json[, cs]) | Возвращает геометрию из ее 'GeoJSON' представления.
  `from_mif`(mif) | Возвращает геометрию из ее 'MIF' представления.
  `from_wkb`(wkb[, coordsystem]) | Создает геометрический объект из строки формата WKB.
  `from_wkt`(wkt[, coordsystem]) | Создает геометрический объект из строки формата WKT.
  `point_by_azimuth`(point, azimuth, distance[, cs]) | Производит расчет координат точки относительно заданной, и находящейся на расстоянии distance по направлению azimuth.

  Свойства:

  `bounds` | Возвращает минимальный ограничивающий прямоугольник.
  `coordsystem` | Система Координат (СК) геометрии.
  `is_valid` | Проверяет геометрию на валидность.
  `is_valid_reason` | Если геометрия неправильная, возвращает краткую аннотацию причины.
  `name` | Возвращает наименование геометрического объекта.
  `type` | Возвращает тип геометрического элемента.
  `xmax` | Максимальное значение X.
  `xmin` | Минимальное значение X.
  `ymax` | Максимальное значение Y.
  `ymin` | Минимальное значение Y.

  Методы:

  `affine_transform`(trans) | Трансформирует объект исходя из заданных параметров трансформации.
  `almost_equals`(other, tolerance) | Производит примерное сравнения с другой геометрией в пределах заданной точности.
  `boundary`() | Возвращает границы геометрии в виде полилинии.
  `buffer`(distance[, resolution, capStyle, ...]) | Производит построение буфера вокруг объекта.
  `centroid`() | Возвращает центроид геометрии.
  `clone`() | Создает копию объекта.
  `contains`(other) | Возвращает True, если геометрия полностью содержит передаваемую в качестве параметра геометрию.
  `convex_hull`() | Возвращает минимальный окаймляющий полигон со всеми выпуклыми углами.
  `covers`(other) | Возвращает True, если геометрия охватывает геометрию other.
  `crosses`(other) | Возвращает True, если при пересечении геометрий объекты частично пересекаются.
  `difference`(other) | Возвращает область первой геометрии, которая не пересечена второй геометрией.
  `disjoint`(other) | Возвращает True, если геометрии не пересекаются и не соприкасаются.
  `envelope`() | Возвращает полигон, описывающий заданную геометрию.
  `equals`(other) | Производит сравнение с другой геометрией.
  `get_area`([area_unit, calc_mode]) | Рассчитывает площадь, если объект площадной.
  `get_distance`(other[, u]) | Производит расчет расстояния до объекта other.
  `get_length`([u, calc_mode]) | Рассчитывает длину геометрии.
  `get_perimeter`([u, calc_mode]) | Рассчитывает периметр геометрии.
  `intersection`(other) | Возвращает область пересечения с другой геометрией.
  `intersects`(other) | Возвращает True, если геометрии пересекаются.
  `overlaps`(other) | Возвращает True, если пересечение геометрий отличается от обеих геометрий.
  `relate`(other) | Проверяет отношения между объектами.
  `reproject`(cs) | Перепроецирует геометрию в другую систему координат.
  `rotate`(point, angle) | Поворот геометрии относительно заданной точки.
  `scale`(kx, ky) | Масштабирует объект по заданным коэффициентам масштабирования.
  `shift`(dx, dy) | Смещает объект на заданную величину.
  `split_by_polyline`(splitter) | Разрезает объект линейным объектом.
  `symmetric_difference`(other) | Возвращает логический XOR областей геометрий (объединение разниц).
  `to_geojson`() | Преобразует геометрию в формат 'GeoJSON'.
  `to_linestring`() | Пробует геометрию преобразовать в линейный объект.
  `to_mif`() | Преобразует геометрию в формат MIF.
  `to_polygon`() | Пробует геометрию преобразовать в площадной объект.
  `to_wkb`() | Возвращает WKB строку для геометрии.
  `to_wkt`() | Возвращает WKT строку для геометрии.
  `touches`(other) | Возвращает True, если геометрии соприкасаются.
  `union`(other) | Возвращает результат объединения двух геометрий.
  `within`(other) | Возвращает True, если геометрия находится полностью внутри геометрии other.

  Специальные методы:

  `__eq__`(other) | Оператор равенства (==).
  `__repr__`() | Представление геометрии в виде строки.

  __eq__(other: object) → bool

    Оператор равенства (==).

  __init__(*par: Union[Rect, float], cs: Optional[CoordSystem] = None)

    Конструктор класса.

    Параметры:

      - par – Прямоугольник класса `Rect` или перечень координат через запятую (xmin, ymin, xmax, ymax) или списком `list`.

      - cs – Система Координат, в которой создается геометрия.

  __repr__() → str

    Представление геометрии в виде строки.

  affine_transform(trans: QTransform) → Geometry

    Трансформирует объект исходя из заданных параметров трансформации.

    Параметры:

      trans – Матрица трансформации.

    См.также

    Для простых операций типа сдвиг, масштабирование и поворот, рекомендуется использовать `shift()`, `scale()`, `rotate()` соответственно.

    Для выполнения преобразования необходимо сформировать матрицу `PySide2.QtGui.QTransform`. Сделать это можно или последовательно дополняя преобразование или же сразу задав необходимые коэффициенты.

    Пример последовательного задания матрицы.

        from PySide2.QtGui import QTransform
        dx = 5
        dy = 5
        scale_x = 0.5
        scale_y = 0.5
        # Исходная линия
        line = Line((1,1), (10,10))
        print('source>>', line)
        '''
        source>> Line begin=(1.0 1.0) end=(10.0 10.0)
        '''
        # Формируем матрицу
        # Сначала масштабируем
        tr = QTransform.fromScale(scale_x, scale_y)
        # Затем перемещаем
        tr *= QTransform.fromTranslate(dx, dy)
        # Применяем матрицу
        line_transform = line.affine_transform(tr)
        print('transformed>>', line_transform)
        '''
        transformed>> Line begin=(5.5 5.5) end=(10.0 10.0)
        '''

    Пример задания матрицы через коэффициенты.

        from PySide2.QtGui import QTransform
        dx = 5
        dy = 5
        scale_x = 0.5
        scale_y = 0.5
        # Исходная линия
        line = Line((1,1), (10,10))
        print('source>>', line)
        '''
        source>> Line begin=(1.0 1.0) end=(10.0 10.0)
        '''
        # Зададим матрицу, сразу указав коэффициенты
        tr = QTransform(scale_x, 0, 0, scale_y, dx, dy)
        line_transform = line.affine_transform(tr)
        print('transformed>>', line_transform)
        '''
        transformed>> Line begin=(5.5 5.5) end=(10.0 10.0)
        '''

  almost_equals(other: Geometry, tolerance: float) → bool

    Производит примерное сравнения с другой геометрией в пределах заданной точности.

    Параметры:

      - other – Сравниваемый объект.

      - tolerance – Точность сравнения.

    Результат:

      Возвращает True, если геометрии равны в пределах заданного отклонения.

  boundary() → Optional[Geometry]

    Возвращает границы геометрии в виде полилинии.

  property bounds: Rect

    Возвращает минимальный ограничивающий прямоугольник.

  buffer(distance: float, resolution: int = 16, capStyle: LineCapStyle = LineCapStyle.Round, join_style: LineJoinStyle = LineJoinStyle.Round, mitreLimit: float = 5.0) → Geometry

    Производит построение буфера вокруг объекта.

    Параметры:

      - distance – Ширина буфера.

      - resolution – Количество сегментов на квадрант.

      - capStyle – Стиль окончания.

      - join_style – Стиль соединения.

      - mitreLimit – Предел среза.

  centroid() → Point

    Возвращает центроид геометрии.

  clone() → Geometry

    Создает копию объекта.

  contains(other: Geometry) → bool

    Возвращает True, если геометрия полностью содержит передаваемую в качестве параметра геометрию.

  convex_hull() → Geometry

    Возвращает минимальный окаймляющий полигон со всеми выпуклыми углами.

  property coordsystem: Optional[CoordSystem]

    Система Координат (СК) геометрии.

  covers(other: Geometry) → bool

    Возвращает True, если геометрия охватывает геометрию other.

  crosses(other: Geometry) → bool

    Возвращает True, если при пересечении геометрий объекты частично пересекаются.

  difference(other: Geometry) → Optional[Geometry]

    Возвращает область первой геометрии, которая не пересечена второй геометрией.

  disjoint(other: Geometry) → bool

    Возвращает True, если геометрии не пересекаются и не соприкасаются.

  static distance_by_points(start: Union[Pnt, Tuple[float, float]], end: Union[Pnt, Tuple[float, float]], cs: Optional[CoordSystem] = None) → Tuple

    Производит расчет расстояния между двумя точками и азимут от первой до второй точки.

    См.также

    Обратная функция `point_by_azimuth()`

    Параметры:

      - start – Начальная точка. Если задана СК, то координаты в ней.

      - end – Конечная точка. Если задана СК, то координаты в ней.

      - cs – СК, на базе эллипсоида которой производится расчет. Если не задана, то расчет производится на плоскости.

    Результат:

      Возвращается пара значений (расстояние в метрах, азимут в градусах)

  envelope() → Geometry

    Возвращает полигон, описывающий заданную геометрию.

  equals(other: Geometry) → bool

    Производит сравнение с другой геометрией.

    Параметры:

      other – Сравниваемая геометрия.

    Результат:

      Возвращает True, если геометрии равны.

  static from_geojson(json: str, cs: Optional[CoordSystem] = None) → Geometry

    Возвращает геометрию из ее „GeoJSON“ представления.

    Параметры:

      - json – json представление в виде строки.

      - cs – Система координат.

  static from_mif(mif: str) → Geometry

    Возвращает геометрию из ее „MIF“ представления.

    Параметры:

      mif – mif представление в виде строки.

  classmethod from_wkb(wkb: bytes, coordsystem: Optional[CoordSystem] = None) → Geometry

    Создает геометрический объект из строки формата WKB.

    Параметры:

      - wkb – Строка WKB

      - coordsystem – Система координат, которая будет установлена для геометрии.

    Пример.

        wkb = b'\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00$@\x00\x00\x00\x00\x00\x00$@'
        pnt = Geometry.from_wkb(wkb)

  classmethod from_wkt(wkt: str, coordsystem: Optional[CoordSystem] = None) → Geometry

    Создает геометрический объект из строки формата WKT.

    Параметры:

      - wkt – Строка WKT. Допустимо задание строки в формате с указанием SRID (EWKT). В данном случае система координат для создаваемой геометрии будет установлено исходя их этого значения.

      - coordsystem – Система координат, которая будет установлена для геометрии. Если строка задана в виде EWKT и указано значение SRID, игнорируется.

    Пример.

        polygon = Geometry.from_wkt('POLYGON ((10 10, 100 100, 100 10, 10 10))')
        point = Geometry.from_wkt('SRID=4326;POINT (10 10)')
        crs = CoordSystem.from_epsg(4326)
        pline = Geometry.from_wkt('LINESTRING (30 10, 10 30, 40 40)', crs)

  get_area(area_unit: Optional[AreaUnit] = None, calc_mode: Optional[CalcMode] = None) → float

    Рассчитывает площадь, если объект площадной. В случае, если СК задана как Широта/Долгота, то расчет производится на сфере или эллипсоиде по заданному значению calc_mode в квадратных метрах.

    Пример.

        # В проекции Меркатора:
        csMercatorKm = CoordSystem.from_prj("10, 104, 1, 0")
        poly = Polygon([(0, 0), (0, 2), (2, 2), (2, 0)], cs=csMercatorKm)
        print('Area Mercator sq. km:', poly.get_area())
        print('Area Mercator sq. m:', poly.get_area(Unit.sq_m))
        print('Area Mercator sq. km on plane:', poly.get_area(Unit.sq_km, CalcMode.PLANE))
        print('Perimeter Mercator sq. km:', poly.get_perimeter())
        print('Perimeter Mercator sq. m:', poly.get_perimeter(Unit.m))
        # В Широте/Долготе
        poly.coordsystem = CoordSystem.from_prj("1, 104")
        print('Area LL m:', poly.get_area())
        print('Area LL km:', poly.get_area(Unit.sq_km))
        print('Perimeter LL m:', poly.get_perimeter())
        print('Perimeter LL km:', poly.get_perimeter(Unit.km))
        print('Perimeter LL km on ellipsoid:', poly.get_perimeter(Unit.km, CalcMode.ELLIPSOID))

        '''
        >>> Area Mercator sq. km: 4.017946986687529
        >>> Area Mercator sq. m: 4017946.986687529
        >>> Area Mercator sq. km on plane: 4.0
        >>> Perimeter Mercator sq. km: 8.017972048477583
        >>> Perimeter Mercator sq. m: 8017.972048477583
        >>> Area LL m: 49452172514.0342
        >>> Area LL km: 49452.1725140342
        >>> Perimeter LL m: 889423.5067063896
        >>> Perimeter LL km: 889.4235067063896
        >>> Perimeter LL km on ellipsoid: 887.4421376105504
        '''

    Параметры:

      - area_unit – Единица измерения, в которой необходимо получить результат. Если не задана, то используется единица измерения для СК. Если и она не задана, то производится расчет на плоскости.

      - calc_mode – Режим расчета. Если не задан, то используется значение по умолчанию для СК геометрии `CoordSystem.supported_calc_modes`.

    Исключение:

      ValueError, RuntimeError, RuntimeWarning –

  get_distance(other: Geometry, u: Optional[LinearUnit] = None) → float

    Производит расчет расстояния до объекта other. Результат возвращает в СК текущего объекта.

    Параметры:

      - other – Анализируемый объект.

      - u – Единицы измерения, в которых требуется получить результат.

    Пример.

        # Создадим геометрию без СК
        first = Point(0, 0)
        second = Point(10, 0)
        print('В плане:', first.get_distance(second))
        # Установим разные СК для точек
        first.coordsystem = CoordSystem.from_prj("10, 104, 7, 0")
        second.coordsystem = CoordSystem.from_prj("1, 104")
        print('На сфере м:', first.get_distance(second))
        print('На сфере км:', first.get_distance(second, Unit.km))
        '''
        >>> В плане: 10.0
        >>> На сфере м: 1111948.7428468117
        >>> На сфере км: 1111.9487428468117
        '''

  get_length(u: Optional[LinearUnit] = None, calc_mode: Optional[CalcMode] = None) → float

    Рассчитывает длину геометрии. Метод применим только для линейных объектов. В случае, если СК задана как Широта/Долгота, то расчет производится на сфере в метрах.

    Пример.

        # В проекции Меркатора:
        csMercatorKm = CoordSystem.from_prj("10, 104, 1, 0")
        ls = Line((0, 0), (10, 0), csMercatorKm)
        print('Length Mercator km:', ls.get_length())
        print('Lenght Mercator m:', ls.get_length(Unit.m))
        print('Lenght Mercator km on plane:', ls.get_length(Unit.km, CalcMode.PLANE))
        # В Широте/Долготе
        csLL = CoordSystem.from_prj("1, 104")
        ls = Line((0, 0), (10, 0), csLL)
        print('Length LL m:', ls.get_length())
        print('Length LL km:', ls.get_length(Unit.km))
        print('Lenght LL km on ellipsiod:', ls.get_length(Unit.km, CalcMode.ELLIPSOID))
        '''
        >>> Length Mercator km: 9.988805508567783
        >>> Lenght Mercator m: 9988.805508567782
        >>> Lenght Mercator km on plane: 10.0
        >>> Length LL m: 1111948.7428468117
        >>> Length LL km: 1111.9487428468117
        >>> Lenght LL km on ellipsiod: 1113.1949079327358
        '''

    Параметры:

      - u – Единица измерения, в которой необходимо получить результат. Если не задана, то используется единица измерения для СК. Если и она не задана, то производится расчет на плоскости.

      - calc_mode – Режим расчета. Если не задан, то используется значение по умолчанию для СК геометрии `CoordSystem.supported_calc_modes`.

    Исключение:

      ValueError, RuntimeError, RuntimeWarning –

  get_perimeter(u: Optional[LinearUnit] = None, calc_mode: Optional[CalcMode] = None) → float

    Рассчитывает периметр геометрии. Метод применим только для площадных объектов. В случае, если СК задана как Широта/Долгота, то расчет производится на сфере в метрах.

    Пример см. `get_area()`

    Параметры:

      - u – Единица измерения, в которой необходимо получить результат. Если не задана, то используется единица измерения для СК. Если и она не задана, то производится расчет на плоскости.

      - calc_mode – Режим расчета. Если не задан, то используется значение по умолчанию для СК геометрии `CoordSystem.supported_calc_modes`.

    Исключение:

      ValueError, RuntimeError, RuntimeWarning –

  intersection(other: Geometry) → Optional[Geometry]

    Возвращает область пересечения с другой геометрией.

  intersects(other: Geometry) → bool

    Возвращает True, если геометрии пересекаются.

  property is_valid: bool

    Проверяет геометрию на валидность.

  property is_valid_reason: str

    Если геометрия неправильная, возвращает краткую аннотацию причины.

  property name: str

    Возвращает наименование геометрического объекта.

  overlaps(other: Geometry) → bool

    Возвращает True, если пересечение геометрий отличается от обеих геометрий.

  static point_by_azimuth(point: Union[Pnt, Tuple[float, float]], azimuth: float, distance: float, cs: Optional[CoordSystem] = None) → Pnt

    Производит расчет координат точки относительно заданной, и находящейся на расстоянии distance по направлению azimuth.

    См.также

    Обратная функция `distance_by_points()`

    Параметры:

      - point – Точка, относительно которой производится расчет. Если задана СК, то в ней.

      - azimuth – Азимут в градусах, указывающий направление.

      - distance – Расстояние по азимуту. Задается в метрах.

      - cs – СК, на базе эллипсоида которой производится расчет. Если не задана, то расчет производится на плоскости.

    Результат:

      Возвращает результирующую точку.

  relate(other: Geometry) → str

    Проверяет отношения между объектами.

    Подробнее см. DE-9IM

  reproject(cs: CoordSystem) → Geometry

    Перепроецирует геометрию в другую систему координат.

    Параметры:

      cs – СК, в которой требуется получить объект.

  rotate(point: Union[Pnt, Tuple[float, float]], angle: float) → Geometry

    Поворот геометрии относительно заданной точки. Поворот производится против часовой стрелки.

    Параметры:

      - point – Точка, вокруг которой необходимо произвести поворот.

      - angle – Угол поворота в градусах.

  scale(kx: float, ky: float) → Geometry

    Масштабирует объект по заданным коэффициентам масштабирования. После выполнения операции центр результирующего объекта остается прежним.

    Параметры:

      - kx – Масштабирование по координате X.

      - ky – Масштабирование по координате Y.

  shift(dx: float, dy: float) → Geometry

    Смещает объект на заданную величину. Значения задаются в текущей проекции.

    Параметры:

      - dx – Сдвиг по координате X.

      - dy – Сдвиг по координате Y.

  split_by_polyline(splitter: Geometry) → Optional[Geometry]

    Разрезает объект линейным объектом.

    Параметры:

      splitter – Геометрический объект, которым будет производиться разрезание объекта.

    Результат:

      Возвращает полученный результат

        poly = Polygon((0,10), (10,10), (10, 0))
        line = Line((-5,5), (20,5))
        r = poly.split_by_polyline(line)
        print(r.wkt)
        '''
        >>> GEOMETRYCOLLECTION (POLYGON ((0 10, 10 10, 10 5, 5 5, 0 10)), POLYGON ((10 5, 10 0, 5 5, 10 5))) GEOMETRYCOLLECTION (POLYGON ((0 10, 10 10, 10 5, 5 5, 0 10)), POLYGON ((10 5, 10 0, 5 5, 10 5)))
        '''

  symmetric_difference(other: Geometry) → Geometry

    Возвращает логический XOR областей геометрий (объединение разниц).

    Параметры:

      other – Геометрия для анализа.

  to_geojson() → str

    Преобразует геометрию в формат „GeoJSON“.

  to_linestring() → Optional[Geometry]

    Пробует геометрию преобразовать в линейный объект.

    В случае неудачи возвращает None.

  to_mif() → str

    Преобразует геометрию в формат MIF.

        point = Point(12, 24)
        mif = point.to_mif()

  to_polygon() → Optional[Geometry]

    Пробует геометрию преобразовать в площадной объект.

    В случае неудачи возвращает None.

  to_wkb() → bytes

    Возвращает WKB строку для геометрии.

  to_wkt() → str

    Возвращает WKT строку для геометрии.

  touches(other: Geometry) → bool

    Возвращает True, если геометрии соприкасаются.

  property type: GeometryType

    Возвращает тип геометрического элемента.

        point = Point(10, 10)
        if point.type == GeometryType.Point:
            print('Это точка')

  union(other: Geometry) → Geometry

    Возвращает результат объединения двух геометрий.

  within(other: Geometry) → bool

    Возвращает True, если геометрия находится полностью внутри геометрии other.

  property xmax: float

    Максимальное значение X.

  property xmin: float

    Минимальное значение X.

  property ymax: float

    Максимальное значение Y.

  property ymin: float

    Минимальное значение Y.