Страница 1 из 1

Как разделить мультигеометрию на составные части (pyQGIS)?

Добавлено: 13 сен 2012, 20:53
SS_Rebelious
Использую выражение типа some_line.intersection(some_polygon). В результате в общем случае может получиться несколько вариантов геомтрий, включая multylinestring и возможно даже геометрии, содержащие точки и линии. Я хотел бы разделять мультигеометрии на составные части. Как это сделать?

Re: Как разделить мультигеометрию на составные части (pyQGIS

Добавлено: 13 сен 2012, 21:04
Voltron
Использовать методы asMultiPoint(), asMultiPolyline(), asMultiPolygon()

Re: Как разделить мультигеометрию на составные части (pyQGIS

Добавлено: 13 сен 2012, 23:17
SS_Rebelious
Не выходит. Создаю полигон в форме буквы "П" и линию, которая имеет с этим полигоном одну общую вершину и при этом пересекает его. В результате пересечения я по-идее должен получить мультигеометрию, содержащую точку и линию. wkbType() выдаёт 0. Ожидаемо asMultiPolyline() выдаёт [], ибо эта геометрия - не полилиния. Зато работает asPoint(), но при этом выдаёт координаты (0,0), которых в принципе нет... (O_o). Как быть?

Код: Выделить всё

    >>> poly = QgsGeometry.fromPolygon([  [ QgsPoint(1,3), QgsPoint(4,3), QgsPoint(4,1), QgsPoint(3,1), QgsPoint(3,2),  QgsPoint(2,2), QgsPoint(2,1), QgsPoint(1,1), QgsPoint(1,3)   ] ])
    >>>line = QgsGeometry.fromPolyline( [ QgsPoint(2,1), QgsPoint(7,2) ] )
    >>> i = line.intersection(poly)
    >>> i.wkbType()
    0
    >>> i.asPoint()
    (0,0)
    >>> line.asPolyline()
    [(2,1), (7,2)]
    >>> poly.asPolygon()
    [[(1,3), (4,3), (4,1), (3,1), (3,2), (2,2), (2,1), (1,1), (1,3)]]
    >>> i.asPolyline()
    []
    >>> i.asMultiPolyline()
    []

Re: Как разделить мультигеометрию на составные части (pyQGIS

Добавлено: 14 сен 2012, 11:47
Voltron

Код: Выделить всё

>>>poly = QgsGeometry.fromPolygon([  [ QgsPoint(1,3), QgsPoint(4,3), QgsPoint(4,1), QgsPoint(3,1), QgsPoint(3,2), QgsPoint(2,2), QgsPoint(2,1), QgsPoint(1,1), QgsPoint(1,3) ] ])
>>>line = QgsGeometry.fromPolyline( [ QgsPoint(2,1), QgsPoint(7,2) ] )
>>>i = line.intersection(poly).asGeometryCollection()
>>>i[0].exportToWkt()
POINT(2.000000 1.000000)
>>>i[1].exportToWkt()
LINESTRING(3.000000 1.200000, 4.000000 1.400000)

Re: Как разделить мультигеометрию на составные части (pyQGIS

Добавлено: 14 сен 2012, 12:39
SS_Rebelious
Спасибо!