Text - Текст

class axipy.Text

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

Геометрический объект типа текст.

Предупреждение

Геометрия текста и, в отличие от остальных типов объектов, определяется кроме геометрического представления так же и стилем его оформления axipy.TextStyle. Так же стоит заметить, что параметры геометрии текста зависит от того, куда (с карту или отчет) будет добавлен созданный текст. Поэтому созданный объект для карты должен быть добавлен в карту, а для отчета - в отчет. Подробнее см. create_by_style()

Примечание

Для создания текстового объекта с указанием его размера в поинтах можно использовать метод create_by_style()

Параметры:
  • text – Строка с текстом. Многострочный текст можно задать, вставив символ «\n» в место переноса.

  • rect – Прямоугольник, в который будет вписан текст. Прямоугольник задается в координатах отчета. Верхней левой точкой является startPoint. В этот прямоугольник будет произведена попытка размещения текста.

  • angle – Угол поворота текстового объекта. Задается значением в градусах против ЧС по отношению к горизонтали.

  • view – Окно карты или отчета.

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

Пример создания текста и вставки его в отчет.
report_view = view_manager.create_reportview()
r = Rect(8, 6, 11, 7)
text = Text("Пример\nтекста", rect=r, angle=20, view=report_view)
geomItem = GeometryReportItem()
geomItem.geometry = text
geomItem.style = Style.for_geometry(text)
report_view.report.items.add(geomItem)

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

__init__(text, rect[, view, angle, cs])

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

create_by_style(text, point, style, view[, ...])

Создает текстовый объект по точке привязки и стиля для карты или отчета.

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.

Свойства:

angle

Угол поворота текста, отсчитываемый от горизонтали против часовой стрелки

bounds

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

coordsystem

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

endPoint

Координаты точки выноски (указки).

height

Высота прямоугольника с текстом.

is_valid

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

is_valid_reason

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

name

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

rect_as_polygon

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

startPoint

Координаты точки привязки.

text

Текст.

type

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

width

Ширина прямоугольника с текстом.

Методы:

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])

Рассчитывает площадь, если объект площадной.

get_distance(other[, u])

Производит расчет расстояния до объекта other.

get_length([u])

Рассчитывает длину геометрии.

get_perimeter([u])

Рассчитывает периметр геометрии.

intersection(other)

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

intersects(other)

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

overlaps(other)

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

relate(other)

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

reproject(cs)

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

rotate(point, angle)

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

scale(kx, ky)

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

shift(dx, dy)

Смещает объект на заданную величину.

size_for_view(style, view)

Размер шрифта в пунктах для конкретного окна.

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.

__init__(text: str, rect: Union[Rect, QRectF], view: Optional[Union[MapView, ReportView]] = None, angle: float = 0, cs: Optional[CoordSystem] = None)
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, если геометрии равны в пределах заданного отклонения.

property angle: float

Угол поворота текста, отсчитываемый от горизонтали против часовой стрелки

boundary() 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() Optional[Point]

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

clone() Geometry

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

contains(other: Geometry) bool

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

convex_hull() Geometry

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

property coordsystem: CoordSystem

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

covers(other: Geometry) bool

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

classmethod create_by_style(text: str, point: Union[Pnt, QPointF], style: Style, view: Union[MapView, ReportView], angle: float = 0, cs: Optional[CoordSystem] = None)

Создает текстовый объект по точке привязки и стиля для карты или отчета. Результирующий объект будет корректен только для текущего состояния окна карты или отчета, куда он должен быть добавлен. Это связано с тем, что расчет размера производится на основании текущего установленного масштаба. Поэтому при изменении масштаба перед добавлением необходимо заново создать текстовый объект.

Параметры:
  • text – Текст.

  • point – Точка привязки startPoint. Этой точкой служит левая верхняя точка.

  • style – Стиль оформления текста.

  • view – Окно карты или отчета.

  • angle – Угол поворота текстового объекта. Задается значением в градусах против ЧС по отношению к горизонтали.

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

Пример изменения параметров текстовых объектов для окна карты.
import axipy
from PySide2.QtCore import Qt

