@@ -431,7 +431,7 @@ def merge(x, y):
431431 return concatenate (x ), concatenate (y )
432432
433433
434- def vertice_overlap (x0 , y0 , x1 , y1 , minimal_area = False , p1_area = False ):
434+ def vertice_overlap (x0 , y0 , x1 , y1 , minimal_area = False , p1_area = False , hybrid_area = False , min_overlap = 0 ):
435435 r"""
436436 Return percent of overlap for each item.
437437
@@ -441,6 +441,9 @@ def vertice_overlap(x0, y0, x1, y1, minimal_area=False, p1_area=False):
441441 :param array y1: y for polygon list 1
442442 :param bool minimal_area: If True, function will compute intersection/little polygon, else intersection/union
443443 :param bool p1_area: If True, function will compute intersection/p1 polygon, else intersection/union
444+ :param bool hybrid_area: If True, function will compute like union,
445+ but if cost is under min_overlap, obs is kept in case of fully included
446+ :param float min_overlap: under this value cost is set to zero
444447 :return: Result of cost function
445448 :rtype: array
446449
@@ -466,14 +469,25 @@ def vertice_overlap(x0, y0, x1, y1, minimal_area=False, p1_area=False):
466469 # Area of intersection
467470 intersection = (p0 & p1 ).area ()
468471 # we divide intersection with the little one result from 0 to 1
472+ if intersection == 0 :
473+ cost [i ] = 0
474+ continue
475+ p0_area_ , p1_area_ = p0 .area (), p1 .area ()
469476 if minimal_area :
470- cost [ i ] = intersection / min (p0 . area (), p1 . area () )
477+ cost_ = intersection / min (p0_area_ , p1_area_ )
471478 # we divide intersection with p1
472479 elif p1_area :
473- cost [ i ] = intersection / p1 . area ()
480+ cost_ = intersection / p1_area_
474481 # we divide intersection with polygon merging result from 0 to 1
475482 else :
476- cost [i ] = intersection / (p0 + p1 ).area ()
483+ cost_ = intersection / (p0_area_ + p1_area_ - intersection )
484+ if cost_ >= min_overlap :
485+ cost [i ] = cost_
486+ else :
487+ if hybrid_area and cost_ != 0 and (intersection / min (p0_area_ , p1_area_ )) > .99 :
488+ cost [i ] = cost_
489+ else :
490+ cost [i ] = 0
477491 return cost
478492
479493
0 commit comments