找点距离多边形PHP 2英里

时间:2014-08-08 07:37:33

标签: php google-maps google-maps-api-3 point-in-polygon

我在mysql数据库中以纬度和经度数组的形式得到了多边形数据,例如:

mysql数据库中的纬度和经度数组。

[["x":23.628134,  "y":27.458334],
["x":23.629867,   "y":27.449021],
["x":23.62324,    "y":27.445416],
["x":23.622424,   "y":27.457819],
["x":23.622424,   "y":27.457819]]

我有一个坐标为纬度和经度的点(顶点),例如:

$location = new vertex($_GET["longitude"], $_GET["latitude"]);

现在我想找到这个顶点(点)是否距离多边形的每个角2英里。我怎么能在PHP中做到这一点?

2 个答案:

答案 0 :(得分:1)

如果您认为您的点接近地球大小,您可以使用以下公式计算从坐标到另一个坐标的距离:

这是一个csharp函数,但很容易移植到php

    double getGroundDistance(double latA, double lonA, double latB, double lonB)
    {
        double a = Math.PI / 180;
        double lat1 = latA * a;
        double lat2 = latB * a;
        double lon1 = lonA * a;
        double lon2 = lonB * a;
        double t1 = Math.Sin(lat1) * Math.Sin(lat2);
        double t2 = Math.Cos(lat1) * Math.Cos(lat2);
        double t3 = Math.Cos(lon1 - lon2);
        double t4 = t2 * t3;
        double t5 = t1 + t4;
        double radDist = Math.Atan(-t5 / Math.Sqrt(-t5 * t5 + 1)) + 2 * Math.Atan(1);
        return (radDist * 3437.74677 * 1.1508) * 1.6093470878864446 * 1000;
    }

所以你只需要检查每个点的距离。

希望有所帮助

答案 1 :(得分:1)

这里我用PHP代码

 Private function Distance($lat1, $lon1, $lat2, $lon2) {
    $pi80 = M_PI / 180;
    $lat1 *= $pi80;
    $lon1 *= $pi80;
    $lat2 *= $pi80;
    $lon2 *= $pi80;
    $r = 6372.797; // mean radius of Earth in km
    $dlat = $lat2 - $lat1;
    $dlon = $lon2 - $lon1;
    $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlon / 2) * sin($dlon / 2);
    $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
    $km = $r * $c;

    return $km;
}