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

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

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

Сообщение SS_Rebelious » 13 сен 2012, 20:53

Использую выражение типа some_line.intersection(some_polygon). В результате в общем случае может получиться несколько вариантов геомтрий, включая multylinestring и возможно даже геометрии, содержащие точки и линии. Я хотел бы разделять мультигеометрии на составные части. Как это сделать?
Последний раз редактировалось SS_Rebelious 14 сен 2012, 12:39, всего редактировалось 1 раз.
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

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

Сообщение Voltron » 13 сен 2012, 21:04

Использовать методы asMultiPoint(), asMultiPolyline(), asMultiPolygon()

Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

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

Сообщение SS_Rebelious » 13 сен 2012, 23:17

Не выходит. Создаю полигон в форме буквы "П" и линию, которая имеет с этим полигоном одну общую вершину и при этом пересекает его. В результате пересечения я по-идее должен получить мультигеометрию, содержащую точку и линию. 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()
    []
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

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

Сообщение Voltron » 14 сен 2012, 11:47

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

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

Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

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

Сообщение SS_Rebelious » 14 сен 2012, 12:39

Спасибо!
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 14 гостей