title: Polygon intersection error in Shapely: "shapely.geos.TopologicalError: The operation 'GEOSIntersection_r' produced a null geometry"
body: <p>I have been trying to debug this problem but unable to do so. I am trying to find the intersection of two <code>Polygon</code> objects. It works most of the time but for the following case, it raises the following exception:</p>
  
  <pre><code>P1 area: 13.125721955
  P2 area: 1.0
  Traceback (most recent call last):
  File "geom2d.py", line 235, in &lt;module&gt;
  print p1.intersection(p2)
  File "/usr/local/lib/python2.7/dist-packages/shapely/geometry/base.py", line 334, in     intersection
  return geom_factory(self.impl['intersection'](self, other))
    File "/usr/local/lib/python2.7/dist-packages/shapely/topology.py", line 47, in __call__
      "The operation '%s' produced a null geometry. Likely cause is invalidity of the geometry %s" % (self.fn.__name__, repr(this)))
  shapely.geos.TopologicalError: The operation 'GEOSIntersection_r' produced a null     geometry. Likely cause is invalidity of the geometry &lt;shapely.geometry.polygon.Polygon      object at 0x8e5ad6c&gt;
  </code></pre>
  
  <p>The code is as follows.</p>
  
  <pre><code>from shapely.geometry import Point,Polygon,MultiPolygon
  
  poly1 = [(35.0041000000000011, -88.1954999999999956), (34.9917999999999978,         -85.6068000000000069), (32.8404000000000025, -85.1756000000000029), (32.2593000000000032, -84.8927000000000049), (32.1535000000000011, -85.0341999999999985), (31.7946999999999989, -85.1358000000000033), (31.5199999999999996, -85.0438000000000045), (31.3384000000000000, -85.0836000000000041), (31.2092999999999989, -85.1069999999999993), (31.0023000000000017, -84.9943999999999988), (30.9953000000000003, -87.6008999999999958), (30.9422999999999995, -87.5926000000000045), (30.8538999999999994, -87.6256000000000057), (30.6744999999999983, -87.4072000000000031), (30.4404000000000003, -87.3687999999999931), (30.1463000000000001, -87.5240000000000009), (30.1545999999999985, -88.3863999999999947), (31.8938999999999986, -88.4742999999999995), (34.8937999999999988, -88.1020999999999930), (34.9478999999999971, -88.1721000000000004), (34.9106999999999985, -88.1461000000000041)]
  poly2 = [(34.7998910000000024, -88.2202139999999986), (34.7998910000000024,  -87.2202139999999986), (35.7998910000000024, -87.2202139999999986), (35.7998910000000024, -88.2202139999999986)]
  
  p1 = Polygon(poly1)
  p2 = Polygon(poly2)
  print 'P1 area:',p1.area
  print 'P2 area:',p2.area
  print p1.intersection(p2)
  </code></pre>
  
  <p>Since it prints the areas of the two polygons, I assume that the polygons are formed correctly. I also (somehow) printed the first polygon to make sure that it is indeed a simple polygon.</p>
  
  <p>Could anyone please explain why I am getting this exception?</p>
  
  <p><strong>Edit:</strong> I printed p1.is_valid and it turns out to be False. There is some explanation <a href="http://toblerity.github.com/shapely/manual.html#predicates-and-relationships" rel="noreferrer">here</a>. Search for the string <code>is_valid</code>. It says that </p>
  
  <blockquote>
    <p>A valid Polygon may not possess any overlapping exterior or interior rings.</p>
  </blockquote>
  
  <p>Could someone please explain what this means and if there is a possible work-around?
  BTW, I also noticed that if I remove the last coordinate from <code>poly1</code>, the whole thing works. Perhaps the whole list of coordinates makes the polygon <strong>complex</strong>.</p>