question: private static Boolean isInsidePolygon ( final GeoPoint point , final List < GeoPoint > polyPoints ) { final double latitude = point . getLatitude ( ) ; final double longitude = point . getLongitude ( ) ; final double sinLatitude = Math . sin ( latitude ) ; final double cosLatitude = Math . cos ( latitude ) ; final double sinLongitude = Math . sin ( longitude ) ; final double cosLongitude = Math . cos ( longitude ) ; double arcDistance = 0.0 ; Double prevAngle = null ; for ( final GeoPoint polyPoint : polyPoints ) { final Double angle = computeAngle ( polyPoint , sinLatitude , cosLatitude , sinLongitude , cosLongitude ) ; if ( angle == null ) { return null ; } if ( prevAngle != null ) { double angleDelta = angle - prevAngle ; if ( angleDelta < - Math . PI ) { angleDelta += Math . PI * 2.0 ; } if ( angleDelta > Math . PI ) { angleDelta -= Math . PI * 2.0 ; } if ( Math . abs ( angleDelta - Math . PI ) < Vector . MINIMUM_RESOLUTION ) { return null ; } arcDistance += angleDelta ; } prevAngle = angle ; } if ( prevAngle != null ) { final Double lastAngle = computeAngle ( polyPoints . get ( 0 ) , sinLatitude , cosLatitude , sinLongitude , cosLongitude ) ; if ( lastAngle == null ) { return null ; } double angleDelta = lastAngle - prevAngle ; if ( angleDelta < - Math . PI ) { angleDelta += Math . PI * 2.0 ; } if ( angleDelta > Math . PI ) { angleDelta -= Math . PI * 2.0 ; } if ( Math . abs ( angleDelta - Math . PI ) < Vector . MINIMUM_RESOLUTION ) { return null ; } arcDistance += angleDelta ; } if ( Math . abs ( arcDistance ) < Vector . MINIMUM_RESOLUTION ) { return null ; } return arcDistance > 0.0 ; }
target:  For a specified point and a list of poly points, determine based on point order whether the point should be considered in or out of the polygon.