MultiPolygon - Коллекция полигонов
- class axipy.MultiPolygon
Базовые классы:
GeometryCollection
Коллекция полигонов. Может содержать только объекты типа полигон.
- Параметры:
cs – Система Координат, в которой создается геометрия.
poly = Polygon((0, 0), (1, 10), (10, 1)) poly.holes.append([(2, 2), (2, 4), (5, 3)]) # Добавим дырку mpoly = MultiPolygon() # Создадим саму коллекцию. mpoly.append([(1, 2), (3, 4), (5, 6), (7, 8)]) # Добавим полигон в виде списка точек mpoly.append(poly) # Добавим ранее созданный с дыркой 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 # Полностью заменим первый полигон
Классовые методы:
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.
Свойства:
Возвращает минимальный ограничивающий прямоугольник.
Система Координат (СК) геометрии.
Проверяет геометрию на валидность.
Если геометрия неправильная, возвращает краткую аннотацию причины.
Возвращает наименование геометрического объекта.
Возвращает тип геометрического элемента.
Методы:
affine_transform
(trans)Трансформирует объект исходя из заданных параметров трансформации.
almost_equals
(other, tolerance)Производит примерное сравнения с другой геометрией в пределах заданной точности.
append
(*value)Добавление геометрии в коллекцию.
boundary
()Возвращает границы геометрии в виде полилинии.
buffer
(distance[, resolution, capStyle, ...])Производит построение буфера вокруг объекта.
centroid
()Возвращает центроид геометрии.
clone
()Создает копию объекта.
contains
(other)Возвращает True, если геометрия полностью содержит передаваемую в качестве параметра геометрию.
Возвращает минимальный окаймляющий полигон со всеми выпуклыми углами.
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)Проверяет отношения между объектами.
remove
(idx)Удаление геометрии из коллекции.
reproject
(cs)Перепроецирует геометрию в другую систему координат.
rotate
(point, angle)Поворот геометрии относительно заданной точки.
scale
(kx, ky)Масштабирует объект по заданным коэффициентам масштабирования.
shift
(dx, dy)Смещает объект на заданную величину.
split_by_polyline
(splitter)Разрезает объект линейным объектом.
symmetric_difference
(other)Возвращает логический XOR областей геометрий (объединение разниц).
Преобразует геометрию в формат 'GeoJSON'
Пробует геометрию преобразовать в линейный объект.
to_mif
()Преобразует геометрию в формат MIF.
Пробует геометрию преобразовать в площадной объект.
to_wkb
()Возвращает WKB строку для геометрии.
to_wkt
()Возвращает WKT строку для геометрии.
touches
(other)Возвращает True, если геометрии соприкасаются.
Создает копию коллекции при этом пробует упростить ее тип.
union
(other)Возвращает результат объединения двух геометрий.
within
(other)Возвращает True, если геометрия находится полностью внутри геометрии other.
- 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, если геометрии равны в пределах заданного отклонения.
- append(*value: Union[Geometry, Pnt, Tuple[float, float]])
Добавление геометрии в коллекцию. Задание параметров аналогично указанию их при создании объектов конкретного типа. Если опустить указание класса, то для одной точки или пары значений float будет создан точечный объект
Point
, если точек больше, - объект классаLineString
.# Создадим коллекцию и добавим в нее несколько объектов различного типа. coll = GeometryCollection() coll.append((1, 2)) # Точка coll.append(1, 2) # Точка coll.append( [(3, 4), (5, 5), (10, 0)] ) # Полилиния в виде :class:`list`. Можно это сделать через конструктор :class:`LinearString`.
- 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 – Предел среза.
- contains(other: Geometry) bool
Возвращает True, если геометрия полностью содержит передаваемую в качестве параметра геометрию.
- property coordsystem: CoordSystem
Система Координат (СК) геометрии.
- 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 – СК, на базе эллипсоида которой производится расчет. Если не задана, то расчет производится на плоскости.
- Результат:
Возвращается пара значений (расстояние в метрах, азимут в градусах)
- 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 – Единица измерения, в которой необходимо получить результат. Если не задана, то используется единица измерения для СК. Если и она не задана, то производится расчет на плоскости.
- 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 – СК, на базе эллипсоида которой производится расчет. Если не задана, то расчет производится на плоскости.
- Результат:
Возвращает результирующую точку.
- 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_linestring() Optional[Geometry]
Пробует геометрию преобразовать в линейный объект. В случае неудачи возвращает None.
- to_polygon() Optional[Geometry]
Пробует геометрию преобразовать в площадной объект. В случае неудачи возвращает None.
- try_to_simplified() Union[MultiPoint, MultiLineString, MultiPolygon, GeometryCollection]
Создает копию коллекции при этом пробует упростить ее тип. К примеру, если в коллекции только полигоны, то вернет объект типа
MultiPolygon
. Если исходная коллекция разнородна, возвращается копия исходной.
- 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('Это точка')