【发布时间】:2022-10-07 08:47:27
【问题描述】:
我将几何多边形存储在 MongoDb 中。它代表一个交付区域。输入参数是坐标点。如何检查该点是否在多边形之一内?
我知道光线投射算法,但如何使用 MnogoDb 引擎做到这一点?它是最佳方式还是更好地在脚本中进行计算?
我将几何多边形存储在 MongoDb 中。它代表一个交付区域。输入参数是坐标点。如何检查该点是否在多边形之一内?
我知道光线投射算法,但如何使用 MnogoDb 引擎做到这一点?它是最佳方式还是更好地在脚本中进行计算?
您可以在 PHP 中很容易地测试一个点是否在多边形内。这可能比使用 Mongo 更容易
$vertx[10, 100, 150, 20]; // all x coordinates
$verty[10, 20, 100, 90]; // all y coordinates
$nvert = count($vertx);
$x = 50;
$y = 50;
$test = inpoly($nvert, $vertx, $verty, $x, $y); // true
function inpoly($nvert, $vertx, $verty, $testx, $testy) {
$i = $j = $c = 0;
for ($i = 0, $j = $nvert - 1; $i < $nvert; $j = $i++) {
if ((($verty[$i] > $testy) != ($verty[$j] > $testy)) && ($testx < ($vertx[$j] - $vertx[$i]) * ($testy - $verty[$i]) / ($verty[$j] - $verty[$i]) + $vertx[$i])) {
$c = !$c;
}
}
return $c;
}
【讨论】: