/**
* 判斷乙個座標是否在圓內
* 思路:判斷此點的經緯度到圓心的距離 然後和半徑做比較
* 如果此點剛好在圓上 則返回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...