Геометрические операции
===========================

    .. py:function:: isCollection(geometry)

        Является ли геометрия коллекцией

        :param geometry: входная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :rtype: :class:`bool`

    .. py:function:: isPointLike(geometry)

        Является ли геометрия точечным объектом

        :param geometry: входная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :rtype: :class:`bool`

    .. py:function:: cartesianDistance(point1, point2)

        Расстояние между двумя точками на плоскости

        :param point1: начальная точка
        :type point1: :class:`~PyQt5.QtCore.QPointF`
        :param point2: конечная точка
        :type point2: :class:`~PyQt5.QtCore.QPointF`
        :rtype: :class:`float`

    .. py:function:: sphericalDistance(point1, point2)

        Расстояние между двумя точками на сфере в метрах

        :param point1: начальная точка в градусах
        :type point1: :class:`~PyQt5.QtCore.QPointF`
        :param point2: конечная точка в градусах
        :type point2: :class:`~PyQt5.QtCore.QPointF`
        :rtype: :class:`float`

    .. py:function:: directGeodesicProblem(point, azimuth, distance, semiMajor, invFlattening)

        Решение прямой геодезической задачи. Нахождение положения точки по координатам исходной точки и значениями начального направления и расстояния на сфере. Входные и выходные величины измеряются в градусах. Широта должна быть в диапазоне [-90, 90].

        :param point: исходная точка (широта, долгота)
        :type point: :class:`~PyQt5.QtCore.QPointF`
        :param azimuth: азимут направления
        :type azimuth: :class:`float`
        :param distance: сферическое расстояние, метры
        :type distance: :class:`float`
        :param semiMajor: большая полуось, метры
        :type semiMajor: :class:`float`
        :param invFlattening: коэффициент сжатия
        :type invFlattening: :class:`float`
        :return: искомая координата
        :rtype: :class:`~PyQt5.QtCore.QPointF`

    .. py:function:: pointOffset(point, angle, distance)

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

        :param point: начальная точка
        :type point: :class:`~PyQt5.QtCore.QPointF`
        :param angle: направление в градусах от направления на Восток
        :type angle: float
        :param distance: расстояние
        :type distance: float
        :return: искомая координата
        :rtype: :class:`~PyQt5.QtCore.QPointF`

    .. py:function:: cartesianPolygonArea(polygon)

        Площадь полигона на плоскости

        :param polygon: полигон
        :type polygon: :class:`~PyQt5.QtGui.QPolygonF`
        :rtype: :class:`float`

    .. py:function:: sphericalPolygonArea(polygon)

        Площадь полигона на сфере

        :param polygon: полигон
        :type polygon: :class:`~PyQt5.QtGui.QPolygonF`
        :rtype: :class:`float`

    .. py:function:: area(geometry, unit_name)

        Площадь поверхностных объектов в зависимости от внутренней проекции

        :param geometry: входная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.AreaUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: sphericalArea(geometry, unit_name)

        Площадь поверхностных объектов на сфере

        :param geometry: входная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.AreaUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: cartesianArea(geometry, unit_name)

        Площадь поверхностных объектов на плоскости

        :param geometry: входная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.AreaUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: surfaceArea(surface, unit_name)

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

        :param surface: поверхность
        :type surface: :class:`~axioma.core.geometry.Surface`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.AreaUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: sphericalSurfaceArea(surface, unit_name)

        Площадь поверхностного объекта на сфере

        :param surface: поверхность
        :type surface: :class:`~axioma.core.geometry.Surface`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.AreaUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: cartesianSurfaceArea(surface, unit_name)

        Площадь поверхностного объекта на плоскости

        :param surface: поверхность
        :type surface: :class:`~axioma.core.geometry.Surface`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.AreaUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: perimeter(geometry, unit_name)

        Периметр поверхностных объектов

        :param geometry: входная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.LinearUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: sphericalPerimeter(geometry, unit_name)

        Периметр поверхностных объектов на сфере в зависимости от внутренней проекции

        :param geometry: входная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.LinearUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: cartesianPerimeter(geometry, unit_name)

        Периметр поверхностных объектов на плоскости

        :param geometry: входная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.LinearUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: sphericalPolygonPerimeter(polygon)

        Периметр полигона на сфере

        :param polygon: полигон
        :type polygon: :class:`~PyQt5.QtGui.QPolygonF`
        :rtype: :class:`float`

    .. py:function:: cartesianPolygonPerimeter(polygon)

        Периметр полигона на плоскости

        :param polygon: полигон
        :type polygon: :class:`~PyQt5.QtGui.QPolygonF`
        :rtype: :class:`float`

    .. py:function:: surfacePerimeter(surface, unit_name)

        Периметр поверхности в зависимости от внутренней проекции

        :param surface: поверхность
        :type surface: :class:`~axioma.core.geometry.Surface`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.LinearUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: sphericalSurfacePerimeter(surface, unit_name)

        Периметр поверхности на сфере

        :param surface: поверхность
        :type surface: :class:`~axioma.core.geometry.Surface`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.LinearUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: cartesianSurfacePerimeter(surface, unit_name)

        Периметр поверхности на плоскости

        :param surface: поверхность
        :type surface: :class:`~axioma.core.geometry.Surface`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.AreaUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: length(geometry, unit_name)

        Длина линейных объектов в зависимости от внутренней проекции

        :param geometry: входная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.LinearUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: sphericalLength(geometry, unit_name)

        Длина линейных объектов на сфере

        :param geometry: входная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.LinearUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: cartesianLength(geometry, unit_name)

        Длина линейных объектов на плоскости

        :param geometry: входная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.LinearUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: curveLength(curve, unit_name)

        Длина дуги в зависимости от внутренней проекции

        :param curve: дуга
        :type curve: :class:`~axioma.core.geometry.Curve`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.LinearUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: sphericalCurveLength(curve, unit_name)

        Длина дуги на сфере

        :param curve: дуга
        :type curve: :class:`~axioma.core.geometry.Curve`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.LinearUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: cartesianCurveLength(curve, unit_name)

        Длина дуги на плоскости

        :param curve: дуга
        :type curve: :class:`~axioma.core.geometry.Curve`
        :param unit_name: наименование единиц измерений :meth:`~axioma.cs.LinearUnit.name`
        :type unit_name: :class:`str`
        :rtype: :class:`float`

    .. py:function:: centroid(geometry)

        Центроид геометрии

        :param geometry: геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :rtype: :class:`~PyQt5.QtCore.QPointF`

    .. py:function:: nearestPointOn(point, line)

        Нахождение точки на отрезке, ближайшей к указанной

        :param point: указанная точка
        :type point: :class:`~PyQt5.QtCore.QPointF`
        :param line: отрезок, на котором должна находиться искомая точка
        :type line: :class:`~PyQt5.QtCore.QLineF`
        :rtype: :class:`~PyQt5.QtCore.QPointF`

    .. py:function:: nearestPointOn(point, polyline)

        Нахождение точки на полилинии, ближайшей к указанной

        :param point: указанная точка
        :type point: :class:`~PyQt5.QtCore.QPointF`
        :param polyline: полилиния, на котором должна находиться искомая точка
        :type polyline: :class:`~PyQt5.QtGui.QPolygonF`
        :rtype: :class:`~PyQt5.QtCore.QPointF`

    .. py:function:: flatPoint(angle, polyline, len)

        Нахождение первого пологого участка на полилинии, превышающего заданную длину

        :param angle: предельный угол, определяющий степень пологости участка
        :type angle: :class:`float`
        :param polyline: полилиния, на которой осуществляется поиск пологого участка
        :type polyline: :class:`~PyQt5.QtGui.QPolygonF`
        :param len: минимальная длина пологого участка
        :type len: :class:`float`
        :return: индекс полилинии, начиная с которого располагается пологий участок, или -1, если такого участка нет
        :rtype: :class:`int`

    .. py:function:: flatPlots(angle, polyline, len)

        Получение списка всех пологих участков на полилинии заданной длины

        :param angle: предельный угол, определяющий степень пологости участков
        :type angle: :class:`float`
        :param polyline: полилиния, на которой осуществляется поиск пологого участка
        :type polyline: :class:`~PyQt5.QtGui.QPolygonF`
        :param len: минимальная длина пологого участка
        :type len: :class:`float`
        :return: список полилиний, соответствующих пологим участкам
        :rtype: :class:`list` [:class:`~PyQt5.QtGui.QPolygonF`]

    .. py:function:: reversePolygon(poly)

        Смена направления полилинии или полигона

        :param poly: полилиния или полигон
        :type polyline: :class:`~PyQt5.QtGui.QPolygonF`
        :rtype: :class:`~PyQt5.QtGui.QPolygonF`

    .. py:function:: linearRingToLineString(linear_ring)

        Конвертировать замкнутую линию в полилинию

        :param linear_ring: замкнутая линия
        :type linear_ring: :class:`~axioma.core.geometry.LinearRing`
        :return: полилиния
        :rtype: :class:`~axioma.core.geometry.LinearStringInterface`

    ..	.. function:: convertToLineStrings(polygon)
    ..
    ..		!!!
    ..
    ..		:param : !!!
    ..		:type : !!!
    ..		:return: !!!
    ..		:rtype: !!!

    .. py:function:: convertToMultiLineString(geometry)

        Конвертировать геометрию в полилинию

        :param geometry: входная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :return: полилиния
        :rtype: :class:`~axioma.core.geometry.GeometryInterface`

    .. py:function:: convertCollectionToVector(geometry)

        Конвертировать коллекцию геометрий с список геометрий

        :param geometry: коллекция геометрий
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :return: список геометрий
        :rtype: :class:`list` [:class:`~axioma.core.geometry.GeometryInterface`]

    ..	.. function:: convertCollectionToVector(geometries)
    ..
    ..		!!!
    ..
    ..		:param : !!!
    ..		:type : !!!
    ..		:return: !!!
    ..		:rtype: !!!

    ..	.. function:: collectionToVector(collection)
    ..
    ..		Конвертировать коллекцию геометрий с список геометрий
    ..
    ..		:param collection: коллекция геометрий
    ..		:type collection: :class:`~axioma.core.geometry.GeometryCollection`
    ..		:return: список геометрий
    ..		:rtype: :class:`list` [:class:`~axioma.core.geometry.GeometryInterface`]

    .. py:function:: convertFromLineStringsToPolygons(geometry)

        Конвертировать из линий в полигоны

        :param geometry: входная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :return: полигоны
        :rtype: :class:`~axioma.core.geometry.GeometryInterface`

    .. py:function:: uniteGeometries(collection)

        Объединить геометрии в коллекции в объект. При этом производится проверка на правильность выходной геометрии

        :param collection: коллекция геометрий
        :type collection: :class:`~axioma.core.geometry.GeometryCollection`
        :return: объединенная геометрия
        :rtype: :class:`~axioma.core.geometry.GeometryInterface`

    .. py:function:: groupGeometries(geometries)

        Объединить массив геометрий в коллекцию. Данную коллекцию в последствии можно использовать как входной параметр :meth:`~axioma.core.geometry.uniteGeometries`

        :param geometries: массив из геометрий
        :type geometries: :class:`list` [ :class:`~axioma.core.geometry.GeometryInterface` ]
        :return: объединенная коллекция геометрий
        :rtype: :class:`~axioma.core.geometry.GeometryCollection`

    ..
    ..	.. function:: ungroupGeometries(geometries)
    ..
    ..		!!!
    ..
    ..		:param : !!!
    ..		:type : !!!
    ..		:return: !!!
    ..		:rtype: !!!

    .. py:function:: makePolygonByRect(rect, coord_system)

        Получить полигон из прямоугольника

        :param rect: прямоугольник
        :type rect: :class:`~PyQt5.QtCore.QRectF`
        :param coord_system: координатная система
        :type coord_system: :class:`~axioma.cs.CoordSystem`
        :return: полигон
        :rtype: :class:`~axioma.core.geometry.GeometryInterface`

    .. py:function:: normalizedGeometryFromCoordSystem(geometry, coord_system)

        Нормализованная геометрия для координатной системы

        :param geometry: входная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :param coord_system: координатная система
        :type coord_system: :class:`~axioma.cs.CoordSystem`
        :return: нормализованная геометрия
        :rtype: :class:`~axioma.core.geometry.GeometryInterface`

    .. py:function:: fitGeometry(geometry)

        Поместить геометрию в границы координатной системы обрезкой

        :param geometry: входная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :return: результирующая геометрия
        :rtype: :class:`~axioma.core.geometry.GeometryInterface`

    .. py:function:: fitGeometryByShift(geometry)

        Попытка поместить геометрию в границы координатной системы методом сдвига

        :param geometry: входная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :return: Новая сдвинутая геометрия, либо None - если невозможно поместить геометрию
        :rtype: :class:`~axioma.core.geometry.GeometryInterface`

    .. py:function:: convertGeometryToJson(geometry)

        Преобразование геометрии из внутреннего представления в формат Json

        :param geometry: исходная геометрия
        :type geometry: :class:`~axioma.core.geometry.GeometryInterface`
        :return: строка Json
        :rtype: :class:`str`

    .. py:function:: geometryFromJson(json, coord_system=None)

        Инициализация геометрии из строки Json

        :param json: строка Json
        :type json: :class:`str`
        :param coord_system: координатная система
        :type coord_system: :class:`~axioma.cs.CoordSystem`
        :return: полученная геометрия
        :rtype: :class:`~axioma.core.geometry.GeometryInterface`

