首页 > 解决方案 > 使用 Math::Polygon 确定点是否在多边形内。不工作

问题描述

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

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

标签: perlpolygoncpan

解决方案


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

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

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

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

其次,$bound->contains( )引用一个点数组,所以它应该是:

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

推荐阅读