Геометрия - Geometry
¶
digraph geometry {
node [shape="box", style=filled, fillcolor="lightgray"]
rankdir=LR
labelloc="t";
label="Иерархия геометрических классов:";
Geometry [ href="#ref-label-geometry-class" ];
Point [ href="#ref-label-point-class" ];
Line [ href="#ref-label-line-class" ];
LineString [ href="#ref-label-ls-class" ];
Polygon [ href="#ref-label-polygon-class" ];
Collection [ href="#ref-label-coll-class" ];
MultiPoint [ href="#ref-label-mpoint-class" ];
MultiLineString [ href="#ref-label-mls-class" ];
MultiPolygon [ href="#ref-label-mpoly-class" ];
Rectangle [ href="#ref-label-rect-class" ];
RoundRectangle [ href="#ref-label-rrect-class" ];
Ellipse [ href="#ref-label-ellipse-class" ];
Arc [ href="#ref-label-arc-class" ];
Text [ href="#ref-label-text-class" ];
Geometry -> Point;
Geometry -> Line;
Geometry -> LineString;
Geometry -> Polygon;
Geometry -> Collection;
Collection -> MultiPoint;
Collection -> MultiLineString;
Collection -> MultiPolygon;
Geometry -> Rectangle;
Geometry -> RoundRectangle;
Geometry -> Ellipse;
Geometry -> Arc;
Geometry -> Text;
}-
class
axipy.da.
Geometry
¶ Абстрактный класс геометрического объекта (геометрии).
-
affine_transform
(trans)¶ Трансформирует объект исходя из заданных параметров трансформации.
См.также
Для простых операций типа сдвиг, масштабирование и поворот, рекомендуется использовать
shift()
,scale()
,rotate()
соответственно.- Параметры
trans (
QTransform
) – Матрица трансформации.- Тип результата
-
almost_equals
(other, tolerance)¶ Производит примерное сравнения с другой геометрией в пределах заданной точности.
-
buffer
(distance, resolution=16, capStyle=1, joinStyle=1, mitreLimit=5.0)¶ Производит построение буфера.
-
contains
(other)¶ Возвращает True, если геометрия полностью содержит передаваемую в качестве параметра геометрию.
- Тип результата
-
convex_hull
()¶ Возвращает минимальный окаймляющий полигон со всеми выпуклыми углами.
- Тип результата
-
property
coordsystem
¶ Система Координат (СК) геометрии.
- Тип результата
-
crosses
(other)¶ Возвращает True, если при пересечении геометрий объекты частично пересекаются.
- Тип результата
-
difference
(other)¶ Возвращает область первой геометрии, которая не пересечена второй геометрией.
- Тип результата
-
disjoint
(other)¶ Возвращает True, если геометрии не пересекаются и не соприкасаются.
- Тип результата
-
equals
(other)¶ Производит сравнение с другой геометрией.
-
static
from_wkb
(wkb, coordsystem=None)¶ Создает геометрический объект из строки формата WKB.
- Параметры
wkb (
bytes
) – Строка WKBcoordsystem (
Optional
[CoordSystem
]) – Система координат, которая будет установлена для геометрии.
Пример:
wkb = b'$@$@' pnt = Geometry.from_wkb(wkb) print(pnt.wkt) >>> POINT (10 10)
- Тип результата
-
static
from_wkt
(wkt, coordsystem=None)¶ Создает геометрический объект из строки формата WKT.
- Параметры
wkt (
str
) – Строка WKT. Допустимо задание строки в формате с указанием SRID (EWKT). В данном случае система координат для создаваемой геометрии будет установлено исходя их этого значения.coordsystem (
Optional
[CoordSystem
]) – Система координат, которая будет установлена для геометрии. Если строка задана в виде EWKT и указано значение SRID, игнорируется.
Пример:
from axipy import * 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
(u=None)¶ Рассчитывает площадь, если объект площадной. В противном случае возвращает 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
-
get_distance
(other, u=None)¶ Производит расчет расстояния до объекта other. Результат возвращает в СК текущего объекта.
- Параметры
other (
Geometry
) – Анализируемый объект.u (
Optional
[LinearUnit
]) – Единицы измерения, в которых требуется получить результат.
Пример:
# Создадим геометрию без СК 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=None)¶ Рассчитывает длину геометрии. Метод применим только для линейных объектов. В противном случае возвращает 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 (
Optional
[LinearUnit
]) – Единица измерения, в которой необходимо получить результат. Если не задана, то используется единица измерения для СК. Если и она не задана, то производится расчет на плоскости.- Тип результата
-
get_perimeter
(u=None)¶ Рассчитывает периметр геометрии. Метод применим только для площадных объектов. В противном случае возвращает 0. В случае, если СК задана как Широта/Долгота, то расчет производится на сфере в метрах.
Пример см.
get_area()
- Параметры
u (
Optional
[LinearUnit
]) – Единица измерения, в которой необходимо получить результат. Если не задана, то используется единица измерения для СК. Если и она не задана, то производится расчет на плоскости.- Тип результата
-
property
is_valid_reason
¶ Если геометрия неправильная, возвращает краткую аннотацию причины.
- Тип результата
-
overlaps
(other)¶ Возвращает True, если пересечение геометрий отличается от обеих геометрий.
- Тип результата
-
reproject
(cs)¶ Перепроецирует геометрию в другую систему координат.
- Параметры
cs (
CoordSystem
) – СК, в которой требуется получить объект.- Тип результата
-
rotate
(point, angle)¶ Поворот геометрии относительно заданной точки. Поворот производится против часовой стрелки.
-
scale
(kx, ky)¶ Масштабирует объект по заданным коэффициентам масштабирования. После выполнения операции центр результирующего объекта остается прежним.
-
shift
(dx, dy)¶ Смещает объект на заданную величину. Значения задаются в текущей проекции.
-
symmetric_difference
(other)¶ Возвращает логический XOR областей геометрий (объединение разниц).
-
property
type
¶ Возвращает тип геометрического элемента.
Возможные значения¶ Значение
Наименование
Unknown
Не определен
Point
Точка
Line
Линия
LineString
Полилиния
Polygon
Полигон
MultiPoint
Коллекция точек
MultiLineString
Коллекция полилиний
MultiPolygon
Коллекция полигонов
MultiGeometry
Смешанная коллекция
Arc
Дуга
Ellipse
Эллипс
Rectange
Прямоугольник
RoundedRectange
Скругленный прямоугольник
Text
Текст
Пример:
point = Geometry.from_wkt('POINT (10 10)') if point.type == GeometryType.Point: print('Это точка')
- Тип результата
GeometryType
-
within
(other)¶ Возвращает True, если геометрия находится полностью внутри геометрии other.
- Тип результата
-
Точечный объект - Point
¶
-
class
axipy.da.
Point
(x, y, cs=None)¶ Базовые классы:
axipy.da.Geometry
Геометрический объект типа точка.
- Параметры
x (
float
) – X координатаy (
float
) – Y координатаcs (
Optional
[CoordSystem
]) – Система Координат, в которой создается геометрия.
Пример:
cs = CoordSystem.from_prj("1, 104") p = Point(23, 45, cs) # Создадим точку. p.x = 55 # Изменим значение координаты X
Линия - Line
¶
-
class
axipy.da.
Line
(begin, end, cs=None)¶ Базовые классы:
axipy.da.Geometry
Геометрический объект типа линия.
- Параметры
begin (
Pnt
) – Начальная точка линии.end (
Pnt
) – Конечная точка линии.cs (
Optional
[CoordSystem
]) – Система Координат, в которой создается геометрия.
Пример:
cs = CoordSystem.from_prj("1, 104") line = Line(Pnt(22, 44), (100, 101), cs) # Создадим линию с различным подходом при указании начальной о конечной точки line.begin = (88, 99) # Заменим координаты начальной точки. line.end = Pnt(120, 120)
-
property
begin
¶ Начальная точка линии. Точки допустимо создавать как экземпляр
Pnt
либо в виде пары „float“ значений tuple- Тип результата
Полилиния - LineString
¶
-
class
axipy.da.
LineString
(*points, cs=None)¶ Базовые классы:
axipy.da.Geometry
Геометрический объект типа полилиния.
- Параметры
Пример:
ls = LineString([(1, 2), Pnt(3, 4), Pnt(5, 6), (7, 8)]) # Создадим полилинию без СК ls.points[1] = (33, 44) # Обновим точку с индексом 1. Допустимо только обновление точки целиком. Изменение координат по одиночке не поддерживается. ls.points.append((9,10)) # Добавим точку в конец ls.points.remove(2) # Удалим вторую точку ls.points.insert(3, (11,12)) # Добавим точку на позицию 3 for p in ls.points: # Просмотр всех точек print("point:", p) ls2 = LineString((1, 2), (3, 4), (5, 6), (7, 8), cs=csLatLon) # Создание полинии, передав перечень точек. itr = (a for a in ls.points) # Создадим итератор на базе точек первой полилинии ls3 = LineString(itr) #
Полигон - Polygon
¶
-
class
axipy.da.
Polygon
(*points, cs=None)¶ Базовые классы:
axipy.da.Geometry
Геометрический объект типа полигон. Представляет собой часть плоскости, ограниченной замкнутой полилинией. Кроме внешней границы, полигон может иметь одну или несколько внутренних (дырок).
- Параметры
Пример:
poly = Polygon([(0, 0), Pnt(1, 10), Pnt(10, 11), (10, 2)]) # Создадим объект poly.points[2] = (14, 15) # Поменяем вторую точку poly.points.insert(3, (11, 5)) # Добавим точку for p in poly.points: # Просмотр точек полигона print("point:", p) poly.points.remove(2) # Удалим вторую точку
-
static
from_rect
(rect, cs=None)¶ Создает полигон на базе прямоугольника.
- Параметры
rect (
Rect
) – Прямоугольник, на основе которого формируются координаты.cs (
Optional
[CoordSystem
]) – Система Координат, в которой создается геометрия.
- Тип результата
-
property
holes
¶ Дырки полигона. Реализован в виде списка
list
.Пример:
poly.holes.append([(2,2), (2,4), (5,3)]) # Добавим дырку for p in poly.holes[0]: # Просмотр точек дырки полигона print("Point of hole:", p) print('Вторая точка первой дырки:', poly.holes[0][1]) poly.holes[0][1] = (33,44) # Обновим значение этой точки
Коллекция геометрий - Collection
¶
-
class
axipy.da.
Collection
(cs=None)¶ Базовые классы:
axipy.da.Geometry
Коллекция разнотипных геометрических объектов. Допустимо хранение геометрических объектов различного типа, за исключением коллекций. Доступ к элементам производится по аналогии работы со списком
list
.- Параметры
cs (
Optional
[CoordSystem
]) – Система Координат, в которой создается геометрия.
Для получения размера коллекции используйте функцию len:
cnt = len(coll)
Доступ к элементам производится по индексу. Нумерация начинается с 0.
В качестве примера получим первый элемент:
coll[1]
Обновление геометрии в коллекции так же производится по ее индексу. Так же допустимо изменение некоторых свойств геометрии в зависимости от ее типа.
Примеры установки элемента с индексом 1:
coll[1] = (2,2) # Как точки с координатами (2,2) coll[1] = [(101, 102), (103, 104), (105, 106)] # Как полилинии coll[1] = Polygon((101, 102), (103, 104), (105, 106)) # Как полигона
-
append
(*value)¶ Добавление геометрии в коллекцию. Задание параметров аналогично указанию их при создании объектов конкретного типа. Если опустить указание класса, то для одной точки или пары значений float будет создан точечный объект
Point
, если точек больше, - объект классаLineString
.Примеры:
# Создадим коллекцию и добавим в нее несколько объектов различного типа. coll = Collection() coll.append((1,2)) # Точка coll.append(1,2) # Точка coll.append([(3,4), (5, 5), (10, 0)]) # Полилиния в виде :class:`list`. Можно это сделать через конструктор :class:`LinearString`. coll.append((3,4), (5, 5), (10, 0)) # Полилиния coll.append(Polygon([(3,4), (5, 5), (10, 0)])) # Полигон
Коллекция точек - MultiPoint
¶
-
class
axipy.da.
MultiPoint
(cs=None)¶ Базовые классы:
axipy.da.Collection
Коллекция точечных объектов. Может содержать только объекты типа точка.
- Параметры
cs (
Optional
[CoordSystem
]) – Система Координат, в которой создается геометрия.
Пример:
mpoint = MultiPoint() # Создаем коллекцию. # Добавим точку разными способами. p = Point(23, 34) mpoint.append(p) mpoint.append((12, 12)) mpoint.append(Pnt(10,10)) mpoint[0] = (66,66) # Заменяем первый объект (индекс 0) mpoint[0].x = 77 # Заменим только координату x для первого объекта в коллекции mpoint.remove(1) # Удаляем второй объект
Коллекция полилиний - MultiLineString
¶
-
class
axipy.da.
MultiLineString
(cs=None)¶ Базовые классы:
axipy.da.Collection
Коллекция полилиний. Может содержать только объекты типа полилиния.
- Параметры
cs (
Optional
[CoordSystem
]) – Система Координат, в которой создается геометрия.
Пример:
msl = MultiLineString() # Создадим саму коллекцию. ls = LineString([(1, 2), (3, 4), (5, 6), (7, 8)]) msl.append(ls) # Добавим как объект по ссылке msl.append(LineString([(11, 12), (13, 14), (15, 16)])) # Добавим как объект msl.append([(21, 22), (23, 24), (25, 26)]) # Добавим как перечень точек как :class:`list` msl[2].points[1] = (101, 102) # Обновим значение точки 3 полилинии по индексу 2. msl.remove(0) # Удалим первый объект из коллекции. msl[1].points.remove(2) # Удалим точку с индексом 1 из полилинии 2 msl[0] = [(101, 102), (103, 104), (105, 106), (107, 108)] # Обновим первую геометрию
Коллекция полигонов - MultiPolygon
¶
-
class
axipy.da.
MultiPolygon
(cs=None)¶ Базовые классы:
axipy.da.Collection
Коллекция полигонов. Может содержать только объекты типа полигон.
- Параметры
cs (
Optional
[CoordSystem
]) – Система Координат, в которой создается геометрия.
Пример:
mpoly = MultiPolygon() # Создадим саму коллекцию. mpoly.append([(1, 2), (3, 4), (5, 6), (7, 8)]) # Добавим полигон в виде списка точек mpoly.append(poly) # Добавим ранее созданный с дыркой (пример см. :class:`Polygon`) mpoly[1].holes[0][1] = (99,99) # Изменение второй точки дырки mpoly[1].points[0] = (0, 0) # Заменим первую (она же последняя) точку полигона poly2 = Polygon([(11, 12), (13, 14), (15, 16), (17, 18)]) mpoly[0] = poly2 # Полностью заменим первый полигон
Прямоугольник - Rectangle
¶
-
class
axipy.mi.
Rectangle
(*par, cs=None)¶ Базовые классы:
axipy.da.Geometry
Геометрический объект типа прямоугольник.
- Параметры
Пример:
r1 = Rectangle(0, 0, 40, 20) # Создадим объект через перечень координат. r2 = Rectangle(Rect(0, 0, 40, 20)) # Создадим объект передав объект :class:`Rect`. r3 = Rectangle([0, 0, 40, 20]) # Создадим объект передав списком :class:`list`.
Скругленный прямоугольник - RoundRectangle
¶
-
class
axipy.mi.
RoundRectangle
(rect, xRad, yRad, cs=None)¶ Базовые классы:
axipy.mi.Rectangle
Геометрический объект типа скругленный прямоугольник.
- Параметры
Пример:
r1 = RoundRectangle(Rect(0,0,22,33), 0.1, 0.1) r2 = RoundRectangle([0,0,22,33], 0.1, 0.1)
Эллипс - Ellipse
¶
-
class
axipy.mi.
Ellipse
(rect, cs=None)¶ Базовые классы:
axipy.da.Geometry
Геометрический объект типа эллипс.
- Параметры
Пример:
e1 = Ellipse(Rect(0,0,22,33)) e2 = Ellipse([0,0,22,33]) e1.center = (10,10) # Переопределим центр e1.majorSemiAxis = 10 # Задание большой полуоси e1.minorSemiAxis = 5 # Задание малой полуоси
Дуга - Arc
¶
-
class
axipy.mi.
Arc
(rect, startAngle, endAngle, cs=None)¶ Базовые классы:
axipy.da.Geometry
Геометрический объект типа дуга.
- Параметры
Пример:
a1 = Arc(Rect(0,0,22,33), 0, 90) a2 = Arc([0,0,22,33], 0, 90)
-
property
xRadius
¶ Радиус большой полуоси прямоугольника, в который вписана дуга.
- Тип результата
Текст - Text
¶
-
class
axipy.mi.
Text
(text, point, cs=None)¶ Базовые классы:
axipy.da.Geometry
Геометрический объект типа текст.
Предупреждение
Геометрия текста, и, в отличие от остальных типов объектов, определяется так же и стилем его оформления
axipy.da.TextStyle
.- Параметры
text (
str
) – ТекстtopLeft – Точка привязки. Допустимо задание точки
Pnt
или как параtuple
.cs (
Optional
[CoordSystem
]) – Система Координат, в которой создается геометрия.
Пример:
t1 = Text("Пример", (10, 10)) t2 = Text("Пример", Pnt(10, 10))