0

我有多边形数据,以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中做到这一点?

4

2 回答 2

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;
    }

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

希望有帮助

于 2014-08-08T07:49:50.243 回答
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;
}
于 2014-08-08T07:59:38.243 回答