php兩點(diǎn)地理坐標(biāo)距離的計(jì)算方法
本文實(shí)例為大家分享了php計(jì)算兩點(diǎn)地理坐標(biāo)距離的具體代碼,供大家參考,具體內(nèi)容如下
功能:根據(jù)圓周率和地球半徑系數(shù)與兩點(diǎn)坐標(biāo)的經(jīng)緯度,計(jì)算兩點(diǎn)之間的球面距離。
獲取兩點(diǎn)坐標(biāo)距離:
<?php
/**
* 計(jì)算兩點(diǎn)地理坐標(biāo)之間的距離
* @param Decimal $longitude1 起點(diǎn)經(jīng)度
* @param Decimal $latitude1 起點(diǎn)緯度
* @param Decimal $longitude2 終點(diǎn)經(jīng)度
* @param Decimal $latitude2 終點(diǎn)緯度
* @param Int $unit 單位 1:米 2:公里
* @param Int $decimal 精度 保留小數(shù)位數(shù)
* @return Decimal
*/
function getDistance($longitude1, $latitude1, $longitude2, $latitude2, $unit=2, $decimal=2){
$EARTH_RADIUS = 6370.996; // 地球半徑系數(shù)
$PI = 3.1415926;
$radLat1 = $latitude1 * $PI / 180.0;
$radLat2 = $latitude2 * $PI / 180.0;
$radLng1 = $longitude1 * $PI / 180.0;
$radLng2 = $longitude2 * $PI /180.0;
$a = $radLat1 - $radLat2;
$b = $radLng1 - $radLng2;
$distance = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2),2)));
$distance = $distance * $EARTH_RADIUS * 1000;
if($unit==2){
$distance = $distance / 1000;
}
return round($distance, $decimal);
}
// 起點(diǎn)坐標(biāo)
$longitude1 = 113.330405;
$latitude1 = 23.147255;
// 終點(diǎn)坐標(biāo)
$longitude2 = 113.314271;
$latitude2 = 23.1323;
$distance = getDistance($longitude1, $latitude1, $longitude2, $latitude2, 1);
echo $distance.'m'; // 2342.38m
$distance = getDistance($longitude1, $latitude1, $longitude2, $latitude2, 2);
echo $distance.'km'; // 2.34km
?>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
PHP按符號截取字符串的指定部分的實(shí)現(xiàn)方法
字符串截取在php開發(fā)中是比較常用的,而且對于截取的需求也多種多樣,這篇文章主要介紹了PHP按符號截取字符串的指定部分 ,需要的朋友可以參考下2018-09-09
Laravel 5框架學(xué)習(xí)之向視圖傳送數(shù)據(jù)(進(jìn)階篇)
上篇文章我們介紹了Laravel5框架中如何向視圖中傳送數(shù)據(jù),今天我們來研究下如何向視圖中傳送array,非常的詳細(xì),推薦給有需要的小伙伴參考下。2015-04-04
laravel解決遷移文件一次刪除創(chuàng)建字段報(bào)錯的問題
Laravel路由設(shè)定和子路由設(shè)定實(shí)例分析
PHP基于進(jìn)程控制函數(shù)實(shí)現(xiàn)多線程
關(guān)于laravel5.5的定時任務(wù)詳解(demo)

