<?php
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// 点が線分のどちら側に存在するかをチェック
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
function getSide($p_, $a_, $b_)
{
	$x = "lon";
	$y = "lat";
	$exter = $p_[$x] * ($a_[$y] - $b_[$y]) + $a_[$x] * ($b_[$y] - $p_[$y]) + $b_[$x] * ($p_[$y] - $a_[$y]);
	if (0 < $exter)
		return 1;
	else if (0 > $exter)
		return -1;
	else
		return 0;
}

//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
// 点がエリアに含まれるかをチェック
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
function insideArea($point_, $area_)
{
	$totalSide = 0;
	$linkNum = count($area_);
	$bIndex = 0;
	
	for($iCount = 0; $iCount < $linkNum; $iCount++)
	{
		if ($linkNum > $iCount + 1)
			$bIndex = $iCount + 1;
		else
			$bIndex = 0;
		
		$side = getSide($point_, $area_[$iCount], $area_[$bIndex]);
		if ($side == 0)
			return 1;
		else
			$totalSide += $side;
	}
	if (abs($totalSide) == $linkNum)
		return 1;
	
	return 0;
}

$IN_COUNT_AREA = array(
	array("lat"	=>	34.184527,	"lon"	=>	132.173597),
	array("lat"	=>	34.177659,	"lon"	=>	132.168918),
	array("lat"	=>	34.170783,	"lon"	=>	132.162138),
	array("lat"	=>	34.172258,	"lon"	=>	132.159519),
	array("lat"	=>	34.180916,	"lon"	=>	132.164411),
	array("lat"	=>	34.185252,	"lon"	=>	132.170419)
);

// 34.18113706	132.1650571
if (insideArea(array("lat"	=>	"34.18113706", "lon"	=>	"132.1650571"), $IN_COUNT_AREA) == 1)
{
	print "含まれる";
}
else
{
	print "含まれない";
}
?>
