src/Polygon.php
public function contains(Coordinate $point): bool
    {
        $numberOfPoints = $this->getNumberOfPoints();
        $polygonLats    = $this->getLats();
        $polygonLngs    = $this->getLngs();

        $polygonContainsPoint = false;

        for ($node = 0, $altNode = ($numberOfPoints - 1); $node < $numberOfPoints; $altNode = $node ++) {
            if (($polygonLngs[$node] > $point->getLng() !== ($polygonLngs[$altNode] > $point->getLng()))
                && ($point->getLat() < ($polygonLats[$altNode] - $polygonLats[$node])
                                       * ($point->getLng() - $polygonLngs[$node])
                                       / ($polygonLngs[$altNode] - $polygonLngs[$node])
                                       + $polygonLats[$node]
                )
            ) {
                $polygonContainsPoint = ! $polygonContainsPoint;
            }
        }

        return $polygonContainsPoint;
    }
public function contains(Coordinate $point): bool
    {
        $numberOfPoints = $this->getNumberOfPoints();
        $polygonLats    = $this->getLats();
        $polygonLngs    = $this->getLngs();

        $polygonContainsPoint = false;

        for ($node = 0, $altNode = ($numberOfPoints - 1); $node < $numberOfPoints; $altNode = $node ++) {
            if (($polygonLngs[$node] > $point->getLng() !== ($polygonLngs[$altNode] > $point->getLng()))
                && ($point->getLat() < ($polygonLats[$altNode] - $polygonLats[$node])
                                       * ($point->getLng() - $polygonLngs[$node])
                                       / ($polygonLngs[$altNode] - $polygonLngs[$node])
                                       + $polygonLats[$node]
                )
            ) {
                $polygonContainsPoint = ! $polygonContainsPoint;
            }
        }

        return $polygonContainsPoint;
    }
public function contains ( Coordinate $ point ) : bool { $ numberOfPoints = $ this -> getNumberOfPoints ( ) ; $ polygonLats = $ this -> getLats ( ) ; $ polygonLngs = $ this -> getLngs ( ) ; $ polygonContainsPoint = false ; for ( $ node = 0 , $ altNode = ( $ numberOfPoints - 1 ) ; $ node < $ numberOfPoints ; $ altNode = $ node ++ ) { if ( ( $ polygonLngs [ $ node ] > $ point -> getLng ( ) !== ( $ polygonLngs [ $ altNode ] > $ point -> getLng ( ) ) ) && ( $ point -> getLat ( ) < ( $ polygonLats [ $ altNode ] - $ polygonLats [ $ node ] ) * ( $ point -> getLng ( ) - $ polygonLngs [ $ node ] ) / ( $ polygonLngs [ $ altNode ] - $ polygonLngs [ $ node ] ) + $ polygonLats [ $ node ] ) ) { $ polygonContainsPoint = ! $ polygonContainsPoint ; } } return $ polygonContainsPoint ; }
Determine if given point is contained inside the polygon. Uses the PNPOLY
algorithm by W. Randolph Franklin. Therfore some edge cases may not give the
expected results, e. g. if the point resides on the polygon boundary.

@see http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html

For special cases this calculation leads to wrong results:

- if the polygons spans over the longitude boundaries at 180/-180 degrees

@param Coordinate $point

@return bool
Determine if given point is contained inside the polygon . Uses the PNPOLY algorithm by W . Randolph Franklin . Therfore some edge cases may not give the expected results e . g . if the point resides on the polygon boundary .