簡體   English   中英

如何在PHP mysql中檢查天氣點是否在多邊形內

[英]How to check weather a point is inside a polygon or not in PHP mysql

我正在嘗試獲取形狀文件中的點。 我嘗試了Spatial函數,它顯示了一個錯誤,稱為

3033-二進制幾何函數st_contains給出了兩個不同條紋的幾何: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

為了糾正錯誤,我從這里獲得了解決方案,但此鏈接沒有結果。 因為這也顯示了一個錯誤

ST_Transform不存在

我正在使用PHP 5.6。 任何解決方案都非常有幫助。

您可以嘗試使用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;;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM