【问题标题】:Find Point 2 mile away from polygon PHP查找距多边形 PHP 2 英里的点
【发布时间】:2014-10-01 15:00:05
【问题描述】:

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

【问题讨论】:

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


    【解决方案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;
        }
    

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

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      我在这里将代码移植到 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;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-07-01
        • 1970-01-01
        • 2021-07-20
        • 1970-01-01
        • 2010-10-28
        • 2021-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多