-
Notifications
You must be signed in to change notification settings - Fork 145
/
location.php
94 lines (65 loc) · 2.71 KB
/
location.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php
include __DIR__ . "/vendor/autoload.php";
$config = [
'host' => '127.0.0.1',
'database' => 'test',
'username' => 'root',
'password' => 'root',
];
$db = new \PFinal\Database\Builder($config);
$all = $db->table('region')->findAll();
$all = array_column($all, null, 'id');
foreach ($all as $item) {
if(!empty($item['lng'])){
continue;
}
$ak = 'xxx';
$address = getFullName($item['id'], $all);
echo $address . "\r\n";
$url = 'http://api.map.baidu.com/geocoder/v2/?address=' . $address . '&output=json&ak=' . $ak;
//http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
//默认 bd09ll(百度经纬度坐标)
//lat 纬度值
//lng 经度值
//precise 位置的附加信息,是否精确查找。1为精确查找,即准确打点;0为不精确,即模糊打点(模糊打点无法保证准确度)。
//confidence 可信度,描述打点准确度,大于80表示误差小于100m。该字段仅作参考,返回结果准确度主要参考precise参数。
//level 能精确理解的地址类型,包含:UNKNOWN、国家、省、城市、区县、乡镇、村庄、道路、地产小区、商务大厦、政府机构、交叉路口、商圈、生活服务、休闲娱乐、餐饮、宾馆、购物、金融、教育、医疗 、工业园区 、旅游景点 、汽车服务、火车站、长途汽车站、桥 、停车场/停车区、港口/码头、收费区/收费站、飞机场 、机场 、收费处/收费站 、加油站、绿地、门址
//行政区划代码 adcode映射表 http://mapopen-pub-webserviceapi.bj.bcebos.com/geocoding/%E8%A1%8C%E6%94%BF%E5%8C%BA%E5%88%92%E6%B8%85%E5%8D%95%20V3.0%209.03.xlsx
$client = new \PFinal\Http\Client();
$response = $client->get($url);
if ($response->getStatusCode() != 200) {
echo 'error';
}
$json = $response->getBody();
$arr = json_decode($json, true);
file_put_contents('log.txt', $address . ' ' . $json . "\n", FILE_APPEND);
if (isset($arr['status']) && $arr['status'] == 0) {
$row = $db->table('region')
->wherePk($item['id'])
->update($arr['result']['location']);
if ($row != 1) {
echo 'db err';
exit;
}
} else {
echo $address;
echo $json;
exit;
}
}
echo "end";
function getFullName($code, $all)
{
$one = $all[$code];
$name = $one['name'];
if ($one['parent_id'] == '') {
return $name;
}
$parent = $all[$one['parent_id']];
$name = $parent['name'] . $name;
if ($parent['parent_id'] == '') {
return $name;
}
$pprent = $all[$parent['parent_id']];
return $pprent['name'] . $name;
}