### 数据清洗(将没有位置信息的数据删除)
~~~
DELETE FROM we_user WHERE province = '' OR city = ''
DELETE FROM we_user_count WHERE lng = '' OR lat = ''
~~~
> 由于部分好友未设置地理位置信息,部分好友将地理位置信息设置成国外的,而百度地图地理编码服务只对国内地理位置进行地理编码。因此将这两种数据清除。
* * * * *
### 地理位置解析(thinkphp5调用[百度地理编码服务](http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding))
~~~
public function index()
{
$url = 'http://api.map.baidu.com/geocoder/v2/'; //请求api
$ak = '2qkjnM1Bpkac4825hyth9mGzU9xAGtDt'; //appkey
$location = Db::name('user')->field(['id','province','city'])->select();
foreach ($location as $item) {
$province = $item['province'];
$city = $item['city'];
$api_url = "$url?address=$province.$city&output=json&ak=$ak&callback=showLocation";
urlencode($api_url);
$res = $this->httpGet2($api_url);
if ($res && !empty($res['result'])) {
$res2 = Db::name('user')->where('id',$item['id'])->update([
'lng' => $res['result']['location']['lng'],
'lat' => $res['result']['location']['lat'],
]);
if ($res2) {
echo '更新成功!';
}
}
}
~~~
* * * * *
### 部分结果如下:
![](https://box.kancloud.cn/33098721c96eec7481e615b3be70951c_827x522.png)
* * * * *
### 统计不同地区出现的人次(基于[thinkphp5](http://www.thinkphp.cn/))
~~~
//统计同一地区好友出现的次数
public function count()
{
$sql = "SELECT id,lng,lat,COUNT('lng') as 'count' FROM we_user GROUP BY lng";
$res = Db::query($sql);
foreach ($res as $item) {
$data = [
'user_id' => $item['id'],
'lng' => $item['lng'],
'lat' => $item['lat'],
'count' => $item['count']
];
$res = Db::name('user_count')->insert($data);
if ($res) {
echo "插入成功!";
}
}
}
~~~
* * * * *
> 一点小改动:由于我的好友大多分布在陇南市和兰州市,与其它市的数量相差较大,成图效果不理想,因此,调整了部分市的好友数量。
[TOC]