查询坐标在哪些范围内
场景:
查询坐标在哪些范围内
现在是这样处理的
// 坐标
$point = '103.05293,30.69015';
// 坐标范围
$rangeAll = [
['103.05293,30.69015','103.05293,30.69015','103.05293,30.69015'],
['103.05293,30.69015','103.05293,30.69015','103.05293,30.69015'],
['103.05293,30.69015','103.05293,30.69015','103.05293,30.69015'],
['103.05293,30.69015','103.05293,30.69015','103.05293,30.69015']
];
$data = [];
foreach ($rangeAll as $range) {
if (isPointInPolygon($point, $polygon)) {
$data[] = $range;
}
}
function isPointInPolygon($point, $polygon) {
$x = $point[0];
$y = $point[1];
$vertices = count($polygon);
$intersect = false;
for ($i=0, $j=$vertices-1; $i<$vertices; $j=$i++) {
$xi = $polygon[$i][0];
$yi = $polygon[$i][1];
$xj = $polygon[$j][0];
$yj = $polygon[$j][1];
if ( (($yi > $y) != ($yj > $y)) &&
($x < ($xj-$xi) * ($y-$yi) / ($yj-$yi) + $xi) ) {
$intersect = !$intersect;
}
}
return $intersect;
}
但是当范围变多就会很慢才会出结果,有没有什么好的办法可以批量处理或者第三方接口
推荐文章: