Calculates the intersection between the polygons in this surface
        and other polygon, in the z=0 projection.
        
        This method rely on the ``shapely.Polygon.intersects()`` method.
        The way this method is used is intersecting this polygon 
        recursively with all identified polygons which overlaps with it
        in the z=0 projection.
        
        :param polygon: Polygon to intersect with the Surface.
        :type polygon: pyny.Polygon
        :returns: Multiple polygons product of the intersections.
        :rtype: dict of ndarrays (keys are the number of the polygon
            inside the surface)

def intersect_with(self, polygon):
        """
        Calculates the intersection between the polygons in this surface
        and other polygon, in the z=0 projection.
        
        This method rely on the ``shapely.Polygon.intersects()`` method.
        The way this method is used is intersecting this polygon 
        recursively with all identified polygons which overlaps with it
        in the z=0 projection.
        
        :param polygon: Polygon to intersect with the Surface.
        :type polygon: pyny.Polygon
        :returns: Multiple polygons product of the intersections.
        :rtype: dict of ndarrays (keys are the number of the polygon
            inside the surface)
        """
        
        intersections = {}
        for i, poly in enumerate(self):
            if polygon.get_shapely().intersects(poly.get_shapely()):
                inter = polygon.get_shapely().intersection(poly.get_shapely())
                intersections[i] = np.array(list(inter.exterior.coords))[:-1]
        return intersections