Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on May 25, 2022. It is now read-only.

Commit 58f08df

Browse files
committed
Update BPC
1 parent 8490880 commit 58f08df

File tree

7 files changed

+73
-152
lines changed

7 files changed

+73
-152
lines changed

‎projects/Baidu_POI_crawl/README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Script Title
22

33
<!--Remove the below lines and add yours -->
4-
Crawl the POI in the specified area through Baidu map API.
4+
Crawl the POI in the city through Baidu map API.
55

66
### Prerequisites
77
<!--Remove the below lines and add yours -->
@@ -14,11 +14,15 @@ Crawl the POI in the specified area through Baidu map API.
1414
<!--Remove the below lines and add yours -->
1515

1616
1. `cd python-mini-projects\projects\Baidu_POI_crawl`
17-
2. `python main.py --ak yours_ak --range x y x y --poi poi_name`
17+
2. `python main.py --ak yours_ak --city city_name --poi poi_name`
1818

1919
### Screenshot/GIF showing the sample use of the script
20+
2021
<!--Remove the below lines and add yours -->
21-
Add a jpeg/png/gif file here.
22+
23+
![image-20211117172514622](https://user-images.githubusercontent.com/71769312/142175449-294daf40-413a-43df-aa3a-8d99a203afa9.png)
24+
25+
![UXGOS6ドルWMD)`{XQ8ドルYK}7WU](https://user-images.githubusercontent.com/71769312/142175459-8f10d1c4-5c5d-4754-9fd5-d5ec58a79081.png)
2226

2327
## *Author Name*
2428

1.41 KB
Binary file not shown.

‎projects/Baidu_POI_crawl/main.py

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,25 @@
11
import os
22
import os.path as osp
3-
import math
4-
import time
5-
from util import wgs84_to_baidu, get_rectangle, get_baidu_poi
3+
from util import get_baidu_poi
64
import argparse
75

86

97
def run(args):
108
baidu_web_ak = args.ak
11-
wgs_l_x, wgs_l_y, wgs_r_x, wgs_r_y = args.range
12-
kernel_x, kernel_y = args.ksize
13-
rec_index = args.idx
9+
city_str = args.city
1410
roi_key = args.poi
1511
output = args.save
1612
if not osp.exists(output):
1713
os.makedirs(output)
18-
rec_index -= 1
19-
l_x, l_y = wgs84_to_baidu(wgs_l_x, wgs_l_y, baidu_web_ak)
20-
r_x, r_y = wgs84_to_baidu(wgs_r_x, wgs_r_y, baidu_web_ak)
21-
print("lonlat of the upper right point: ", l_x, l_y)
22-
print("lonlat of the lower left point: ", r_x, r_y)
23-
num_x = math.ceil((r_x - l_x) / kernel_x)
24-
num_y = math.ceil((r_y - l_y) / kernel_y)
25-
num_rec = num_x * num_y
26-
print("number of grids: ", num_rec)
27-
for idx in range(rec_index, num_rec):
28-
rec_str = get_rectangle(l_x, l_y, r_x, r_y, kernel_x, kernel_y, idx)
29-
print("No ", (idx+1), ", current area coordinates: ", rec_str)
30-
get_baidu_poi(roi_key, rec_str, baidu_web_ak, idx, output)
31-
print("current area completed")
32-
time.sleep(1)
14+
get_baidu_poi(roi_key, city_str, baidu_web_ak, output)
15+
print("current area completed")
3316

3417

3518
parser = argparse.ArgumentParser(description="input parameters")
3619
parser.add_argument("--ak", type=str, required=True, help="Baidu web ak")
37-
parser.add_argument("--range", type=float,nargs='+', required=True, help="Latlon of the lower left point and latlon of the upper right point")
20+
parser.add_argument("--city", type=str, required=True, help="City name")
3821
parser.add_argument("--poi", type=str, required=True, help="POI key")
3922
parser.add_argument("--save", type=str, default="output", help="Save path")
40-
parser.add_argument("--ksize", type=float, nargs='+', default=[0.5, 0.5])
41-
parser.add_argument("--idx", type=int, default=1)
4223

4324

4425
if __name__ == "__main__":
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2021年11月17日-17-36-18 成都 3
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
四川大学(望江校区),104.090633,30.637031,武侯区,四川省成都市武侯区一环路南一段24号
2+
四川大学(江安校区),104.005145,30.562814,双流区,成都市双流区川大路二段2号
3+
电子科技大学(沙河校区),104.107198,30.681868,成华区,四川省成都市成华区建设北路二段4号
4+
成都大学,104.196613,30.656051,龙泉驿区,四川省成都市龙泉驿区成洛大道2025号
5+
西南民族大学(武侯校区),104.055946,30.645411,武侯区,四川省成都市武侯区一环路南四段16号
6+
西南财经大学(柳林校区),103.827675,30.687832,温江区,成都市温江区柳台大道555号
7+
西南交通大学(九里校区),104.059439,30.704977,金牛区,四川省成都市金牛区二环路北一段111号
8+
电子科技大学(清水河校区),103.937404,30.756035,郫都区,四川省成都市高新区西源大道2006号
9+
西南交通大学(犀浦校区),103.993214,30.770399,郫都区,四川省成都市郫都区犀安路999号
10+
成都中医药大学(十二桥校区),104.050309,30.672574,金牛区,四川省成都市金牛区十二桥路37号
11+
四川农业大学(都江堰校区),103.629275,31.009812,都江堰市,四川省成都市都江堰市建设路288号
12+
四川大学(华西校区),104.075894,30.646763,武侯区,成都市武侯区人民南路三段17号
13+
成都艺术职业大学,103.892092,30.493563,新津区,四川省成都市新津区花源街道白云大道115号
14+
电子科技大学(九里堤校区),104.055669,30.716153,金牛区,成都市金牛区九里堤西路8号
15+
电子科技大学继续教育学院,104.103193,30.679693,成华区,四川省成都市成华区一环路东一段240号
16+
电子科技大学沙河校区-逸夫楼,104.109665,30.680913,成华区,成都市成华区建设北路二段4号电子科技大学沙河校区
17+
成都大学-四川抗菌素工业研究所,104.177919,30.694508,成华区,成都市成华区华冠路168号
18+
我的大学,104.197398,30.828142,新都区,成都市新都区同仁路199号
19+
成都中医药大学附属医院,104.048468,30.673511,金牛区,成都市金牛区十二桥路39-41号
20+
电子科技大学西区科技园,103.98074,30.739837,郫都区,四川省成都市郫都区天辰路88号
21+
成都大学-图书馆,104.195601,30.656236,龙泉驿区,四川省成都市龙泉驿区十陵镇成洛大道
22+
成都广播电视大学继续教育学院(建设北路一段),104.102742,30.677484,成华区,成都市成华区建设北路一段7号
23+
西南石油大学新体测中心,104.194813,30.838617,新都区,成都市新都区鸿运大道东段西南石油大学(成都校区)
24+
成都理工大学东苑-9栋,104.158206,30.688295,成华区,成都市成华区民智巷理工东苑-西区
25+
成都广播电视大学直属城东学院-教学楼1号楼,104.102347,30.677874,成华区,成都市成华区建设北路一段7号
26+
电子科技大学附属实验小学(沙河校区),104.10353,30.683807,成华区,四川省成都市成华区府青路2段-3号-青1号
27+
成都大学附属中学校,104.098172,30.688535,成华区,四川省成都市成华区府青路街道三友路135号
28+
成都理工大学附属小学,104.153179,30.696257,成华区,四川省成都市成华区民兴东路62号
29+
西南财经大学,104.442003,30.862562,金堂县,成都市金堂县幸福横街百合苑(幸福横路)
30+
电子科技大学实验幼儿园,104.10855,30.684714,成华区,成都市成华区建设北路二段5号东院沙河缘15号
31+
四川师范大学附属天府欧城幼稚园,104.261685,30.898376,青白江区,成都市青白江区同华大道与新河路交叉路口往西北约260米
32+
西南石油大学学生公寓-4号楼,104.19334,30.829785,新都区,四川省成都市新都区大学路160号
33+
西南石油大学教工41幢,104.188074,30.83157,新都区,成都市新都区蜀龙大道北段香城学府
34+
西南石油大学教工42幢,104.188467,30.831576,新都区,成都市新都区蜀龙大道北段香城学府
35+
西南石油大学(成都校区)教工宿舍-12幢,104.188587,30.830054,新都区,成都市新都区南环路香城学府
36+
西南石油大学材料科学与工程学院,104.190255,30.837702,新都区,成都市新都区蜀龙大道北段西南石油大学(成都校区)
37+
西南石油大学教工35幢,104.187797,30.832034,新都区,成都市新都区蜀龙大道北段香城学府
38+
成都医学院第一附属医院-大学生宿舍,104.165693,30.836846,新都区,成都市新都区新新街二巷成都医学院第一附属医院北侧
39+
成都医学院第一附属医院大学生宿舍-33幢,104.165218,30.836607,新都区,四川省成都市新都区成都医学院第一附属医院大学生宿舍33幢
40+
电子科技大学医院,104.11028,30.68007,成华区,成都市成华区建设北路二段4号电子科技大学沙河校区
41+
西南石油大学(成都校区)教工宿舍-2幢,104.186624,30.828824,新都区,成都市新都区嘉陵路西南石油大学(成都校区)教工宿舍2幢
42+
四川农业大学都江堰校区-教职工住宅第5幢,103.630269,31.010702,都江堰市,四川省成都市都江堰市柳岸路附近四川农业大学都江堰校区教职工住宅第5幢
43+
四川农业大学都江堰校区第一教学楼-侧楼,103.627828,31.010159,都江堰市,四川省成都市都江堰市建设路288号
44+
四川农业大学都江堰校区学生公寓第-1幢,103.630687,31.009693,都江堰市,四川省成都市都江堰市观景路41号附近四川农业大学都江堰校区学生公寓第1幢
45+
四川农业大学-第二林业勘察设计研究所,103.626795,31.010544,都江堰市,成都市都江堰市建设路288号
46+
西华大学老川东食品科研中心,104.221373,30.822995,新都区,成都市新都区君跃路四川老川东食品有限公司
47+
西南石油大学成都校区油气钻井技术国家工程实验室钻头研究室,104.190204,30.836932,新都区,成都市新都区蜀龙大道北段西南石油大学(成都校区)
48+
四川师范大学附属田童幼儿园,103.630805,30.97236,都江堰市,成都市都江堰市幸福镇灌温路78号
49+
四川农业大学都江堰校区-教职工住宅第14幢,103.628016,31.012494,都江堰市,成都市都江堰市建设路288号四川农业大学(都江堰校区)
50+
四川西南交通大学希望学院-图书馆,104.471273,30.85726,金堂县,四川省成都市金堂县学府路8号
51+
四川农业大学都江堰校区-教职工住宅第7幢,103.630133,31.010203,都江堰市,成都市都江堰市建设路288号四川农业大学(都江堰校区)
52+
西南石油大学教工-28幢,104.187065,30.832293,新都区,成都市新都区西南石油大学(成都校区)教工宿舍28幢
53+
西华大学彭州校区-女生公寓,103.949394,30.98662,彭州市,成都市彭州市南大街168号
54+
四川农业大学都江堰校区-研究生公寓,103.632825,31.010149,都江堰市,成都市都江堰市平武巷柳岸公寓东南门南侧约90米
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
urllib
21
requests
32
json

‎projects/Baidu_POI_crawl/util.py

Lines changed: 6 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -1,132 +1,15 @@
1-
from urllib.request import urlopen
21
import requests
32
import json
43
import time
5-
import math
6-
7-
8-
# coordinate system: WGS842Baidu
9-
def wgs84_to_baidu(x, y, baidu_ak):
10-
"""
11-
inputs:
12-
x: longitude in WGS84
13-
y: latitude in WGS84
14-
baidu_ak: baidu web API AK
15-
outputs:
16-
tuple: lonlat in baidu coordinate system
17-
"""
18-
data = str(x) + "," + str(y)
19-
url = "http://api.map.baidu.com/geoconv/v1/?coords=" + data + "&from=1&to=5&ak=" + baidu_ak
20-
req = urlopen(url)
21-
res = req.read().decode()
22-
temp = json.loads(res)
23-
baidu_x = 0
24-
baidu_y = 0
25-
if temp["status"] == 0:
26-
baidu_x = temp["result"][0]["x"]
27-
baidu_y = temp["result"][0]["y"]
28-
else:
29-
print(temp["message"])
30-
return (baidu_x, baidu_y)
31-
32-
33-
# gets the current small area
34-
def get_rectangle(l_x, l_y, r_x, r_y, kernel_x, kernel_y, index):
35-
"""
36-
inputs:
37-
l_x: lower left quarter"s longitude in baidu coordinate system
38-
l_y: lower left quarter"s latitude in baidu coordinate system
39-
r_x: upper right corner"s longitude in baidu coordinate system
40-
r_y: upper right corner"s latitude in baidu coordinate system
41-
kernel_x: kernel size in longitude
42-
kernel_y: kernel size in latitude
43-
index: current index
44-
outputs:
45-
string: sliding window range for API (bottom left and top right mode)
46-
"""
47-
num_x = math.ceil((r_x - l_x) / kernel_x)
48-
num_y = math.ceil((r_y - l_y) / kernel_y)
49-
left_x = l_x + kernel_x * (index % num_x)
50-
left_y = l_y + kernel_y * (index // num_x)
51-
right_x = (left_x + kernel_x)
52-
right_y = (left_y + kernel_y)
53-
rec_str = str(left_y) + "," + str(left_x) + "," + str(right_y) + "," + str(right_x) # latitude, longitude
54-
return rec_str
55-
56-
57-
x_pi = 3.14159265358979324 * 3000.0 / 180.0
58-
pi = 3.1415926535897932384626
59-
a = 6378245.0
60-
ee = 0.00669342162296594323
61-
62-
63-
def bd09_to_gcj02(bd_lon, bd_lat):
64-
x = bd_lon - 0.0065
65-
y = bd_lat - 0.006
66-
z = math.sqrt(x * x + y * y) - 0.00002 * math.sin(y * x_pi)
67-
theta = math.atan2(y, x) - 0.000003 * math.cos(x * x_pi)
68-
gg_lng = z * math.cos(theta)
69-
gg_lat = z * math.sin(theta)
70-
return [gg_lng, gg_lat]
71-
72-
73-
def gcj02_to_wgs84(lng, lat):
74-
if out_of_china(lng, lat):
75-
return [lng, lat]
76-
dlat = _transformlat(lng - 105.0, lat - 35.0)
77-
dlng = _transformlng(lng - 105.0, lat - 35.0)
78-
radlat = lat / 180.0 * pi
79-
magic = math.sin(radlat)
80-
magic = 1 - ee * magic * magic
81-
sqrtmagic = math.sqrt(magic)
82-
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi)
83-
dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * pi)
84-
mglat = lat + dlat
85-
mglng = lng + dlng
86-
return [lng * 2 - mglng, lat * 2 - mglat]
87-
88-
89-
def bd09_to_wgs84(bd_lon, bd_lat):
90-
lon, lat = bd09_to_gcj02(bd_lon, bd_lat)
91-
return gcj02_to_wgs84(lon, lat)
92-
93-
94-
def _transformlat(lng, lat):
95-
ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + \
96-
0.1 * lng * lat + 0.2 * math.sqrt(math.fabs(lng))
97-
ret += (20.0 * math.sin(6.0 * lng * pi) + 20.0 *
98-
math.sin(2.0 * lng * pi)) * 2.0 / 3.0
99-
ret += (20.0 * math.sin(lat * pi) + 40.0 *
100-
math.sin(lat / 3.0 * pi)) * 2.0 / 3.0
101-
ret += (160.0 * math.sin(lat / 12.0 * pi) + 320 *
102-
math.sin(lat * pi / 30.0)) * 2.0 / 3.0
103-
return ret
104-
105-
106-
def _transformlng(lng, lat):
107-
ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + \
108-
0.1 * lng * lat + 0.1 * math.sqrt(math.fabs(lng))
109-
ret += (20.0 * math.sin(6.0 * lng * pi) + 20.0 *
110-
math.sin(2.0 * lng * pi)) * 2.0 / 3.0
111-
ret += (20.0 * math.sin(lng * pi) + 40.0 *
112-
math.sin(lng / 3.0 * pi)) * 2.0 / 3.0
113-
ret += (150.0 * math.sin(lng / 12.0 * pi) + 300.0 *
114-
math.sin(lng / 30.0 * pi)) * 2.0 / 3.0
115-
return ret
116-
117-
118-
def out_of_china(lng, lat):
119-
return not (lng > 73.66 and lng < 135.05 and lat > 3.86 and lat < 53.55)
1204

1215

122-
# call API for small window
123-
def get_baidu_poi(roi_key, rec_str, baidu_ak, index, output):
6+
# call API
7+
def get_baidu_poi(roi_key, city_str, baidu_ak, output):
1248
"""
1259
inputs:
12610
roi_key: poi name
127-
rec_str: coordinate of sliding window
11+
city_str: city name
12812
baidu_ak: baidu web API AK
129-
index: index of sliding window
13013
output: file save path
13114
"""
13215
now_time = time.strftime("%Y-%m-%d")
@@ -136,7 +19,7 @@ def get_baidu_poi(roi_key, rec_str, baidu_ak, index, output):
13619
while True:
13720
try:
13821
URL = "http://api.map.baidu.com/place/v2/search?query=" + roi_key + \
139-
"&bounds=" + rec_str + \
22+
"&region=" + city_str + \
14023
"&output=json" + \
14124
"&ak=" + baidu_ak + \
14225
"&scope=2" + \
@@ -145,7 +28,7 @@ def get_baidu_poi(roi_key, rec_str, baidu_ak, index, output):
14528
resp = requests.get(URL)
14629
res = json.loads(resp.text)
14730
if len(res["results"]) == 0:
148-
logfile.writelines(time.strftime("%Y-%m-%d-%H-%M-%S") + " stop " + str(index) +" "+rec_str + " " + str(page_num) + "\n")
31+
logfile.writelines(time.strftime("%Y-%m-%d-%H-%M-%S") + " " + city_str + " " + str(page_num) + "\n")
14932
break
15033
else:
15134
for r in res["results"]:
@@ -154,12 +37,11 @@ def get_baidu_poi(roi_key, rec_str, baidu_ak, index, output):
15437
j_lon = r["location"]["lng"]
15538
j_area = r["area"]
15639
j_add = r["address"]
157-
j_lon, j_lat = bd09_to_wgs84(j_lon, j_lat)
15840
j_str = str(j_name) + "," + str(j_lon) + "," + str(j_lat) + "," + str(j_area) + "," + str(j_add) + "\n"
15941
file.writelines(j_str)
16042
page_num += 1
16143
time.sleep(1)
16244
except:
16345
print("except")
164-
logfile.writelines(time.strftime("%Y-%m-%d-%H-%M-%S") + " except "+str(index) +" "+rec_str + " " + str(page_num) + "\n")
46+
logfile.writelines(time.strftime("%Y-%m-%d-%H-%M-%S") + " "+city_str + " " + str(page_num) + "\n")
16547
break

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /