PHP判斷地理圍欄是否有重合

2021-09-25 19:45:50 字數 3033 閱讀 3540

/* 判斷地理圍欄是否有重合

* $points 二維陣列內含經緯度座標

* $arr 二維陣列,元素內為json格式的二維陣列

* return bool true為有重合 false為沒有重合

**/function

in_geo

(array

$points

,array

$arr)if

(empty

($arr)||

!is_array

($arr))

# 處理新資料

$new_points=[

];foreach

($points

as$k

=>$v)

# 獲取新資料的中心點

$center

=$this

->

getcenterfromdegrees

($new_points);

# 迴圈和已存在的區域中心點比對

foreach

($arr

as$key

=>

$val

)# 將陣列由近到遠排序

$arr

=$this

->

array_sort

($arr);

# 取最近的一條資料

$new_arr

=json_decode

($arr[0

]['points'],

true);

# 判斷新資料是否被包含在乙個區域中

foreach

($new_arr

as$kk

=>

$vv)

for($p=

0;$p<=

count

($points)-

1;$p++)}

# 獲取多邊形線段陣列

$arr_line

=$this

->

changeline

($new_arr);

# 獲取新資料線段陣列

$points_line

=$this

->

changeline

($points);

$num=0

;for($i

=0;$i

<=

count

($points_line)-

1;$i++)}

}return

$num

;}

[getcenterfromdegrees方法]

/* * 處理陣列刪除不必要的元素並獲取中心點座標

* $data 二維陣列

* return 陣列中必要的元素和中心點座標

* **/

function

update_array

(array

$data)}

else

else

$data[$k

][0]

=$data[$k

]['latitude'];

$data[$k

][1]

=$data[$k

]['longitude'];

unset

($data[$k

]['latitude'])

;unset

($data[$k

]['longitude'])

;}}return

$this

->

getcenterfromdegrees

($data);

}[getdistance方法]

/* * 對陣列根據距離排序

* **/

function

array_sort

(array

$data=[

])# 判斷是否為陣列if(

!is_array

($data))

for($i=

0;$i<

count

($data);

$i++)}

if($data[$i

]['range'

]<1)

else

}return

$data;}

[in_fences方法]

/* * 將多邊形拆分為多個線段演算法

* params $arr 需要進行拆解的二維陣列

* return array 返回三維陣列

* **/

function

changeline

(array

$arr)if

(count

($arr)==

1)for($i=

0;$i<

count

($arr)-

1;$i++)}

return

$data;}

//判斷兩多邊形線段是否相交

function

issegmentsintersectant

($sega

,$segb

)$cda=(

$segb[0

]['x']

-$sega[0

]['x'])*

($segb[1

]['y']

-$sega[0

]['y'])-

($segb[0

]['y']

-$sega[0

]['y'])*

($segb[1

]['x']

-$sega[0

]['x']);

$cdb

=$cda

+$abc

-$abd

;return!(

$cda

*$cdb

>=0)

;}

判斷兩個矩形是否有重合部分

最近在做人工智慧專案,需要對兩個矩形是否有重合做出判讀 但注意的是,不是判斷兩個檢測目標是否重合,檢測目標的矩形只要左上角點和右下角點就可表示乙個矩形,判斷是否重合比較簡單,但是現在是兩個矩形是有一定旋轉角度的,旋轉角度不定,這樣就沒法像檢測目標那樣判斷了。目前使用四個點座標表示乙個矩形 判斷分兩個...

php 判斷是否有環存在

如果乙個鍊錶存在迴圈,則代表該鍊錶有環,其中,可能是部分迴圈,也可能是首尾相接的迴圈鍊錶,如下圖 在後面形成環的單鏈表 首尾相接的迴圈單鏈表 解析這裡我們還需要用到快慢指標,快慢指標同時從煉表頭出發,快指標每次走2步,慢指標每次走1步,當快指標走到了末尾時,代表該鍊錶不是環形鍊錶 反之,當快指標追上...

sql 判斷兩個時間段是否有重合,是否存在交集

總結起來就一句話 最小值小於最大值並且最大值大於最小值,則一定重疊。我的使用場景 a 表 將時間有交叉的資料查出來 我的演算法 start time,end time 1 and 2 1 剔除完全相同 a1.start time a2.start time and a1.end time a2.en...