Python Coordinates – Handling Multiple Coordinates from Intersection Function

coordinatesintersectionpythonshapely

I am trying to find intersection vertices of two polygons defined below

PG = Polygon([(0.0,0.0), (0.0,4.0), (2.0, 0.0)])
QG = shapely.affinity.rotate(PG, 10.0, origin="centroid")
print(PG.intersection(QG))

It returns a polygon which represents the intersection vertices but I get multiple vertices belonging to polygon PG and QG and not the exact intersection vertices something like this

POLYGON ((0 1.275007557649384, 0 3.233068398870882, 1.176669689726421 1.646660620547158, 1.901423900453083 0.1971521990938349, 0.7833182180345657 0, 0.2248182330207899 0, 0 1.275007557649384))

The graph looks something like thisenter image description here

How to get the exact coordinates of intersection vertices A, B and C as shown above?

Best Answer

As user30184 says, the intersection of two overlapping polygons is a polygon and with your result (light blue polygon)

enter image description here

The intersection of the boundaries of the polygons (linearRings) gives a multipoint in you case

one = LineString(list(PG.exterior.coords))
two = LineString(list(QG.exterior.coords))
print(one.intersection(two).wkt)
MULTIPOINT (0 1.275007557649384, 0 3.233068398870882, 0.2248182330207899 0, 0.7833182180345657 0, 1.176669689726421 1.646660620547158, 1.901423900453083 0.1971521990938349)

enter image description here

These points are also the vertices of the resulting polygon

points = [Point(pt) for pt in list(PG.intersection(QG).exterior.coords)[:-1]]
for i in points:
     print(i.wkt)
POINT (0 1.275007557649384)
POINT (0 3.233068398870882)
POINT (1.176669689726421 1.646660620547158)
POINT (1.901423900453083 0.1971521990938349)
POINT (0.7833182180345657 0)
POINT (0.2248182330207899 0)

enter image description here

But shapely alone does not allow to select the A,B,C points from the others.

Related Question