Используя Math :: Polygon, чтобы определить, находится ли точка внутри многоугольника. Не работает - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь определить, находится ли определенная точка внутри многоугольника. Попытка использовать 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 Ответ

1 голос
/ 29 июня 2019

Кажется, что есть (по крайней мере) две ошибки:

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

конструктор принимает ссылку на массив, а не на массив.Так должно быть:

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

Во-вторых, $bound->contains( ) принимает ссылку на массив точек, поэтому должно быть:

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