1

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?

  • 1
    Intersection of two overlapping polygons is a polygon. Are you perhaps more interested in finding the intersection of the boundaries of the polygons (linear rings) that would give a multipoint in this case? – user30184 Apr 10 at 7:29
  • I am interested in getting just the intersection coordinates of polygons PG and QG. – Ashutosh Mishra Apr 10 at 7:38
  • the vertices of the polygon are the points you want, aren't they? other wise can you mark on your image which points you do want – Ian Turton Apr 10 at 7:42
  • There are 3 intersection coordinates if you see the above graph where both the polygons intersect. I want to find the coordinates of those 3 points. – Ashutosh Mishra Apr 10 at 7:48
  • I can see 6 points where the boundaries of the two polygons intersect. Could you mark your favorites? Polygons intersect topologically also in all interior points which are common for both and obviously you are not interested in that. – user30184 Apr 10 at 8:11
1

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.