mapview = axipy.view_manager.active
if len(axipy.data_manager) and mapview:
    table = axipy.data_manager.tables[0]
    # Новый стиль для текстовых объектов
    new_style = axipy.TextStyle("Droid Sans", 20)
    new_style.color = Qt.red
    new_style.bold = True
    for f in table.items():
        # Для всех текстовых объектов применим данный стиль
        if isinstance(f.geometry, axipy.Text):
            g = f.geometry
            text = axipy.Text.create_by_style(g.text, g.startPoint, style=new_style, view=mapview, angle=g.angle)
            text.endPoint = g.endPoint
            new_style.callout = f.style.callout
            new_style.callout_style = f.style.callout_style
            f.style = new_style
            f.geometry = text
            table.update([f])
    # Сохраним изменения
    table.commit()
Пример создания текста для отчета.
report_view = view_manager.create_reportview()
style_txt = Style.from_mapinfo('Font ("Times New Roman", 0, 23, 16711680)')
text = Text.create_by_style("Пример\nтекста2", (10, 10), style=style_txt, view=report_view, angle=20)
# Поменяем угол
text.angle = -20
# Изменим начальную точку
text.startPoint = (11, 11)
crosses(other: Geometry) bool

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

difference(other: Geometry) 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 – СК, на базе эллипсоида которой производится расчет. Если не задана, то расчет производится на плоскости.

Результат:

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

property endPoint: Pnt

Координаты точки выноски (указки).

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 представление в виде строки.

static 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)
static 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) float

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

Пример.
# В проекции Меркатора:
csMercatorKm = CoordSystem.from_prj("10, 104, 1, 0")
poly = Polygon([(0, 0), (0, 2), (2, 2), (2, 0)], cs=csMercatorKm)
print('Area Mercator km:', poly.get_area())
print('Area Mercator m:', poly.get_area(Unit.sq_m))
print('Perimeter Mercator km:', poly.get_perimeter())
print('Perimeter Mercator 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))
'''
>>> Area Mercator km: 4.017946986632519
>>> Area Mercator m: 4017946.9866325194
>>> Perimeter Mercator km: 8.017972048421552
>>> Perimeter Mercator m: 8017.972048421552
>>> Area LL m: 49452172514.0342
>>> Area LL km: 49452.1725140342
>>> Perimeter LL m: 889423.5067063896
>>> Perimeter LL km: 889.4235067063896
'''
Параметры:

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

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) float

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

Пример.
# В проекции Меркатора:
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))
# В Широте/Долготе
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))
'''
>>> Length Mercator km: 9.988805508567783
>>> Lenght Mercator m: 9988.805508567782
>>> Length LL m: 1111948.7428468117
>>> Length LL km: 1111.9487428468117
'''
Параметры:

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

get_perimeter(u: Optional[LinearUnit] = None) float

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

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

Параметры:

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

property height

Высота прямоугольника с текстом.

intersection(other: Geometry) 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 – СК, на базе эллипсоида которой производится расчет. Если не задана, то расчет производится на плоскости.

Результат:

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

property rect_as_polygon: Polygon

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

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.

size_for_view(style, view: Union[MapView, ReportView]) float

Размер шрифта в пунктах для конкретного окна. Значение меняется в зависимости от текущего масштаба.

Параметры:
  • style – Стиль оформления текста.

  • view – Окно карты или отчета.

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)))
'''
property startPoint: Pnt

Координаты точки привязки.

symmetric_difference(other: Geometry) Geometry

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

Параметры:

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

property text: str

Текст.

to_geojson() str

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

to_linestring() Optional[Geometry]

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

to_mif() str

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

to_polygon() Optional[Geometry]

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

to_wkb() bytes

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

to_wkt() str

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

touches(other: Geometry) bool

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

property type: Type

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

Возможные значения

Значение

Наименование

Unknown

Не определен

Point

Точка

Line

Линия

LineString

Полилиния

Polygon

Полигон

MultiPoint

Коллекция точек

MultiLineString

Коллекция полилиний

MultiPolygon

Коллекция полигонов

GeometryCollection

Смешанная коллекция

Arc

Дуга

Ellipse

Эллипс

Rectangle

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

RoundedRectangle

Скругленный прямоугольник

Text

Текст

Пример.
point = Point(10, 10)
if point.type == GeometryType.Point:
    print('Это точка')
union(other: Geometry) Geometry

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

property width

Ширина прямоугольника с текстом.

within(other: Geometry) bool

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