經過百度地圖接口,詳細地址獲取經緯度,並根據ip地址定位算出目標物的距離

//先所有轉成經緯度,而後計算距離
private function userDistance($list)
{
$user_ip = \CommonClass::getRealIp();//獲取客戶端IP
if ($user_ip != '127.0.0.1') {
$user_ip = \CommonClass:: get_lat_and_lng_ByIP($user_ip);
foreach ($list as $k => $v) {
$list[$k]['distance'] = number_format((\CommonClass::getDistance($user_ip['lat'], $user_ip['lng'], $v['lat'], $v['lng'])) / 1000, 1);
$list[$k]['distance'] = str_replace(',', '', $list[$k]['distance']);
}
}
return $list;
}

//根據地址獲取經緯度
private function address($data)
{
foreach ($data as $k => $v) {
if (empty($v['province_name']) || empty($v['city_name'])) {
$data[$k]['lat'] = '';
$data[$k]['lng'] = '';
} else {
$address = \CommonClass:: addresstolatlag($v['province_name'] . $v['city_name'] . $v['area_name'] . $v['address']);
$data[$k]['lat'] = $address['lat'];
$data[$k]['lng'] = $address['lng'];
}
}
return $data;
}
//根據IP獲取經緯度
static function get_lat_and_lng_ByIP($ip)
{

if (empty($ip)) {
return 'IP不能爲空';
}
$content = file_get_contents("http://api.map.baidu.com/location/ip?ak=y5p0BQ0IeG5IeWdOcyXGMEizLT86jUVK&services=&t=20170717103214&ip={$ip}&coor=bd09ll");
$json = json_decode($content, true);
$lng = $json['content']['point']['x'];//提取經度數據

$lat = $json['content']['point']['y'];//提取緯度數據
$arr = ['lng' => $lng, 'lat' => $lat];
return $arr;
}
//根據地址獲取經緯度static function addresstolatlag($address){    $newdata = urlencode($address);    $url = "http://api.map.baidu.com/geocoder/v2/?address={$newdata}&output=json&ak=Ikk6ShdO60DGbRhbOCSm4rpmhWwqoQxi";    $address_data = file_get_contents($url);    $json_data = json_decode($address_data);    $lng = $json_data->result->location->lng;    $lat = $json_data->result->location->lat;    $arr = ['lng' => $lng, 'lat' => $lat];;    return $arr;}純用php計算距離和經緯度,不用集成地圖在數據庫存經緯度的好處,可是若是提供給app數據,仍是要存經緯度以前發現 同市根據ip定位算距離都爲0,可是自從百度api帳號升級成開發者帳號以後,距離忽然出現,估計是百度地圖升級或者是開發者帳號的特殊權益定位更精確
相關文章
相關標籤/搜索