使用Math :: Polygon确定点是否在多边形内。不工作

时间:2019-06-28 21:12:58

标签: perl polygon cpan

我正在尝试确定某个点是否在多边形内。尝试使用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。

任何想法都将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

似乎(至少)有两个错误:

my $bound = Math::Polygon->new(points => @poly);

构造函数引用数组,而不是数组。所以应该是:

my $bound = Math::Polygon->new(points => \@poly);

第二,$bound->contains( )引用了点数组,因此应该是:

if($bound->contains( \@this_loc )) { ... }