Skip to content

Martinez algorithm for polygon Boolean operations, PHP library.

Notifications You must be signed in to change notification settings

BardoQi/polygon_utils

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Martinez-Rueda polygon boolean operations algorithm

PHP implementation of original algorithm http://www4.ujaen.es/~fmartin/bool_op.html

Algorithm is used for computing Boolean operations on polygons:

  • union
  • difference
  • intersection
  • xor

install

$ composer require kudm761/martinez-rueda-php:dev

Usage

Input parameter is a multipolygon - an array of polygons. And each polygon is an array of points x,y.

    $data = [[[-1, 4], [-3, 4], [-3, 0], [-3, -1], [-1, -1], [-1, -2], [2, -2], [2, 1], [-1, 1], [-1, 4]]];
    $subject = new \MartinezRueda\Polygon($data);
    
    $data = [[[-2, 5], [-2, 0], [3, 0], [3, 3], [2, 3], [2, 2], [0, 2], [0, 5], [-2, 5]]];
    $clipping = new \MartinezRueda\Polygon($data);
    
    $result = (new \MartinezRueda\Algorithm())->getUnion($subject, $clipping);
    
    echo json_encode($result->toArray()), PHP_EOL;
    
    // Result is:
    // [[[2,3],[2,2],[0,2],[0,5],[-2,5],[-2,4],[-3,4],[-3,0],[-3,-1],[-1,-1],[-1,-2],[2,-2],[2,0],[3,0],[3,3],[2,3]]]

Some visual examples

Let's consider two polygons: green multipolygon of two polygons and yellow polygon.

Snow-white polygon is result of Boolean operation on two polygons.

Union

Difference (green NOT yellow)

Intersection

Xor

About

Martinez algorithm for polygon Boolean operations, PHP library.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%