我正在尝试确定某个点是否在多边形内。尝试使用Math :: Polygon。我将mySQL表中多边形的边界作为该多边形每点的一条记录:
例如:
1,38.33208,-75.51919
2,38.33286,-75.52265
等
38,38.33208,-75.51919
无论我做什么,该例程都不会显示多边形内的点,尽管事实是该点确实位于多边形内。
这是相关代码
use Math::Polygon;
my @poly = ();
$sqlc = "SELECT segment,lat,lon FROM boundary WHERE xxxxxxx ";
my $stcc = $dbh->prepare(qq{$sqlc});
$stcc->execute();
while(($seg,$slat,$slon) = $stcc->fetchrow_array())
{
$poly[$seg] = ([$slat,$slon]);
}
my $bound = Math::Polygon->new(points => @poly);
my @this_loc = ([$lat2,$lon2]);
if($bound->contains( $this_loc ))
{
# never reaches this point.
}
无论如何,我都无法让-> contains()例程返回true。
任何想法都将不胜感激。谢谢。
答案 0 :(得分:1)
似乎(至少)有两个错误:
my $bound = Math::Polygon->new(points => @poly);
构造函数引用数组,而不是数组。所以应该是:
my $bound = Math::Polygon->new(points => \@poly);
第二,$bound->contains( )
引用了点数组,因此应该是:
if($bound->contains( \@this_loc )) { ... }