传单/PHP查找鼠标点击两侧的多段线点



我正在使用Leaflet绘制一条由平台点a、B、C、D、E组成的多段线。如果我沿着这条线随机单击一个位置,我会得到单击的平台,并使用一些PHP从中找到多段线中最接近的平台点。假设它知道B点是最接近的。

我不知道的是(假设行进方向是从A到E(我是在B点前面还是后面点击了,换句话说,我是在A和B之间还是在B和C之间?

这就是我陷入困境的地方。不需要代码,但是否可以使用PHP来查看一个平台是否位于其他两个平台点之间的线上?也许看看角度是否共线?或者我缺少一个更简单的方法?非常感谢你为我提供的指导。

EDIT-实际上,这在短距离内是不好的,因为多段线的厚度可能会使轴承偏离好几度,尤其是当单击接近某个点时。回到绘图板上。


我决定尝试将方位从点击点获取到最近的点,然后查看该方位是否匹配A-B或B-C。

function bearing($lat1, $lon1, $lat2, $lon2){
$radians = atan2(asin($lon1-$lon2)*cos($lat2),
cos($lat1)*sin($lat2) - sin($lat1)*cos($lat2)*cos($lon1-$lon2)); 
$degrees = abs(rad2deg($radians));
return $degrees;
}
echo bearing(51.6909727036, -2.0277718088, 51.6898945656, -2.0241979535);
echo bearing(51.690195, -2.025175, 51.6898945656, -2.0241979535);

这将返回以下内容:

154.17654569436(B点至C点(

154.61713565813(点击指向B点(

不确定为什么方向角与我限制的仅在单击多段线时鼠标单击的方向角不完全相同。但我认为这对我的目的来说已经足够近了。我仍然对解决这个问题的更好方法感兴趣。谢谢

最新更新