Страница 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
Спасибо!