我在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中做到这一点?
答案 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;
}