网站功能能获取查看人地理位置,网站会员查看人在线支付网站产品之后。可以点击取货位置。点击之后就近出来几个购物人附近的取货位置。。后台能随时添加取货地点。并同步显示在网站前附近取货点。
百度地图API的调用需要申请KEY,这里就不具体介绍了,直接贴上本人写了两个关键方法,为了方便前台调用,返回数据采用以下格式
{
address: "北京市海淀区西二旗北路",
province: "北京市",
city: "北京市",
street: "西二旗北路",
street_number: "",
city_code: 131,
lng: 116.3207676804,
lat: 40.064084055578
}
核心类
<?php
/**
* @author xialei <xialeistudio@gmail.com>
*/
class map
{
private static $_instance;
const REQ_GET = 1;
const REQ_POST = 2;
/**
* 单例模式
* @return map
*/
public static function instance()
{
if (!self::$_instance instanceof self)
{
self::$_instance = new self;
}
return self::$_instance;
}
/**
* 执行CURL请求
* @author: xialei<xialeistudio@gmail.com>
* @param $url
* @param array $params
* @param bool $encode
* @param int $method
* @return mixed
*/
private function async($url, $params = array(), $encode = true, $method = self::REQ_GET)
{
$ch = curl_init();
if ($method == self::REQ_GET)
{
$url = $url . '?' . http_build_query($params);
$url = $encode ? $url : urldecode($url);
curl_setopt($ch, CURLOPT_URL, $url);
}
else
{
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
}
curl_setopt($ch, CURLOPT_REFERER, '百度地图referer');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$resp = curl_exec($ch);
curl_close($ch);
return $resp;
}
/**
* ip定位
* @param string $ip
* @return array
* @throws Exception
*/
public function locationByIP($ip)
{
//检查是否合法IP
if (!filter_var($ip, FILTER_VALIDATE_IP))
{
throw new Exception('ip地址不合法');
}
$params = array(
'ak' => '百度地图API KEY',
'ip' => $ip,
'coor' => 'bd09ll'//百度地图GPS坐标
);
$api = 'http://api.map.baidu.com/location/ip';
$resp = $this->async($api, $params);
$data = json_decode($resp, true);
//有错误
if ($data['status'] != 0)
{
throw new Exception($data['message']);
}
//返回地址信息
return array(
'address' => $data['content']['address'],
'province' => $data['content']['address_detail']['province'],
'city' => $data['content']['address_detail']['city'],
'district' => $data['content']['address_detail']['district'],
'street' => $data['content']['address_detail']['street'],
'street_number' => $data['content']['address_detail']['street_number'],
'city_code' => $data['content']['address_detail']['city_code'],
'lng' => $data['content']['point']['x'],
'lat' => $data['content']['point']['y']
);
}
/**
* GPS定位
* @param $lng
* @param $lat
* @return array
* @throws Exception
*/
public function locationByGPS($lng, $lat)
{
$params = array(
'coordtype' => 'wgs84ll',
'location' => $lat . ',' . $lng,
'ak' => '百度地图API KEY',
'output' => 'json',
'pois' => 0
);
$resp = $this->async('http://api.map.baidu.com/geocoder/v2/', $params, false);
$data = json_decode($resp, true);
if ($data['status'] != 0)
{
throw new Exception($data['message']);
}
return array(
'address' => $data['result']['formatted_address'],
'province' => $data['result']['addressComponent']['province'],
'city' => $data['result']['addressComponent']['city'],
'street' => $data['result']['addressComponent']['street'],
'street_number' => $data['result']['addressComponent']['street_number'],
'city_code'=>$data['result']['cityCode'],
'lng'=>$data['result']['location']['lng'],
'lat'=>$data['result']['location']['lat']
);
}
}
调用方法就不说了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。