Skip to content

Commit 081d13b

Browse files
committed
New feature: administrative region access
1 parent 5de4f91 commit 081d13b

File tree

6 files changed

+245
-0
lines changed

6 files changed

+245
-0
lines changed

readme.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
- [下载天地图切片](src/download_pic/pic_download.py)
1010
- download_pic 下载函数
1111
- merge_pic 合并函数
12+
- [天地图行政区获取](src/tianditu/ez_region.py)
13+
- download_region 行政区下载函数
1214
- [根据颜色进行分类提取](src/classify/groupIMG.py)
1315
- img_color_cov 提取函数
1416

resource/tianditu_zhongguo_region.json

Lines changed: 34 additions & 0 deletions
Large diffs are not rendered by default.

resource/tianditu_zhongguo_region_2.json

Lines changed: 34 additions & 0 deletions
Large diffs are not rendered by default.

src/tianditu/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#! /usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
# __file__: __init__.py
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
#! /usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
# __file__: administrative_region
4+
# 天地图行政区获取
5+
import datetime
6+
import requests
7+
import json
8+
import codecs
9+
import pymongo
10+
11+
key = "a4ee5c551598a1889adfabff55a5fc27"
12+
13+
client = pymongo.MongoClient(host='localhost', port=27017)
14+
15+
db = client.lvyou
16+
collection = db.tianditu
17+
18+
19+
def points_calc(shi, points):
20+
"""
21+
将文本坐标转换成浮点坐标
22+
:param shi: 市级行政区名称
23+
:param points: "116.403 39.972,116.402 39.97,116.405 39.97,116.405 39.964,"
24+
:return: [[x1,y1],[x2,y2]]
25+
"""
26+
x_list = []
27+
y_list = []
28+
for i in points:
29+
s = [x for x in i['region'].split(",")]
30+
s = [x.split(' ') for x in s]
31+
for j in s:
32+
x_list.append(eval(j[0]))
33+
y_list.append(eval(j[1]))
34+
35+
res = [[x, y] for x, y in zip(x_list, y_list)]
36+
37+
polygon = {'type': 'Polygon', 'coordinates': [res]}
38+
return polygon
39+
40+
41+
def xianggang_calc(chi):
42+
"""
43+
处理香港的数据
44+
:param chi:
45+
:return:
46+
"""
47+
48+
for i in chi['child']:
49+
sheng_point = i['points']
50+
sheng_name = i['name']
51+
sheng_reg = points_calc(sheng_name, sheng_point)
52+
i['geom_tey'] = sheng_reg
53+
54+
pass
55+
56+
57+
def do_zizhiqu(zz):
58+
"""
59+
处理自治区
60+
:param zz: 自治区
61+
:return:
62+
"""
63+
for ii in zz:
64+
# 市区
65+
s = calc_rege(ii)
66+
ii['geom_tey'] = s
67+
cs = ii.get('child')
68+
if cs:
69+
for c in cs:
70+
saa = calc_rege(c)
71+
c['geom_tey'] = saa
72+
pass
73+
74+
75+
def calc_rege(chi):
76+
"""
77+
计算区域
78+
:param chi:
79+
:return:
80+
"""
81+
aomen = chi['name']
82+
aomen_point = chi.get('points')
83+
if aomen_point:
84+
aomen_reg = points_calc(aomen, aomen_point)
85+
return aomen_reg
86+
else:
87+
return None
88+
89+
90+
def run():
91+
"""
92+
运行函数
93+
:return:
94+
"""
95+
r = requests.get(
96+
'http://api.tianditu.gov.cn/administrative?postStr={"searchWord":"中国","searchType":"1","needSubInfo":"true","needAll":"true","needPolygon":"true","needPre":"true"}&tk=a4ee5c551598a1889adfabff55a5fc27')
97+
98+
data = json.loads(r.text)
99+
100+
data['spider_time'] = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S')
101+
data = data['data']
102+
for item in data:
103+
104+
child_list = item['child']
105+
106+
for chi in child_list:
107+
# 处理的是省
108+
chi_reg = calc_rege(chi)
109+
chi['geom_tey'] = chi_reg
110+
if chi['name'] == '澳门':
111+
aomen_reg = calc_rege(chi)
112+
chi['geom_tey'] = aomen_reg
113+
elif chi['name'] == '香港':
114+
xianggang_calc(chi)
115+
else:
116+
chi_chi = chi['child']
117+
sheng_point = chi['points']
118+
sheng_name = chi['name']
119+
120+
if '自治区' in sheng_name:
121+
do_zizhiqu(chi_chi)
122+
123+
else:
124+
for ii in chi_chi:
125+
# 市区
126+
s = calc_rege(ii)
127+
ii['geom_tey'] = s
128+
129+
cs = ii.get('child')
130+
if cs:
131+
for c in cs:
132+
saa = calc_rege(c)
133+
c['geom_tey'] = saa
134+
135+
collection.insert(chi)
136+
137+
pass
138+
139+
140+
if __name__ == '__main__':
141+
run()

src/tianditu/ez_region.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#! /usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
# __file__: ez_region
4+
5+
import requests
6+
import json
7+
import pymongo
8+
9+
def download_region():
10+
"""
11+
简易的天地图行政区下载
12+
:return: null
13+
"""
14+
15+
client = pymongo.MongoClient(host='localhost', port=27017)
16+
17+
db = client.lvyou
18+
collection = db.tianditu_zhongguo_region
19+
20+
r = requests.get(
21+
'http://api.tianditu.gov.cn/administrative?postStr={"searchWord":"中国","searchType":"1","needSubInfo":"true","needAll":"true","needPolygon":"true","needPre":"true"}&tk=a4ee5c551598a1889adfabff55a5fc27')
22+
23+
data = json.loads(r.text)
24+
data = data['data']
25+
for item in data:
26+
child_list = item['child']
27+
for chi in child_list:
28+
collection.insert(chi)
29+
30+
if __name__ == '__main__':
31+
download_region()

0 commit comments

Comments
 (0)