perl - 使用 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。
任何想法将不胜感激。谢谢。
解决方案
似乎(至少)有两个错误:
my $bound = Math::Polygon->new(points => @poly);
构造函数引用一个数组,而不是数组。所以应该是:
my $bound = Math::Polygon->new(points => \@poly);
其次,$bound->contains( )
引用一个点数组,所以它应该是:
if($bound->contains( \@this_loc )) { ... }
推荐阅读
- javascript - 无法读取未定义 C# JAVASCRIPT 的属性“长度”
- php - (初学者)如何在我的 index.php 文件中添加一个删除按钮,该按钮将从数据库中删除类别
- c++ - 找不到最新插入到 std::map 的密钥
- python - 使用复选框选项在 div 中显示多选引导下拉值
- ios - 如何在 UICollectionViewDelegateFlowLayout 中设置无间距?
- python - 计算算术表达式的程序
- css - 如何增加 scss 变量?
- tensorflow - Keras ImageDataGenerator 用于多个输入和基于图像的目标输出
- php - 如何使用 CloudConvert API
- apache-spark - Spark 流 - 原因:org.apache.parquet.io.ParquetDecodingException:无法读取文件中块 0 中 1 处的值