PHP判斷乙個點的經緯度是否在多邊形或圓內

2021-09-25 16:30:11 字數 2449 閱讀 2853

/**

* 判斷乙個座標是否在圓內

* 思路:判斷此點的經緯度到圓心的距離 然後和半徑做比較

* 如果此點剛好在圓上 則返回true

* @param $point ['lng'=>'','lat'=>''] array指定點的座標

* @param $circle array ['center'=>['lng'=>'','lat'=>''],'radius'=>''] 中心點和半徑

*/function

is_point_in_circle

($point

,$circle

)else

}/**

* 判斷乙個座標是否在乙個多邊形內(由多個座標圍成的)

* 基本思想是利用射線法,計算射線與多邊形各邊的交點,如果是偶數,則點在多邊形外,否則

* 在多邊形內。還會考慮一些特殊情況,如點在多邊形頂點上,點在多邊形邊上等特殊情況。

* @param $point 指定點座標

* @param $pts 多邊形座標 順時針方向

*/function

is_point_in_polygon

($point

,$pts

)$p2

=$pts[$i

%$n];

//right vertexif(

$p['lat'

]<

min(

$p1[

'lat'],

$p2[

'lat'])

||$p

['lat'

]>

max(

$p1[

'lat'],

$p2[

'lat'])

)if($p

['lat'

]>

min(

$p1[

'lat'],

$p2[

'lat'])

&&$p

['lat'

]<

max(

$p1[

'lat'],

$p2[

'lat'])

)if($p1

['lng']==

$p2[

'lng'])

else

}elseif(

$p['lng'

]<

$xinters)}

}}else

else}}

$p1=

$p2;

//next ray left point}if

($intersectcount%2

==0)else

}

測試**↓

<?php

$point=[

'lng'

=>

116.394299

,'lat'

=>

40.011674];

$circle=[

'center'

=>

['lng'

=>

116.12637

,'lat'

=>

40.114308],

'radius'

=>

46807.83038795571];

$convert

=new

convert()

;$bool

=$convert

->

is_point_in_circle

($point

,$circle);

//var_dump($bool);

$pts=[

['lng'

=>

115.934109

,'lat'

=>

40.124809],

['lng'

=>

116.554836

,'lat'

=>

40.177293],

['lng'

=>

116.620754

,'lat'

=>

39.783734],

['lng'

=>

116.054958

,'lat'

=>

39.809057]]

;$point=[

'lng'

=>

115.989864

,'lat'

=>

39.973272];

$bool

=$convert

->

is_point_in_polygon

($point

,$pts);

var_dump

($bool

);

判斷乙個點是否在一組經緯度包圍圈內

將判斷點經緯度塞入point2d.double中,將包圍圈放入點集之中。public static boolean isinpolygon arraylistbound,double pointlng,double pointlat return check point,pointlist 將點集中...

如何判斷乙個指定的經緯度點是否落在乙個多邊形內

1 理論支援 如果從需要判斷的點出發的一條射線與該多邊形的焦點個數為奇數,則該點在此多邊形內,否則該點在此多邊形外。射線不能與多邊形頂點相交 2 程式設計思路 該程式的思路是從a點出發向左做一條水平射線 平行於x軸,向x軸的反方向 判斷與各邊是否有焦點。dlon1,dlon2,dlat1,dlat2...

根據經緯度 角度 距離獲取另乙個點的經緯度

這就需要根據獲取到的經緯度獲取計算半徑內4個點的座標 計算方法 phppublic static function getrandlnglat lng,lat,angle,distance 其實高德地圖提供了方法,使用很簡單 amap.event.addlistener placesearch,ma...