【问题标题】:How to check weather a point is inside a polygon or not in PHP mysql如何在PHP mysql中检查一个点是否在多边形内
【发布时间】:2019-01-23 19:57:21
【问题描述】:

我正在尝试获取形状文件中的点。我已经尝试了空间函数,它显示了一个名为

的错误

3033 - 二进制几何函数 st_contains 给定两个不同 srid 的几何:4326 和 0,它们应该是相同的。

我的查询是

SELECT lightning.lightning_id,lightning.latitude,lightning.longitude,
lightning.flash_type, DATE_FORMAT(lightning.lightning_time, '%D %b %Y %T %p') as lightning_time FROM lightning, districts_s 
WHERE ST_CONTAINS(districts_s.SHAPE, Point(lightning.longitude, lightning.latitude)) AND lightning.height > 50

为了纠正错误,我从herelink 得到了解决方案,但没有结果。因为这也显示了一个名为

的错误

ST_Transform 不存在

我使用的是 PHP 5.6。任何解决方案都非常有帮助。

【问题讨论】:

    标签: php mysql codeigniter spatial


    【解决方案1】:

    您可以尝试使用 PHP 代码。

    $point = array(22.765863,75.887488);
    $vs = array();
    $polygonPoints = '[{"lat":22.765863133410004,"lng":75.88748805487819},{"lat":22.76631821037386,"lng":75.89153282607265},{"lat":22.76462650356429,"lng":75.89126460517116},{"lat":22.764082382883878,"lng":75.89017026389308},{"lat":22.76430992452311,"lng":75.88933341468044},{"lat":22.763815268301787,"lng":75.88875405753322},{"lat":22.764705648209898,"lng":75.8886253115005},{"lat":22.764438534847113,"lng":75.88744513953395},{"lat":22.765229980328275,"lng":75.88824980223842}]';
    
    
    $boundries = json_decode($polygonPoints);
    
    foreach ($boundries as $key => $val)
    {
        $polygon[$key] = array($val->lat,$val->lng);
    }
    
    // Check Point Inside Polygone
    
    $check = pointInPolygon($point, $polygon);
    if($check == true)
    {
        echo "This point inside in polygone";
    }
    function pointInPolygon($point, $vs)
    {
       $x = $point[0];
       $y = $point[1];
    
       $inside = false;
       for ($i = 0, $j = count($vs) - 1; $i < count($vs); $j = $i++) {
           $xi = $vs[$i][0];
           $yi = $vs[$i][1];
           $xj = $vs[$j][0];
           $yj = $vs[$j][1];
    
           $intersect = (($yi > $y) != ($yj > $y))
               && ($x < ($xj - $xi) * ($y - $yi) / ($yj - $yi) + $xi);
           if ($intersect) $inside = !$inside;
       }
    
       return $inside;;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      • 2014-04-26
      • 2022-10-07
      • 1970-01-01
      相关资源
      最近更新 更多