经过百度地图接口,详细地址获取经纬度,并根据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帐号升级成开发者帐号以后,距离忽然出现,估计是百度地图升级或者是开发者帐号的特殊权益定位更精确
相关文章
相关标签/搜索