├── COVID-19_Tracking ├── app.py ├── spider.py ├── static │ ├── css │ │ └── main.css │ └── js │ │ ├── china.js │ │ ├── controller.js │ │ ├── ec_center.js │ │ ├── ec_left1.js │ │ ├── ec_left2.js │ │ ├── ec_right1.js │ │ ├── ec_right2.js │ │ ├── echarts-wordcloud.min.js │ │ ├── echarts.min.js │ │ └── jquery-1.11.1.min.js ├── templates │ ├── index.html │ ├── main.html │ └── test.html └── utils.py ├── README.md ├── 开发过程中的版本 ├── COVID-19_Tracking1 │ ├── .idea │ │ ├── inspectionProfiles │ │ │ └── profiles_settings.xml │ │ ├── lian.iml │ │ ├── misc.xml │ │ ├── modules.xml │ │ └── workspace.xml │ ├── .vscode │ │ └── settings.json │ ├── README.md │ ├── __pycache__ │ │ ├── app.cpython-37.pyc │ │ └── utils.cpython-37.pyc │ ├── app.py │ ├── static │ │ ├── css │ │ │ └── main.css │ │ └── js │ │ │ ├── china.js │ │ │ ├── controller.js │ │ │ ├── ec_center.js │ │ │ ├── echarts-wordcloud.min.js │ │ │ ├── echarts.min.js │ │ │ └── jquery-1.11.1.min.js │ ├── templates │ │ ├── index.html │ │ ├── main.html │ │ └── test.html │ ├── utils.py │ ├── zong.py │ ├── 爬取并处理腾讯疫情数据.py │ └── 爬取百度热搜.py ├── COVID-19_Tracking2 │ ├── .idea │ │ ├── inspectionProfiles │ │ │ └── profiles_settings.xml │ │ ├── lian.iml │ │ ├── misc.xml │ │ ├── modules.xml │ │ └── workspace.xml │ ├── .vscode │ │ └── settings.json │ ├── README.md │ ├── __pycache__ │ │ ├── app.cpython-37.pyc │ │ └── utils.cpython-37.pyc │ ├── app.py │ ├── static │ │ ├── css │ │ │ └── main.css │ │ └── js │ │ │ ├── china.js │ │ │ ├── controller.js │ │ │ ├── ec_center.js │ │ │ ├── ec_left1.js │ │ │ ├── ec_left2.js │ │ │ ├── echarts-wordcloud.min.js │ │ │ ├── echarts.min.js │ │ │ └── jquery-1.11.1.min.js │ ├── templates │ │ ├── index.html │ │ ├── main.html │ │ └── test.html │ ├── utils.py │ ├── zong.py │ ├── 爬取并处理腾讯疫情数据.py │ └── 爬取百度热搜.py └── COVID-19_Tracking_本机 │ ├── .idea │ ├── inspectionProfiles │ │ └── profiles_settings.xml │ ├── lian.iml │ ├── misc.xml │ ├── modules.xml │ └── workspace.xml │ ├── .vscode │ └── settings.json │ ├── README.md │ ├── __pycache__ │ ├── app.cpython-37.pyc │ └── utils.cpython-37.pyc │ ├── app.py │ ├── cov_1.sql │ ├── spider.py │ ├── static │ ├── css │ │ └── main.css │ └── js │ │ ├── china.js │ │ ├── controller.js │ │ ├── ec_center.js │ │ ├── ec_left1.js │ │ ├── ec_left2.js │ │ ├── ec_right1.js │ │ ├── ec_right2.js │ │ ├── echarts-wordcloud.min.js │ │ ├── echarts.min.js │ │ └── jquery-1.11.1.min.js │ ├── templates │ ├── index.html │ ├── main.html │ └── test.html │ ├── utils.py │ ├── 爬取并处理腾讯疫情数据.py │ └── 爬取百度热搜.py └── 疫情数据网站.txt /COVID-19_Tracking/app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask 2 | from flask import render_template 3 | from flask import jsonify 4 | from jieba.analyse import extract_tags 5 | import utils 6 | import string 7 | 8 | 9 | 10 | app = Flask(__name__) 11 | 12 | 13 | @app.route('/') 14 | def hello_world(): 15 | return render_template('main.html') 16 | 17 | @app.route('/c1') 18 | def get_c1_data(): 19 | data = utils.get_c1_data() 20 | return jsonify({"confirm":data[0],"suspect":data[1],"heal":data[2],"dead":data[3]}) 21 | 22 | @app.route('/c2') 23 | def get_c2_data(): 24 | res = [] 25 | for tup in utils.get_c2_data(): 26 | res.append({"name":tup[0],"value":int(tup[1])}) 27 | return jsonify({"data":res}) 28 | 29 | 30 | @app.route("/l1") 31 | def get_l1_data(): 32 | data = utils.get_l1_data() 33 | day,confirm,suspect,heal,dead = [],[],[],[],[] 34 | for a,b,c,d,e in data[7:]: #很多卫健委网站前7天都是没有数据的,所以把前7天砍掉了 35 | day.append(a.strftime("%m-%d")) #a是datatime类型 36 | confirm.append(b) 37 | suspect.append(c) 38 | heal.append(d) 39 | dead.append(e) 40 | return jsonify({"day":day,"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead}) 41 | 42 | @app.route("/l2") 43 | def get_l2_data(): 44 | data = utils.get_l2_data() 45 | day, confirm_add, suspect_add = [], [], [] 46 | for a, b, c in data[7:]: 47 | day.append(a.strftime("%m-%d")) # a是datatime类型 48 | confirm_add.append(b) 49 | suspect_add.append(c) 50 | return jsonify({"day": day, "confirm_add": confirm_add, "suspect_add": suspect_add}) 51 | 52 | 53 | @app.route("/r1") 54 | def get_r1_data(): 55 | data = utils.get_r1_data() 56 | city = [] 57 | confirm = [] 58 | for k,v in data: 59 | city.append(k) 60 | confirm.append(int(v)) 61 | return jsonify({"city": city, "confirm": confirm}) 62 | 63 | 64 | @app.route("/r2") 65 | def get_r2_data(): 66 | data = utils.get_r2_data() #格式 (('民警抗疫一线奋战16天牺牲1037364',), ('四川再派两批医疗队1537382',) 67 | d = [] 68 | for i in data: 69 | k = i[0].rstrip(string.digits) # 移除热搜数字 70 | v = i[0][len(k):] # 获取热搜数字 71 | ks = extract_tags(k) # 使用jieba 提取关键字 72 | for j in ks: 73 | if not j.isdigit(): 74 | d.append({"name": j, "value": v}) 75 | return jsonify({"kws": d}) 76 | 77 | 78 | 79 | 80 | 81 | @app.route('/time') 82 | def gettime(): 83 | return utils.get_time() 84 | 85 | 86 | @app.route('/tem') 87 | def hello_world3(): 88 | return render_template("index.html") 89 | 90 | @app.route('/ajax', methods=["get","post"]) 91 | def hello_world4(): 92 | return '10000' 93 | 94 | if __name__ == '__main__': 95 | app.run() 96 | -------------------------------------------------------------------------------- /COVID-19_Tracking/spider.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import json 3 | import time 4 | import pymysql 5 | from selenium.webdriver import Chrome,ChromeOptions 6 | import traceback 7 | import sys 8 | 9 | #返回历史数据和当日详细数据 10 | def get_tencent_data(): 11 | url1 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5" 12 | url2 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other" 13 | headers = { 14 | 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36' 15 | } 16 | r1 = requests.get(url1, headers) 17 | r2 = requests.get(url2, headers) 18 | 19 | #json字符串转字典 20 | res1 = json.loads(r1.text) 21 | res2 = json.loads(r2.text) 22 | 23 | data_all1 = json.loads(res1["data"]) 24 | data_all2 = json.loads(res2["data"]) 25 | 26 | #历史数据 27 | history = {} 28 | for i in data_all2["chinaDayList"]: 29 | ds = "2020." + i["date"] 30 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间 31 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式 32 | confirm = i["confirm"] 33 | suspect = i["suspect"] 34 | heal = i["heal"] 35 | dead = i["dead"] 36 | history[ds] = {"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead} 37 | for i in data_all2["chinaDayAddList"]: 38 | ds = "2020." + i["date"] 39 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间 40 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式 41 | confirm = i["confirm"] 42 | suspect = i["suspect"] 43 | heal = i["heal"] 44 | dead = i["dead"] 45 | history[ds].update({"confirm_add": confirm, "suspect_add": suspect, "heal_add": heal, "dead_add": dead}) 46 | 47 | #当日详细数据 48 | details = [] 49 | update_time = data_all1["lastUpdateTime"] 50 | data_country = data_all1["areaTree"] #list 25个国家 51 | data_province = data_country[0]["children"] #中国各省 52 | for pro_infos in data_province: 53 | province = pro_infos["name"] #省名 54 | for city_infos in pro_infos["children"]: 55 | city = city_infos["name"] 56 | confirm = city_infos["total"]["confirm"] 57 | confirm_add = city_infos["today"]["confirm"] 58 | heal = city_infos["total"]["heal"] 59 | dead = city_infos["total"]["dead"] 60 | details.append([update_time, province, city, confirm, confirm_add, heal, dead]) 61 | return history, details 62 | 63 | 64 | def get_conn(): 65 | #建立连接 66 | conn = pymysql.connect(host="127.0.0.1", user="root", password="root", db="cov", charset="utf8") 67 | #创建游标 68 | cursor = conn.cursor() 69 | return conn,cursor 70 | 71 | def close_conn(conn,cursor): 72 | if cursor: 73 | cursor.close() 74 | if conn: 75 | conn.close() 76 | 77 | #插入details数据 78 | def update_details(): 79 | cursor = None 80 | conn = None 81 | try: 82 | li = get_tencent_data()[1] #0是历史数据,1是当日详细数据 83 | conn,cursor = get_conn() 84 | sql = "insert into details(update_time,province,city,confirm,confirm_add,heal,dead) values(%s,%s,%s,%s,%s,%s,%s)" 85 | sql_query = "select %s=(select update_time from details order by id desc limit 1)" #对比当前最大时间戳 86 | #对比当前最大时间戳 87 | cursor.execute(sql_query,li[0][0]) 88 | if not cursor.fetchone()[0]: 89 | print(f"{time.asctime()}开始更新数据") 90 | for item in li: 91 | cursor.execute(sql,item) 92 | conn.commit() 93 | print(f"{time.asctime()}更新到最新数据") 94 | else: 95 | print(f"{time.asctime()}已是最新数据!") 96 | except: 97 | traceback.print_exc() 98 | finally: 99 | close_conn(conn,cursor) 100 | 101 | 102 | #插入history数据 103 | def insert_history(): 104 | cursor = None 105 | conn = None 106 | try: 107 | dic = get_tencent_data()[0]#0代表历史数据字典 108 | print(f"{time.asctime()}开始插入历史数据") 109 | conn,cursor = get_conn() 110 | sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)" 111 | for k,v in dic.items(): 112 | cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"), 113 | v.get("suspect_add"),v.get("heal"),v.get("heal_add"), 114 | v.get("dead"),v.get("dead_add")]) 115 | conn.commit() 116 | print(f"{time.asctime()}插入历史数据完毕") 117 | except: 118 | traceback.print_exc() 119 | finally: 120 | close_conn(conn,cursor) 121 | 122 | 123 | #更新历史数据 124 | def update_history(): 125 | cursor = None 126 | conn = None 127 | try: 128 | dic = get_tencent_data()[0]#0代表历史数据字典 129 | print(f"{time.asctime()}开始更新历史数据") 130 | conn,cursor = get_conn() 131 | sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)" 132 | sql_query = "select confirm from history where ds=%s" 133 | for k,v in dic.items(): 134 | if not cursor.execute(sql_query,k): 135 | cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"), 136 | v.get("suspect_add"),v.get("heal"),v.get("heal_add"), 137 | v.get("dead"),v.get("dead_add")]) 138 | conn.commit() 139 | print(f"{time.asctime()}历史数据更新完毕") 140 | except: 141 | traceback.print_exc() 142 | finally: 143 | close_conn(conn,cursor) 144 | 145 | 146 | #返回百度疫情热搜 147 | def get_baidu_hot(): 148 | option = ChromeOptions() #创建谷歌浏览器实例 149 | option.add_argument("--headless")#隐藏浏览器 150 | option.add_argument("--no-sandbox") #禁用沙盘 部署在linux上访问chrome要求这样 151 | 152 | url = 'https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1' 153 | brower = Chrome(options = option) 154 | brower.get(url) 155 | #找到展开按钮 156 | but = brower.find_element_by_css_selector('#ptab-0 > div > div.VirusHot_1-5-5_32AY4F.VirusHot_1-5-5_2RnRvg > section > div') #定位到点击展开按钮 157 | but.click() #点击展开 158 | 159 | time.sleep(1)#爬虫与反爬,模拟人等待1秒 160 | 161 | c = brower.find_elements_by_xpath('//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]') 162 | context = [i.text for i in c] #获取标签内容 163 | print(context) 164 | return context 165 | 166 | 167 | #将疫情热搜插入数据库 168 | def update_hotsearch(): 169 | cursor = None 170 | conn = None 171 | try: 172 | context = get_baidu_hot() 173 | print(f"{time.asctime()}开始更新热搜数据") 174 | conn, cursor = get_conn() 175 | sql = "insert into hotsearch(dt,content) values(%s,%s)" 176 | ts = time.strftime("%Y-%m-%d %X") 177 | for i in context: 178 | cursor.execute(sql,(ts,i)) #插入数据 179 | conn.commit() #提交事务保存数据 180 | print(f"{time.asctime()}数据更新完毕") 181 | except: 182 | traceback.print_exc() 183 | finally: 184 | close_conn(conn,cursor) 185 | 186 | 187 | 188 | # his,de = get_tencent_data() 189 | # print(his) 190 | # print(de) 191 | if __name__ == "__main__": 192 | l = len(sys.argv) 193 | if l == 1: 194 | s = """ 195 | 请输入参数 196 | 参数说明, 197 | up_his 更新历史记录表 198 | up_hot 更新实时热搜 199 | up_det 更新详细表 200 | """ 201 | print(s) 202 | else: 203 | order = sys.argv[1] 204 | if order == "up_his": 205 | update_history() 206 | elif order == "up_det": 207 | update_details() 208 | elif order == "up_hot": 209 | update_hotsearch() -------------------------------------------------------------------------------- /COVID-19_Tracking/static/css/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | background: #333; 4 | } 5 | 6 | #title { 7 | position: absolute; 8 | width: 40%; 9 | height: 10%; 10 | top: 0; 11 | left: 30%; 12 | color: white; 13 | font-size: 40px; 14 | 15 | display: flex; 16 | align-items: center; 17 | justify-content: center; 18 | } 19 | 20 | #tim { 21 | position: absolute; 22 | /* width: 30%; */ 23 | height: 10%; 24 | top: 5%; 25 | right: 2%; 26 | color: #FFFFFF; 27 | font-size: 20px; 28 | } 29 | 30 | #c1 { 31 | position: absolute; 32 | width: 40%; 33 | height: 30%; 34 | top: 10%; 35 | left: 30%; 36 | /* background: #777777; */ 37 | } 38 | 39 | .num { 40 | width: 25%; 41 | float: left; 42 | display: flex; 43 | align-items: center; 44 | justify-content: center; 45 | color: gold; 46 | font-size: 20px; 47 | } 48 | .txt { 49 | width: 25%; 50 | float: left; 51 | font-family: "幼圆"; 52 | display: flex; 53 | align-items: center; 54 | justify-content: center; 55 | font-size: 20px; 56 | color: white; 57 | } 58 | 59 | #c2 { 60 | position: absolute; 61 | width: 40%; 62 | height: 60%; 63 | top: 40%; 64 | left: 30%; 65 | background: #888888; 66 | } 67 | 68 | #l1 { 69 | position: absolute; 70 | width: 30%; 71 | height: 45%; 72 | top: 10%; 73 | left: 0%; 74 | background: #666666; 75 | } 76 | 77 | #l2 { 78 | position: absolute; 79 | width: 30%; 80 | height: 45%; 81 | top: 55%; 82 | left: 0%; 83 | background: #777777; 84 | } 85 | 86 | #r1 { 87 | position: absolute; 88 | width: 30%; 89 | height: 45%; 90 | top: 10%; 91 | right: 0%; 92 | background: #666666; 93 | } 94 | 95 | #r2 { 96 | position: absolute; 97 | width: 30%; 98 | height: 45%; 99 | top: 55%; 100 | right: 0%; 101 | background: #777777; 102 | } 103 | -------------------------------------------------------------------------------- /COVID-19_Tracking/static/js/china.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one 3 | * or more contributor license agreements. See the NOTICE file 4 | * distributed with this work for additional information 5 | * regarding copyright ownership. The ASF licenses this file 6 | * to you under the Apache License, Version 2.0 (the 7 | * "License"); you may not use this file except in compliance 8 | * with the License. You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, 13 | * software distributed under the License is distributed on an 14 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | * KIND, either express or implied. See the License for the 16 | * specific language governing permissions and limitations 17 | * under the License. 18 | */ 19 | 20 | (function (root, factory) { 21 | if (typeof define === 'function' && define.amd) { 22 | // AMD. Register as an anonymous module. 23 | define(['exports', 'echarts'], factory); 24 | } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') { 25 | // CommonJS 26 | factory(exports, require('echarts')); 27 | } else { 28 | // Browser globals 29 | factory({}, root.echarts); 30 | } 31 | }(this, function (exports, echarts) { 32 | var log = function (msg) { 33 | if (typeof console !== 'undefined') { 34 | console && console.error && console.error(msg); 35 | } 36 | } 37 | if (!echarts) { 38 | log('ECharts is not Loaded'); 39 | return; 40 | } 41 | if (!echarts.registerMap) { 42 | log('ECharts Map is not loaded') 43 | return; 44 | } 45 | echarts.registerMap('china', {"type":"FeatureCollection","features":[{"type":"Feature","id":"710000","properties":{"id":"710000","cp":[121.509062,24.044332],"name":"台湾","childNum":6},"geometry":{"type":"MultiPolygon","coordinates":[["@@°Ü¯Û"],["@@ƛĴÕƊÉɼģºðʀ\\ƎsÆNŌÔĚäœnÜƤɊĂǀĆĴžĤNJŨxĚĮǂƺòƌ‚–âÔ®ĮXŦţƸZûЋƕƑGđ¨ĭMó·ęcëƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ™¿@ăƑŽ¥ĘWǬÏĶŁâ"],["@@\\p|WoYG¿¥I†j@¢"],["@@…¡‰@ˆV^RqˆBbAŒnTXeRz¤Lž«³I"],["@@ÆEE—„kWqë @œ"],["@@fced"],["@@„¯ɜÄèaì¯ØǓIġĽ"],["@@çûĖ롖hòř "]],"encodeOffsets":[[[122886,24033]],[[123335,22980]],[[122375,24193]],[[122518,24117]],[[124427,22618]],[[124862,26043]],[[126259,26318]],[[127671,26683]]]}},{"type":"Feature","id":"130000","properties":{"id":"130000","cp":[114.502461,38.045474],"name":"河北","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@o~†Z]‚ªr‰ºc_ħ²G¼s`jΟnüsœłNX_“M`ǽÓnUK…Ĝēs¤­©yrý§uģŒc†JŠ›e"],["@@U`Ts¿m‚"],["@@oºƋÄd–eVŽDJj£€J|Ådz•Ft~žKŨ¸IÆv|”‡¢r}膎onb˜}`RÎÄn°ÒdÞ²„^®’lnÐèĄlðӜ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcœŋ`–ZÔ’¶êqvFƚ†N®ĆTH®¦O’¾ŠIbÐã´BĐɢŴÆíȦp–ĐÞXR€·nndOž¤’OÀĈƒ­Qg˜µFo|gȒęSWb©osx|hYh•gŃfmÖĩnº€T̒Sp›¢dYĤ¶UĈjl’ǐpäìë|³kÛfw²Xjz~ÂqbTŠÑ„ěŨ@|oM‡’zv¢ZrÃVw¬ŧˏfŒ°ÐT€ªqŽs{Sž¯r æÝlNd®²Ğ džiGʂJ™¼lr}~K¨ŸƐÌWö€™ÆŠzRš¤lêmĞL΄’@¡|q]SvK€ÑcwpÏρ†ĿćènĪWlĄkT}ˆJ”¤~ƒÈT„d„™pddʾĬŠ”ŽBVt„EÀ¢ôPĎƗè@~‚k–ü\\rÊĔÖæW_§¼F˜†´©òDòj’ˆYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkv‚GpuARhÞÆǶgƊTǼƹS£¨¡ù³ŘÍ]¿Ây™ôEP xX¶¹܇O¡“gÚ¡IwÃ鑦ÅB‡Ï|ǰ…N«úmH¯‹âŸDùŽyŜžŲIÄuШDž•¸dɂ‡‚FŸƒ•›Oh‡đ©OŸ›iÃ`ww^ƒÌkŸ‘ÑH«ƇǤŗĺtFu…{Z}Ö@U‡´…ʚLg®¯Oı°ÃwŸ ^˜—€VbÉs‡ˆmA…ê]]w„§›RRl£‡ȭµu¯b{ÍDěïÿȧŽuT£ġƒěŗƃĝ“Q¨fV†Ƌ•ƅn­a@‘³@šď„yýIĹÊKšŭfċŰóŒxV@tˆƯŒJ”]eƒR¾fe|rHA˜|h~Ėƍl§ÏŠlTíb ØoˆÅbbx³^zÃ͚¶Sj®A”yÂhðk`š«P€”ˈµEF†Û¬Y¨Ļrõqi¼‰Wi°§’б´°^[ˆÀ|ĠO@ÆxO\\tŽa\\tĕtû{ġŒȧXýĪÓjùÎRb›š^ΛfK[ݏděYfíÙTyŽuUSyŌŏů@Oi½’éŅ­aVcř§ax¹XŻác‡žWU£ôãºQ¨÷Ñws¥qEH‰Ù|‰›šYQoŕÇyáĂ£MðoťÊ‰P¡mšWO¡€v†{ôvîēÜISpÌhp¨ ‘j†deŔQÖj˜X³à™Ĉ[n`Yp@Už–cM`’RKhŒEbœ”pŞlNut®Etq‚nsÁŠgA‹iú‹oH‡qCX‡”hfgu“~ϋWP½¢G^}¯ÅīGCŸÑ^ãziMáļMTÃƘrMc|O_ž¯Ŏ´|‡morDkO\\mĆJfl@c̬¢aĦtRıҙ¾ùƀ^juųœK­ƒUFy™—Ɲ…›īÛ÷ąV×qƥV¿aȉd³B›qPBm›aËđŻģm“Å®Vйd^K‡KoŸnYg“¯Xhqa”Ldu¥•ÍpDž¡KąÅƒkĝęěhq‡}HyÓ]¹ǧ£…Í÷¿qáµ§š™g‘¤o^á¾ZE‡¤i`ij{n•ƒOl»ŸWÝĔįhg›F[¿¡—ßkOüš_‰€ū‹i„DZàUtėGylƒ}ŒÓM}€jpEC~¡FtoQi‘šHkk{Ãmï‚"]],"encodeOffsets":[[[119712,40641]],[[121616,39981]],[[116462,37237]]]}},{"type":"Feature","id":"140000","properties":{"id":"140000","cp":[111.849248,36.857014],"name":"山西","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@Þĩ҃S‰ra}Á€yWix±Üe´lè“ßÓǏok‘ćiµVZģ¡coœ‘TS˹ĪmnÕńe–hZg{gtwªpXaĚThȑp{¶Eh—®RćƑP¿£‘Pmc¸mQÝW•ďȥoÅîɡųAďä³aωJ‘½¥PG­ąSM­™…EÅruµé€‘Yӎ•Ō_d›ĒCo­Èµ]¯_²ÕjāŽK~©ÅØ^ԛkïçămϑk]­±ƒcݯÑÃmQÍ~_a—pm…~ç¡q“ˆu{JÅŧ·Ls}–EyÁÆcI{¤IiCfUc•ƌÃp§]웫vD@¡SÀ‘µM‚ÅwuŽYY‡¡DbÑc¡hƒ×]nkoQdaMç~eD•ÛtT‰©±@¥ù@É¡‰ZcW|WqOJmĩl«ħşvOÓ«IqăV—¥ŸD[mI~Ó¢cehiÍ]Ɠ~ĥqXŠ·eƷœn±“}v•[ěďŽŕ]_‘œ•`‰¹ƒ§ÕōI™o©b­s^}Ét±ū«³p£ÿ·Wµ|¡¥ăFÏs׌¥ŅxŸÊdÒ{ºvĴÎêÌɊ²¶€ü¨|ÞƸµȲ‘LLúÉƎ¤ϊęĔV`„_bª‹S^|ŸdŠzY|dz¥p†ZbÆ£¶ÒK}tĦÔņƠ‚PYzn€ÍvX¶Ěn ĠÔ„zý¦ª˜÷žÑĸَUȌ¸‚dòÜJð´’ìúNM¬ŒXZ´‘¤ŊǸ_tldIš{¦ƀðĠȤ¥NehXnYG‚‡R° ƬDj¬¸|CĞ„Kq‚ºfƐiĺ©ª~ĆOQª ¤@ìǦɌ²æBŒÊ”TœŸ˜ʂōĖ’šĴŞ–ȀœÆÿȄlŤĒö„t”νî¼ĨXhŒ‘˜|ªM¤Ðz"],"encodeOffsets":[[116874,41716]]}},{"type":"Feature","id":"150000","properties":{"id":"150000","cp":[111.670801,41.818311],"name":"内蒙古","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@¯PqƒFB…‰|S•³C|kñ•H‹d‘iÄ¥sˆʼnő…PóÑÑE^‘ÅPpy_YtS™hQ·aHwsOnʼnÚs©iqj›‰€USiº]ïWš‰«gW¡A–Rë¥_ŽsgÁnUI«m‰…„‹]j‡vV¼euhwqA„aW˜ƒ_µj…»çjioQR¹ēÃßt@r³[ÛlćË^ÍÉáG“›OUۗOB±•XŸkŇ¹£k|e]ol™ŸkVͼÕqtaÏõjgÁ£§U^Œ”RLˆËnX°Ç’Bz†^~wfvˆypV ¯„ƫĉ˭ȫƗŷɿÿĿƑ˃ĝÿÃǃßËőó©ǐȍŒĖM×ÍEyx‹þp]Évïè‘vƀnÂĴÖ@‚‰†V~Ĉv¦wĖt—ējyÄDXÄxGQuv_›i¦aBçw‘˛wD™©{ŸtāmQ€{EJ§KPśƘƿ¥@‰sCT•É}ɃwˆƇy±ŸgÑ“}T[÷kÐ禫…SÒ¥¸ëBX½‰HáŵÀğtSÝÂa[ƣ°¯¦P]£ġ“–“Òk®G²„èQ°óMq}EŠóƐÇ\\ƒ‡@áügQ͋u¥Fƒ“T՛¿Jû‡]|mvāÎYua^WoÀa·­ząÒot×¶CLƗi¯¤mƎHNJ¤îìɾŊìTdåwsRÖgĒųúÍġäÕ}Q¶—ˆ¿A•†‹[¡Œ{d×uQAƒ›M•xV‹vMOmăl«ct[wº_šÇʊŽŸjb£ĦS_é“QZ“_lwgOiýe`YYLq§IÁˆdz£ÙË[ÕªuƏ³ÍT—s·bÁĽäė[›b[ˆŗfãcn¥îC¿÷µ[ŏÀQ­ōšĉm¿Á^£mJVm‡—L[{Ï_£›F¥Ö{ŹA}…×Wu©ÅaųijƳhB{·TQqÙIķˑZđ©Yc|M¡…L•eVUóK_QWk’_ĥ‘¿ãZ•»X\\ĴuUƒè‡lG®ěłTĠğDєOrÍd‚ÆÍz]‹±…ŭ©ŸÅ’]ŒÅÐ}UË¥©Tċ™ïxgckfWgi\\ÏĒ¥HkµE˜ë{»ÏetcG±ahUiñiWsɁˆ·c–C‚Õk]wȑ|ća}w…VaĚ᠞ŒG°ùnM¬¯†{ÈˆÐÆA’¥ÄêJxÙ¢”hP¢Ûˆº€µwWOŸóFŽšÁz^ÀŗÎú´§¢T¤ǻƺSė‰ǵhÝÅQgvBHouʝl_o¿Ga{ïq{¥|ſĿHĂ÷aĝÇq‡Z‘ñiñC³ª—…»E`¨åXēÕqÉû[l•}ç@čƘóO¿¡ƒFUsA‰“ʽīccšocƒ‚ƒÇS}„“£‡IS~ălkĩXçmĈ…ŀЂoÐdxÒuL^T{r@¢‘žÍƒĝKén£kQ™‰yšÅõËXŷƏL§~}kqš»IHėDžjĝŸ»ÑÞoŸå°qTt|r©ÏS‹¯·eŨĕx«È[eMˆ¿yuˆ‘pN~¹ÏyN£{©’—g‹ħWí»Í¾s“əšDž_ÃĀɗ±ą™ijĉʍŌŷ—S›É“A‹±åǥɋ@럣R©ąP©}ĹªƏj¹erƒLDĝ·{i«ƫC£µsKCš…GS|úþX”gp›{ÁX¿Ÿć{ƱȏñZáĔyoÁhA™}ŅĆfdʼn„_¹„Y°ėǩÑ¡H¯¶oMQqð¡Ë™|‘Ñ`ƭŁX½·óۓxğįÅcQ‡ˆ“ƒs«tȋDžF“Ÿù^i‘t«Č¯[›hAi©á¥ÇĚ×l|¹y¯YȵƓ‹ñǙµï‚ċ™Ļ|Dœ™üȭ¶¡˜›oŽäÕG\\ďT¿Òõr¯œŸLguÏYęRƩšɷŌO\\İТæ^Ŋ IJȶȆbÜGŽĝ¬¿ĚVĎgª^íu½jÿĕęjık@Ľƒ]ėl¥Ë‡ĭûÁ„ƒėéV©±ćn©­ȇžÍq¯½•YÃÔʼn“ÉNѝÅÝy¹NqáʅDǡËñ­ƁYÅy̱os§ȋµʽǘǏƬɱà‘ưN¢ƔÊuľýľώȪƺɂļžxœZĈ}ÌʼnŪ˜ĺœŽĭFЛĽ̅ȣͽÒŵìƩÇϋÿȮǡŏçƑůĕ~Ǎ›¼ȳÐUf†dIxÿ\\G ˆzâɏÙOº·pqy£†@ŒŠqþ@Ǟ˽IBäƣzsÂZ†ÁàĻdñ°ŕzéØűzșCìDȐĴĺf®ŽÀľưø@ɜÖÞKĊŇƄ§‚͑těï͡VAġÑÑ»d³öǍÝXĉĕÖ{þĉu¸ËʅğU̎éhɹƆ̗̮ȘNJ֥ड़ࡰţાíϲäʮW¬®ҌeרūȠkɬɻ̼ãüfƠSצɩςåȈHϚÎKdzͲOðÏȆƘ¼CϚǚ࢚˼ФԂ¤ƌžĞ̪Qʤ´¼mȠJˀŸƲÀɠmǐnǔĎȆÞǠN~€ʢĜ‚¶ƌĆĘźʆȬ˪ĚǏĞGȖƴƀj`ĢçĶāàŃºē̃ĖćšYŒÀŎüôQÐÂŎŞdžŞêƖš˜oˆDĤÕºÑǘÛˤ³̀gńƘĔÀ^žªƂ`ªt¾äƚêĦĀ¼Ð€Ĕǎ¨Ȕ»͠^ˮÊȦƤøxRrŜH¤¸ÂxDĝŒ|ø˂˜ƮÐ¬ɚwɲFjĔ²Äw°dždÀɞ_ĸdîàŎjʜêTĞªŌ‡ŜWÈ|tqĢUB~´°ÎFC•ŽU¼pĀēƄN¦¾O¶ŠłKĊOj“Ě”j´ĜYp˜{¦„ˆSĚÍ\\Tš×ªV–÷Ší¨ÅDK°ßtŇĔKš¨ǵÂcḷ̌ĚǣȄĽF‡lġUĵœŇ‹ȣFʉɁƒMğįʏƶɷØŭOǽ«ƽū¹Ʊő̝Ȩ§ȞʘĖiɜɶʦ}¨֪ࠜ̀ƇǬ¹ǨE˦ĥªÔêFŽxúQ„Er´W„rh¤Ɛ \\talĈDJ˜Ü|[Pll̚¸ƎGú´Pž¬W¦†^¦–H]prR“n|or¾wLVnÇIujkmon£cX^Bh`¥V”„¦U¤¸}€xRj–[^xN[~ªŠxQ„‚[`ªHÆÂExx^wšN¶Ê˜|¨ì†˜€MrœdYp‚oRzNy˜ÀDs~€bcfÌ`L–¾n‹|¾T‚°c¨È¢a‚r¤–`[|òDŞĔöxElÖdH„ÀI`„Ď\\Àì~ƎR¼tf•¦^¢ķ¶e”ÐÚMŒptgj–„ɡČÅyġLû™ŇV®ŠÄÈƀ†Ď°P|ªVV†ªj–¬ĚÒêp¬–E|ŬÂc|ÀtƐK fˆ{ĘFǜƌXƲąo½Ę‘\\¥–o}›Ûu£ç­kX‘{uĩ«āíÓUŅßŢq€Ť¥lyň[€oi{¦‹L‡ń‡ðFȪȖ”ĒL„¿Ì‹ˆfŒ£K£ʺ™oqNŸƒwğc`ue—tOj×°KJ±qƒÆġm‰Ěŗos¬…qehqsuœƒH{¸kH¡Š…ÊRǪÇƌbȆ¢´ä܍¢NìÉʖ¦â©Ġu¦öČ^â£Ăh–šĖMÈÄw‚\\fŦ°W ¢¾luŸD„wŠ\\̀ʉÌÛM…Ā[bӞEn}¶Vc…ê“sƒ"]],"encodeOffsets":[[[129102,52189]]]}},{"type":"Feature","id":"210000","properties":{"id":"210000","cp":[123.429096,41.796767],"name":"辽宁","childNum":16},"geometry":{"type":"MultiPolygon","coordinates":[["@@L–Ž@@s™a"],["@@MnNm"],["@@d‚c"],["@@eÀ‚C@b‚“‰"],["@@f‡…Xwkbr–Ä`qg"],["@@^jtW‘Q"],["@@~ Y]c"],["@@G`ĔN^_¿Z‚ÃM"],["@@iX¶B‹Y"],["@@„YƒZ"],["@@L_{Epf"],["@@^WqCT\\"],["@@\\[“‹§t|”¤_"],["@@m`n_"],["@@Ïxnj{q_×^Giip"],["@@@œé^B†‡ntˆaÊU—˜Ÿ]x ¯ÄPIJ­°h€ʙK³†VˆÕ@Y~†|EvĹsDŽ¦­L^p²ŸÒG ’Ël]„xxÄ_˜fT¤Ď¤cŽœP„–C¨¸TVjbgH²sdÎdHt`Bˆ—²¬GJję¶[ÐhjeXdlwhšðSȦªVÊπ‹Æ‘Z˜ÆŶ®²†^ŒÎyÅÎcPqń“ĚDMħĜŁH­ˆk„çvV[ij¼W–‚YÀäĦ’‘`XlžR`žôLUVžfK–¢†{NZdĒª’YĸÌÚJRr¸SA|ƴgŴĴÆbvªØX~†źBŽ|¦ÕœEž¤Ð`\\|Kˆ˜UnnI]¤ÀÂĊnŎ™R®Ő¿¶\\ÀøíDm¦ÎbŨab‰œaĘ\\ľã‚¸a˜tÎSƐ´©v\\ÖÚÌǴ¤Â‡¨JKr€Z_Z€fjþhPkx€`Y”’RIŒjJcVf~sCN¤ ˆE‚œhæm‰–sHy¨SðÑÌ\\\\ŸĐRZk°IS§fqŒßýáЍÙÉÖ[^¯ǤŲ„ê´\\¦¬ĆPM¯£Ÿˆ»uïpùzEx€žanµyoluqe¦W^£ÊL}ñrkqWňûP™‰UP¡ôJŠoo·ŒU}£Œ„[·¨@XŒĸŸ“‹‹DXm­Ûݏº‡›GU‹CÁª½{íĂ^cj‡k“¶Ã[q¤“LÉö³cux«zZfƒ²BWÇ®Yß½ve±ÃC•ý£W{Ú^’q^sÑ·¨‹ÍOt“¹·C¥‡GD›rí@wÕKţ݋˜Ÿ«V·i}xËÍ÷‘i©ĝ‡ɝǡ]ƒˆ{c™±OW‹³Ya±Ÿ‰_穂Hžĕoƫ€Ňqƒr³‰Lys[„ñ³¯OS–ďOMisZ†±ÅFC¥Pq{‚Ã[Pg}\\—¿ghćO…•k^ģÁFıĉĥM­oEqqZûěʼn³F‘¦oĵ—hŸÕP{¯~TÍlª‰N‰ßY“Ð{Ps{ÃVU™™eĎwk±ʼnVÓ½ŽJãÇÇ»Jm°dhcÀff‘dF~ˆ€ĀeĖ€d`sx² šƒ®EżĀdQ‹Âd^~ăÔHˆ¦\\›LKpĄVez¤NP ǹӗR™ÆąJSh­a[¦´Âghwm€BÐ¨źhI|žVVŽ—Ž|p] Â¼èNä¶ÜBÖ¼“L`‚¼bØæŒKV”ŸpoœúNZÞÒKxpw|ÊEMnzEQšŽIZ”ŽZ‡NBˆčÚFÜçmĩ‚WĪñt‘ÞĵÇñZ«uD‚±|Əlij¥ãn·±PmÍa‰–da‡ CL‡Ǒkùó¡³Ï«QaċϑOÃ¥ÕđQȥċƭy‹³ÃA"]],"encodeOffsets":[[[123686,41445]],[[126019,40435]],[[124393,40128]],[[126117,39963]],[[125322,40140]],[[126686,40700]],[[126041,40374]],[[125584,40168]],[[125453,40165]],[[125362,40214]],[[125280,40291]],[[125774,39997]],[[125976,40496]],[[125822,39993]],[[125509,40217]],[[122731,40949]]]}},{"type":"Feature","id":"220000","properties":{"id":"220000","cp":[125.3245,43.886841],"name":"吉林","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@‘p䔳PClƒFbbÍzš€wBG’ĭ€Z„Åi“»ƒlY­ċ²SgŽkÇ£—^S‰“qd¯•‹R…©éŽ£¯S†\\cZ¹iűƏCuƍÓX‡oR}“M^o•£…R}oªU­F…uuXHlEŕ‡€Ï©¤ÛmTŽþ¤D–²ÄufàÀ­XXȱAe„yYw¬dvõ´KÊ£”\\rµÄl”iˆdā]|DÂVŒœH¹ˆÞ®ÜWnŒC”Œķ W‹§@\\¸‹ƒ~¤‹Vp¸‰póIO¢ŠVOšŇürXql~òÉK]¤¥Xrfkvzpm¶bwyFoúvð‡¼¤ N°ąO¥«³[ƒéǡű_°Õ\\ÚÊĝŽþâőàerR¨­JYlďQ[ ÏYëЧTGz•tnŠß¡gFkMŸāGÁ¤ia É‰™È¹`\\xs€¬dĆkNnuNUŠ–užP@‚vRY¾•–\\¢…ŒGªóĄ~RãÖÎĢù‚đŴÕhQŽxtcæëSɽʼníëlj£ƍG£nj°KƘµDsØÑpyƸ®¿bXp‚]vbÍZuĂ{nˆ^IüœÀSք”¦EŒvRÎûh@℈[‚Əȉô~FNr¯ôçR±ƒ­HÑl•’Ģ–^¤¢‚OðŸŒævxsŒ]ÞÁTĠs¶¿âƊGW¾ìA¦·TѬ†è¥€ÏÐJ¨¼ÒÖ¼ƒƦɄxÊ~S–tD@ŠĂ¼Ŵ¡jlºWžvЉˆzƦZЎ²CH— „Axiukd‹ŒGgetqmcžÛ£Ozy¥cE}|…¾cZ…k‚‰¿uŐã[oxGikfeäT@…šSUwpiÚFM©’£è^ڟ‚`@v¶eň†f h˜eP¶žt“äOlÔUgƒÞzŸU`lœ}ÔÆUvØ_Ō¬Öi^ĉi§²ÃŠB~¡Ĉ™ÚEgc|DC_Ȧm²rBx¼MÔ¦ŮdĨÃâYx‘ƘDVÇĺĿg¿cwÅ\\¹˜¥Yĭlœ¤žOv†šLjM_a W`zļMž·\\swqÝSA‡š—q‰Śij¯Š‘°kŠRē°wx^Đkǂғ„œž“œŽ„‹\\]˜nrĂ}²ĊŲÒøãh·M{yMzysěnĒġV·°“G³¼XÀ““™¤¹i´o¤ŃšŸÈ`̃DzÄUĞd\\i֚ŒˆmÈBĤÜɲDEh LG¾ƀľ{WaŒYÍȏĢĘÔRîĐj‹}Ǟ“ccj‡oUb½š{“h§Ǿ{K‹ƖµÎ÷žGĀÖŠåưÎs­l›•yiē«‹`姝H¥Ae^§„GK}iã\\c]v©ģZ“mÃ|“[M}ģTɟĵ‘Â`À–çm‰‘FK¥ÚíÁbXš³ÌQґHof{‰]e€pt·GŋĜYünĎųVY^’˜ydõkÅZW„«WUa~U·Sb•wGçǑ‚“iW^q‹F‚“›uNĝ—·Ew„‹UtW·Ýďæ©PuqEzwAV•—XR‰ãQ`­©GŒM‡ehc›c”ďϝd‡©ÑW_ϗYƅŒ»…é\\ƒɹ~ǙG³mØ©BšuT§Ĥ½¢Ã_ý‘L¡‘ýŸqT^rme™\\Pp•ZZbƒyŸ’uybQ—efµ]UhĿDCmûvašÙNSkCwn‰cćfv~…Y‹„ÇG"],"encodeOffsets":[[130196,42528]]}},{"type":"Feature","id":"230000","properties":{"id":"230000","cp":[128.642464,46.756967],"name":"黑龙江","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@UƒµNÿ¥īè灋•HÍøƕ¶LŒǽ|g¨|”™Ža¾pViˆdd”~ÈiŒíďÓQġėǐZ΋ŽXb½|ſÃH½ŸKFgɱCģÛÇA‡n™‹jÕc[VĝDZÃ˄Ç_™ £ń³pŽj£º”š¿”»WH´¯”U¸đĢmžtĜyzzNN|g¸÷äűѱĉā~mq^—Œ[ƒ”››”ƒǁÑďlw]¯xQĔ‰¯l‰’€°řĴrŠ™˜BˆÞTxr[tޏĻN_yŸX`biN™Ku…P›£k‚ZĮ—¦[ºxÆÀdhŽĹŀUÈƗCw’áZħÄŭcÓ¥»NAw±qȥnD`{ChdÙFćš}¢‰A±Äj¨]ĊÕjŋ«×`VuÓś~_kŷVÝyh„“VkÄãPs”Oµ—fŸge‚Ň…µf@u_Ù ÙcŸªNªÙEojVx™T@†ãSefjlwH\\pŏäÀvŠŽlY†½d{†F~¦dyz¤PÜndsrhf‹HcŒvlwjFœ£G˜±DύƥY‡yϊu¹XikĿ¦ÏqƗǀOŜ¨LI|FRĂn sª|Cš˜zxAè¥bœfudTrFWÁ¹Am|˜ĔĕsķÆF‡´Nš‰}ć…UŠÕ@Áijſmužç’uð^ÊýowŒFzØÎĕNőžǏȎôªÌŒDŽàĀÄ˄ĞŀƒʀĀƘŸˮȬƬĊ°ƒUŸzou‡xe]}Ž…AyȑW¯ÌmK‡“Q]‹Īºif¸ÄX|sZt|½ÚUΠlkš^p{f¤lˆºlÆW –€A²˜PVܜPH”Êâ]ÎĈÌÜk´\\@qàsĔÄQºpRij¼èi†`¶—„bXƒrBgxfv»ŽuUiˆŒ^v~”J¬mVp´£Œ´VWrnP½ì¢BX‚¬h™ŠðX¹^TjVœŠriªj™tŊÄm€tPGx¸bgRšŽsT`ZozÆO]’ÒFô҆Oƒ‡ŊŒvŞ”p’cGŒêŠsx´DR–Œ{A†„EOr°Œ•žx|íœbˆ³Wm~DVjºéNN†Ëܲɶ­GƒxŷCStŸ}]ûō•SmtuÇÃĕN•™āg»šíT«u}ç½BĵÞʣ¥ëÊ¡Mێ³ãȅ¡ƋaǩÈÉQ‰†G¢·lG|›„tvgrrf«†ptęŘnŠÅĢr„I²¯LiØsPf˜_vĠd„xM prʹšL¤‹¤‡eˌƒÀđK“žïÙVY§]I‡óáĥ]ķ†Kˆ¥Œj|pŇ\\kzţ¦šnņäÔVĂîά|vW’®l¤èØr‚˜•xm¶ă~lÄƯĄ̈́öȄEÔ¤ØQĄ–Ą»ƢjȦOǺ¨ìSŖÆƬy”Qœv`–cwƒZSÌ®ü±DŽ]ŀç¬B¬©ńzƺŷɄeeOĨS’Œfm Ċ‚ƀP̎ēz©Ċ‚ÄÕÊmgŸÇsJ¥ƔˆŊśæ’΁Ñqv¿íUOµª‰ÂnĦÁ_½ä@ê텣P}Ġ[@gġ}g“ɊדûÏWXá¢užƻÌsNͽƎÁ§č՛AēeL³àydl›¦ĘVçŁpśdžĽĺſʃQíÜçÛġԏsĕ¬—Ǹ¯YßċġHµ ¡eå`ļƒrĉŘóƢFì“ĎWøxÊk†”ƈdƬv|–I|·©NqńRŀƒ¤é”eŊœŀ›ˆàŀU²ŕƀB‚Q£Ď}L¹Îk@©ĈuǰųǨ”Ú§ƈnTËÇéƟÊcfčŤ^Xm‡—HĊĕË«W·ċëx³ǔķÐċJā‚wİ_ĸ˜Ȁ^ôWr­°oú¬Ħ…ŨK~”ȰCĐ´Ƕ£’fNÎèâw¢XnŮeÂÆĶŽ¾¾xäLĴĘlļO¤ÒĨA¢Êɚ¨®‚ØCÔ ŬGƠ”ƦYĜ‡ĘÜƬDJ—g_ͥœ@čŅĻA“¶¯@wÎqC½Ĉ»NŸăëK™ďÍQ“Ùƫ[«Ãí•gßÔÇOÝáW‘ñuZ“¯ĥ€Ÿŕā¡ÑķJu¤E Ÿå¯°WKɱ_d_}}vyŸõu¬ï¹ÓU±½@gÏ¿rýD‰†g…Cd‰µ—°MFYxw¿CG£‹Rƛ½Õ{]L§{qqąš¿BÇƻğëšܭNJË|c²}Fµ}›ÙRsÓpg±ŠQNqǫŋRwŕnéÑÉKŸ†«SeYR…ŋ‹@{¤SJ}šD Ûǖ֍Ÿ]gr¡µŷjqWÛham³~S«“„›Þ]"]],"encodeOffsets":[[[134456,44547]]]}},{"type":"Feature","id":"320000","properties":{"id":"320000","cp":[119.767413,33.041544],"name":"江苏","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@cþÅPiŠ`ZŸRu¥É\\]~°ŽY`µ†Óƒ^phÁbnÀşúŽòa–ĬºTÖŒb‚˜e¦¦€{¸ZâćNpŒ©žHr|^ˆmjhŠSEb\\afv`sz^lkŽlj‹Ätg‹¤D˜­¾Xš¿À’|ДiZ„ȀåB·î}GL¢õcßjaŸyBFµÏC^ĭ•cÙt¿sğH]j{s©HM¢ƒQnDÀ©DaÜތ·jgàiDbPufjDk`dPOîƒhw¡ĥ‡¥šG˜ŸP²ĐobºrY†„î¶aHŢ´ ]´‚rılw³r_{£DB_Ûdåuk|ˆŨ¯F Cºyr{XFy™e³Þċ‡¿Â™kĭB¿„MvÛpm`rÚã”@ƹhågËÖƿxnlč¶Åì½Ot¾dJlŠVJʜǀœŞqvnOŠ^ŸJ”Z‘ż·Q}ê͎ÅmµÒ]Žƍ¦Dq}¬R^èĂ´ŀĻĊIԒtžIJyQŐĠMNtœR®òLh‰›Ěs©»œ}OӌGZz¶A\\jĨFˆäOĤ˜HYš†JvÞHNiÜaϚɖnFQlšNM¤ˆB´ĄNöɂtp–Ŭdf先‹qm¿QûŠùއÚb¤uŃJŴu»¹Ą•lȖħŴw̌ŵ²ǹǠ͛hĭłƕrçü±Y™xci‡tğ®jű¢KOķ•Coy`å®VTa­_Ā]ŐÝɞï²ʯÊ^]afYǸÃĆēĪȣJđ͍ôƋĝÄ͎ī‰çÛɈǥ£­ÛmY`ó£Z«§°Ó³QafusNıDž_k}¢m[ÝóDµ—¡RLčiXy‡ÅNïă¡¸iĔϑNÌŕoēdōîåŤûHcs}~Ûwbù¹£¦ÓCt‹OPrƒE^ÒoŠg™ĉIµžÛÅʹK…¤½phMŠü`o怆ŀ"],"encodeOffsets":[[121740,32276]]}},{"type":"Feature","id":"330000","properties":{"id":"330000","cp":[120.153576,29.287459],"name":"浙江","childNum":45},"geometry":{"type":"MultiPolygon","coordinates":[["@@E^dQ]K"],["@@jX^j‡"],["@@sfŠbU‡"],["@@qP\\xz[ck"],["@@‘Rƒ¢‚FX}°[s_"],["@@Cbœ\\—}"],["@@e|v\\la{u"],["@@v~u}"],["@@QxÂF¯}"],["@@¹nŒvÞs¯o"],["@@rSkUEj"],["@@bi­ZŒP"],["@@p[}INf"],["@@À¿€"],["@@¹dnbŒ…"],["@@rSŸBnR"],["@@g~h}"],["@@FlEk"],["@@OdPc"],["@@v[u\\"],["@@FjâL~wyoo~›sµL–\\"],["@@¬e¹aNˆ"],["@@\\nÔ¡q]L³ë\\ÿ®ŒQ֎"],["@@ÊA­©[¬"],["@@KxŒv­"],["@@@hlIk]"],["@@pW{o||j"],["@@Md|_mC"],["@@¢…X£ÏylD¼XˆtH"],["@@hlÜ[LykAvyfw^Ež›¤"],["@@fp¤Mus“R"],["@@®_ma~•LÁ¬šZ"],["@@iM„xZ"],["@@ZcYd"],["@@Z~dOSo|A¿qZv"],["@@@`”EN¡v"],["@@|–TY{"],["@@@n@m"],["@@XWkCT\\"],["@@ºwšZRkĕWO¢"],["@@™X®±Grƪ\\ÔáXq{‹"],["@@ůTG°ĄLHm°UC‹"],["@@¤Ž€aÜx~}dtüGæţŎíĔcŖpMËВj碷ðĄÆMzˆjWKĎ¢Q¶˜À_꒔_Bı€i«pZ€gf€¤Nrq]§ĂN®«H±‡yƳí¾×ŸīàLłčŴǝĂíÀBŖÕªˆŠÁŖHŗʼnåqûõi¨hÜ·ƒñt»¹ýv_[«¸m‰YL¯‰Qª…mĉÅdMˆ•gÇjcº«•ęœ¬­K­´ƒB«Âącoċ\\xKd¡gěŧ«®á’[~ıxu·Å”KsËɏc¢Ù\\ĭƛëbf¹­ģSƒĜkáƉÔ­ĈZB{ŠaM‘µ‰fzʼnfåÂŧįƋǝÊĕġć£g³ne­ą»@­¦S®‚\\ßðCšh™iqªĭiAu‡A­µ”_W¥ƣO\\lċĢttC¨£t`ˆ™PZäuXßBs‡Ļyek€OđġĵHuXBšµ]׌‡­­\\›°®¬F¢¾pµ¼kŘó¬Wät’¸|@ž•L¨¸µr“ºù³Ù~§WI‹ŸZWŽ®’±Ð¨ÒÉx€`‰²pĜ•rOògtÁZ}þÙ]„’¡ŒŸFK‚wsPlU[}¦Rvn`hq¬\\”nQ´ĘRWb”‚_ rtČFI֊kŠŠĦPJ¶ÖÀÖJĈĄTĚòžC ²@Pú…Øzœ©PœCÈÚœĒ±„hŖ‡l¬â~nm¨f©–iļ«m‡nt–u†ÖZÜÄj“ŠLŽ®E̜Fª²iÊxبžIÈhhst"],["@@o\\V’zRZ}y"],["@@†@°¡mۛGĕ¨§Ianá[ýƤjfæ‡ØL–•äGr™"]],"encodeOffsets":[[[125592,31553]],[[125785,31436]],[[125729,31431]],[[125513,31380]],[[125223,30438]],[[125115,30114]],[[124815,29155]],[[124419,28746]],[[124095,28635]],[[124005,28609]],[[125000,30713]],[[125111,30698]],[[125078,30682]],[[125150,30684]],[[124014,28103]],[[125008,31331]],[[125411,31468]],[[125329,31479]],[[125626,30916]],[[125417,30956]],[[125254,30976]],[[125199,30997]],[[125095,31058]],[[125083,30915]],[[124885,31015]],[[125218,30798]],[[124867,30838]],[[124755,30788]],[[124802,30809]],[[125267,30657]],[[125218,30578]],[[125200,30562]],[[124968,30474]],[[125167,30396]],[[124955,29879]],[[124714,29781]],[[124762,29462]],[[124325,28754]],[[123990,28459]],[[125366,31477]],[[125115,30363]],[[125369,31139]],[[122495,31878]],[[125329,30690]],[[125192,30787]]]}},{"type":"Feature","id":"340000","properties":{"id":"340000","cp":[117.283042,31.26119],"name":"安徽","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@^iuLX^"],["@@‚e©Ehl"],["@@°ZÆëϵmkǀwÌÕæhºgBĝâqÙĊz›ÖgņtÀÁÊÆá’hEz|WzqD¹€Ÿ°E‡ŧl{ævÜcA`¤C`|´qžxIJkq^³³ŸGšµbƒíZ…¹qpa±ď OH—¦™Ħˆx¢„gPícOl_iCveaOjCh߸i݋bÛªCC¿€m„RV§¢A|t^iĠGÀtÚs–d]ĮÐDE¶zAb àiödK¡~H¸íæAžǿYƒ“j{ď¿‘™À½W—®£ChŒÃsiŒkkly]_teu[bFa‰Tig‡n{]Gqªo‹ĈMYá|·¥f¥—őaSÕė™NµñĞ«ImŒ_m¿Âa]uĜp …Z_§{Cƒäg¤°r[_Yj‰ÆOdý“[ŽI[á·¥“Q_n‡ùgL¾mv™ˊBÜÆ¶ĊJhšp“c¹˜O]iŠ]œ¥ jtsggJǧw×jÉ©±›EFˍ­‰Ki”ÛÃÕYv…s•ˆm¬njĻª•§emná}k«ŕˆƒgđ²Ù›DǤ›í¡ªOy›†×Où±@DŸñSęćăÕIÕ¿IµĥO‰‰jNÕËT¡¿tNæŇàåyķrĕq§ÄĩsWÆßŽF¶žX®¿‰mŒ™w…RIޓfßoG‘³¾©uyH‘į{Ɓħ¯AFnuP…ÍÔzšŒV—dàôº^Ðæd´€‡oG¤{S‰¬ćxã}›ŧ×Kǥĩ«žÕOEзÖdÖsƘѨ[’Û^Xr¢¼˜§xvěƵ`K”§ tÒ´Cvlo¸fzŨð¾NY´ı~ÉĔē…ßúLÃϖ_ÈÏ|]ÂÏFl”g`bšežž€n¾¢pU‚h~ƴ˶_‚r sĄ~cž”ƈ]|r c~`¼{À{ȒiJjz`îÀT¥Û³…]’u}›f…ïQl{skl“oNdŸjŸäËzDvčoQŠďHI¦rb“tHĔ~BmlRš—V_„ħTLnñH±’DžœL‘¼L˜ªl§Ťa¸ŒĚlK²€\\RòvDcÎJbt[¤€D@®hh~kt°ǾzÖ@¾ªdb„YhüóZ ň¶vHrľ\\ʗJuxAT|dmÀO„‹[ÃԋG·ĚąĐlŪÚpSJ¨ĸˆLvÞcPæķŨŽ®mАˆálŸwKhïgA¢ųƩޖ¤OȜm’°ŒK´"]],"encodeOffsets":[[[121722,32278]],[[119475,30423]],[[119168,35472]]]}},{"type":"Feature","id":"350000","properties":{"id":"350000","cp":[118.306239,26.075302],"name":"福建","childNum":18},"geometry":{"type":"MultiPolygon","coordinates":[["@@“zht´‡]"],["@@aj^~ĆG—©O"],["@@ed¨„C}}i"],["@@@vˆPGsQ"],["@@‰sBz‚ddW]Q"],["@@SލQ“{"],["@@NŽVucW"],["@@qptBAq"],["@@‰’¸[mu"],["@@Q\\pD]_"],["@@jSwUadpF"],["@@eXª~ƒ•"],["@@AjvFso"],["@@fT–›_Çí\\Ÿ™—v|ba¦jZÆy€°"],["@@IjJi"],["@@wJI€ˆxš«¼AoNe{M­"],["@@K‰±¡Óˆ”ČäeZ"],["@@k¡¹Eh~c®wBk‹UplÀ¡I•~Māe£bN¨gZý¡a±Öcp©PhžI”Ÿ¢Qq…ÇGj‹|¥U™ g[Ky¬ŏ–v@OpˆtÉEŸF„\\@ åA¬ˆV{Xģ‰ĐBy…cpě…¼³Ăp·¤ƒ¥o“hqqÚ¡ŅLsƒ^ᗞ§qlŸÀhH¨MCe»åÇGD¥zPO£čÙkJA¼ß–ėu›ĕeûҍiÁŧSW¥˜QŠûŗ½ùěcݧSùĩąSWó«íęACµ›eR—åǃRCÒÇZÍ¢‹ź±^dlsŒtjD¸•‚ZpužÔâÒH¾oLUêÃÔjjēò´ĄW‚ƛ…^Ñ¥‹ĦŸ@Çò–ŠmŒƒOw¡õyJ†yD}¢ďÑÈġfŠZd–a©º²z£šN–ƒjD°Ötj¶¬ZSÎ~¾c°¶Ðm˜x‚O¸¢Pl´žSL|¥žA†ȪĖM’ņIJg®áIJČĒü` ŽQF‡¬h|ÓJ@zµ |ê³È ¸UÖŬŬÀEttĸr‚]€˜ðŽM¤ĶIJHtÏ A’†žĬkvsq‡^aÎbvŒd–™fÊòSD€´Z^’xPsÞrv‹ƞŀ˜jJd×ŘÉ ®A–ΦĤd€xĆqAŒ†ZR”ÀMźŒnĊ»ŒİÐZ— YX–æJŠyĊ²ˆ·¶q§·–K@·{s‘Xãô«lŗ¶»o½E¡­«¢±¨Yˆ®Ø‹¶^A™vWĶGĒĢžPlzfˆļŽtàAvWYãšO_‡¤sD§ssČġ[kƤPX¦Ž`¶“ž®ˆBBvĪjv©šjx[L¥àï[F…¼ÍË»ğV`«•Ip™}ccÅĥZE‹ãoP…´B@ŠD—¸m±“z«Ƴ—¿å³BRضˆœWlâþäą`“]Z£Tc— ĹGµ¶H™m@_©—kŒ‰¾xĨ‡ôȉðX«½đCIbćqK³Á‹Äš¬OAwã»aLʼn‡ËĥW[“ÂGI—ÂNxij¤D¢ŽîĎÎB§°_JœGsƒ¥E@…¤uć…P‘å†cuMuw¢BI¿‡]zG¹guĮck\\_"]],"encodeOffsets":[[[123250,27563]],[[122541,27268]],[[123020,27189]],[[122916,27125]],[[122887,26845]],[[122808,26762]],[[122568,25912]],[[122778,26197]],[[122515,26757]],[[122816,26587]],[[123388,27005]],[[122450,26243]],[[122578,25962]],[[121255,25103]],[[120987,24903]],[[122339,25802]],[[121042,25093]],[[122439,26024]]]}},{"type":"Feature","id":"360000","properties":{"id":"360000","cp":[115.592151,27.676493],"name":"江西","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ĢĨƐgÂMD~ņªe^\\^§„ý©j׍cZ†Ø¨zdÒa¶ˆlҍJŒìõ`oz÷@¤u޸´†ôęöY¼‰HČƶajlÞƩ¥éZ[”|h}^U Œ ¥p„ĄžƦO lt¸Æ €Q\\€ŠaÆ|CnÂOjt­ĚĤd’ÈŒF`’¶„@Ð딠¦ōҞ¨Sêv†HĢûXD®…QgėWiØPÞìºr¤dž€NĠ¢l–•ĄtZoœCƞÔºCxrpĠV®Ê{f_Y`_ƒeq’’®Aot`@o‚DXfkp¨|Šs¬\\D‘ÄSfè©Hn¬…^DhÆyøJh“ØxĢĀLʈ„ƠPżċĄwȠ̦G®ǒĤäTŠÆ~ĦwŠ«|TF¡Šn€c³Ïå¹]ĉđxe{ÎӐ†vOEm°BƂĨİ|G’vz½ª´€H’àp”eJ݆Qšxn‹ÀŠW­žEµàXÅĪt¨ÃĖrÄwÀFÎ|ňÓMå¼ibµ¯»åDT±m[“r«_gŽmQu~¥V\\OkxtL E¢‹ƒ‘Ú^~ýê‹Pó–qo슱_Êw§ÑªåƗ⼋mĉŹ‹¿NQ“…YB‹ąrwģcÍ¥B•Ÿ­ŗÊcØiI—žƝĿuŒqtāwO]‘³YCñTeɕš‹caub͈]trlu€ī…B‘ПGsĵıN£ï—^ķqss¿FūūV՟·´Ç{éĈý‰ÿ›OEˆR_ŸđûIċâJh­ŅıN‘ȩĕB…¦K{Tk³¡OP·wn—µÏd¯}½TÍ«YiµÕsC¯„iM•¤™­•¦¯P|ÿUHv“he¥oFTu‰õ\\ŽOSs‹MòđƇiaºćXŸĊĵà·çhƃ÷ǜ{‘ígu^›đg’m[×zkKN‘¶Õ»lčÓ{XSƉv©_ÈëJbVk„ĔVÀ¤P¾ºÈMÖxlò~ªÚàGĂ¢B„±’ÌŒK˜y’áV‡¼Ã~­…`g›ŸsÙfI›Ƌlę¹e|–~udjˆuTlXµf`¿JdŠ[\\˜„L‚‘²"],"encodeOffsets":[[116689,26234]]}},{"type":"Feature","id":"370000","properties":{"id":"370000","cp":[118.000923,36.275807],"name":"山东","childNum":13},"geometry":{"type":"MultiPolygon","coordinates":[["@@Xjd]{K"],["@@itbFHy"],["@@HlGk"],["@@T‚ŒGŸy"],["@@K¬˜•‹U"],["@@WdXc"],["@@PtOs"],["@@•LnXhc"],["@@ppVƒu]Or"],["@@cdzAUa"],["@@udRhnCI‡"],["@@ˆoIƒpR„"],["@@Ľč{fzƤî’Kš–ÎMĮ]†—ZFˆ½Y]â£ph’™š¶¨râøÀ†ÎǨ¤^ºÄ”Gzˆ~grĚĜlĞÆ„LĆdž¢Îo¦–cv“Kb€gr°Wh”mZp ˆL]LºcU‰Æ­n”żĤÌǜbAnrOAœ´žȊcÀbƦUØrĆUÜøœĬƞ†š˜Ez„VL®öØBkŖÝĐ˹ŧ̄±ÀbÎɜnb²ĦhņBĖ›žįĦåXćì@L¯´ywƕCéõė ƿ¸‘lµ¾Z|†ZWyFYŸ¨Mf~C¿`€à_RÇzwƌfQnny´INoƬˆèôº|sT„JUš›‚L„îVj„ǎ¾Ē؍‚Dz²XPn±ŴPè¸ŔLƔÜƺ_T‘üÃĤBBċȉöA´fa„˜M¨{«M`‡¶d¡ô‰Ö°šmȰBÔjjŒ´PM|”c^d¤u•ƒ¤Û´Œä«ƢfPk¶Môlˆ]Lb„}su^ke{lC‘…M•rDŠÇ­]NÑFsmoõľH‰yGă{{çrnÓE‰‹ƕZGª¹Fj¢ïW…uøCǷ돡ąuhÛ¡^Kx•C`C\\bÅxì²ĝÝ¿_N‰īCȽĿåB¥¢·IŖÕy\\‡¹kx‡Ã£Č×GDyÕ¤ÁçFQ¡„KtŵƋ]CgÏAùSed‡cÚź—ŠuYfƒyMmhUWpSyGwMPqŀ—›Á¼zK›¶†G•­Y§Ëƒ@–´śÇµƕBmœ@Io‚g——Z¯u‹TMx}C‘‰VK‚ï{éƵP—™_K«™pÛÙqċtkkù]gŽ‹Tğwo•ɁsMõ³ă‡AN£™MRkmEʕč™ÛbMjÝGu…IZ™—GPģ‡ãħE[iµBEuŸDPԛ~ª¼ętŠœ]ŒûG§€¡QMsğNPŏįzs£Ug{đJĿļā³]ç«Qr~¥CƎÑ^n¶ÆéÎR~ݏY’I“] P‰umŝrƿ›‰›Iā‹[x‰edz‹L‘¯v¯s¬ÁY…~}…ťuٌg›ƋpÝĄ_ņī¶ÏSR´ÁP~ž¿Cyžċßdwk´Ss•X|t‰`Ä Èð€AªìÎT°¦Dd–€a^lĎDĶÚY°Ž`ĪŴǒˆ”àŠv\\ebŒZH„ŖR¬ŢƱùęO•ÑM­³FۃWp[ƒ"]],"encodeOffsets":[[[123806,39303]],[[123821,39266]],[[123742,39256]],[[123702,39203]],[[123649,39066]],[[123847,38933]],[[123580,38839]],[[123894,37288]],[[123043,36624]],[[123344,38676]],[[123522,38857]],[[123628,38858]],[[118260,36742]]]}},{"type":"Feature","id":"410000","properties":{"id":"410000","cp":[113.665412,33.757975],"name":"河南","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@•ýL™ùµP³swIÓxcŢĞð†´E®žÚPt†ĴXØx¶˜@«ŕŕQGƒ‹Yfa[şu“ßǩ™đš_X³ijÕčC]kbc•¥CS¯ëÍB©÷‹–³­Siˆ_}m˜YTtž³xlàcȂzÀD}ÂOQ³ÐTĨ¯†ƗòËŖ[hœł‹Ŧv~††}ÂZž«¤lPǕ£ªÝŴÅR§ØnhcŒtâk‡nύ­ľŹUÓÝdKuķ‡I§oTũÙďkęĆH¸ÓŒ\\ăŒ¿PcnS{wBIvɘĽ[GqµuŸŇôYgûƒZcaŽ©@½Õǽys¯}lgg@­C\\£as€IdÍuCQñ[L±ęk·‹ţb¨©kK—’»›KC²‘òGKmĨS`ƒ˜UQ™nk}AGē”sqaJ¥ĐGR‰ĎpCuÌy ã iMc”plk|tRk†ðœev~^‘´†¦ÜŽSí¿_iyjI|ȑ|¿_»d}qŸ^{“Ƈdă}Ÿtqµ`Ƴĕg}V¡om½fa™Ço³TTj¥„tĠ—Ry”K{ùÓjuµ{t}uËR‘iŸvGŠçJFjµŠÍyqΘàQÂFewixGw½Yŷpµú³XU›½ġy™łå‰kÚwZXˆ·l„¢Á¢K”zO„Λ΀jc¼htoDHr…|­J“½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQ…Ťƒ]MÛfaQpě±ǽ¾]u­Fu‹÷nƒ™čįADp}AjmcEǒaª³o³ÆÍSƇĈÙDIzˑ赟^ˆKLœ—i—Þñ€[œƒaA²zz‰Ì÷Dœ|[šíijgf‚ÕÞd®|`ƒĆ~„oĠƑô³Ŋ‘D×°¯CsŠøÀ«ì‰UMhTº¨¸ǡîS–Ô„DruÂÇZ•ÖEŽ’vPZ„žW”~؋ÐtĄE¢¦Ðy¸bŠô´oŬ¬Ž²Ês~€€]®tªašpŎJ¨Öº„_ŠŔ–`’Ŗ^Ѝ\\Ĝu–”~m²Ƹ›¸fW‰ĦrƔ}Î^gjdfÔ¡J}\\n C˜¦þWxªJRÔŠu¬ĨĨmF†dM{\\d\\ŠYÊ¢ú@@¦ª²SŠÜsC–}fNècbpRmlØ^g„d¢aÒ¢CZˆZxvÆ¶N¿’¢T@€uCœ¬^ĊðÄn|žlGl’™Rjsp¢ED}€Fio~ÔNŽ‹„~zkĘHVsDzßjƒŬŒŠŢ`Pûàl¢˜\\ÀœEhŽİgÞē X¼Pk–„|m"],"encodeOffsets":[[118256,37017]]}},{"type":"Feature","id":"420000","properties":{"id":"420000","cp":[113.298572,30.684355],"name":"湖北","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@AB‚"],["@@lskt"],["@@¾«}{ra®pîÃ\\™›{øCŠËyyB±„b\\›ò˜Ý˜jK›‡L ]ĎĽÌ’JyÚCƈćÎT´Å´pb©È‘dFin~BCo°BĎĚømvŒ®E^vǾ½Ĝ²Ro‚bÜeNŽ„^ĺ£R†¬lĶ÷YoĖ¥Ě¾|sOr°jY`~I”¾®I†{GqpCgyl{‡£œÍƒÍyPL“¡ƒ¡¸kW‡xYlÙæŠšŁĢzœ¾žV´W¶ùŸo¾ZHxjwfx„GNÁ•³Xéæl¶‰EièIH‰ u’jÌQ~v|sv¶Ôi|ú¢Fh˜Qsğ¦ƒSiŠBg™ÐE^ÁÐ{–čnOÂȞUÎóĔ†ÊēIJ}Z³½Mŧïeyp·uk³DsѨŸL“¶_œÅuèw»—€¡WqÜ]\\‘Ò§tƗcÕ¸ÕFÏǝĉăxŻČƟO‡ƒKÉġÿ×wg”÷IÅzCg†]m«ªGeçÃTC’«[‰t§{loWeC@ps_Bp‘­r‘„f_``Z|ei¡—oċMqow€¹DƝӛDYpûs•–‹Ykıǃ}s¥ç³[§ŸcYЧHK„«Qy‰]¢“wwö€¸ïx¼ņ¾Xv®ÇÀµRĠЋžHMž±cÏd„ƒǍũȅȷ±DSyúĝ£ŤĀàtÖÿï[îb\\}pĭÉI±Ñy…¿³x¯N‰o‰|¹H™ÏÛm‹júË~Tš•u˜ęjCöAwě¬R’đl¯ Ñb­‰ŇT†Ŀ_[Œ‘IčĄʿnM¦ğ\\É[T·™k¹œ©oĕ@A¾w•ya¥Y\\¥Âaz¯ãÁ¡k¥ne£Ûw†E©Êō¶˓uoj_Uƒ¡cF¹­[Wv“P©w—huÕyBF“ƒ`R‹qJUw\\i¡{jŸŸEPïÿ½fć…QÑÀQ{ž‚°‡fLԁ~wXg—ītêݾ–ĺ‘Hdˆ³fJd]‹HJ²…E€ƒoU¥†HhwQsƐ»Xmg±çve›]Dm͂PˆoCc¾‹_h”–høYrŊU¶eD°Č_N~øĹĚ·`z’]Äþp¼…äÌQŒv\\rCŒé¾TnkžŐڀÜa‡“¼ÝƆ̶Ûo…d…ĔňТJq’Pb ¾|JŒ¾fXŠƐîĨ_Z¯À}úƲ‹N_ĒĊ^„‘ĈaŐyp»CÇĕKŠšñL³ŠġMŒ²wrIÒŭxjb[œžn«øœ˜—æˆàƒ ^²­h¯Ú€ŐªÞ¸€Y²ĒVø}Ā^İ™´‚LŠÚm„¥ÀJÞ{JVŒųÞŃx×sxxƈē ģMř–ÚðòIf–Ċ“Œ\\Ʈ±ŒdʧĘD†vČ_Àæ~DŒċ´A®µ†¨ØLV¦êHÒ¤"]],"encodeOffsets":[[[113712,34000]],[[115612,30507]],[[113649,34054]]]}},{"type":"Feature","id":"430000","properties":{"id":"430000","cp":[111.782279,28.09409],"name":"湖南","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@—n„FTs"],["@@ßÅÆá‰½ÔXr—†CO™“…ËR‘ïÿĩ­TooQyšÓ[‹ŅBE¬–ÎÓXa„į§Ã¸G °ITxp‰úxÚij¥Ïš–̾ŠedžÄ©ĸG…œàGh‚€M¤–Â_U}Ċ}¢pczfŠþg¤€”ÇòAV‘‹M"],["@@©K—ƒA·³CQ±Á«³BUŠƑ¹AŠtćOw™D]ŒJiØSm¯b£‘ylƒ›X…HËѱH•«–‘C^õľA–Å§¤É¥„ïyuǙuA¢^{ÌC´­¦ŷJ£^[†“ª¿‡ĕ~•Ƈ…•N… skóā‡¹¿€ï]ă~÷O§­@—Vm¡‹Qđ¦¢Ĥ{ºjԏŽŒª¥nf´•~ÕoŸž×Ûą‹MąıuZœmZcÒ IJβSÊDŽŶ¨ƚƒ’CÖŎªQؼrŭŽ­«}NÏürʬŒmjr€@ĘrTW ­SsdHzƓ^ÇÂyUi¯DÅYlŹu{hTœ}mĉ–¹¥ě‰Dÿë©ıÓ[Oº£ž“¥ót€ł¹MՄžƪƒ`Pš…Di–ÛUоÅ‌ìˆU’ñB“È£ýhe‰dy¡oċ€`pfmjP~‚kZa…ZsÐd°wj§ƒ@€Ĵ®w~^‚kÀÅKvNmX\\¨a“”сqvíó¿F„¤¡@ũÑVw}S@j}¾«pĂr–ªg àÀ²NJ¶¶Dô…K‚|^ª†Ž°LX¾ŴäPᜣEXd›”^¶›IJÞܓ~‘u¸ǔ˜Ž›MRhsR…e†`ÄofIÔ\\Ø  i”ćymnú¨cj ¢»–GČìƊÿШXeĈ¾Oð Fi ¢|[jVxrIQŒ„_E”zAN¦zLU`œcªx”OTu RLÄ¢dV„i`p˔vŎµªÉžF~ƒØ€d¢ºgİàw¸Áb[¦Zb¦–z½xBĖ@ªpº›šlS¸Ö\\Ĕ[N¥ˀmĎă’J\\‹ŀ`€…ňSڊĖÁĐiO“Ĝ«BxDõĚiv—ž–S™Ì}iùŒžÜnšÐºGŠ{Šp°M´w†ÀÒzJ²ò¨ oTçüöoÛÿñŽőФ‚ùTz²CȆȸǎۃƑÐc°dPÎŸğ˶[Ƚu¯½WM¡­Éž“’B·rížnZŸÒ `‡¨GA¾\\pē˜XhÆRC­üWGġu…T靧Ŏѝ©ò³I±³}_‘‹EÃħg®ęisÁPDmÅ{‰b[Rşs·€kPŸŽƥƒóRo”O‹ŸVŸ~]{g\\“êYƪ¦kÝbiċƵŠGZ»Ěõ…ó·³vŝž£ø@pyö_‹ëŽIkѵ‡bcѧy…×dY؎ªiþž¨ƒ[]f]Ņ©C}ÁN‡»hĻħƏ’ĩ"]],"encodeOffsets":[[[115640,30489]],[[112543,27312]],[[116690,26230]]]}},{"type":"Feature","id":"440000","properties":{"id":"440000","cp":[113.280637,23.125178],"name":"广东","childNum":24},"geometry":{"type":"MultiPolygon","coordinates":[["@@QdˆAua"],["@@ƒlxDLo"],["@@sbhNLo"],["@@Ă āŸ"],["@@WltO[["],["@@Krœ]S"],["@@e„„I]y"],["@@I|„Mym"],["@@ƒÛ³LSŒž¼Y"],["@@nvºB–ëui©`¾"],["@@zdšÛ›Jw®"],["@@†°…¯"],["@@a yAª¸ËJIx،@€ĀHAmßV¡o•fu•o"],["@@šs‰ŗÃÔėAƁ›ZšÄ ~°ČP‚‹äh"],["@@‹¶Ý’Ì‚vmĞh­ı‡Q"],["@@HœŠdSjĒ¢D}war…“u«ZqadYM"],["@@elŒ\\LqqU"],["@@~rMo\\"],["@@f„^ƒC"],["@@øPªoj÷ÍÝħXČx”°Q¨ıXNv"],["@@gÇƳˆŽˆ”oˆŠˆ[~tly"],["@@E–ÆC¿‘"],["@@OŽP"],["@@w‹†đóg‰™ĝ—[³‹¡VÙæÅöM̳¹pÁaËýý©D©Ü“JŹƕģGą¤{Ùū…ǘO²«BƱéA—Ò‰ĥ‡¡«BhlmtÃPµyU¯uc“d·w_bŝcīímGOŽ|KP’ȏ‡ŹãŝIŕŭŕ@Óoo¿ē‹±ß}Ž…ŭ‚ŸIJWÈCőâUâǙI›ğʼn©I›ijEׅÁ”³Aó›wXJþ±ÌŒÜӔĨ£L]ĈÙƺZǾĆĖMĸĤfŒÎĵl•ŨnȈ‘ĐtF”Š–FĤ–‚êk¶œ^k°f¶gŠŽœ}®Fa˜f`vXŲxl˜„¦–ÔÁ²¬ÐŸ¦pqÊ̲ˆi€XŸØRDÎ}†Ä@ZĠ’s„x®AR~®ETtĄZ†–ƈfŠŠHâÒÐA†µ\\S¸„^wĖkRzŠalŽŜ|E¨ÈNĀňZTŒ’pBh£\\ŒĎƀuXĖtKL–¶G|Ž»ĺEļĞ~ÜĢÛĊrˆO˜Ùîvd]nˆ¬VœÊĜ°R֟pM††–‚ƂªFbwžEÀˆ˜©Œž\\…¤]ŸI®¥D³|ˎ]CöAŤ¦…æ’´¥¸Lv¼€•¢ĽBaô–F~—š®²GÌҐEY„„œzk¤’°ahlV՞I^‹šCxĈPŽsB‰ƒºV‰¸@¾ªR²ĨN]´_eavSi‡vc•}p}Đ¼ƌkJœÚe thœ†_¸ ºx±ò_xN›Ë‹²‘@ƒă¡ßH©Ùñ}wkNÕ¹ÇO½¿£ĕ]ly_WìIžÇª`ŠuTÅxYĒÖ¼k֞’µ‚MžjJÚwn\\h‘œĒv]îh|’È›Ƅøègž¸Ķß ĉĈWb¹ƀdéƌNTtP[ŠöSvrCZžžaGuœbo´ŖÒÇА~¡zCI…özx¢„Pn‹•‰Èñ @ŒĥÒ¦†]ƞŠV}³ăĔñiiÄÓVépKG½Ä‘ÓávYo–C·sit‹iaÀy„ŧΡÈYDÑům}‰ý|m[węõĉZÅxUO}÷N¹³ĉo_qtă“qwµŁYلǝŕ¹tïÛUïmRCº…ˆĭ|µ›ÕÊK™½R‘ē ó]‘–GªęAx–»HO£|ām‡¡diď×YïYWªʼnOeÚtĐ«zđ¹T…ā‡úE™á²\\‹ķÍ}jYàÙÆſ¿Çdğ·ùTßÇţʄ¡XgWÀLJğ·¿ÃˆOj YÇ÷Qě‹i"]],"encodeOffsets":[[[117381,22988]],[[116552,22934]],[[116790,22617]],[[116973,22545]],[[116444,22536]],[[116931,22515]],[[116496,22490]],[[116453,22449]],[[113301,21439]],[[118726,21604]],[[118709,21486]],[[113210,20816]],[[115482,22082]],[[113171,21585]],[[113199,21590]],[[115232,22102]],[[115739,22373]],[[115134,22184]],[[113056,21175]],[[119573,21271]],[[119957,24020]],[[115859,22356]],[[116561,22649]],[[116285,22746]]]}},{"type":"Feature","id":"450000","properties":{"id":"450000","cp":[108.320004,22.82402],"name":"广西","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@H– TQ§•A"],["@@ĨʪƒLƒƊDÎĹĐCǦė¸zÚGn£¾›rªŀÜt¬@֛ڈSx~øOŒ˜ŶÐÂæȠ\\„ÈÜObĖw^oބLf¬°bI lTØB̈F£Ć¹gñĤaY“t¿¤VSñœK¸¤nM†¼‚JE±„½¸šŠño‹ÜCƆæĪ^ŠĚQÖ¦^‡ˆˆf´Q†üÜʝz¯šlzUĺš@쇀p¶n]sxtx¶@„~ÒĂJb©gk‚{°‚~c°`ԙ¬rV\\“la¼¤ôá`¯¹LC†ÆbŒxEræO‚v[H­˜„[~|aB£ÖsºdAĐzNÂðsŽÞƔ…Ĥªbƒ–ab`ho¡³F«èVloޤ™ÔRzpp®SŽĪº¨ÖƒºN…ij„d`’a”¦¤F³ºDÎńĀìŠCžĜº¦Ċ•~nS›|gźvZkCÆj°zVÈÁƔ]LÊFZg…čP­kini«‹qǀcz͔Y®¬Ů»qR×ō©DՄ‘§ƙǃŵTÉĩ±ŸıdÑnYY›IJvNĆÌØÜ Öp–}e³¦m‹©iÓ|¹Ÿħņ›|ª¦QF¢Â¬ʖovg¿em‡^ucà÷gՎuŒíÙćĝ}FϼĹ{µHK•sLSđƃr‹č¤[Ag‘oS‹ŇYMÿ§Ç{Fśbky‰lQxĕƒ]T·¶[B…ÑÏGáşşƇe€…•ăYSs­FQ}­Bƒw‘tYğÃ@~…C̀Q ×W‡j˱rÉ¥oÏ ±«ÓÂ¥•ƒ€k—ŽwWűŒmcih³K›~‰µh¯e]lµ›él•E쉕E“ďs‡’mǖŧē`ãògK_ÛsUʝ“ćğ¶hŒöŒO¤Ǜn³Žc‘`¡y‹¦C‘ez€YŠwa™–‘[ďĵűMę§]X˜Î_‚훘Û]é’ÛUćİÕBƣ±…dƒy¹T^džûÅÑŦ·‡PĻþÙ`K€¦˜…¢ÍeœĥR¿Œ³£[~Œäu¼dl‰t‚†W¸oRM¢ď\\zœ}Æzdvň–{ÎXF¶°Â_„ÒÂÏL©Ö•TmuŸ¼ãl‰›īkiqéfA„·Êµ\\őDc¥ÝF“y›Ôć˜c€űH_hL܋êĺШc}rn`½„Ì@¸¶ªVLŒŠhŒ‹\\•Ţĺk~ŽĠið°|gŒtTĭĸ^x‘vK˜VGréAé‘bUu›MJ‰VÃO¡…qĂXËS‰ģãlýàŸ_ju‡YÛÒB†œG^˜é֊¶§ŽƒEG”ÅzěƒƯ¤Ek‡N[kdåucé¬dnYpAyČ{`]þ¯T’bÜÈk‚¡Ġ•vŒàh„ÂƄ¢Jî¶²"]],"encodeOffsets":[[[111707,21520]],[[107619,25527]]]}},{"type":"Feature","id":"460000","properties":{"id":"460000","cp":[109.83119,19.031971],"name":"海南","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@š¦Ŝil¢”XƦ‘ƞò–ïè§ŞCêɕrŧůÇąĻõ™·ĉ³œ̅kÇm@ċȧƒŧĥ‰Ľʉ­ƅſ“ȓÒ˦ŝE}ºƑ[ÍĜȋ gÎfǐÏĤ¨êƺ\\Ɔ¸ĠĎvʄȀœÐ¾jNðĀÒRŒšZdž™zÐŘΰH¨Ƣb²_Ġ "],"encodeOffsets":[[112750,20508]]}},{"type":"Feature","id":"510000","properties":{"id":"510000","cp":[104.065735,30.659462],"name":"四川","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@LqKr"],["@@Š[ĻéV£ž_ţġñpG •réÏ·~ąSfy×͂·ºſƽiÍıƣıĻmHH}siaX@iǰÁÃ×t«ƒ­Tƒ¤J–JJŒyJ•ÈŠ`Ohߦ¡uËhIyCjmÿw…ZG……Ti‹SˆsO‰žB²ŸfNmsPaˆ{M{ŠõE‘^Hj}gYpaeuž¯‘oáwHjÁ½M¡pM“–uå‡mni{fk”\\oƒÎqCw†EZ¼K›ĝŠƒAy{m÷L‡wO×SimRI¯rK™õBS«sFe‡]fµ¢óY_ÆPRcue°Cbo׌bd£ŌIHgtrnyPt¦foaXďx›lBowz‹_{ÊéWiêE„GhܸºuFĈIxf®Ž•Y½ĀǙ]¤EyŸF²ċ’w¸¿@g¢§RGv»–áŸW`ÃĵJwi]t¥wO­½a[׈]`Ãi­üL€¦LabbTÀå’c}Íh™Æhˆ‹®BH€î|Ék­¤S†y£„ia©taį·Ɖ`ō¥Uh“O…ƒĝLk}©Fos‰´›Jm„µlŁu—…ø–nÑJWΪ–YÀïAetTžŅ‚ӍG™Ë«bo‰{ıwodƟ½ƒžOġܑµxàNÖ¾P²§HKv¾–]|•B‡ÆåoZ`¡Ø`ÀmºĠ~ÌЧnDž¿¤]wğ@sƒ‰rğu‰~‘Io”[é±¹ ¿žſđӉ@q‹gˆ¹zƱřaí°KtǤV»Ã[ĩǭƑ^ÇÓ@ỗs›Zϕ‹œÅĭ€Ƌ•ěpwDóÖሯneQˌq·•GCœýS]xŸ·ý‹q³•O՜Œ¶Qzßti{ř‰áÍÇWŝŭñzÇW‹pç¿JŒ™‚Xœĩè½cŒF–ÂLiVjx}\\N†ŇĖ¥Ge–“JA¼ÄHfÈu~¸Æ«dE³ÉMA|b˜Ò…˜ćhG¬CM‚õŠ„ƤąAvƒüV€éŀ‰_V̳ĐwQj´·ZeÈÁ¨X´Æ¡Qu·»Ÿ“˜ÕZ³ġqDo‰y`L¬gdp°şŠp¦ėìÅĮZްIä”h‚‘ˆzŠĵœf²å ›ĚрKp‹IN|‹„Ñz]ń……·FU×é»R³™MƒÉ»GM«€ki€™ér™}Ã`¹ăÞmȝnÁîRǀ³ĜoİzŔwǶVÚ£À]ɜ»ĆlƂ²Ġ…þTº·àUȞÏʦ¶†I’«dĽĢdĬ¿–»Ĕ׊h\\c¬†ä²GêëĤł¥ÀǿżÃÆMº}BÕĢyFVvw–ˆxBèĻĒ©Ĉ“tCĢɽŠȣ¦āæ·HĽî“ôNԓ~^¤Ɗœu„œ^s¼{TA¼ø°¢İªDè¾Ň¶ÝJ‘®Z´ğ~Sn|ªWÚ©òzPOȸ‚bð¢|‹øĞŠŒœŒQìÛÐ@Ğ™ǎRS¤Á§d…i“´ezÝúØã]Hq„kIŸþËQǦÃsǤ[E¬ÉŪÍxXƒ·ÖƁİlƞ¹ª¹|XÊwn‘ÆƄmÀêErĒtD®ċæcQƒ”E®³^ĭ¥©l}äQto˜ŖÜqƎkµ–„ªÔĻĴ¡@Ċ°B²Èw^^RsºT£ڿœQP‘JvÄz„^Đ¹Æ¯fLà´GC²‘dt˜­ĀRt¼¤ĦOðğfÔðDŨŁĞƘïžPȆ®âbMüÀXZ ¸£@Ś›»»QÉ­™]d“sÖ×_͖_ÌêŮPrĔĐÕGĂeZÜîĘqBhtO ¤tE[h|Y‹Ô‚ZśÎs´xº±UŒ’ñˆt|O’ĩĠºNbgþŠJy^dÂY Į„]Řz¦gC‚³€R`Šz’¢AjŒ¸CL„¤RÆ»@­Ŏk\\Ç´£YW}z@Z}‰Ã¶“oû¶]´^N‡Ò}èN‚ª–P˜Íy¹`S°´†ATe€VamdUĐwʄvĮÕ\\ƒu‹Æŗ¨Yp¹àZÂm™Wh{á„}WØǍ•Éüw™ga§áCNęÎ[ĀÕĪgÖɪX˜øx¬½Ů¦¦[€—„NΆL€ÜUÖ´òrÙŠxR^–†J˜k„ijnDX{Uƒ~ET{ļº¦PZc”jF²Ė@Žp˜g€ˆ¨“B{ƒu¨ŦyhoÚD®¯¢˜ WòàFΤ¨GDäz¦kŮPœġq˚¥À]€Ÿ˜eŽâÚ´ªKxī„Pˆ—Ö|æ[xäJÞĥ‚s’NÖ½ž€I†¬nĨY´®Ð—ƐŠ€mD™ŝuäđđEb…e’e_™v¡}ìęNJē}q”É埁T¯µRs¡M@}ůa†a­¯wvƉåZwž\\Z{åû^›"]],"encodeOffsets":[[[108815,30935]],[[110617,31811]]]}},{"type":"Feature","id":"520000","properties":{"id":"520000","cp":[106.713478,26.578343],"name":"贵州","childNum":3},"geometry":{"type":"MultiPolygon","coordinates":[["@@†G\\†lY£‘in"],["@@q‚|ˆ‚mc¯tχVSÎ"],["@@hÑ£Is‡NgßH†›HªķÃh_¹ƒ¡ĝħń¦uيùŽgS¯JHŸ|sÝÅtÁïyMDč»eÕtA¤{b\\}—ƒG®u\\åPFq‹wÅaD…žK°ºâ_£ùbµ”mÁ‹ÛœĹM[q|hlaªāI}тƒµ@swtwm^oµˆD鼊yV™ky°ÉžûÛR…³‚‡eˆ‡¥]RՋěħ[ƅåÛDpŒ”J„iV™™‰ÂF²I…»mN·£›LbÒYb—WsÀbŽ™pki™TZĄă¶HŒq`……ĥ_JŸ¯ae«ƒKpÝx]aĕÛPƒÇȟ[ÁåŵÏő—÷Pw}‡TœÙ@Õs«ĿÛq©½œm¤ÙH·yǥĘĉBµĨÕnđ]K„©„œá‹ŸG纍§Õßg‡ǗĦTèƤƺ{¶ÉHÎd¾ŚÊ·OÐjXWrãLyzÉAL¾ę¢bĶėy_qMĔąro¼hĊžw¶øV¤w”²Ĉ]ʚKx|`ź¦ÂÈdr„cȁbe¸›`I¼čTF´¼Óýȃr¹ÍJ©k_șl³´_pН`oÒh޶pa‚^ÓĔ}D»^Xyœ`d˜[Kv…JPhèhCrĂĚÂ^Êƌ wˆZL­Ġ£šÁbrzOIl’MM”ĪŐžËr×ÎeŦŽtw|Œ¢mKjSǘňĂStÎŦEtqFT†¾†E쬬ôxÌO¢Ÿ KгŀºäY†„”PVgŎ¦Ŋm޼VZwVlŒ„z¤…ž£Tl®ctĽÚó{G­A‡ŒÇgeš~Αd¿æaSba¥KKûj®_ć^\\ؾbP®¦x^sxjĶI_Ä X‚⼕Hu¨Qh¡À@Ëô}ޱžGNìĎlT¸ˆ…`V~R°tbÕĊ`¸úÛtπFDu€[ƒMfqGH·¥yA‰ztMFe|R‚_Gk†ChZeÚ°to˜v`x‹b„ŒDnÐ{E}šZ˜è€x—†NEފREn˜[Pv@{~rĆAB§‚EO¿|UZ~ì„Uf¨J²ĂÝÆ€‚sª–B`„s¶œfvö¦ŠÕ~dÔq¨¸º»uù[[§´sb¤¢zþFœ¢Æ…Àhˆ™ÂˆW\\ıŽËI݊o±ĭŠ£þˆÊs}¡R]ŒěƒD‚g´VG¢‚j±®è†ºÃmpU[Á›‘Œëº°r›ÜbNu¸}Žº¼‡`ni”ºÔXĄ¤¼Ôdaµ€Á_À…†ftQQgœR—‘·Ǔ’v”}Ýלĵ]µœ“Wc¤F²›OĩųãW½¯K‚©…]€{†LóµCIµ±Mß¿hŸ•©āq¬o‚½ž~@i~TUxŪÒ¢@ƒ£ÀEîôruń‚”“‚b[§nWuMÆLl¿]x}ij­€½"]],"encodeOffsets":[[[112158,27383]],[[112105,27474]],[[112095,27476]]]}},{"type":"Feature","id":"530000","properties":{"id":"530000","cp":[101.512251,24.740609],"name":"云南","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@[„ùx½}ÑRH‘YīĺûsÍn‘iEoã½Ya²ė{c¬ĝg•ĂsA•ØÅwď‚õzFjw}—«Dx¿}UũlŸê™@•HÅ­F‰¨ÇoJ´Ónũuą¡Ã¢pÒŌ“Ø TF²‚xa²ËX€‚cʋlHîAßËŁkŻƑŷÉ©h™W­æßU‡“Ës¡¦}•teèÆ¶StǀÇ}Fd£j‹ĈZĆÆ‹¤T‚č\\Dƒ}O÷š£Uˆ§~ŃG™‚åŃDĝ¸œTsd¶¶Bªš¤u¢ŌĎo~t¾ÍŶÒtD¦Ú„iôö‰€z›ØX²ghįh½Û±¯€ÿm·zR¦Ɵ`ªŊÃh¢rOԍ´£Ym¼èêf¯ŪĽn„†cÚbŒw\\zlvWžªâˆ ¦g–mĿBş£¢ƹřbĥkǫßeeZkÙIKueT»sVesb‘aĕ  ¶®dNœĄÄpªyސ¼—„³BE˜®l‡ŽGœŭCœǶwêżĔÂe„pÍÀQƞpC„–¼ŲÈ­AÎô¶R„ä’Q^Øu¬°š_Èôc´¹ò¨P΢hlϦ´Ħ“Æ´sâDŽŲPnÊD^¯°’Upv†}®BP̪–jǬx–Söwlfòªv€qĸ|`H€­viļ€ndĜ­Ćhň•‚em·FyށqóžSᝑ³X_ĞçêtryvL¤§z„¦c¦¥jnŞk˜ˆlD¤øz½ĜàžĂŧMÅ|áƆàÊcðÂF܎‚áŢ¥\\\\º™İøÒÐJĴ‡„îD¦zK²ǏÎEh~’CD­hMn^ÌöÄ©ČZÀžaü„fɭyœpį´ěFűk]Ôě¢qlÅĆÙa¶~Äqššê€ljN¬¼H„ÊšNQ´ê¼VظE††^ŃÒyŒƒM{ŒJLoÒœęæŸe±Ķ›y‰’‡gã“¯JYÆĭĘëo¥Š‰o¯hcK«z_pŠrC´ĢÖY”—¼ v¸¢RŽÅW³Â§fǸYi³xR´ďUˊ`êĿU„û€uĆBƒƣö‰N€DH«Ĉg†——Ñ‚aB{ÊNF´¬c·Åv}eÇÃGB»”If•¦HňĕM…~[iwjUÁKE•Ž‹¾dĪçW›šI‹èÀŒoÈXòyŞŮÈXâÎŚŠj|àsRy‹µÖ›–Pr´þŒ ¸^wþTDŔ–Hr¸‹žRÌmf‡żÕâCôox–ĜƌÆĮŒ›Ð–œY˜tâŦÔ@]ÈǮƒ\\μģUsȯLbîƲŚºyh‡rŒŠ@ĒԝƀŸÀ²º\\êp“’JŠ}ĠvŠqt„Ġ@^xÀ£È†¨mËÏğ}n¹_¿¢×Y_æpˆÅ–A^{½•Lu¨GO±Õ½ßM¶w’ÁĢۂP‚›Ƣ¼pcIJxŠ|ap̬HšÐŒŊSfsðBZ¿©“XÏÒK•k†÷Eû¿‰S…rEFsÕūk”óVǥʼniTL‚¡n{‹uxţÏh™ôŝ¬ğōN“‘NJkyPaq™Âğ¤K®‡YŸxÉƋÁ]āęDqçgOg†ILu—\\_gz—]W¼ž~CÔē]bµogpў_oď`´³Țkl`IªºÎȄqÔþž»E³ĎSJ»œ_f·‚adÇqƒÇc¥Á_Źw{™L^ɱćx“U£µ÷xgĉp»ĆqNē`rĘzaĵĚ¡K½ÊBzyäKXqiWPÏɸ½řÍcÊG|µƕƣG˛÷Ÿk°_^ý|_zċBZocmø¯hhcæ\\lˆMFlư£Ĝ„ÆyH“„F¨‰µêÕ]—›HA…àӄ^it `þßäkŠĤÎT~Wlÿ¨„ÔPzUC–NVv [jâôDôď[}ž‰z¿–msSh‹¯{jïğl}šĹ[–őŒ‰gK‹©U·µË@¾ƒm_~q¡f¹…ÅË^»‘f³ø}Q•„¡Ö˳gͱ^ǁ…\\ëÃA_—¿bW›Ï[¶ƛ鏝£F{īZgm@|kHǭƁć¦UĔťƒ×ë}ǝƒeďºȡȘÏíBə£āĘPªij¶“ʼnÿ‡y©n‰ď£G¹¡I›Š±LÉĺÑdĉ܇W¥˜‰}g˜Á†{aqÃ¥aŠıęÏZ—ï`"],"encodeOffsets":[[104636,22969]]}},{"type":"Feature","id":"540000","properties":{"id":"540000","cp":[89.132212,30.860361],"name":"西藏","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@hžľxŽŖ‰xƒÒVކºÅâAĪÝȆµę¯Ňa±r_w~uSÕň‘qOj]ɄQ…£Z……UDûoY’»©M[‹L¼qãË{V͕çWViŽ]ë©Ä÷àyƛh›ÚU°ŒŒa”d„cQƒ~Mx¥™cc¡ÙaSyF—ցk­ŒuRýq¿Ôµ•QĽ³aG{¿FµëªéĜÿª@¬·–K‰·àariĕĀ«V»Ŷ™Ĵū˜gèLǴŇƶaf‹tŒèBŚ£^Šâ†ǐÝ®–šM¦ÁǞÿ¬LhŸŽJ¾óƾƺcxw‹f]Y…´ƒ¦|œQLn°aœdĊ…œ\\¨o’œǀÍŎœ´ĩĀd`tÊQŞŕ|‚¨C^©œĈ¦„¦ÎJĊ{ŽëĎjª²rЉšl`¼Ą[t|¦St辉PŒÜK¸€d˜Ƅı]s¤—î_v¹ÎVòŦj˜£Əsc—¬_Ğ´|٘¦Avަw`ăaÝaa­¢e¤ı²©ªSªšÈMĄwžÉØŔì@T‘¤—Ę™\\õª@”þo´­xA s”ÂtŎKzó´ÇĊµ¢rž^nĊ­Æ¬×üGž¢‚³ {âĊ]š™G‚~bÀgVjzlhǶf€žOšfdЉªB]pj„•TO–tĊ‚n¤}®¦ƒČ¥d¢¼»ddš”Y¼Žt—¢eȤJ¤}Ǿ¡°§¤AГlc@ĝ”sªćļđAç‡wx•UuzEÖġ~AN¹ÄÅȀݦ¿ģŁéì±H…ãd«g[؉¼ēÀ•cīľġ¬cJ‘µ…ÐʥVȝ¸ßS¹†ý±ğkƁ¼ą^ɛ¤Ûÿ‰b[}¬ōõÃ]ËNm®g@•Bg}ÍF±ǐyL¥íCˆƒIij€Ï÷њį[¹¦[⚍EÛïÁÉdƅß{âNÆāŨߝ¾ě÷yC£‡k­´ÓH@¹†TZ¥¢įƒ·ÌAЧ®—Zc…v½ŸZ­¹|ŕWZqgW“|ieZÅYVӁqdq•bc²R@†c‡¥Rã»Ge†ŸeƃīQ•}J[ғK…¬Ə|o’ėjġĠÑN¡ð¯EBčnwôɍėªƒ²•CλŹġǝʅįĭạ̃ūȹ]ΓͧgšsgȽóϧµǛ†ęgſ¶ҍć`ĘąŌJޚä¤rÅň¥ÖÁUětęuůÞiĊÄÀ\\Æs¦ÓRb|Â^řÌkÄŷ¶½÷‡f±iMݑ›‰@ĥ°G¬ÃM¥n£Øą‚ğ¯ß”§aëbéüÑOčœk£{\\‘eµª×M‘šÉfm«Ƒ{Å׃Gŏǩãy³©WÑăû‚··‘Q—òı}¯ã‰I•éÕÂZ¨īès¶ZÈsŽæĔTŘvŽgÌsN@îá¾ó@‰˜ÙwU±ÉT廣TđŸWxq¹Zo‘b‹s[׌¯cĩv‡Œėŧ³BM|¹k‰ªħ—¥TzNYnݍßpęrñĠĉRS~½ŠěVVе‚õ‡«ŒM££µB•ĉ¥áºae~³AuĐh`Ü³ç@BۘïĿa©|z²Ý¼D”£à貋ŸƒIƒû›I ā€óK¥}rÝ_Á´éMaň¨€~ªSĈ½Ž½KÙóĿeƃÆBŽ·¬ën×W|Uº}LJrƳ˜lŒµ`bÔ`QˆˆÐÓ@s¬ñIŒÍ@ûws¡åQÑßÁ`ŋĴ{Ī“T•ÚÅTSij‚‹Yo|Ç[ǾµMW¢ĭiÕØ¿@˜šMh…pÕ]j†éò¿OƇĆƇp€êĉâlØw–ěsˆǩ‚ĵ¸c…bU¹ř¨WavquSMzeo_^gsÏ·¥Ó@~¯¿RiīB™Š\\”qTGªÇĜçPoŠÿfñòą¦óQīÈáP•œābß{ƒZŗĸIæÅ„hnszÁCËìñšÏ·ąĚÝUm®ó­L·ăU›Èíoù´Êj°ŁŤ_uµ^‘°Œìǖ@tĶĒ¡Æ‡M³Ģ«˜İĨÅ®ğ†RŽāð“ggheÆ¢z‚Ê©Ô\\°ÝĎz~ź¤Pn–MĪÖB£Ÿk™n鄧żćŠ˜ĆK„ǰ¼L¶è‰âz¨u¦¥LDĘz¬ýÎmĘd¾ß”Fz“hg²™Fy¦ĝ¤ċņbΛ@y‚Ąæm°NĮZRÖíŽJ²öLĸÒ¨Y®ƌÐV‰à˜tt_ڀÂyĠzž]Ţh€zĎ{†ĢX”ˆc|šÐqŽšfO¢¤ög‚ÌHNŽ„PKŖœŽ˜Uú´xx[xˆvĐCûŠìÖT¬¸^}Ìsòd´_އKgžLĴ…ÀBon|H@–Êx˜—¦BpŰˆŌ¿fµƌA¾zLjRxжF”œkĄźRzŀˆ~¶[”´Hnª–VƞuĒ­È¨ƎcƽÌm¸ÁÈM¦x͊ëÀxdžB’šú^´W†£–d„kɾĬpœw‚˂ØɦļĬIŚœÊ•n›Ŕa¸™~J°î”lɌxĤÊÈðhÌ®‚g˜T´øŽàCˆŽÀ^ªerrƘdž¢İP|Ė ŸWœªĦ^¶´ÂL„aT±üWƜ˜ǀRšŶUńšĖ[QhlLüA†‹Ü\\†qR›Ą©"],"encodeOffsets":[[90849,37210]]}},{"type":"Feature","id":"610000","properties":{"id":"610000","cp":[108.948024,34.263161],"name":"陕西","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@˜p¢—ȮµšûG™Ħ}Ħšðǚ¶òƄ€jɂz°{ºØkÈęâ¦jª‚Bg‚\\œċ°s¬Ž’]jžú ‚E”Ȍdž¬s„t‡”RˆÆdĠݎwܔ¸ôW¾ƮłÒ_{’Ìšû¼„jº¹¢GǪÒ¯ĘƒZ`ºŊƒecņąš~BÂgzpâēòYǠȰÌTΨÂWœ|fcŸă§uF—Œ@NŸ¢XLƒŠRMº[ğȣſï|¥J™kc`sʼnǷ’Y¹‹W@µ÷K…ãï³ÛIcñ·VȋڍÒķø©—þ¥ƒy‚ÓŸğęmWµÎumZyOŅƟĥÓ~sÑL¤µaŅY¦ocyZ{‰y c]{ŒTa©ƒ`U_Ěē£ωÊƍKù’K¶ȱÝƷ§{û»ÅÁȹÍéuij|¹cÑd‘ŠìUYƒŽO‘uF–ÕÈYvÁCqӃT•Ǣí§·S¹NgŠV¬ë÷Át‡°Dد’C´ʼnƒópģ}„ċcE˅FŸŸéGU¥×K…§­¶³B‹Č}C¿åċ`wġB·¤őcƭ²ő[Å^axwQO…ÿEËߌ•ĤNĔŸwƇˆÄŠńwĪ­Šo[„_KÓª³“ÙnK‰Çƒěœÿ]ď€ă_d©·©Ýŏ°Ù®g]±„Ÿ‡ß˜å›—¬÷m\\›iaǑkěX{¢|ZKlçhLt€Ňîŵ€œè[€É@ƉĄEœ‡tƇÏ˜³­ħZ«mJ…›×¾‘MtÝĦ£IwÄå\\Õ{‡˜ƒOwĬ©LÙ³ÙgBƕŀr̛ĢŭO¥lãyC§HÍ£ßEñŸX¡—­°ÙCgpťz‘ˆb`wI„vA|§”‡—hoĕ@E±“iYd¥OϹS|}F@¾oAO²{tfžÜ—¢Fǂ҈W²°BĤh^Wx{@„¬‚­F¸¡„ķn£P|ŸªĴ@^ĠĈæb–Ôc¶l˜Yi…–^Mi˜cϰÂ[ä€vï¶gv@À“Ĭ·lJ¸sn|¼u~a]’ÆÈtŌºJp’ƒþ£KKf~ЦUbyäIšĺãn‡Ô¿^­žŵMT–hĠܤko¼Ŏìąǜh`[tŒRd²IJ_œXPrɲ‰l‘‚XžiL§àƒ–¹ŽH˜°Ȧqº®QC—bA†„ŌJ¸ĕÚ³ĺ§ `d¨YjžiZvRĺ±öVKkjGȊĐePОZmļKÀ€‚[ŠŽ`ösìh†ïÎoĬdtKÞ{¬èÒÒBŒÔpIJÇĬJŊ¦±J«ˆY§‹@·pH€µàåVKe›pW†ftsAÅqC·¬ko«pHÆuK@oŸHĆۄķhx“e‘n›S³àǍrqƶRbzy€¸ËАl›¼EºpĤ¼Œx¼½~Ğ’”à@†ÚüdK^ˆmÌSj"],"encodeOffsets":[[110234,38774]]}},{"type":"Feature","id":"620000","properties":{"id":"620000","cp":[103.823557,36.058039],"name":"甘肃","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@VuUv"],["@@ũ‹EĠtt~nkh`Q‰¦ÅÄÜdw˜Ab×ĠąJˆ¤DüègĺqBqœj°lI¡ĨÒ¤úSHbš‡ŠjΑBаaZˆ¢KJŽ’O[|A£žDx}Nì•HUnrk„ kp€¼Y kMJn[aG‚áÚÏ[½rc†}aQxOgsPMnUs‡nc‹Z…ž–sKúvA›t„Þġ’£®ĀYKdnFwš¢JE°”Latf`¼h¬we|€Æ‡šbj}GA€·~WŽ”—`†¢MC¤tL©IJ°qdf”O‚“bÞĬ¹ttu`^ZúE`Œ[@„Æsîz®¡’C„ƳƜG²“R‘¢R’m”fŽwĸg܃‚ą G@pzJM½mŠhVy¸uÈÔO±¨{LfæU¶ßGĂq\\ª¬‡²I‚¥IʼnÈīoı‹ÓÑAçÑ|«LÝcspīðÍg…të_õ‰\\ĉñLYnĝg’ŸRǡÁiHLlõUĹ²uQjYi§Z_c¨Ÿ´ĹĖÙ·ŋI…ƒaBD˜­R¹ȥr—¯G•ºß„K¨jWk’ɱŠOq›Wij\\a­‹Q\\sg_ĆǛōëp»£lğۀgS•ŶN®À]ˆÓäm™ĹãJaz¥V}‰Le¤L„ýo‘¹IsŋÅÇ^‘Žbz…³tmEÁ´aйcčecÇN•ĊãÁ\\蝗dNj•]j†—ZµkÓda•ćå]ğij@ ©O{¤ĸm¢ƒE·®ƒ«|@Xwg]A챝‡XǁÑdzªc›wQÚŝñsÕ³ÛV_ýƒ˜¥\\ů¥©¾÷w—Ž©WÕÊĩhÿÖÁRo¸V¬âDb¨šhûx–Ê×nj~Zâƒg|šXÁnßYoº§ZÅŘvŒ[„ĭÖʃuďxcVbnUSf…B¯³_Tzº—ΕO©çMÑ~Mˆ³]µ^püµ”ŠÄY~y@X~¤Z³€[Èōl@®Å¼£QKƒ·Di‹¡By‘ÿ‰Q_´D¥hŗyƒ^ŸĭÁZ]cIzý‰ah¹MĪğP‘s{ò‡‹‘²Vw¹t³Ŝˁ[ŽÑ}X\\gsFŸ£sPAgěp×ëfYHāďÖqēŭOÏë“dLü•\\iŒ”t^c®šRʺ¶—¢H°mˆ‘rYŸ£BŸ¹čIoľu¶uI]vģSQ{ƒUŻ”Å}QÂ|̋°ƅ¤ĩŪU ęĄžÌZҞ\\v˜²PĔ»ƢNHƒĂyAmƂwVmž`”]ȏb•”H`‰Ì¢²ILvĜ—H®¤Dlt_„¢JJÄämèÔDëþgºƫ™”aʎÌrêYi~ ÎݤNpÀA¾Ĕ¼b…ð÷’Žˆ‡®‚”üs”zMzÖĖQdȨý†v§Tè|ªH’þa¸|šÐ ƒwKĢx¦ivr^ÿ ¸l öæfƟĴ·PJv}n\\h¹¶v†·À|\\ƁĚN´Ĝ€çèÁz]ġ¤²¨QÒŨTIl‡ªťØ}¼˗ƦvÄùØE‹’«Fï˛Iq”ōŒTvāÜŏ‚íÛߜÛV—j³âwGăÂíNOŠˆŠPìyV³ʼnĖýZso§HіiYw[߆\\X¦¥c]ÔƩÜ·«j‡ÐqvÁ¦m^ċ±R™¦΋ƈťĚgÀ»IïĨʗƮްƝ˜ĻþÍAƉſ±tÍEÕÞāNU͗¡\\ſčåÒʻĘm ƭÌŹöʥ’ëQ¤µ­ÇcƕªoIýˆ‰Iɐ_mkl³ă‰Ɠ¦j—¡Yz•Ňi–}Msßõ–īʋ —}ƒÁVmŸ_[n}eı­Uĥ¼‘ª•I{ΧDӜƻėoj‘qYhĹT©oūĶ£]ďxĩ‹ǑMĝ‰q`B´ƃ˺Ч—ç~™²ņj@”¥@đ´ί}ĥtPńǾV¬ufӃÉC‹tÓ̻‰…¹£G³€]ƖƾŎĪŪĘ̖¨ʈĢƂlɘ۪üºňUðǜȢƢż̌ȦǼ‚ĤŊɲĖ­Kq´ï¦—ºĒDzņɾªǀÞĈĂD†½ĄĎÌŗĞrôñnŽœN¼â¾ʄľԆ|DŽŽ֦ज़ȗlj̘̭ɺƅêgV̍ʆĠ·ÌĊv|ýĖÕWĊǎÞ´õ¼cÒÒBĢ͢UĜð͒s¨ňƃLĉÕÝ@ɛƯ÷¿Ľ­ĹeȏijëCȚDŲyê×Ŗyò¯ļcÂßY…tÁƤyAã˾J@ǝrý‹‰@¤…rz¸oP¹ɐÚyᐇHŸĀ[Jw…cVeȴϜ»ÈŽĖ}ƒŰŐèȭǢόĀƪÈŶë;Ñ̆ȤМľĮEŔ—ĹŊũ~ËUă{ŸĻƹɁύȩþĽvĽƓÉ@ē„ĽɲßǐƫʾǗĒpäWÐxnsÀ^ƆwW©¦cÅ¡Ji§vúF¶Ž¨c~c¼īŒeXǚ‹\\đ¾JŽwÀďksãA‹fÕ¦L}wa‚o”Z’‹D½†Ml«]eÒÅaɲáo½FõÛ]ĻÒ¡wYR£¢rvÓ®y®LF‹LzĈ„ôe]gx}•|KK}xklL]c¦£fRtív¦†PĤoH{tK"]],"encodeOffsets":[[[108619,36299]],[[108589,36341]]]}},{"type":"Feature","id":"630000","properties":{"id":"630000","cp":[96.778916,35.623178],"name":"青海","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@InJm"],["@@CƒÆ½OŃĦsΰ~dz¦@@“Ņiš±è}ؘƄ˹A³r_ĞŠǒNΌĐw¤^ŬĵªpĺSZg’rpiƼĘԛ¨C|͖J’©Ħ»®VIJ~f\\m `Un„˜~ʌŸ•ĬàöNt•~ňjy–¢Zi˜Ɣ¥ĄŠk´nl`JʇŠJþ©pdƖ®È£¶ìRʦ‘źõƮËnŸʼėæÑƀĎ[‚˜¢VÎĂMÖÝÎF²sƊƀÎBļýƞ—¯ʘƭðħ¼Jh¿ŦęΌƇš¥²Q]Č¥nuÂÏriˆ¸¬ƪÛ^Ó¦d€¥[Wà…x\\ZŽjҕ¨GtpþYŊĕ´€zUO뇉P‰îMĄÁxH´á˜iÜUà›îÜՁĂÛSuŎ‹r“œJð̬EŒ‘FÁú×uÃÎkr“Ē{V}İ«O_ÌËĬ©ŽÓŧSRѱ§Ģ£^ÂyèçěM³Ƃę{[¸¿u…ºµ[gt£¸OƤĿéYŸõ·kŸq]juw¥Dĩƍ€õÇPéĽG‘ž©ã‡¤G…uȧþRcÕĕNy“yût“ˆ­‡ø‘†ï»a½ē¿BMoᣟÍj}éZËqbʍš“Ƭh¹ìÿÓAçãnIáI`ƒks£CG­ě˜Uy×Cy•…’Ÿ@¶ʡÊBnāzG„ơMē¼±O÷õJËĚăVŸĪũƆ£Œ¯{ËL½Ìzż“„VR|ĠTbuvJvµhĻĖH”Aëáa…­OÇðñęNw‡…œľ·L›mI±íĠĩPÉ×®ÿs—’cB³±JKßĊ«`…ađ»·QAmO’‘Vţéÿ¤¹SQt]]Çx€±¯A@ĉij¢Ó祖•ƒl¶ÅÛr—ŕspãRk~¦ª]Į­´“FR„åd­ČsCqđéFn¿Åƃm’Éx{W©ºƝºįkÕƂƑ¸wWūЩÈFž£\\tÈ¥ÄRÈýÌJ ƒlGr^×äùyÞ³fj”c†€¨£ÂZ|ǓMĝšÏ@ëÜőR‹›ĝ‰Œ÷¡{aïȷPu°ËXÙ{©TmĠ}Y³’­ÞIňµç½©C¡į÷¯B»|St»›]vƒųƒs»”}MÓ ÿʪƟǭA¡fs˜»PY¼c¡»¦c„ċ­¥£~msĉP•–Siƒ^o©A‰Šec‚™PeǵŽkg‚yUi¿h}aH™šĉ^|ᴟ¡HØûÅ«ĉ®]m€¡qĉ¶³ÈyôōLÁst“BŸ®wn±ă¥HSò뚣˜S’ë@לÊăxÇN©™©T±ª£IJ¡fb®ÞbŽb_Ą¥xu¥B—ž{łĝ³«`d˜Ɛt—¤ťiñžÍUuºí`£˜^tƃIJc—·ÛLO‹½Šsç¥Ts{ă\\_»™kϊ±q©čiìĉ|ÍIƒ¥ć¥›€]ª§D{ŝŖÉR_sÿc³Īō›ƿΑ›§p›[ĉ†›c¯bKm›R¥{³„Z†e^ŽŒwx¹dƽŽôIg §Mĕ ƹĴ¿—ǣÜ̓]‹Ý–]snåA{‹eŒƭ`ǻŊĿ\\ijŬű”YÂÿ¬jĖqŽßbЏ•L«¸©@ěĀ©ê¶ìÀEH|´bRľž–Ó¶rÀQþ‹vl®Õ‚E˜TzÜdb ˜hw¤{LR„ƒd“c‹b¯‹ÙVgœ‚ƜßzÃô쮍^jUèXΖ|UäÌ»rKŽ\\ŒªN‘¼pZCü†VY††¤ɃRi^rPҒTÖ}|br°qňb̰ªiƶGQ¾²„x¦PœmlŜ‘[Ĥ¡ΞsĦŸÔÏâ\\ªÚŒU\\f…¢N²§x|¤§„xĔsZPòʛ²SÐqF`ª„VƒÞŜĶƨVZŒÌL`ˆ¢dŐIqr\\oäõ–F礻Ŷ×h¹]Clـ\\¦ďÌį¬řtTӺƙgQÇÓHţĒ”´ÃbEÄlbʔC”|CˆŮˆk„Ʈ[ʼ¬ňœ´KŮÈΰÌζƶlð”ļA†TUvdTŠG†º̼ŠÔ€ŒsÊDԄveOg"]],"encodeOffsets":[[[105308,37219]],[[95370,40081]]]}},{"type":"Feature","id":"640000","properties":{"id":"640000","cp":[106.278179,37.26637],"name":"宁夏","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@KëÀęĞ«OęȿȕŸı]ʼn¡åįÕÔ«Ǵõƪ™ĚQÐZhv K°›öqÀѐS[ÃÖHƖčË‡nL]ûc…Ùß@‚“ĝ‘¾}w»»‹oģF¹œ»kÌÏ·{zPƒ§B­¢íyÅt@ƒ@áš]Yv_ssģ¼i߁”ĻL¾ġsKD£¡N_…“˜X¸}B~Haiˆ™Åf{«x»ge_bs“KF¯¡Ix™mELcÿZ¤­Ģ‘ƒÝœsuBLù•t†ŒYdˆmVtNmtOPhRw~bd…¾qÐ\\âÙH\\bImlNZŸ»loƒŸqlVm–Gā§~QCw¤™{A\\‘PKŸNY‡¯bF‡kC¥’sk‹Šs_Ã\\ă«¢ħkJi¯r›rAhĹûç£CU‡ĕĊ_ԗBixÅُĄnªÑaM~ħpOu¥sîeQ¥¤^dkKwlL~{L~–hw^‚ófćƒKyEŒ­K­zuÔ¡qQ¤xZÑ¢^ļöܾEpž±âbÊÑÆ^fk¬…NC¾‘Œ“YpxbK~¥Že֎ŒäBlt¿Đx½I[ĒǙŒWž‹f»Ĭ}d§dµùEuj¨‚IÆ¢¥dXªƅx¿]mtÏwßR͌X¢͎vÆzƂZò®ǢÌʆCrâºMÞzžÆMҔÊÓŊZľ–r°Î®Ȉmª²ĈUªĚøºˆĮ¦ÌĘk„^FłĬhĚiĀ˾iİbjÕ"],["@@mfwěwMrŢªv@G‰"]],"encodeOffsets":[[[109366,40242]],[[108600,36303]]]}},{"type":"Feature","id":"650000","properties":{"id":"650000","cp":[85.617733,40.792818],"name":"新疆","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@QØĔ²X¨”~ǘBºjʐߨvK”ƔX¨vĊOžÃƒ·¢i@~c—‡ĝe_«”Eš“}QxgɪëÏÃ@sÅyXoŖ{ô«ŸuX…ê•Îf`œC‚¹ÂÿÐGĮÕĞXŪōŸMźÈƺQèĽôe|¿ƸJR¤ĘEjcUóº¯Ĩ_ŘÁMª÷Ð¥Oéȇ¿ÖğǤǷÂF҇zÉx[]­Ĥĝ‰œ¦EP}ûƥé¿İƷTėƫœŕƅ™ƱB»Đ±’ēO…¦E–•}‘`cȺrĦáŖuҞª«IJ‡πdƺÏØZƴwʄ¤ĖGЙǂZ̓èH¶}ÚZצʥĪï|ÇĦMŔ»İĝLj‹ì¥Βœba­¯¥ǕǚkĆŵĦɑĺƯxūД̵nơʃĽá½M»›òmqóŘĝč˾ăC…ćāƿÝɽ©DZŅ¹đ¥˜³ðLrÁ®ɱĕģʼnǻ̋ȥơŻǛȡVï¹Ň۩ûkɗġƁ§ʇė̕ĩũƽō^ƕŠUv£ƁQï“Ƶkŏ½ΉÃŭdzLқʻ«ƭ\\lƒ‡ŭD‡“{ʓDkaFÃÄa“³ŤđÔGRÈƚhSӹŚsİ«ĐË[¥ÚDkº^Øg¼ŵ¸£EÍö•€ůʼnT¡c_‡ËKY‹ƧUśĵ„݃U_©rETÏʜ±OñtYw獃{£¨uM³x½şL©Ùá[ÓÐĥ Νtģ¢\\‚ś’nkO›w¥±ƒT»ƷFɯàĩÞáB¹Æ…ÑUw„੍žĽw[“mG½Èå~‡Æ÷QyŠěCFmĭZī—ŵVÁ™ƿQƛ—ûXS²‰b½KϽĉS›©ŷXĕŸ{ŽĕK·¥Ɨcqq©f¿]‡ßDõU³h—­gËÇïģÉɋw“k¯í}I·šœbmœÉ–ř›īJɥĻˁ×xo›ɹī‡l•c…¤³Xù]‘™DžA¿w͉ì¥wÇN·ÂËnƾƍdǧđ®Ɲv•Um©³G\\“}µĿ‡QyŹl㓛µEw‰LJQ½yƋBe¶ŋÀů‡ož¥A—˜Éw@•{Gpm¿Aij†ŽKLhˆ³`ñcËtW‚±»ÕS‰ëüÿďD‡u\\wwwù³—V›LŕƒOMËGh£õP¡™er™Ïd{“‡ġWÁ…č|yšg^ğyÁzÙs`—s|ÉåªÇ}m¢Ń¨`x¥’ù^•}ƒÌ¥H«‰Yªƅ”Aйn~Ꝛf¤áÀz„gŠÇDIԝ´AňĀ҄¶ûEYospõD[{ù°]u›Jq•U•|Soċxţ[õÔĥkŋÞŭZ˺óYËüċrw €ÞkrťË¿XGÉbřaDü·Ē÷Aê[Ää€I®BÕИÞ_¢āĠpŠÛÄȉĖġDKwbm‡ÄNô‡ŠfœƫVÉvi†dz—H‘‹QµâFšù­Âœ³¦{YGžƒd¢ĚÜO „€{Ö¦ÞÍÀPŒ^b–ƾŠlŽ[„vt×ĈÍE˨¡Đ~´î¸ùÎh€uè`¸ŸHÕŔVºwĠââWò‡@{œÙNÝ´ə²ȕn{¿¥{l—÷eé^e’ďˆXj©î\\ªÑò˜Üìc\\üqˆÕ[Č¡xoÂċªbØ­Œø|€¶ȴZdÆÂšońéŒGš\\”¼C°ÌƁn´nxšÊOĨ’ہƴĸ¢¸òTxÊǪMīИÖŲÃɎOvˆʦƢ~FއRěò—¿ġ~åŊœú‰Nšžš¸qŽ’Ę[Ĕ¶ÂćnÒPĒÜvúĀÊbÖ{Äî¸~Ŕünp¤ÂH¾œĄYÒ©ÊfºmԈĘcDoĬMŬ’˜S¤„s²‚”ʘچžȂVŦ –ŽèW°ªB|IJXŔþÈJĦÆæFĚêŠYĂªĂ]øªŖNÞüA€’fɨJ€˜¯ÎrDDšĤ€`€mz\\„§~D¬{vJÂ˜«lµĂb–¤p€ŌŰNĄ¨ĊXW|ų ¿¾ɄĦƐMT”‡òP˜÷fØĶK¢ȝ˔Sô¹òEð­”`Ɩ½ǒÂň×äı–§ĤƝ§C~¡‚hlå‚ǺŦŞkâ’~}ŽFøàIJaĞ‚fƠ¥Ž„Ŕdž˜®U¸ˆźXœv¢aƆúŪtŠųƠjd•ƺŠƺÅìnrh\\ĺ¯äɝĦ]èpĄ¦´LƞĬŠ´ƤǬ˼Ēɸ¤rºǼ²¨zÌPðŀbþ¹ļD¢¹œ\\ĜÑŚŸ¶ZƄ³àjĨoâŠȴLʉȮŒĐ­ĚăŽÀêZǚŐ¤qȂ\\L¢ŌİfÆs|zºeªÙæ§΢{Ā´ƐÚ¬¨Ĵà²łhʺKÞºÖTŠiƢ¾ªì°`öøu®Ê¾ãØ"],"encodeOffsets":[[88824,50096]]}},{"type":"Feature","id":"110000","properties":{"id":"110000","cp":[116.405285,39.904989],"name":"北京","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ĽOÁ›ûtŷmiÍt_H»Ĩ±d`й­{bw…Yr“³S]§§o¹€qGtm_Sŧ€“oa›‹FLg‘QN_•dV€@Zom_ć\\ߚc±x¯oœRcfe…£’o§ËgToÛJíĔóu…|wP¤™XnO¢ÉˆŦ¯rNÄā¤zâŖÈRpŢZŠœÚ{GŠrFt¦Òx§ø¹RóäV¤XdˆżâºWbwڍUd®bêņ¾‘jnŎGŃŶŠnzÚSeîĜZczî¾i]͜™QaúÍÔiþĩȨWĢ‹ü|Ėu[qb[swP@ÅğP¿{\\‡¥A¨Ï‘Ѩj¯ŠX\\¯œMK‘pA³[H…īu}}"],"encodeOffsets":[[120023,41045]]}},{"type":"Feature","id":"120000","properties":{"id":"120000","cp":[117.190182,39.125596],"name":"天津","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@ŬgX§Ü«E…¶Ḟ“¬O_™ïlÁg“z±AXe™µÄĵ{¶]gitgšIj·›¥îakS€‰¨ÐƎk}ĕ{gB—qGf{¿a†U^fI“ư‹³õ{YƒıëNĿžk©ïËZŏ‘R§òoY×Ógc…ĥs¡bġ«@dekąI[nlPqCnp{ˆō³°`{PNdƗqSÄĻNNâyj]äžÒD ĬH°Æ]~¡HO¾ŒX}ÐxŒgp“gWˆrDGˆŒpù‚Š^L‚ˆrzWxˆZ^¨´T\\|~@I‰zƒ–bĤ‹œjeĊªz£®Ĕvě€L†mV¾Ô_ȔNW~zbĬvG†²ZmDM~”~"],"encodeOffsets":[[120237,41215]]}},{"type":"Feature","id":"310000","properties":{"id":"310000","cp":[121.472644,31.231706],"name":"上海","childNum":6},"geometry":{"type":"MultiPolygon","coordinates":[["@@ɧư¬EpƸÁxc‡"],["@@©„ªƒ"],["@@”MA‹‘š"],["@@Qp݁E§ÉC¾"],["@@bŝՕÕEȣÚƥêImɇǦèÜĠŒÚžÃƌÃ͎ó"],["@@ǜûȬɋŠŭ™×^‰sYŒɍDŋ‘ŽąñCG²«ªč@h–_p¯A{‡oloY€¬j@IJ`•gQڛhr|ǀ^MIJvtbe´R¯Ô¬¨YŽô¤r]ì†Ƭį"]],"encodeOffsets":[[[124702,32062]],[[124547,32200]],[[124808,31991]],[[124726,32110]],[[124903,32376]],[[124438,32149]]]}},{"type":"Feature","id":"500000","properties":{"id":"500000","cp":[107.304962,29.533155],"name":"重庆","childNum":2},"geometry":{"type":"MultiPolygon","coordinates":[["@@vjG~nGŘŬĶȂƀƾ¹¸ØÎezĆT¸}êЖqHŸðqĖ䒊¥^CƒIj–²p…\\_ æüY|[YxƊæuž°xb®…Űb@~¢NQt°¶‚S栓Ê~rljĔëĚ¢~šuf`‘‚†fa‚ĔJåĊ„nÖ]„jƎćÊ@Š£¾a®£Ű{ŶĕF‹ègLk{Y|¡ĜWƔtƬJÑxq‹±ĢN´‰òK‰™–LÈüD|s`ŋ’ć]ƒÃ‰`đŒMûƱ½~Y°ħ`ƏíW‰½eI‹½{aŸ‘OIrÏ¡ĕŇa†p†µÜƅġ‘œ^ÖÛbÙŽŏml½S‹êqDu[R‹ãË»†ÿw`»y‘¸_ĺę}÷`M¯ċfCVµqʼn÷Z•gg“Œ`d½pDO‡ÎCnœ^uf²ènh¼WtƏxRGg¦…pV„†FI±ŽG^ŒIc´ec‡’G•ĹÞ½sëĬ„h˜xW‚}Kӈe­Xsbk”F¦›L‘ØgTkïƵNï¶}Gy“w\\oñ¡nmĈzjŸ•@™Óc£»Wă¹Ój“_m»ˆ¹·~MvÛaqœ»­‰êœ’\\ÂoVnŽÓØÍ™²«‹bq¿efE „€‹Ĝ^Qž~ Évý‡ş¤²Į‰pEİ}zcĺƒL‹½‡š¿gņ›¡ýE¡ya£³t\\¨\\vú»¼§·Ñr_oÒý¥u‚•_n»_ƒ•At©Þűā§IVeëƒY}{VPÀFA¨ąB}q@|Ou—\\Fm‰QF݅Mw˜å}]•€|FmϋCaƒwŒu_p—¯sfÙgY…DHl`{QEfNysBЦzG¸rHe‚„N\\CvEsÐùÜ_·ÖĉsaQ¯€}_U‡†xÃđŠq›NH¬•Äd^ÝŰR¬ã°wećJEž·vÝ·Hgƒ‚éFXjÉê`|yŒpxkAwœWĐpb¥eOsmzwqChóUQl¥F^laf‹anòsr›EvfQdÁUVf—ÎvÜ^efˆtET¬ôA\\œ¢sJŽnQTjP؈xøK|nBz‰„œĞ»LY‚…FDxӄvr“[ehľš•vN”¢o¾NiÂxGp⬐z›bfZo~hGi’]öF|‰|Nb‡tOMn eA±ŠtPT‡LjpYQ|†SH††YĀxinzDJ€Ìg¢và¥Pg‰_–ÇzII‹€II•„£®S¬„Øs쐣ŒN"],["@@ifjN@s"]],"encodeOffsets":[[[109628,30765]],[[111725,31320]]]}},{"type":"Feature","id":"810000","properties":{"id":"810000","cp":[114.173355,22.320048],"name":"香港","childNum":5},"geometry":{"type":"MultiPolygon","coordinates":[["@@AlBk"],["@@mŽn"],["@@EpFo"],["@@ea¢pl¸Eõ¹‡hj[ƒ]ÔCΖ@lj˜¡uBXŸ…•´‹AI¹…[‹yDUˆ]W`çwZkmc–…M›žp€Åv›}I‹oJlcaƒfёKްä¬XJmРđhI®æÔtSHn€Eˆ„ÒrÈc"],["@@rMUw‡AS®€e"]],"encodeOffsets":[[[117111,23002]],[[117072,22876]],[[117045,22887]],[[116975,23082]],[[116882,22747]]]}},{"type":"Feature","id":"820000","properties":{"id":"820000","cp":[113.54909,22.198951],"name":"澳门","childNum":1},"geometry":{"type":"Polygon","coordinates":["@@kÊd°å§s"],"encodeOffsets":[[116279,22639]]}}],"UTF8Encoding":true}); 46 | })); 47 | -------------------------------------------------------------------------------- /COVID-19_Tracking/static/js/controller.js: -------------------------------------------------------------------------------- 1 | function gettime() { 2 | $.ajax({ 3 | url: "/time", 4 | timeout: 10000, //超时时间设置为10秒; 5 | success: function(data) { 6 | $("#tim").html(data) 7 | }, 8 | error: function(xhr, type, errorThrown) { 9 | } 10 | }); 11 | } 12 | 13 | function get_c1_data() { 14 | $.ajax({ 15 | url: "/c1", 16 | success: function(data) { 17 | $(".num h1").eq(0).text(data.confirm); 18 | $(".num h1").eq(1).text(data.suspect); 19 | $(".num h1").eq(2).text(data.heal); 20 | $(".num h1").eq(3).text(data.dead); 21 | }, 22 | error: function(xhr, type, errorThrown) { 23 | } 24 | }) 25 | } 26 | 27 | function get_c2_data() { 28 | $.ajax({ 29 | url:"/c2", 30 | success: function(data) { 31 | ec_center_option.series[0].data=data.data 32 | ec_center.setOption(ec_center_option) 33 | }, 34 | error: function(xhr, type, errorThrown) { 35 | 36 | } 37 | }) 38 | } 39 | 40 | function get_l1_data() { 41 | $.ajax({ 42 | url:"/l1", 43 | success: function(data) { 44 | ec_left1_Option.xAxis[0].data=data.day 45 | ec_left1_Option.series[0].data=data.confirm 46 | ec_left1_Option.series[1].data=data.suspect 47 | ec_left1_Option.series[2].data=data.heal 48 | ec_left1_Option.series[3].data=data.dead 49 | ec_left1.setOption(ec_left1_Option) 50 | }, 51 | error: function(xhr, type, errorThrown) { 52 | 53 | } 54 | }) 55 | } 56 | 57 | function get_l2_data() { 58 | $.ajax({ 59 | url:"/l2", 60 | success: function(data) { 61 | ec_left2_Option.xAxis[0].data=data.day 62 | ec_left2_Option.series[0].data=data.confirm_add 63 | ec_left2_Option.series[1].data=data.suspect_add 64 | ec_left2.setOption(ec_left2_Option) 65 | }, 66 | error: function(xhr, type, errorThrown) { 67 | } 68 | }) 69 | } 70 | 71 | function get_r1_data() { 72 | $.ajax({ 73 | url: "/r1", 74 | success: function (data) { 75 | ec_right1_option.xAxis.data=data.city; 76 | ec_right1_option.series[0].data=data.confirm; 77 | ec_right1.setOption(ec_right1_option); 78 | } 79 | }) 80 | } 81 | 82 | function get_r2_data() { 83 | $.ajax({ 84 | url: "/r2", 85 | success: function (data) { 86 | ec_right2_option.series[0].data=data.kws; 87 | ec_right2.setOption(ec_right2_option); 88 | } 89 | }) 90 | } 91 | 92 | 93 | gettime() 94 | get_c1_data() 95 | get_c2_data() 96 | get_l1_data() 97 | get_l2_data() 98 | get_r1_data() 99 | get_r2_data() 100 | 101 | setInterval(gettime,1000) 102 | setInterval(get_c1_data,1000*10) 103 | setInterval(get_c2_data,10000*10) 104 | setInterval(get_l1_data,10000*10) 105 | setInterval(get_l2_data,10000*10) 106 | setInterval(get_r1_data,10000*10) 107 | setInterval(get_r2_data,10000*10) -------------------------------------------------------------------------------- /COVID-19_Tracking/static/js/ec_center.js: -------------------------------------------------------------------------------- 1 | var ec_center = echarts.init(document.getElementById('c2'), "dark"); 2 | 3 | var mydata = [{'name': '上海', 'value': 318}, {'name': '云南', 'value': 162}] 4 | 5 | var ec_center_option = { 6 | title: { 7 | text: '', 8 | subtext: '', 9 | x: 'left' 10 | }, 11 | tooltip: { 12 | trigger: 'item' 13 | }, 14 | //左侧小导航图标 15 | visualMap: { 16 | show: true, 17 | x: 'left', 18 | y: 'bottom', 19 | textStyle: { 20 | fontSize: 8, 21 | }, 22 | splitList: [{ start: 1,end: 9 }, 23 | {start: 10, end: 99 }, 24 | { start: 100, end: 999 }, 25 | { start: 1000, end: 9999 }, 26 | { start: 10000 }], 27 | color: ['#8A3310', '#C64918', '#E55B25', '#F2AD92', '#F9DCD1'] 28 | }, 29 | //配置属性 30 | series: [{ 31 | name: '累计确诊人数', 32 | type: 'map', 33 | mapType: 'china', 34 | roam: false, //拖动和缩放 35 | itemStyle: { 36 | normal: { 37 | borderWidth: .5, //区域边框宽度 38 | borderColor: '#009fe8', //区域边框颜色 39 | areaColor: "#ffefd5", //区域颜色 40 | }, 41 | emphasis: { //鼠标滑过地图高亮的相关设置 42 | borderWidth: .5, 43 | borderColor: '#4b0082', 44 | areaColor: "#fff", 45 | } 46 | }, 47 | label: { 48 | normal: { 49 | show: true, //省份名称 50 | fontSize: 8, 51 | }, 52 | emphasis: { 53 | show: true, 54 | fontSize: 8, 55 | } 56 | }, 57 | data:[] //mydata //数据 58 | }] 59 | }; 60 | ec_center.setOption(ec_center_option) -------------------------------------------------------------------------------- /COVID-19_Tracking/static/js/ec_left1.js: -------------------------------------------------------------------------------- 1 | var ec_left1 = echarts.init(document.getElementById('l1'), "dark"); 2 | 3 | var ec_left1_Option = { 4 | //标题样式 5 | title: { 6 | text: "全国累计趋势", 7 | textStyle: { 8 | // color: 'white', 9 | }, 10 | left: 'left', 11 | }, 12 | tooltip: { 13 | trigger: 'axis', 14 | //指示器 15 | axisPointer: { 16 | type: 'line', 17 | lineStyle: { 18 | color: '#7171C6' 19 | } 20 | }, 21 | }, 22 | legend: { 23 | data: ['累计确诊', '现有疑似', "累计治愈", "累计死亡"], 24 | left: "right" 25 | }, 26 | 27 | //图形位置 28 | grid: { 29 | left: '4%', 30 | right: '6%', 31 | bottom: '4%', 32 | top: 50, 33 | containLabel: true 34 | }, 35 | xAxis: [{ 36 | type: 'category', 37 | //x轴坐标点开始与结束点位置都不在最边缘 38 | // boundaryGap : true, 39 | data: []// 40 | // data: ['01.20', '01.21', '01.22'] 41 | }], 42 | yAxis: [{ 43 | type: 'value', 44 | //y轴字体设置 45 | axisLabel: { 46 | show: true, 47 | color: 'white', 48 | fontSize: 12, 49 | formatter: function(value) { 50 | if (value >= 1000) { 51 | value = value / 1000 + 'k'; 52 | } 53 | return value; 54 | } 55 | }, 56 | //y轴线设置显示 57 | axisLine: { 58 | show: true 59 | }, 60 | //与x轴平行的线样式 61 | splitLine: { 62 | show: true, 63 | lineStyle: { 64 | color: '#17273B', 65 | width: 1, 66 | type: 'solid', 67 | } 68 | } 69 | }], 70 | series: [{ 71 | name: "累计确诊", 72 | type: 'line', 73 | smooth: true, 74 | data: []//[260, 406, 529] 75 | }, { 76 | name: "现有疑似", 77 | type: 'line', 78 | smooth: true, 79 | data: []//[54, 37, 3935] 80 | }, 81 | { 82 | name: "累计治愈", 83 | type: 'line', 84 | smooth: true, 85 | data: []//[25, 25, 25] 86 | }, { 87 | name: "累计死亡", 88 | type: 'line', 89 | smooth: true, 90 | data: []//[6, 9, 17] 91 | }] 92 | }; 93 | 94 | ec_left1.setOption(ec_left1_Option) 95 | -------------------------------------------------------------------------------- /COVID-19_Tracking/static/js/ec_left2.js: -------------------------------------------------------------------------------- 1 | var ec_left2 = echarts.init(document.getElementById('l2'), "dark"); 2 | var ec_left2_Option = { 3 | tooltip: { 4 | trigger: 'axis', 5 | //指示器 6 | axisPointer: { 7 | type: 'line', 8 | lineStyle: { 9 | color: '#7171C6' 10 | } 11 | }, 12 | }, 13 | legend: { 14 | data: ['新增确诊', '新增疑似'], 15 | left: "right" 16 | }, 17 | //标题样式 18 | title: { 19 | text: "全国新增趋势", 20 | textStyle: { 21 | color: 'white', 22 | }, 23 | left: 'left' 24 | }, 25 | //图形位置 26 | grid: { 27 | left: '4%', 28 | right: '6%', 29 | bottom: '4%', 30 | top: 50, 31 | containLabel: true 32 | }, 33 | xAxis: [{ 34 | type: 'category', 35 | //x轴坐标点开始与结束点位置都不在最边缘 36 | // boundaryGap : true, 37 | 38 | data: [] 39 | }], 40 | yAxis: [{ 41 | type: 'value', 42 | //y轴字体设置 43 | 44 | //y轴线设置显示 45 | axisLine: { 46 | show: true 47 | }, 48 | axisLabel: { 49 | show: true, 50 | color: 'white', 51 | fontSize: 12, 52 | formatter: function(value) { 53 | if (value >= 1000) { 54 | value = value / 1000 + 'k'; 55 | } 56 | return value; 57 | } 58 | }, 59 | //与x轴平行的线样式 60 | splitLine: { 61 | show: true, 62 | lineStyle: { 63 | color: '#17273B', 64 | width: 1, 65 | type: 'solid', 66 | } 67 | } 68 | }], 69 | series: [{ 70 | name: "新增确诊", 71 | type: 'line', 72 | smooth: true, 73 | data: [] 74 | }, { 75 | name: "新增疑似", 76 | type: 'line', 77 | smooth: true, 78 | data: [] 79 | }] 80 | }; 81 | 82 | ec_left2.setOption(ec_left2_Option) 83 | -------------------------------------------------------------------------------- /COVID-19_Tracking/static/js/ec_right1.js: -------------------------------------------------------------------------------- 1 | var ec_right1 = echarts.init(document.getElementById('r1'),"dark"); 2 | var ec_right1_option = { 3 | //标题样式 4 | title : { 5 | text : "非湖北地区城市确诊TOP5", 6 | textStyle : { 7 | color : 'white', 8 | }, 9 | left : 'left' 10 | }, 11 | color: ['#3398DB'], 12 | tooltip: { 13 | trigger: 'axis', 14 | axisPointer: { // 坐标轴指示器,坐标轴触发有效 15 | type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' 16 | } 17 | }, 18 | xAxis: { 19 | type: 'category', 20 | data: [] 21 | }, 22 | yAxis: { 23 | type: 'value' 24 | }, 25 | series: [{ 26 | data: [], 27 | type: 'bar', 28 | barMaxWidth:"50%" 29 | }] 30 | }; 31 | ec_right1.setOption(ec_right1_option) -------------------------------------------------------------------------------- /COVID-19_Tracking/static/js/ec_right2.js: -------------------------------------------------------------------------------- 1 | var ec_right2 = echarts.init(document.getElementById('r2'), "dark"); 2 | 3 | var ddd = [{'name': '肺炎', 'value': '12734670'}, {'name': '实时', 'value': '12734670'}, 4 | {'name': '新型', 'value': '12734670'}] 5 | var ec_right2_option = { 6 | // backgroundColor: '#515151', 7 | title : { 8 | text : "今日疫情热搜", 9 | textStyle : { 10 | color : 'white', 11 | }, 12 | left : 'left' 13 | }, 14 | tooltip: { 15 | show: false 16 | }, 17 | series: [{ 18 | type: 'wordCloud', 19 | // drawOutOfBound:true, 20 | gridSize: 1, 21 | sizeRange: [12, 55], 22 | rotationRange: [-45, 0, 45, 90], 23 | // maskImage: maskImage, 24 | 25 | //这是让词云图的颜色随机 26 | textStyle: { 27 | normal: { 28 | color: function () { 29 | return 'rgb(' + 30 | Math.round(Math.random() * 255) + 31 | ', ' + Math.round(Math.random() * 255) + 32 | ', ' + Math.round(Math.random() * 255) + ')' 33 | } 34 | } 35 | }, 36 | // left: 'center', 37 | // top: 'center', 38 | // // width: '96%', 39 | // // height: '100%', 40 | right: null, 41 | bottom: null, 42 | // width: 300, 43 | // height: 200, 44 | // top: 20, 45 | data: [] 46 | }] 47 | } 48 | 49 | ec_right2.setOption(ec_right2_option); 50 | -------------------------------------------------------------------------------- /COVID-19_Tracking/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | My Page 6 | 7 | 8 | 9 |

疫情追踪

10 |

实时报道

11 | 12 | 28 | 29 | -------------------------------------------------------------------------------- /COVID-19_Tracking/templates/main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 疫情监控 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
全国疫情实时追踪
14 |
15 |
我是左1
16 |
我是左2
17 |
18 |

19 |

20 |

21 |

22 |

累计确诊

23 |

剩余疑似

24 |

累计治愈

25 |

累计死亡

26 |
27 |
我是中2
28 |
我是右1
29 |
我是右2
30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /COVID-19_Tracking/templates/test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 27 | 28 | -------------------------------------------------------------------------------- /COVID-19_Tracking/utils.py: -------------------------------------------------------------------------------- 1 | import time 2 | import pymysql 3 | 4 | 5 | def get_time(): 6 | time_str = time.strftime("%Y{}%m{}%d{} %X") 7 | return time_str.format("年","月","日") #因为直接写不支持直接识别中文,才用format写 8 | 9 | 10 | #return: 连接,游标 11 | def get_conn(): 12 | 13 | # 创建连接 14 | conn = pymysql.connect(host="127.0.0.1", 15 | user="root", 16 | password="root", 17 | db="cov", 18 | charset="utf8") 19 | # 创建游标 20 | cursor = conn.cursor()# 执行完毕返回的结果集默认以元组显示 21 | return conn, cursor 22 | 23 | 24 | def close_conn(conn, cursor): 25 | cursor.close() 26 | conn.close() 27 | 28 | def query(sql,*args): 29 | """ 30 | 封装通用查询 31 | :param sql: 32 | :param args: 33 | :return: 返回查询到的结果,((),(),)的形式 34 | """ 35 | conn, cursor = get_conn() 36 | cursor.execute(sql,args) 37 | res = cursor.fetchall() 38 | close_conn(conn, cursor) 39 | return res 40 | 41 | 42 | def get_c1_data(): 43 | """ 44 | :return: 返回大屏div id=c1 的数据 45 | """ 46 | # 因为会更新多次数据,取时间戳最新的那组数据 47 | sql = "select sum(confirm)," \ 48 | "(select suspect from history order by ds desc limit 1)," \ 49 | "sum(heal)," \ 50 | "sum(dead) " \ 51 | "from details " \ 52 | "where update_time=(select update_time from details order by update_time desc limit 1) " 53 | res = query(sql) 54 | return res[0] 55 | 56 | #返回各省数据 57 | def get_c2_data(): 58 | # 因为会更新多次数据,取时间戳最新的那组数据 59 | sql = "select province,sum(confirm) from details " \ 60 | "where update_time=(select update_time from details " \ 61 | "order by update_time desc limit 1) " \ 62 | "group by province" 63 | res = query(sql) 64 | return res 65 | 66 | 67 | def get_l1_data(): 68 | 69 | sql = "select ds,confirm,suspect,heal,dead from history" 70 | res = query(sql) 71 | return res 72 | 73 | def get_l2_data(): 74 | 75 | sql = "select ds,confirm_add,suspect_add from history" 76 | res = query(sql) 77 | return res 78 | 79 | 80 | #返回非湖北地区城市确诊人数前5名 81 | def get_r1_data(): 82 | 83 | sql = 'SELECT city,confirm FROM ' \ 84 | '(select city,confirm from details ' \ 85 | 'where update_time=(select update_time from details order by update_time desc limit 1) ' \ 86 | 'and province not in ("湖北","北京","上海","天津","重庆","香港","台湾") ' \ 87 | 'union all ' \ 88 | 'select province as city,sum(confirm) as confirm from details ' \ 89 | 'where update_time=(select update_time from details order by update_time desc limit 1) ' \ 90 | 'and province in ("北京","上海","天津","重庆","香港","台湾") group by province) as a ' \ 91 | 'ORDER BY confirm DESC LIMIT 5' 92 | res = query(sql) 93 | return res 94 | 95 | #返回最近的20条热搜 96 | def get_r2_data(): 97 | sql = 'select content from hotsearch order by id desc limit 20' 98 | res = query(sql) # 格式 (('民警抗疫一线奋战16天牺牲1037364',), ('四川再派两批医疗队1537382',) 99 | return res 100 | 101 | 102 | # if __name__ == "__main__": 103 | # print(get_r2_data()) 104 | 105 | 106 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # COVID-19_Tracking 2 | 基于Python+Flask+Echarts的疫情爬虫&数据可视化项目 3 | *** 4 | ## 步骤 5 | >* Python网络爬虫 6 | >* 使用Python与MySQL数据库交互 7 | >* 使用Flask构建web项目 8 | >* 基于Echarts数据可视化展示 9 | >* 在Linux上部署web项目及爬虫 10 | 11 |
12 | 13 | ## 项目环境 14 | >* Python 3.7 15 | >* MySQL 8.0.17 16 | >* Flask 1.1.1 17 | >*   Linux上: 18 | >>*  阿里云 CentOS 8.0 64位 19 | >>*  Python3.6 20 | >>*  MySQL 8.0 21 | 22 | ## IDE 23 | > Pycharm / Vscode / Sublime 24 | 25 |
26 | 27 | ## 具体介绍及项目过程 28 | > https://blog.csdn.net/hxxjxw/article/details/105336981 29 | 30 |
31 | 32 | ## 文件说明 33 | >* app.py是flask的运行程序,整体项目也是运行它 34 | >* spider.py是爬取各种数据并存入数据库的,定时爬虫就是定时运行它 35 | >* utils.py是数据库的相关操作的封装,spider.py中会调用它的函数 36 | >* templates/中 37 | >>* index.html和test.html是写项目过程中用于测试用的,和项目运行无关,可删 38 | >>* main.html是前端页面 39 | 40 | ## 运行方式: 41 | > ### **本地win10上:** 42 | 在mysql数据库中新建cov数据库,并在其中新建3张表details,history,hotsearch——具体见博客 43 | 在utils.py和spider.py中更改get_conn函数中的数据库连接,host,user,password,db 44 | 运行spider.py爬取数据写入到mysql中 45 | 运行app.py 46 | > ### **远程主机上:** 47 | 具体配置请见博客https://blog.csdn.net/hxxjxw/article/details/105336981 48 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/.idea/lian.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 18 | 19 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 17 | 18 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 51 | 52 | 53 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 1583913028457 79 | 87 | 88 | 89 | 90 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "python.pythonPath": "D:\\Anaconda3\\python.exe" 3 | } -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/README.md: -------------------------------------------------------------------------------- 1 | 实现到全国疫情地图的实现 -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/__pycache__/app.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skyerhxx/COVID-19_Tracking/02cb4f63ec7700d86963139c7a6781c735334387/开发过程中的版本/COVID-19_Tracking1/__pycache__/app.cpython-37.pyc -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/__pycache__/utils.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skyerhxx/COVID-19_Tracking/02cb4f63ec7700d86963139c7a6781c735334387/开发过程中的版本/COVID-19_Tracking1/__pycache__/utils.cpython-37.pyc -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask 2 | from flask import render_template 3 | from flask import jsonify 4 | import utils 5 | 6 | 7 | app = Flask(__name__) 8 | 9 | 10 | @app.route('/') 11 | def hello_world(): 12 | return render_template('main.html') 13 | 14 | @app.route('/c1') 15 | def get_c1_data(): 16 | data = utils.get_c1_data() 17 | return jsonify({"confirm":data[0],"suspect":data[1],"heal":data[2],"dead":data[3]}) 18 | 19 | @app.route('/c2') 20 | def get_c2_data(): 21 | res = [] 22 | for tup in utils.get_c2_data(): 23 | res.append({"name":tup[0],"value":int(tup[1])}) 24 | return jsonify({"data":res}) 25 | 26 | 27 | @app.route('/time') 28 | def gettime(): 29 | return utils.get_time() 30 | 31 | 32 | @app.route('/tem') 33 | def hello_world3(): 34 | return render_template("index.html") 35 | 36 | @app.route('/ajax', methods=["get","post"]) 37 | def hello_world4(): 38 | return '10000' 39 | 40 | if __name__ == '__main__': 41 | app.run() 42 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/static/css/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | background: #333; 4 | } 5 | 6 | #title { 7 | position: absolute; 8 | width: 40%; 9 | height: 10%; 10 | top: 0; 11 | left: 30%; 12 | color: white; 13 | font-size: 40px; 14 | 15 | display: flex; 16 | align-items: center; 17 | justify-content: center; 18 | } 19 | 20 | #tim { 21 | position: absolute; 22 | /* width: 30%; */ 23 | height: 10%; 24 | top: 5%; 25 | right: 2%; 26 | color: #FFFFFF; 27 | font-size: 20px; 28 | } 29 | 30 | #c1 { 31 | position: absolute; 32 | width: 40%; 33 | height: 30%; 34 | top: 10%; 35 | left: 30%; 36 | /* background: #777777; */ 37 | } 38 | 39 | .num { 40 | width: 25%; 41 | float: left; 42 | display: flex; 43 | align-items: center; 44 | justify-content: center; 45 | color: gold; 46 | font-size: 20px; 47 | } 48 | .txt { 49 | width: 25%; 50 | float: left; 51 | font-family: "幼圆"; 52 | display: flex; 53 | align-items: center; 54 | justify-content: center; 55 | font-size: 20px; 56 | color: white; 57 | } 58 | 59 | #c2 { 60 | position: absolute; 61 | width: 40%; 62 | height: 60%; 63 | top: 40%; 64 | left: 30%; 65 | background: #888888; 66 | } 67 | 68 | #l1 { 69 | position: absolute; 70 | width: 30%; 71 | height: 45%; 72 | top: 10%; 73 | left: 0%; 74 | background: #666666; 75 | } 76 | 77 | #l2 { 78 | position: absolute; 79 | width: 30%; 80 | height: 45%; 81 | top: 55%; 82 | left: 0%; 83 | background: #777777; 84 | } 85 | 86 | #r1 { 87 | position: absolute; 88 | width: 30%; 89 | height: 45%; 90 | top: 10%; 91 | right: 0%; 92 | background: #666666; 93 | } 94 | 95 | #r2 { 96 | position: absolute; 97 | width: 30%; 98 | height: 45%; 99 | top: 55%; 100 | right: 0%; 101 | background: #777777; 102 | } 103 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/static/js/controller.js: -------------------------------------------------------------------------------- 1 | function gettime() { 2 | $.ajax({ 3 | url: "/time", 4 | timeout: 10000, //超时时间设置为10秒; 5 | success: function(data) { 6 | $("#tim").html(data) 7 | }, 8 | error: function(xhr, type, errorThrown) { 9 | } 10 | }); 11 | } 12 | 13 | function get_c1_data() { 14 | $.ajax({ 15 | url: "/c1", 16 | success: function(data) { 17 | $(".num h1").eq(0).text(data.confirm); 18 | $(".num h1").eq(1).text(data.suspect); 19 | $(".num h1").eq(2).text(data.heal); 20 | $(".num h1").eq(3).text(data.dead); 21 | }, 22 | error: function(xhr, type, errorThrown) { 23 | } 24 | }) 25 | } 26 | 27 | function get_c2_data() { 28 | $.ajax({ 29 | url:"/c2", 30 | success: function(data) { 31 | ec_center_option.series[0].data=data.data 32 | ec_center.setOption(ec_center_option) 33 | }, 34 | error: function(xhr, type, errorThrown) { 35 | 36 | } 37 | }) 38 | } 39 | 40 | gettime() 41 | get_c1_data() 42 | get_c2_data() 43 | // setInterval(gettime,1000) 44 | // setInterval(get_c1_data,1000) -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/static/js/ec_center.js: -------------------------------------------------------------------------------- 1 | var ec_center = echarts.init(document.getElementById('c2'), "dark"); 2 | 3 | var mydata = [{'name': '上海', 'value': 318}, {'name': '云南', 'value': 162}] 4 | 5 | var ec_center_option = { 6 | title: { 7 | text: '', 8 | subtext: '', 9 | x: 'left' 10 | }, 11 | tooltip: { 12 | trigger: 'item' 13 | }, 14 | //左侧小导航图标 15 | visualMap: { 16 | show: true, 17 | x: 'left', 18 | y: 'bottom', 19 | textStyle: { 20 | fontSize: 8, 21 | }, 22 | splitList: [{ start: 1,end: 9 }, 23 | {start: 10, end: 99 }, 24 | { start: 100, end: 999 }, 25 | { start: 1000, end: 9999 }, 26 | { start: 10000 }], 27 | color: ['#8A3310', '#C64918', '#E55B25', '#F2AD92', '#F9DCD1'] 28 | }, 29 | //配置属性 30 | series: [{ 31 | name: '累计确诊人数', 32 | type: 'map', 33 | mapType: 'china', 34 | roam: false, //拖动和缩放 35 | itemStyle: { 36 | normal: { 37 | borderWidth: .5, //区域边框宽度 38 | borderColor: '#009fe8', //区域边框颜色 39 | areaColor: "#ffefd5", //区域颜色 40 | }, 41 | emphasis: { //鼠标滑过地图高亮的相关设置 42 | borderWidth: .5, 43 | borderColor: '#4b0082', 44 | areaColor: "#fff", 45 | } 46 | }, 47 | label: { 48 | normal: { 49 | show: true, //省份名称 50 | fontSize: 8, 51 | }, 52 | emphasis: { 53 | show: true, 54 | fontSize: 8, 55 | } 56 | }, 57 | // data:[] //mydata //数据 58 | data:mydata 59 | }] 60 | }; 61 | ec_center.setOption(ec_center_option) -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | My Page 6 | 7 | 8 | 9 |

疫情追踪

10 |

实时报道

11 | 12 | 28 | 29 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/templates/main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 疫情监控 6 | 7 | 8 | 9 | 10 | 11 | 12 |
全国疫情实时追踪
13 |
我是时间
14 |
我是左1
15 |
我是左2
16 |
17 |

123

18 |

123

19 |

123

20 |

123

21 |

累计确诊

22 |

剩余疑似

23 |

累计治愈

24 |

累计死亡

25 |
26 |
我是中2
27 |
我是右1
28 |
我是右2
29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/templates/test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 27 | 28 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/utils.py: -------------------------------------------------------------------------------- 1 | import time 2 | import pymysql 3 | 4 | 5 | def get_time(): 6 | time_str = time.strftime("%Y{}%m{}%d{} %X") 7 | return time_str.format("年","月","日") #因为直接写不支持直接识别中文,才用format写 8 | 9 | 10 | #return: 连接,游标 11 | def get_conn(): 12 | 13 | # 创建连接 14 | conn = pymysql.connect(host="127.0.0.1", 15 | user="root", 16 | password="root", 17 | db="cov", 18 | charset="utf8") 19 | # 创建游标 20 | cursor = conn.cursor()# 执行完毕返回的结果集默认以元组显示 21 | return conn, cursor 22 | 23 | 24 | def close_conn(conn, cursor): 25 | cursor.close() 26 | conn.close() 27 | 28 | def query(sql,*args): 29 | """ 30 | 封装通用查询 31 | :param sql: 32 | :param args: 33 | :return: 返回查询到的结果,((),(),)的形式 34 | """ 35 | conn, cursor = get_conn() 36 | cursor.execute(sql,args) 37 | res = cursor.fetchall() 38 | close_conn(conn, cursor) 39 | return res 40 | 41 | 42 | def get_c1_data(): 43 | """ 44 | :return: 返回大屏div id=c1 的数据 45 | """ 46 | # 因为会更新多次数据,取时间戳最新的那组数据 47 | sql = "select sum(confirm)," \ 48 | "(select suspect from history order by ds desc limit 1)," \ 49 | "sum(heal)," \ 50 | "sum(dead) " \ 51 | "from details " \ 52 | "where update_time=(select update_time from details order by update_time desc limit 1) " 53 | res = query(sql) 54 | return res[0] 55 | 56 | #返回各省数据 57 | def get_c2_data(): 58 | # 因为会更新多次数据,取时间戳最新的那组数据 59 | sql = "select province,sum(confirm) from details " \ 60 | "where update_time=(select update_time from details " \ 61 | "order by update_time desc limit 1) " \ 62 | "group by province" 63 | res = query(sql) 64 | return res 65 | 66 | 67 | 68 | 69 | # if __name__ == "__main__": 70 | # print(get_c1_data()) 71 | 72 | 73 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/zong.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import json 3 | import time 4 | import pymysql 5 | from selenium.webdriver import Chrome,ChromeOptions 6 | 7 | 8 | #返回历史数据和当日详细数据 9 | def get_tencent_data(): 10 | url1 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5" 11 | url2 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other" 12 | headers = { 13 | 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36' 14 | } 15 | r1 = requests.get(url1, headers) 16 | r2 = requests.get(url2, headers) 17 | 18 | #json字符串转字典 19 | res1 = json.loads(r1.text) 20 | res2 = json.loads(r2.text) 21 | 22 | data_all1 = json.loads(res1["data"]) 23 | data_all2 = json.loads(res2["data"]) 24 | 25 | #历史数据 26 | history = {} 27 | for i in data_all2["chinaDayList"]: 28 | ds = "2020." + i["date"] 29 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间 30 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式 31 | confirm = i["confirm"] 32 | suspect = i["suspect"] 33 | heal = i["heal"] 34 | dead = i["dead"] 35 | history[ds] = {"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead} 36 | for i in data_all2["chinaDayAddList"]: 37 | ds = "2020." + i["date"] 38 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间 39 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式 40 | confirm = i["confirm"] 41 | suspect = i["suspect"] 42 | heal = i["heal"] 43 | dead = i["dead"] 44 | history[ds].update({"confirm_add": confirm, "suspect_add": suspect, "heal_add": heal, "dead_add": dead}) 45 | 46 | #当日详细数据 47 | details = [] 48 | update_time = data_all1["lastUpdateTime"] 49 | data_country = data_all1["areaTree"] #list 25个国家 50 | data_province = data_country[0]["children"] #中国各省 51 | for pro_infos in data_province: 52 | province = pro_infos["name"] #省名 53 | for city_infos in pro_infos["children"]: 54 | city = city_infos["name"] 55 | confirm = city_infos["total"]["confirm"] 56 | confirm_add = city_infos["today"]["confirm"] 57 | heal = city_infos["total"]["heal"] 58 | dead = city_infos["total"]["dead"] 59 | details.append([update_time, province, city, confirm, confirm_add, heal, dead]) 60 | return history, details 61 | 62 | 63 | def get_conn(): 64 | #建立连接 65 | conn = pymysql.connect(host="127.0.0.1", user="root", password="root", db="cov", charset="utf8") 66 | #创建游标 67 | cursor = conn.cursor() 68 | return conn,cursor 69 | 70 | def close_conn(conn,cursor): 71 | if cursor: 72 | cursor.close() 73 | if conn: 74 | conn.close() 75 | 76 | #插入details数据 77 | def update_details(): 78 | cursor = None 79 | conn = None 80 | try: 81 | li = get_tencent_data()[1] #0是历史数据,1是当日详细数据 82 | conn,cursor = get_conn() 83 | sql = "insert into details(update_time,province,city,confirm,confirm_add,heal,dead) values(%s,%s,%s,%s,%s,%s,%s)" 84 | sql_query = "select %s=(select update_time from details order by id desc limit 1)" #对比当前最大时间戳 85 | #对比当前最大时间戳 86 | cursor.execute(sql_query,li[0][0]) 87 | if not cursor.fetchone()[0]: 88 | print(f"{time.asctime()}开始更新数据") 89 | for item in li: 90 | cursor.execute(sql,item) 91 | conn.commit() 92 | print(f"{time.asctime()}更新到最新数据") 93 | else: 94 | print(f"{time.asctime()}已是最新数据!") 95 | except: 96 | traceback.print_exc() 97 | finally: 98 | close_conn(conn,cursor) 99 | 100 | 101 | #插入history数据 102 | def insert_history(): 103 | cursor = None 104 | conn = None 105 | try: 106 | dic = get_tencent_data()[0]#0代表历史数据字典 107 | print(f"{time.asctime()}开始插入历史数据") 108 | conn,cursor = get_conn() 109 | sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)" 110 | for k,v in dic.items(): 111 | cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"), 112 | v.get("suspect_add"),v.get("heal"),v.get("heal_add"), 113 | v.get("dead"),v.get("dead_add")]) 114 | conn.commit() 115 | print(f"{time.asctime()}插入历史数据完毕") 116 | except: 117 | traceback.print_exc() 118 | finally: 119 | close_conn(conn,cursor) 120 | 121 | 122 | #更新历史数据 123 | def update_history(): 124 | cursor = None 125 | conn = None 126 | try: 127 | dic = get_tencent_data()[0]#0代表历史数据字典 128 | print(f"{time.asctime()}开始更新历史数据") 129 | conn,cursor = get_conn() 130 | sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)" 131 | sql_query = "select confirm from history where ds=%s" 132 | for k,v in dic.items(): 133 | if not cursor.execute(sql_query,k): 134 | cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"), 135 | v.get("suspect_add"),v.get("heal"),v.get("heal_add"), 136 | v.get("dead"),v.get("dead_add")]) 137 | conn.commit() 138 | print(f"{time.asctime()}历史数据更新完毕") 139 | except: 140 | traceback.print_exc() 141 | finally: 142 | close_conn(conn,cursor) 143 | 144 | 145 | #返回百度疫情热搜 146 | def get_baidu_hot(): 147 | option = ChromeOptions() #创建谷歌浏览器实例 148 | option.add_argument("--headless")#隐藏浏览器 149 | option.add_argument("--no-sandbox") #禁用沙盘 部署在linux上访问chrome要求这样 150 | 151 | url = 'https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1' 152 | brower = Chrome(options = option) 153 | brower.get(url) 154 | #找到展开按钮 155 | but = brower.find_element_by_css_selector('#ptab-0 > div > div.VirusHot_1-5-5_32AY4F.VirusHot_1-5-5_2RnRvg > section > div') #定位到点击展开按钮 156 | but.click() #点击展开 157 | 158 | time.sleep(1)#爬虫与反爬,模拟人等待1秒 159 | 160 | c = brower.find_elements_by_xpath('//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]') 161 | context = [i.text for i in c] #获取标签内容 162 | print(context) 163 | return context 164 | 165 | 166 | #将疫情热搜插入数据库 167 | def update_hotsearch(): 168 | cursor = None 169 | conn = None 170 | try: 171 | context = get_baidu_hot() 172 | print(f"{time.asctime()}开始更新热搜数据") 173 | conn, cursor = get_conn() 174 | sql = "insert into hotsearch(dt,content) values(%s,%s)" 175 | ts = time.strftime("%Y-%m-%d %X") 176 | for i in context: 177 | cursor.execute(sql,(ts,i)) #插入数据 178 | conn.commit() #提交事务保存数据 179 | print(f"{time.asctime()}数据更新完毕") 180 | except: 181 | traceback.print_exc() 182 | finally: 183 | close_conn(conn,cursor) 184 | 185 | 186 | 187 | 188 | # his,de = get_tencent_data() 189 | # print(his) 190 | # print(de) 191 | 192 | insert_history() 193 | update_details() 194 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/爬取并处理腾讯疫情数据.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import json 3 | import time 4 | 5 | #返回历史数据和当日详细数据 6 | def get_tencent_data(): 7 | url1 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5" 8 | url2 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other" 9 | headers = { 10 | 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36' 11 | } 12 | r1 = requests.get(url1, headers) 13 | r2 = requests.get(url2, headers) 14 | 15 | #json字符串转字典 16 | res1 = json.loads(r1.text) 17 | res2 = json.loads(r2.text) 18 | 19 | data_all1 = json.loads(res1["data"]) 20 | data_all2 = json.loads(res2["data"]) 21 | 22 | #历史数据 23 | history = {} 24 | for i in data_all2["chinaDayList"]: 25 | ds = "2020." + i["date"] 26 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间 27 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式 28 | confirm = i["confirm"] 29 | suspect = i["suspect"] 30 | heal = i["heal"] 31 | dead = i["dead"] 32 | history[ds] = {"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead} 33 | for i in data_all2["chinaDayAddList"]: 34 | ds = "2020." + i["date"] 35 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间 36 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式 37 | confirm = i["confirm"] 38 | suspect = i["suspect"] 39 | heal = i["heal"] 40 | dead = i["dead"] 41 | history[ds].update({"confirm_add": confirm, "suspect_add": suspect, "heal_add": heal, "dead_add": dead}) 42 | 43 | #当日详细数据 44 | details = [] 45 | update_time = data_all1["lastUpdateTime"] 46 | data_country = data_all1["areaTree"] #list 25个国家 47 | data_province = data_country[0]["children"] #中国各省 48 | for pro_infos in data_province: 49 | province = pro_infos["name"] #省名 50 | for city_infos in pro_infos["children"]: 51 | city = city_infos["name"] 52 | confirm = city_infos["total"]["confirm"] 53 | confirm_add = city_infos["today"]["confirm"] 54 | heal = city_infos["total"]["heal"] 55 | dead = city_infos["total"]["dead"] 56 | details.append([update_time, province, city, confirm, confirm_add, heal, dead]) 57 | return history, details 58 | 59 | 60 | 61 | 62 | 63 | his,de = get_tencent_data() 64 | print(his) 65 | print(de) 66 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking1/爬取百度热搜.py: -------------------------------------------------------------------------------- 1 | from selenium.webdriver import Chrome,ChromeOptions 2 | import time 3 | 4 | option = ChromeOptions() 5 | option.add_argument("--headless")#隐藏浏览器 6 | option.add_argument("--no-sandbox") #禁用沙盘 部署在linux上访问chrome要求这样 7 | url = 'https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1' 8 | 9 | brower = Chrome(options = option) 10 | #brower = Chrome() 11 | brower.get(url) 12 | but = brower.find_element_by_css_selector('#ptab-0 > div > div.VirusHot_1-5-5_32AY4F.VirusHot_1-5-5_2RnRvg > section > div') #定位到点击展开按钮 13 | but.click() #点击展开 14 | 15 | 16 | time.sleep(1)#爬虫与反爬,模拟人等待1秒 17 | c = brower.find_elements_by_xpath('//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]') 18 | for i in c: 19 | print(i.text) 20 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/.idea/lian.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 18 | 19 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 17 | 18 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 51 | 52 | 53 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 1583913028457 79 | 90 | 91 | 92 | 93 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "python.pythonPath": "D:\\Anaconda3\\python.exe" 3 | } -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/README.md: -------------------------------------------------------------------------------- 1 | 实现到全国累计和新增趋势的实现 -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/__pycache__/app.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skyerhxx/COVID-19_Tracking/02cb4f63ec7700d86963139c7a6781c735334387/开发过程中的版本/COVID-19_Tracking2/__pycache__/app.cpython-37.pyc -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/__pycache__/utils.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skyerhxx/COVID-19_Tracking/02cb4f63ec7700d86963139c7a6781c735334387/开发过程中的版本/COVID-19_Tracking2/__pycache__/utils.cpython-37.pyc -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask 2 | from flask import render_template 3 | from flask import jsonify 4 | import utils 5 | 6 | 7 | app = Flask(__name__) 8 | 9 | 10 | @app.route('/') 11 | def hello_world(): 12 | return render_template('main.html') 13 | 14 | @app.route('/c1') 15 | def get_c1_data(): 16 | data = utils.get_c1_data() 17 | return jsonify({"confirm":data[0],"suspect":data[1],"heal":data[2],"dead":data[3]}) 18 | 19 | @app.route('/c2') 20 | def get_c2_data(): 21 | res = [] 22 | for tup in utils.get_c2_data(): 23 | res.append({"name":tup[0],"value":int(tup[1])}) 24 | return jsonify({"data":res}) 25 | 26 | 27 | @app.route("/l1") 28 | def get_l1_data(): 29 | data = utils.get_l1_data() 30 | day,confirm,suspect,heal,dead = [],[],[],[],[] 31 | for a,b,c,d,e in data[7:]: #很多卫健委网站前7天都是没有数据的,所以把前7天砍掉了 32 | day.append(a.strftime("%m-%d")) #a是datatime类型 33 | confirm.append(b) 34 | suspect.append(c) 35 | heal.append(d) 36 | dead.append(e) 37 | return jsonify({"day":day,"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead}) 38 | 39 | @app.route("/l2") 40 | def get_l2_data(): 41 | data = utils.get_l2_data() 42 | day, confirm_add, suspect_add = [], [], [] 43 | for a, b, c in data[7:]: 44 | day.append(a.strftime("%m-%d")) # a是datatime类型 45 | confirm_add.append(b) 46 | suspect_add.append(c) 47 | return jsonify({"day": day, "confirm_add": confirm_add, "suspect_add": suspect_add}) 48 | 49 | 50 | 51 | @app.route('/time') 52 | def gettime(): 53 | return utils.get_time() 54 | 55 | 56 | @app.route('/tem') 57 | def hello_world3(): 58 | return render_template("index.html") 59 | 60 | @app.route('/ajax', methods=["get","post"]) 61 | def hello_world4(): 62 | return '10000' 63 | 64 | if __name__ == '__main__': 65 | app.run() 66 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/static/css/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | background: #333; 4 | } 5 | 6 | #title { 7 | position: absolute; 8 | width: 40%; 9 | height: 10%; 10 | top: 0; 11 | left: 30%; 12 | color: white; 13 | font-size: 40px; 14 | 15 | display: flex; 16 | align-items: center; 17 | justify-content: center; 18 | } 19 | 20 | #tim { 21 | position: absolute; 22 | /* width: 30%; */ 23 | height: 10%; 24 | top: 5%; 25 | right: 2%; 26 | color: #FFFFFF; 27 | font-size: 20px; 28 | } 29 | 30 | #c1 { 31 | position: absolute; 32 | width: 40%; 33 | height: 30%; 34 | top: 10%; 35 | left: 30%; 36 | /* background: #777777; */ 37 | } 38 | 39 | .num { 40 | width: 25%; 41 | float: left; 42 | display: flex; 43 | align-items: center; 44 | justify-content: center; 45 | color: gold; 46 | font-size: 20px; 47 | } 48 | .txt { 49 | width: 25%; 50 | float: left; 51 | font-family: "幼圆"; 52 | display: flex; 53 | align-items: center; 54 | justify-content: center; 55 | font-size: 20px; 56 | color: white; 57 | } 58 | 59 | #c2 { 60 | position: absolute; 61 | width: 40%; 62 | height: 60%; 63 | top: 40%; 64 | left: 30%; 65 | background: #888888; 66 | } 67 | 68 | #l1 { 69 | position: absolute; 70 | width: 30%; 71 | height: 45%; 72 | top: 10%; 73 | left: 0%; 74 | background: #666666; 75 | } 76 | 77 | #l2 { 78 | position: absolute; 79 | width: 30%; 80 | height: 45%; 81 | top: 55%; 82 | left: 0%; 83 | background: #777777; 84 | } 85 | 86 | #r1 { 87 | position: absolute; 88 | width: 30%; 89 | height: 45%; 90 | top: 10%; 91 | right: 0%; 92 | background: #666666; 93 | } 94 | 95 | #r2 { 96 | position: absolute; 97 | width: 30%; 98 | height: 45%; 99 | top: 55%; 100 | right: 0%; 101 | background: #777777; 102 | } 103 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/static/js/controller.js: -------------------------------------------------------------------------------- 1 | function gettime() { 2 | $.ajax({ 3 | url: "/time", 4 | timeout: 10000, //超时时间设置为10秒; 5 | success: function(data) { 6 | $("#tim").html(data) 7 | }, 8 | error: function(xhr, type, errorThrown) { 9 | } 10 | }); 11 | } 12 | 13 | function get_c1_data() { 14 | $.ajax({ 15 | url: "/c1", 16 | success: function(data) { 17 | $(".num h1").eq(0).text(data.confirm); 18 | $(".num h1").eq(1).text(data.suspect); 19 | $(".num h1").eq(2).text(data.heal); 20 | $(".num h1").eq(3).text(data.dead); 21 | }, 22 | error: function(xhr, type, errorThrown) { 23 | } 24 | }) 25 | } 26 | 27 | function get_c2_data() { 28 | $.ajax({ 29 | url:"/c2", 30 | success: function(data) { 31 | ec_center_option.series[0].data=data.data 32 | ec_center.setOption(ec_center_option) 33 | }, 34 | error: function(xhr, type, errorThrown) { 35 | 36 | } 37 | }) 38 | } 39 | 40 | function get_l1_data() { 41 | $.ajax({ 42 | url:"/l1", 43 | success: function(data) { 44 | ec_left1_Option.xAxis[0].data=data.day 45 | ec_left1_Option.series[0].data=data.confirm 46 | ec_left1_Option.series[1].data=data.suspect 47 | ec_left1_Option.series[2].data=data.heal 48 | ec_left1_Option.series[3].data=data.dead 49 | ec_left1.setOption(ec_left1_Option) 50 | }, 51 | error: function(xhr, type, errorThrown) { 52 | 53 | } 54 | }) 55 | } 56 | 57 | function get_l2_data() { 58 | $.ajax({ 59 | url:"/l2", 60 | success: function(data) { 61 | ec_left2_Option.xAxis[0].data=data.day 62 | ec_left2_Option.series[0].data=data.confirm_add 63 | ec_left2_Option.series[1].data=data.suspect_add 64 | ec_left2.setOption(ec_left2_Option) 65 | }, 66 | error: function(xhr, type, errorThrown) { 67 | } 68 | }) 69 | } 70 | 71 | 72 | 73 | gettime() 74 | get_c1_data() 75 | get_c2_data() 76 | get_l1_data() 77 | get_l2_data() 78 | // setInterval(gettime,1000) 79 | // setInterval(get_c1_data,1000) -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/static/js/ec_center.js: -------------------------------------------------------------------------------- 1 | var ec_center = echarts.init(document.getElementById('c2'), "dark"); 2 | 3 | var mydata = [{'name': '上海', 'value': 318}, {'name': '云南', 'value': 162}] 4 | 5 | var ec_center_option = { 6 | title: { 7 | text: '', 8 | subtext: '', 9 | x: 'left' 10 | }, 11 | tooltip: { 12 | trigger: 'item' 13 | }, 14 | //左侧小导航图标 15 | visualMap: { 16 | show: true, 17 | x: 'left', 18 | y: 'bottom', 19 | textStyle: { 20 | fontSize: 8, 21 | }, 22 | splitList: [{ start: 1,end: 9 }, 23 | {start: 10, end: 99 }, 24 | { start: 100, end: 999 }, 25 | { start: 1000, end: 9999 }, 26 | { start: 10000 }], 27 | color: ['#8A3310', '#C64918', '#E55B25', '#F2AD92', '#F9DCD1'] 28 | }, 29 | //配置属性 30 | series: [{ 31 | name: '累计确诊人数', 32 | type: 'map', 33 | mapType: 'china', 34 | roam: false, //拖动和缩放 35 | itemStyle: { 36 | normal: { 37 | borderWidth: .5, //区域边框宽度 38 | borderColor: '#009fe8', //区域边框颜色 39 | areaColor: "#ffefd5", //区域颜色 40 | }, 41 | emphasis: { //鼠标滑过地图高亮的相关设置 42 | borderWidth: .5, 43 | borderColor: '#4b0082', 44 | areaColor: "#fff", 45 | } 46 | }, 47 | label: { 48 | normal: { 49 | show: true, //省份名称 50 | fontSize: 8, 51 | }, 52 | emphasis: { 53 | show: true, 54 | fontSize: 8, 55 | } 56 | }, 57 | // data:[] //mydata //数据 58 | data:mydata 59 | }] 60 | }; 61 | ec_center.setOption(ec_center_option) -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/static/js/ec_left1.js: -------------------------------------------------------------------------------- 1 | var ec_left1 = echarts.init(document.getElementById('l1'), "dark"); 2 | 3 | var ec_left1_Option = { 4 | //标题样式 5 | title: { 6 | text: "全国累计趋势", 7 | textStyle: { 8 | // color: 'white', 9 | }, 10 | left: 'left', 11 | }, 12 | tooltip: { 13 | trigger: 'axis', 14 | //指示器 15 | axisPointer: { 16 | type: 'line', 17 | lineStyle: { 18 | color: '#7171C6' 19 | } 20 | }, 21 | }, 22 | legend: { 23 | data: ['累计确诊', '现有疑似', "累计治愈", "累计死亡"], 24 | left: "right" 25 | }, 26 | 27 | //图形位置 28 | grid: { 29 | left: '4%', 30 | right: '6%', 31 | bottom: '4%', 32 | top: 50, 33 | containLabel: true 34 | }, 35 | xAxis: [{ 36 | type: 'category', 37 | //x轴坐标点开始与结束点位置都不在最边缘 38 | // boundaryGap : true, 39 | data: []// 40 | // data: ['01.20', '01.21', '01.22'] 41 | }], 42 | yAxis: [{ 43 | type: 'value', 44 | //y轴字体设置 45 | axisLabel: { 46 | show: true, 47 | color: 'white', 48 | fontSize: 12, 49 | formatter: function(value) { 50 | if (value >= 1000) { 51 | value = value / 1000 + 'k'; 52 | } 53 | return value; 54 | } 55 | }, 56 | //y轴线设置显示 57 | axisLine: { 58 | show: true 59 | }, 60 | //与x轴平行的线样式 61 | splitLine: { 62 | show: true, 63 | lineStyle: { 64 | color: '#17273B', 65 | width: 1, 66 | type: 'solid', 67 | } 68 | } 69 | }], 70 | series: [{ 71 | name: "累计确诊", 72 | type: 'line', 73 | smooth: true, 74 | data: []//[260, 406, 529] 75 | }, { 76 | name: "现有疑似", 77 | type: 'line', 78 | smooth: true, 79 | data: []//[54, 37, 3935] 80 | }, 81 | { 82 | name: "累计治愈", 83 | type: 'line', 84 | smooth: true, 85 | data: []//[25, 25, 25] 86 | }, { 87 | name: "累计死亡", 88 | type: 'line', 89 | smooth: true, 90 | data: []//[6, 9, 17] 91 | }] 92 | }; 93 | 94 | ec_left1.setOption(ec_left1_Option) 95 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/static/js/ec_left2.js: -------------------------------------------------------------------------------- 1 | var ec_left2 = echarts.init(document.getElementById('l2'), "dark"); 2 | var ec_left2_Option = { 3 | tooltip: { 4 | trigger: 'axis', 5 | //指示器 6 | axisPointer: { 7 | type: 'line', 8 | lineStyle: { 9 | color: '#7171C6' 10 | } 11 | }, 12 | }, 13 | legend: { 14 | data: ['新增确诊', '新增疑似'], 15 | left: "right" 16 | }, 17 | //标题样式 18 | title: { 19 | text: "全国新增趋势", 20 | textStyle: { 21 | color: 'white', 22 | }, 23 | left: 'left' 24 | }, 25 | //图形位置 26 | grid: { 27 | left: '4%', 28 | right: '6%', 29 | bottom: '4%', 30 | top: 50, 31 | containLabel: true 32 | }, 33 | xAxis: [{ 34 | type: 'category', 35 | //x轴坐标点开始与结束点位置都不在最边缘 36 | // boundaryGap : true, 37 | 38 | data: [] 39 | }], 40 | yAxis: [{ 41 | type: 'value', 42 | //y轴字体设置 43 | 44 | //y轴线设置显示 45 | axisLine: { 46 | show: true 47 | }, 48 | axisLabel: { 49 | show: true, 50 | color: 'white', 51 | fontSize: 12, 52 | formatter: function(value) { 53 | if (value >= 1000) { 54 | value = value / 1000 + 'k'; 55 | } 56 | return value; 57 | } 58 | }, 59 | //与x轴平行的线样式 60 | splitLine: { 61 | show: true, 62 | lineStyle: { 63 | color: '#17273B', 64 | width: 1, 65 | type: 'solid', 66 | } 67 | } 68 | }], 69 | series: [{ 70 | name: "新增确诊", 71 | type: 'line', 72 | smooth: true, 73 | data: [] 74 | }, { 75 | name: "新增疑似", 76 | type: 'line', 77 | smooth: true, 78 | data: [] 79 | }] 80 | }; 81 | 82 | ec_left2.setOption(ec_left2_Option) 83 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | My Page 6 | 7 | 8 | 9 |

疫情追踪

10 |

实时报道

11 | 12 | 28 | 29 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/templates/main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 疫情监控 6 | 7 | 8 | 9 | 10 | 11 | 12 |
全国疫情实时追踪
13 |
我是时间
14 |
我是左1
15 |
我是左2
16 |
17 |

123

18 |

123

19 |

123

20 |

123

21 |

累计确诊

22 |

剩余疑似

23 |

累计治愈

24 |

累计死亡

25 |
26 |
我是中2
27 |
我是右1
28 |
我是右2
29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/templates/test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 27 | 28 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/utils.py: -------------------------------------------------------------------------------- 1 | import time 2 | import pymysql 3 | 4 | 5 | def get_time(): 6 | time_str = time.strftime("%Y{}%m{}%d{} %X") 7 | return time_str.format("年","月","日") #因为直接写不支持直接识别中文,才用format写 8 | 9 | 10 | #return: 连接,游标 11 | def get_conn(): 12 | 13 | # 创建连接 14 | conn = pymysql.connect(host="127.0.0.1", 15 | user="root", 16 | password="root", 17 | db="cov", 18 | charset="utf8") 19 | # 创建游标 20 | cursor = conn.cursor()# 执行完毕返回的结果集默认以元组显示 21 | return conn, cursor 22 | 23 | 24 | def close_conn(conn, cursor): 25 | cursor.close() 26 | conn.close() 27 | 28 | def query(sql,*args): 29 | """ 30 | 封装通用查询 31 | :param sql: 32 | :param args: 33 | :return: 返回查询到的结果,((),(),)的形式 34 | """ 35 | conn, cursor = get_conn() 36 | cursor.execute(sql,args) 37 | res = cursor.fetchall() 38 | close_conn(conn, cursor) 39 | return res 40 | 41 | 42 | def get_c1_data(): 43 | """ 44 | :return: 返回大屏div id=c1 的数据 45 | """ 46 | # 因为会更新多次数据,取时间戳最新的那组数据 47 | sql = "select sum(confirm)," \ 48 | "(select suspect from history order by ds desc limit 1)," \ 49 | "sum(heal)," \ 50 | "sum(dead) " \ 51 | "from details " \ 52 | "where update_time=(select update_time from details order by update_time desc limit 1) " 53 | res = query(sql) 54 | return res[0] 55 | 56 | #返回各省数据 57 | def get_c2_data(): 58 | # 因为会更新多次数据,取时间戳最新的那组数据 59 | sql = "select province,sum(confirm) from details " \ 60 | "where update_time=(select update_time from details " \ 61 | "order by update_time desc limit 1) " \ 62 | "group by province" 63 | res = query(sql) 64 | return res 65 | 66 | 67 | def get_l1_data(): 68 | 69 | sql = "select ds,confirm,suspect,heal,dead from history" 70 | res = query(sql) 71 | return res 72 | 73 | def get_l2_data(): 74 | 75 | sql = "select ds,confirm_add,suspect_add from history" 76 | res = query(sql) 77 | return res 78 | 79 | # if __name__ == "__main__": 80 | # print(get_l1_data()) 81 | 82 | 83 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/zong.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import json 3 | import time 4 | import pymysql 5 | from selenium.webdriver import Chrome,ChromeOptions 6 | 7 | 8 | #返回历史数据和当日详细数据 9 | def get_tencent_data(): 10 | url1 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5" 11 | url2 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other" 12 | headers = { 13 | 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36' 14 | } 15 | r1 = requests.get(url1, headers) 16 | r2 = requests.get(url2, headers) 17 | 18 | #json字符串转字典 19 | res1 = json.loads(r1.text) 20 | res2 = json.loads(r2.text) 21 | 22 | data_all1 = json.loads(res1["data"]) 23 | data_all2 = json.loads(res2["data"]) 24 | 25 | #历史数据 26 | history = {} 27 | for i in data_all2["chinaDayList"]: 28 | ds = "2020." + i["date"] 29 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间 30 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式 31 | confirm = i["confirm"] 32 | suspect = i["suspect"] 33 | heal = i["heal"] 34 | dead = i["dead"] 35 | history[ds] = {"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead} 36 | for i in data_all2["chinaDayAddList"]: 37 | ds = "2020." + i["date"] 38 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间 39 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式 40 | confirm = i["confirm"] 41 | suspect = i["suspect"] 42 | heal = i["heal"] 43 | dead = i["dead"] 44 | history[ds].update({"confirm_add": confirm, "suspect_add": suspect, "heal_add": heal, "dead_add": dead}) 45 | 46 | #当日详细数据 47 | details = [] 48 | update_time = data_all1["lastUpdateTime"] 49 | data_country = data_all1["areaTree"] #list 25个国家 50 | data_province = data_country[0]["children"] #中国各省 51 | for pro_infos in data_province: 52 | province = pro_infos["name"] #省名 53 | for city_infos in pro_infos["children"]: 54 | city = city_infos["name"] 55 | confirm = city_infos["total"]["confirm"] 56 | confirm_add = city_infos["today"]["confirm"] 57 | heal = city_infos["total"]["heal"] 58 | dead = city_infos["total"]["dead"] 59 | details.append([update_time, province, city, confirm, confirm_add, heal, dead]) 60 | return history, details 61 | 62 | 63 | def get_conn(): 64 | #建立连接 65 | conn = pymysql.connect(host="127.0.0.1", user="root", password="root", db="cov", charset="utf8") 66 | #创建游标 67 | cursor = conn.cursor() 68 | return conn,cursor 69 | 70 | def close_conn(conn,cursor): 71 | if cursor: 72 | cursor.close() 73 | if conn: 74 | conn.close() 75 | 76 | #插入details数据 77 | def update_details(): 78 | cursor = None 79 | conn = None 80 | try: 81 | li = get_tencent_data()[1] #0是历史数据,1是当日详细数据 82 | conn,cursor = get_conn() 83 | sql = "insert into details(update_time,province,city,confirm,confirm_add,heal,dead) values(%s,%s,%s,%s,%s,%s,%s)" 84 | sql_query = "select %s=(select update_time from details order by id desc limit 1)" #对比当前最大时间戳 85 | #对比当前最大时间戳 86 | cursor.execute(sql_query,li[0][0]) 87 | if not cursor.fetchone()[0]: 88 | print(f"{time.asctime()}开始更新数据") 89 | for item in li: 90 | cursor.execute(sql,item) 91 | conn.commit() 92 | print(f"{time.asctime()}更新到最新数据") 93 | else: 94 | print(f"{time.asctime()}已是最新数据!") 95 | except: 96 | traceback.print_exc() 97 | finally: 98 | close_conn(conn,cursor) 99 | 100 | 101 | #插入history数据 102 | def insert_history(): 103 | cursor = None 104 | conn = None 105 | try: 106 | dic = get_tencent_data()[0]#0代表历史数据字典 107 | print(f"{time.asctime()}开始插入历史数据") 108 | conn,cursor = get_conn() 109 | sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)" 110 | for k,v in dic.items(): 111 | cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"), 112 | v.get("suspect_add"),v.get("heal"),v.get("heal_add"), 113 | v.get("dead"),v.get("dead_add")]) 114 | conn.commit() 115 | print(f"{time.asctime()}插入历史数据完毕") 116 | except: 117 | traceback.print_exc() 118 | finally: 119 | close_conn(conn,cursor) 120 | 121 | 122 | #更新历史数据 123 | def update_history(): 124 | cursor = None 125 | conn = None 126 | try: 127 | dic = get_tencent_data()[0]#0代表历史数据字典 128 | print(f"{time.asctime()}开始更新历史数据") 129 | conn,cursor = get_conn() 130 | sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)" 131 | sql_query = "select confirm from history where ds=%s" 132 | for k,v in dic.items(): 133 | if not cursor.execute(sql_query,k): 134 | cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"), 135 | v.get("suspect_add"),v.get("heal"),v.get("heal_add"), 136 | v.get("dead"),v.get("dead_add")]) 137 | conn.commit() 138 | print(f"{time.asctime()}历史数据更新完毕") 139 | except: 140 | traceback.print_exc() 141 | finally: 142 | close_conn(conn,cursor) 143 | 144 | 145 | #返回百度疫情热搜 146 | def get_baidu_hot(): 147 | option = ChromeOptions() #创建谷歌浏览器实例 148 | option.add_argument("--headless")#隐藏浏览器 149 | option.add_argument("--no-sandbox") #禁用沙盘 部署在linux上访问chrome要求这样 150 | 151 | url = 'https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1' 152 | brower = Chrome(options = option) 153 | brower.get(url) 154 | #找到展开按钮 155 | but = brower.find_element_by_css_selector('#ptab-0 > div > div.VirusHot_1-5-5_32AY4F.VirusHot_1-5-5_2RnRvg > section > div') #定位到点击展开按钮 156 | but.click() #点击展开 157 | 158 | time.sleep(1)#爬虫与反爬,模拟人等待1秒 159 | 160 | c = brower.find_elements_by_xpath('//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]') 161 | context = [i.text for i in c] #获取标签内容 162 | print(context) 163 | return context 164 | 165 | 166 | #将疫情热搜插入数据库 167 | def update_hotsearch(): 168 | cursor = None 169 | conn = None 170 | try: 171 | context = get_baidu_hot() 172 | print(f"{time.asctime()}开始更新热搜数据") 173 | conn, cursor = get_conn() 174 | sql = "insert into hotsearch(dt,content) values(%s,%s)" 175 | ts = time.strftime("%Y-%m-%d %X") 176 | for i in context: 177 | cursor.execute(sql,(ts,i)) #插入数据 178 | conn.commit() #提交事务保存数据 179 | print(f"{time.asctime()}数据更新完毕") 180 | except: 181 | traceback.print_exc() 182 | finally: 183 | close_conn(conn,cursor) 184 | 185 | 186 | 187 | 188 | # his,de = get_tencent_data() 189 | # print(his) 190 | # print(de) 191 | 192 | insert_history() 193 | update_details() 194 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/爬取并处理腾讯疫情数据.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import json 3 | import time 4 | 5 | #返回历史数据和当日详细数据 6 | def get_tencent_data(): 7 | url1 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5" 8 | url2 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other" 9 | headers = { 10 | 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36' 11 | } 12 | r1 = requests.get(url1, headers) 13 | r2 = requests.get(url2, headers) 14 | 15 | #json字符串转字典 16 | res1 = json.loads(r1.text) 17 | res2 = json.loads(r2.text) 18 | 19 | data_all1 = json.loads(res1["data"]) 20 | data_all2 = json.loads(res2["data"]) 21 | 22 | #历史数据 23 | history = {} 24 | for i in data_all2["chinaDayList"]: 25 | ds = "2020." + i["date"] 26 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间 27 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式 28 | confirm = i["confirm"] 29 | suspect = i["suspect"] 30 | heal = i["heal"] 31 | dead = i["dead"] 32 | history[ds] = {"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead} 33 | for i in data_all2["chinaDayAddList"]: 34 | ds = "2020." + i["date"] 35 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间 36 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式 37 | confirm = i["confirm"] 38 | suspect = i["suspect"] 39 | heal = i["heal"] 40 | dead = i["dead"] 41 | history[ds].update({"confirm_add": confirm, "suspect_add": suspect, "heal_add": heal, "dead_add": dead}) 42 | 43 | #当日详细数据 44 | details = [] 45 | update_time = data_all1["lastUpdateTime"] 46 | data_country = data_all1["areaTree"] #list 25个国家 47 | data_province = data_country[0]["children"] #中国各省 48 | for pro_infos in data_province: 49 | province = pro_infos["name"] #省名 50 | for city_infos in pro_infos["children"]: 51 | city = city_infos["name"] 52 | confirm = city_infos["total"]["confirm"] 53 | confirm_add = city_infos["today"]["confirm"] 54 | heal = city_infos["total"]["heal"] 55 | dead = city_infos["total"]["dead"] 56 | details.append([update_time, province, city, confirm, confirm_add, heal, dead]) 57 | return history, details 58 | 59 | 60 | 61 | 62 | 63 | his,de = get_tencent_data() 64 | print(his) 65 | print(de) 66 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking2/爬取百度热搜.py: -------------------------------------------------------------------------------- 1 | from selenium.webdriver import Chrome,ChromeOptions 2 | import time 3 | 4 | option = ChromeOptions() 5 | option.add_argument("--headless")#隐藏浏览器 6 | option.add_argument("--no-sandbox") #禁用沙盘 部署在linux上访问chrome要求这样 7 | url = 'https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1' 8 | 9 | brower = Chrome(options = option) 10 | #brower = Chrome() 11 | brower.get(url) 12 | but = brower.find_element_by_css_selector('#ptab-0 > div > div.VirusHot_1-5-5_32AY4F.VirusHot_1-5-5_2RnRvg > section > div') #定位到点击展开按钮 13 | but.click() #点击展开 14 | 15 | 16 | time.sleep(1)#爬虫与反爬,模拟人等待1秒 17 | c = brower.find_elements_by_xpath('//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]') 18 | for i in c: 19 | print(i.text) 20 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/.idea/lian.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 18 | 19 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 17 | 18 | 19 | 20 | 21 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 59 | 60 | 61 | 81 | 82 | 83 | 96 | 97 | 98 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 1583913028457 126 | 138 | 139 | 140 | 141 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "python.pythonPath": "D:\\Anaconda3\\python.exe" 3 | } -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/README.md: -------------------------------------------------------------------------------- 1 | 全部操作已实现,就差部署在linux主机上了 2 | 在win10本机已经可以运行了 3 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/__pycache__/app.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skyerhxx/COVID-19_Tracking/02cb4f63ec7700d86963139c7a6781c735334387/开发过程中的版本/COVID-19_Tracking_本机/__pycache__/app.cpython-37.pyc -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/__pycache__/utils.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skyerhxx/COVID-19_Tracking/02cb4f63ec7700d86963139c7a6781c735334387/开发过程中的版本/COVID-19_Tracking_本机/__pycache__/utils.cpython-37.pyc -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask 2 | from flask import render_template 3 | from flask import jsonify 4 | from jieba.analyse import extract_tags 5 | import utils 6 | import string 7 | 8 | 9 | 10 | app = Flask(__name__) 11 | 12 | 13 | @app.route('/') 14 | def hello_world(): 15 | return render_template('main.html') 16 | 17 | @app.route('/c1') 18 | def get_c1_data(): 19 | data = utils.get_c1_data() 20 | return jsonify({"confirm":data[0],"suspect":data[1],"heal":data[2],"dead":data[3]}) 21 | 22 | @app.route('/c2') 23 | def get_c2_data(): 24 | res = [] 25 | for tup in utils.get_c2_data(): 26 | res.append({"name":tup[0],"value":int(tup[1])}) 27 | return jsonify({"data":res}) 28 | 29 | 30 | @app.route("/l1") 31 | def get_l1_data(): 32 | data = utils.get_l1_data() 33 | day,confirm,suspect,heal,dead = [],[],[],[],[] 34 | for a,b,c,d,e in data[7:]: #很多卫健委网站前7天都是没有数据的,所以把前7天砍掉了 35 | day.append(a.strftime("%m-%d")) #a是datatime类型 36 | confirm.append(b) 37 | suspect.append(c) 38 | heal.append(d) 39 | dead.append(e) 40 | return jsonify({"day":day,"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead}) 41 | 42 | @app.route("/l2") 43 | def get_l2_data(): 44 | data = utils.get_l2_data() 45 | day, confirm_add, suspect_add = [], [], [] 46 | for a, b, c in data[7:]: 47 | day.append(a.strftime("%m-%d")) # a是datatime类型 48 | confirm_add.append(b) 49 | suspect_add.append(c) 50 | return jsonify({"day": day, "confirm_add": confirm_add, "suspect_add": suspect_add}) 51 | 52 | 53 | @app.route("/r1") 54 | def get_r1_data(): 55 | data = utils.get_r1_data() 56 | city = [] 57 | confirm = [] 58 | for k,v in data: 59 | city.append(k) 60 | confirm.append(int(v)) 61 | return jsonify({"city": city, "confirm": confirm}) 62 | 63 | 64 | @app.route("/r2") 65 | def get_r2_data(): 66 | data = utils.get_r2_data() #格式 (('民警抗疫一线奋战16天牺牲1037364',), ('四川再派两批医疗队1537382',) 67 | d = [] 68 | for i in data: 69 | k = i[0].rstrip(string.digits) # 移除热搜数字 70 | v = i[0][len(k):] # 获取热搜数字 71 | ks = extract_tags(k) # 使用jieba 提取关键字 72 | for j in ks: 73 | if not j.isdigit(): 74 | d.append({"name": j, "value": v}) 75 | return jsonify({"kws": d}) 76 | 77 | 78 | 79 | 80 | 81 | @app.route('/time') 82 | def gettime(): 83 | return utils.get_time() 84 | 85 | 86 | @app.route('/tem') 87 | def hello_world3(): 88 | return render_template("index.html") 89 | 90 | @app.route('/ajax', methods=["get","post"]) 91 | def hello_world4(): 92 | return '10000' 93 | 94 | if __name__ == '__main__': 95 | app.run() 96 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/cov_1.sql: -------------------------------------------------------------------------------- 1 | -- MySQL dump 10.13 Distrib 8.0.17, for Win64 (x86_64) 2 | -- 3 | -- Host: localhost Database: cov 4 | -- ------------------------------------------------------ 5 | -- Server version 8.0.17 6 | 7 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 8 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 9 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 10 | /*!50503 SET NAMES utf8mb4 */; 11 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; 12 | /*!40103 SET TIME_ZONE='+00:00' */; 13 | /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 14 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 15 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 16 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; 17 | 18 | -- 19 | -- Table structure for table `details` 20 | -- 21 | 22 | DROP TABLE IF EXISTS `details`; 23 | /*!40101 SET @saved_cs_client = @@character_set_client */; 24 | /*!50503 SET character_set_client = utf8mb4 */; 25 | CREATE TABLE `details` ( 26 | `id` int(11) NOT NULL AUTO_INCREMENT, 27 | `update_time` datetime DEFAULT NULL COMMENT '数据最后更新时间', 28 | `province` varchar(50) DEFAULT NULL COMMENT '省', 29 | `city` varchar(50) DEFAULT NULL COMMENT '市', 30 | `confirm` int(11) DEFAULT NULL COMMENT '累计确诊', 31 | `confirm_add` int(11) DEFAULT NULL COMMENT '新增治愈', 32 | `heal` int(11) DEFAULT NULL COMMENT '累计治愈', 33 | `dead` int(11) DEFAULT NULL COMMENT '累计死亡', 34 | PRIMARY KEY (`id`) 35 | ) ENGINE=InnoDB AUTO_INCREMENT=454 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; 36 | /*!40101 SET character_set_client = @saved_cs_client */; 37 | 38 | -- 39 | -- Dumping data for table `details` 40 | -- 41 | 42 | LOCK TABLES `details` WRITE; 43 | /*!40000 ALTER TABLE `details` DISABLE KEYS */; 44 | INSERT INTO `details` VALUES (1,'2020-04-07 20:36:49','香港','地区待确认',935,21,236,4),(2,'2020-04-07 20:36:49','湖北','武汉',50008,0,46922,2571),(3,'2020-04-07 20:36:49','湖北','襄阳',1175,0,1135,39),(4,'2020-04-07 20:36:49','湖北','仙桃',575,0,552,22),(5,'2020-04-07 20:36:49','湖北','宜昌',931,0,894,36),(6,'2020-04-07 20:36:49','湖北','天门',496,0,481,15),(7,'2020-04-07 20:36:49','湖北','鄂州',1394,0,1335,59),(8,'2020-04-07 20:36:49','湖北','恩施州',252,0,245,7),(9,'2020-04-07 20:36:49','湖北','十堰',672,0,664,8),(10,'2020-04-07 20:36:49','湖北','潜江',198,0,189,9),(11,'2020-04-07 20:36:49','湖北','黄石',1015,0,976,39),(12,'2020-04-07 20:36:49','湖北','荆州',1580,0,1528,52),(13,'2020-04-07 20:36:49','湖北','随州',1307,0,1262,45),(14,'2020-04-07 20:36:49','湖北','荆门',928,0,887,41),(15,'2020-04-07 20:36:49','湖北','咸宁',836,0,821,15),(16,'2020-04-07 20:36:49','湖北','孝感',3518,0,3389,129),(17,'2020-04-07 20:36:49','湖北','黄冈',2907,0,2782,125),(18,'2020-04-07 20:36:49','湖北','神农架',11,0,11,0),(19,'2020-04-07 20:36:49','台湾','地区待确认',376,13,57,5),(20,'2020-04-07 20:36:49','北京','境外输入',171,0,46,0),(21,'2020-04-07 20:36:49','北京','朝阳',72,0,0,0),(22,'2020-04-07 20:36:49','北京','海淀',64,0,0,0),(23,'2020-04-07 20:36:49','北京','西城',53,0,0,0),(24,'2020-04-07 20:36:49','北京','丰台',43,0,0,0),(25,'2020-04-07 20:36:49','北京','大兴',39,0,0,0),(26,'2020-04-07 20:36:49','北京','昌平',29,0,0,0),(27,'2020-04-07 20:36:49','北京','外地来京',25,0,0,0),(28,'2020-04-07 20:36:49','北京','通州',19,0,0,0),(29,'2020-04-07 20:36:49','北京','房山',16,0,0,0),(30,'2020-04-07 20:36:49','北京','石景山',14,0,0,0),(31,'2020-04-07 20:36:49','北京','东城',14,0,0,0),(32,'2020-04-07 20:36:49','北京','顺义',10,0,0,0),(33,'2020-04-07 20:36:49','北京','密云',7,0,0,0),(34,'2020-04-07 20:36:49','北京','怀柔',7,0,0,0),(35,'2020-04-07 20:36:49','北京','门头沟',3,0,0,0),(36,'2020-04-07 20:36:49','北京','延庆',1,0,0,0),(37,'2020-04-07 20:36:49','北京','地区待确认',0,0,402,8),(38,'2020-04-07 20:36:49','上海','境外输入',199,2,78,0),(39,'2020-04-07 20:36:49','上海','外地来沪',111,0,107,1),(40,'2020-04-07 20:36:49','上海','嘉定',9,0,7,1),(41,'2020-04-07 20:36:49','上海','宝山',22,0,20,1),(42,'2020-04-07 20:36:49','上海','青浦',6,0,6,0),(43,'2020-04-07 20:36:49','上海','静安',16,0,15,1),(44,'2020-04-07 20:36:49','上海','徐汇',18,0,17,1),(45,'2020-04-07 20:36:49','上海','黄浦',6,0,5,1),(46,'2020-04-07 20:36:49','上海','浦东',61,0,61,0),(47,'2020-04-07 20:36:49','上海','地区待确认',0,0,0,0),(48,'2020-04-07 20:36:49','上海','崇明',4,0,4,0),(49,'2020-04-07 20:36:49','上海','金山',4,0,4,0),(50,'2020-04-07 20:36:49','上海','虹口',7,0,7,0),(51,'2020-04-07 20:36:49','上海','奉贤',9,0,9,0),(52,'2020-04-07 20:36:49','上海','杨浦',9,0,9,0),(53,'2020-04-07 20:36:49','上海','普陀',11,0,11,0),(54,'2020-04-07 20:36:49','上海','长宁',13,0,13,0),(55,'2020-04-07 20:36:49','上海','松江',14,0,14,0),(56,'2020-04-07 20:36:49','上海','闵行',19,0,19,0),(57,'2020-04-07 20:36:49','广东','境外输入',173,1,62,0),(58,'2020-04-07 20:36:49','广东','广州',352,0,343,1),(59,'2020-04-07 20:36:49','广东','深圳',419,0,414,3),(60,'2020-04-07 20:36:49','广东','揭阳',10,0,8,0),(61,'2020-04-07 20:36:49','广东','佛山',85,0,84,0),(62,'2020-04-07 20:36:49','广东','汕尾',5,0,5,0),(63,'2020-04-07 20:36:49','广东','茂名',14,0,14,0),(64,'2020-04-07 20:36:49','广东','河源',4,0,4,0),(65,'2020-04-07 20:36:49','广东','惠州',62,0,62,0),(66,'2020-04-07 20:36:49','广东','阳江',14,0,14,0),(67,'2020-04-07 20:36:49','广东','东莞',99,0,98,1),(68,'2020-04-07 20:36:49','广东','地区待确认',0,0,0,0),(69,'2020-04-07 20:36:49','广东','梅州',16,0,16,0),(70,'2020-04-07 20:36:49','广东','肇庆',19,0,18,1),(71,'2020-04-07 20:36:49','广东','潮州',5,0,5,0),(72,'2020-04-07 20:36:49','广东','湛江',22,0,22,0),(73,'2020-04-07 20:36:49','广东','珠海',98,0,97,1),(74,'2020-04-07 20:36:49','广东','汕头',25,0,25,0),(75,'2020-04-07 20:36:49','广东','江门',23,0,23,0),(76,'2020-04-07 20:36:49','广东','韶关',10,0,9,1),(77,'2020-04-07 20:36:49','广东','清远',12,0,12,0),(78,'2020-04-07 20:36:49','广东','中山',66,0,66,0),(79,'2020-04-07 20:36:49','黑龙江','境外输入',62,20,0,0),(80,'2020-04-07 20:36:49','黑龙江','绥化',47,0,43,4),(81,'2020-04-07 20:36:49','黑龙江','大兴安岭',3,0,3,0),(82,'2020-04-07 20:36:49','黑龙江','黑河',14,0,14,0),(83,'2020-04-07 20:36:49','黑龙江','哈尔滨',198,0,194,4),(84,'2020-04-07 20:36:49','黑龙江','大庆',26,0,25,1),(85,'2020-04-07 20:36:49','黑龙江','双鸭山',52,0,49,3),(86,'2020-04-07 20:36:49','黑龙江','齐齐哈尔',43,0,42,1),(87,'2020-04-07 20:36:49','黑龙江','鹤岗',5,0,5,0),(88,'2020-04-07 20:36:49','黑龙江','牡丹江',15,0,15,0),(89,'2020-04-07 20:36:49','黑龙江','七台河',17,0,17,0),(90,'2020-04-07 20:36:49','黑龙江','鸡西',46,0,46,0),(91,'2020-04-07 20:36:49','黑龙江','伊春',1,0,1,0),(92,'2020-04-07 20:36:49','黑龙江','佳木斯',15,0,15,0),(93,'2020-04-07 20:36:49','内蒙古','境外输入',46,3,0,0),(94,'2020-04-07 20:36:49','内蒙古','包头',11,0,11,0),(95,'2020-04-07 20:36:49','内蒙古','呼和浩特',7,0,7,0),(96,'2020-04-07 20:36:49','内蒙古','乌兰察布',3,0,3,0),(97,'2020-04-07 20:36:49','内蒙古','锡林郭勒',9,0,9,0),(98,'2020-04-07 20:36:49','内蒙古','赤峰',9,0,9,0),(99,'2020-04-07 20:36:49','内蒙古','通辽',7,0,7,0),(100,'2020-04-07 20:36:49','内蒙古','鄂尔多斯',11,0,11,0),(101,'2020-04-07 20:36:49','内蒙古','呼伦贝尔',7,0,7,0),(102,'2020-04-07 20:36:49','内蒙古','巴彦淖尔',8,0,7,1),(103,'2020-04-07 20:36:49','内蒙古','兴安盟',1,0,1,0),(104,'2020-04-07 20:36:49','内蒙古','乌海',2,0,2,0),(105,'2020-04-07 20:36:49','福建','境外输入',55,1,10,0),(106,'2020-04-07 20:36:49','福建','莆田',56,0,56,0),(107,'2020-04-07 20:36:49','福建','漳州',20,0,20,0),(108,'2020-04-07 20:36:49','福建','地区待确认',0,0,0,0),(109,'2020-04-07 20:36:49','福建','宁德',26,0,26,0),(110,'2020-04-07 20:36:49','福建','龙岩',6,0,6,0),(111,'2020-04-07 20:36:49','福建','南平',20,0,20,0),(112,'2020-04-07 20:36:49','福建','三明',14,0,14,0),(113,'2020-04-07 20:36:49','福建','泉州',47,0,47,0),(114,'2020-04-07 20:36:49','福建','厦门',35,0,35,0),(115,'2020-04-07 20:36:49','福建','福州',72,0,71,1),(116,'2020-04-07 20:36:49','澳门','地区待确认',44,0,10,0),(117,'2020-04-07 20:36:49','浙江','境外输入',47,1,14,0),(118,'2020-04-07 20:36:49','浙江','嘉兴',46,0,45,0),(119,'2020-04-07 20:36:49','浙江','金华',55,0,55,0),(120,'2020-04-07 20:36:49','浙江','台州',146,0,146,0),(121,'2020-04-07 20:36:49','浙江','舟山',10,0,10,0),(122,'2020-04-07 20:36:49','浙江','衢州',14,0,14,0),(123,'2020-04-07 20:36:49','浙江','丽水',17,0,17,0),(124,'2020-04-07 20:36:49','浙江','绍兴',42,0,42,0),(125,'2020-04-07 20:36:49','浙江','省十里丰监狱',36,0,36,0),(126,'2020-04-07 20:36:49','浙江','湖州',10,0,10,0),(127,'2020-04-07 20:36:49','浙江','温州',504,0,503,1),(128,'2020-04-07 20:36:49','浙江','宁波',157,0,157,0),(129,'2020-04-07 20:36:49','浙江','杭州',181,0,181,0),(130,'2020-04-07 20:36:49','天津','境外输入',44,0,19,0),(131,'2020-04-07 20:36:49','天津','和平区',6,0,6,0),(132,'2020-04-07 20:36:49','天津','河北区',12,0,12,0),(133,'2020-04-07 20:36:49','天津','津南区',2,0,2,0),(134,'2020-04-07 20:36:49','天津','北辰区',6,0,6,0),(135,'2020-04-07 20:36:49','天津','南开区',6,0,6,0),(136,'2020-04-07 20:36:49','天津','河东区',15,0,14,1),(137,'2020-04-07 20:36:49','天津','宁河区',4,0,4,0),(138,'2020-04-07 20:36:49','天津','宝坻区',60,0,58,2),(139,'2020-04-07 20:36:49','天津','外地来津',6,0,6,0),(140,'2020-04-07 20:36:49','天津','滨海新区',3,0,3,0),(141,'2020-04-07 20:36:49','天津','武清区',2,0,2,0),(142,'2020-04-07 20:36:49','天津','东丽区',4,0,4,0),(143,'2020-04-07 20:36:49','天津','河西区',4,0,4,0),(144,'2020-04-07 20:36:49','天津','西青区',4,0,4,0),(145,'2020-04-07 20:36:49','天津','红桥区',2,0,2,0),(146,'2020-04-07 20:36:49','山东','境外输入',22,1,3,0),(147,'2020-04-07 20:36:49','山东','日照',16,0,16,0),(148,'2020-04-07 20:36:49','山东','济宁',260,0,260,0),(149,'2020-04-07 20:36:49','山东','济南',47,0,47,0),(150,'2020-04-07 20:36:49','山东','淄博',30,0,29,1),(151,'2020-04-07 20:36:49','山东','枣庄',24,0,24,0),(152,'2020-04-07 20:36:49','山东','烟台',47,0,47,0),(153,'2020-04-07 20:36:49','山东','威海',38,0,37,1),(154,'2020-04-07 20:36:49','山东','青岛',61,0,60,1),(155,'2020-04-07 20:36:49','山东','临沂',49,0,49,0),(156,'2020-04-07 20:36:49','山东','德州',37,0,35,2),(157,'2020-04-07 20:36:49','山东','聊城',38,0,38,0),(158,'2020-04-07 20:36:49','山东','滨州',15,0,15,0),(159,'2020-04-07 20:36:49','山东','菏泽',18,0,18,0),(160,'2020-04-07 20:36:49','山东','泰安',35,0,33,2),(161,'2020-04-07 20:36:49','山东','潍坊',44,0,44,0),(162,'2020-04-07 20:36:49','江苏','境外输入',20,0,2,0),(163,'2020-04-07 20:36:49','江苏','连云港',48,0,48,0),(164,'2020-04-07 20:36:49','江苏','南通',40,0,40,0),(165,'2020-04-07 20:36:49','江苏','苏州',87,0,87,0),(166,'2020-04-07 20:36:49','江苏','南京',93,0,93,0),(167,'2020-04-07 20:36:49','江苏','无锡',55,0,55,0),(168,'2020-04-07 20:36:49','江苏','徐州',79,0,79,0),(169,'2020-04-07 20:36:49','江苏','宿迁',13,0,13,0),(170,'2020-04-07 20:36:49','江苏','淮安',66,0,66,0),(171,'2020-04-07 20:36:49','江苏','镇江',12,0,12,0),(172,'2020-04-07 20:36:49','江苏','常州',51,0,51,0),(173,'2020-04-07 20:36:49','江苏','扬州',23,0,23,0),(174,'2020-04-07 20:36:49','江苏','盐城',27,0,27,0),(175,'2020-04-07 20:36:49','江苏','泰州',37,0,37,0),(176,'2020-04-07 20:36:49','四川','境外输入',21,1,5,0),(177,'2020-04-07 20:36:49','四川','甘孜',78,0,78,0),(178,'2020-04-07 20:36:49','四川','成都',144,0,141,3),(179,'2020-04-07 20:36:49','四川','自贡',9,0,9,0),(180,'2020-04-07 20:36:49','四川','攀枝花',16,0,16,0),(181,'2020-04-07 20:36:49','四川','内江',22,0,22,0),(182,'2020-04-07 20:36:49','四川','泸州',24,0,24,0),(183,'2020-04-07 20:36:49','四川','德阳',18,0,18,0),(184,'2020-04-07 20:36:49','四川','绵阳',22,0,22,0),(185,'2020-04-07 20:36:49','四川','广元',6,0,6,0),(186,'2020-04-07 20:36:49','四川','凉山',13,0,13,0),(187,'2020-04-07 20:36:49','四川','乐山',3,0,3,0),(188,'2020-04-07 20:36:49','四川','阿坝',1,0,1,0),(189,'2020-04-07 20:36:49','四川','资阳',4,0,4,0),(190,'2020-04-07 20:36:49','四川','眉山',8,0,8,0),(191,'2020-04-07 20:36:49','四川','雅安',7,0,7,0),(192,'2020-04-07 20:36:49','四川','巴中',24,0,24,0),(193,'2020-04-07 20:36:49','四川','达州',42,0,42,0),(194,'2020-04-07 20:36:49','四川','广安',30,0,30,0),(195,'2020-04-07 20:36:49','四川','宜宾',12,0,12,0),(196,'2020-04-07 20:36:49','四川','南充',39,0,39,0),(197,'2020-04-07 20:36:49','四川','遂宁',17,0,17,0),(198,'2020-04-07 20:36:49','辽宁','境外输入',20,2,9,0),(199,'2020-04-07 20:36:49','辽宁','大连',18,0,17,0),(200,'2020-04-07 20:36:49','辽宁','鞍山',4,0,4,0),(201,'2020-04-07 20:36:49','辽宁','朝阳市',6,0,5,1),(202,'2020-04-07 20:36:49','辽宁','丹东',11,0,11,0),(203,'2020-04-07 20:36:49','辽宁','葫芦岛',12,0,11,1),(204,'2020-04-07 20:36:49','辽宁','铁岭',7,0,7,0),(205,'2020-04-07 20:36:49','辽宁','沈阳',28,0,28,0),(206,'2020-04-07 20:36:49','辽宁','锦州',12,0,12,0),(207,'2020-04-07 20:36:49','辽宁','盘锦',11,0,11,0),(208,'2020-04-07 20:36:49','辽宁','阜新',8,0,8,0),(209,'2020-04-07 20:36:49','辽宁','本溪',3,0,3,0),(210,'2020-04-07 20:36:49','辽宁','辽阳',3,0,3,0),(211,'2020-04-07 20:36:49','辽宁','营口',1,0,1,0),(212,'2020-04-07 20:36:49','河北','境外输入',9,0,0,0),(213,'2020-04-07 20:36:49','河北','唐山',58,0,57,1),(214,'2020-04-07 20:36:49','河北','张家口',41,0,41,0),(215,'2020-04-07 20:36:49','河北','邯郸',32,0,32,0),(216,'2020-04-07 20:36:49','河北','石家庄',29,0,29,0),(217,'2020-04-07 20:36:49','河北','承德',7,0,7,0),(218,'2020-04-07 20:36:49','河北','衡水',8,0,8,0),(219,'2020-04-07 20:36:49','河北','秦皇岛',10,0,9,1),(220,'2020-04-07 20:36:49','河北','邢台',23,0,22,1),(221,'2020-04-07 20:36:49','河北','廊坊',30,0,30,0),(222,'2020-04-07 20:36:49','河北','保定',32,0,32,0),(223,'2020-04-07 20:36:49','河北','沧州',48,0,45,3),(224,'2020-04-07 20:36:49','云南','境外输入',10,0,1,0),(225,'2020-04-07 20:36:49','云南','昭通市',25,0,25,0),(226,'2020-04-07 20:36:49','云南','德宏州',5,0,5,0),(227,'2020-04-07 20:36:49','云南','昆明',53,0,53,0),(228,'2020-04-07 20:36:49','云南','保山市',9,0,9,0),(229,'2020-04-07 20:36:49','云南','玉溪',14,0,13,1),(230,'2020-04-07 20:36:49','云南','红河',9,0,9,0),(231,'2020-04-07 20:36:49','云南','曲靖',13,0,13,0),(232,'2020-04-07 20:36:49','云南','大理',13,0,13,0),(233,'2020-04-07 20:36:49','云南','西双版纳州',15,0,14,1),(234,'2020-04-07 20:36:49','云南','文山州',2,0,2,0),(235,'2020-04-07 20:36:49','云南','普洱',4,0,4,0),(236,'2020-04-07 20:36:49','云南','楚雄州',4,0,4,0),(237,'2020-04-07 20:36:49','云南','丽江市',7,0,7,0),(238,'2020-04-07 20:36:49','云南','临沧',1,0,1,0),(239,'2020-04-07 20:36:49','陕西','境外输入',11,0,4,0),(240,'2020-04-07 20:36:49','陕西','韩城',1,0,1,0),(241,'2020-04-07 20:36:49','陕西','渭南',15,0,15,0),(242,'2020-04-07 20:36:49','陕西','咸阳',17,0,17,0),(243,'2020-04-07 20:36:49','陕西','西安',120,0,117,3),(244,'2020-04-07 20:36:49','陕西','汉中',26,0,26,0),(245,'2020-04-07 20:36:49','陕西','杨凌',1,0,1,0),(246,'2020-04-07 20:36:49','陕西','地区待确认',0,0,0,0),(247,'2020-04-07 20:36:49','陕西','榆林',3,0,3,0),(248,'2020-04-07 20:36:49','陕西','商洛',7,0,7,0),(249,'2020-04-07 20:36:49','陕西','铜川',8,0,8,0),(250,'2020-04-07 20:36:49','陕西','延安',8,0,8,0),(251,'2020-04-07 20:36:49','陕西','宝鸡',13,0,13,0),(252,'2020-04-07 20:36:49','陕西','安康',26,0,26,0),(253,'2020-04-07 20:36:49','吉林','境外输入',5,0,0,0),(254,'2020-04-07 20:36:49','吉林','通化',6,0,6,0),(255,'2020-04-07 20:36:49','吉林','长春',45,0,45,0),(256,'2020-04-07 20:36:49','吉林','白城',1,0,1,0),(257,'2020-04-07 20:36:49','吉林','四平',15,0,14,1),(258,'2020-04-07 20:36:49','吉林','公主岭',6,0,6,0),(259,'2020-04-07 20:36:49','吉林','辽源',7,0,7,0),(260,'2020-04-07 20:36:49','吉林','延边',5,0,5,0),(261,'2020-04-07 20:36:49','吉林','吉林',5,0,5,0),(262,'2020-04-07 20:36:49','吉林','松原',2,0,2,0),(263,'2020-04-07 20:36:49','吉林','梅河口市',1,0,1,0),(264,'2020-04-07 20:36:49','山西','境外输入',5,0,0,0),(265,'2020-04-07 20:36:49','山西','晋中',37,0,37,0),(266,'2020-04-07 20:36:49','山西','大同',12,0,12,0),(267,'2020-04-07 20:36:49','山西','运城',19,0,19,0),(268,'2020-04-07 20:36:49','山西','忻州',7,0,7,0),(269,'2020-04-07 20:36:49','山西','晋城',10,0,10,0),(270,'2020-04-07 20:36:49','山西','长治',8,0,8,0),(271,'2020-04-07 20:36:49','山西','太原',20,0,20,0),(272,'2020-04-07 20:36:49','山西','朔州',8,0,8,0),(273,'2020-04-07 20:36:49','山西','临汾',2,0,2,0),(274,'2020-04-07 20:36:49','山西','阳泉',4,0,4,0),(275,'2020-04-07 20:36:49','山西','吕梁',6,0,6,0),(276,'2020-04-07 20:36:49','甘肃','境外输入',47,0,43,0),(277,'2020-04-07 20:36:49','甘肃','白银',4,0,4,0),(278,'2020-04-07 20:36:49','甘肃','定西',9,0,9,0),(279,'2020-04-07 20:36:49','甘肃','地区待确认',0,0,0,0),(280,'2020-04-07 20:36:49','甘肃','平凉',9,0,9,0),(281,'2020-04-07 20:36:49','甘肃','庆阳',3,0,3,0),(282,'2020-04-07 20:36:49','甘肃','兰州',37,0,35,2),(283,'2020-04-07 20:36:49','甘肃','甘南州',8,0,8,0),(284,'2020-04-07 20:36:49','甘肃','天水',12,0,12,0),(285,'2020-04-07 20:36:49','甘肃','陇南',4,0,4,0),(286,'2020-04-07 20:36:49','甘肃','临夏',3,0,3,0),(287,'2020-04-07 20:36:49','甘肃','张掖',2,0,2,0),(288,'2020-04-07 20:36:49','甘肃','金昌',1,0,1,0),(289,'2020-04-07 20:36:49','重庆','境外输入',3,0,0,0),(290,'2020-04-07 20:36:49','重庆','涪陵区',5,0,5,0),(291,'2020-04-07 20:36:49','重庆','綦江区',23,0,23,0),(292,'2020-04-07 20:36:49','重庆','大足区',14,0,14,0),(293,'2020-04-07 20:36:49','重庆','荣昌区',9,0,9,0),(294,'2020-04-07 20:36:49','重庆','江北区',28,0,28,0),(295,'2020-04-07 20:36:49','重庆','沙坪坝区',9,0,9,0),(296,'2020-04-07 20:36:49','重庆','丰都县',10,0,10,0),(297,'2020-04-07 20:36:49','重庆','潼南区',18,0,18,0),(298,'2020-04-07 20:36:49','重庆','铜梁区',10,0,10,0),(299,'2020-04-07 20:36:49','重庆','南岸区',15,0,15,0),(300,'2020-04-07 20:36:49','重庆','九龙坡区',21,0,20,1),(301,'2020-04-07 20:36:49','重庆','两江新区',17,0,17,0),(302,'2020-04-07 20:36:49','重庆','万州区',118,0,114,4),(303,'2020-04-07 20:36:49','重庆','巴南区',6,0,6,0),(304,'2020-04-07 20:36:49','重庆','渝中区',20,0,20,0),(305,'2020-04-07 20:36:49','重庆','垫江县',20,0,20,0),(306,'2020-04-07 20:36:49','重庆','云阳县',25,0,25,0),(307,'2020-04-07 20:36:49','重庆','奉节县',22,0,22,0),(308,'2020-04-07 20:36:49','重庆','石柱县',15,0,15,0),(309,'2020-04-07 20:36:49','重庆','长寿区',22,0,22,0),(310,'2020-04-07 20:36:49','重庆','渝北区',17,0,17,0),(311,'2020-04-07 20:36:49','重庆','彭水县',2,0,2,0),(312,'2020-04-07 20:36:49','重庆','忠县',21,0,21,0),(313,'2020-04-07 20:36:49','重庆','开州区',21,0,20,1),(314,'2020-04-07 20:36:49','重庆','合川区',23,0,23,0),(315,'2020-04-07 20:36:49','重庆','巫溪县',14,0,14,0),(316,'2020-04-07 20:36:49','重庆','大渡口区',7,0,7,0),(317,'2020-04-07 20:36:49','重庆','巫山县',10,0,10,0),(318,'2020-04-07 20:36:49','重庆','万盛经开区',1,0,1,0),(319,'2020-04-07 20:36:49','重庆','酉阳县',1,0,1,0),(320,'2020-04-07 20:36:49','重庆','璧山区',9,0,9,0),(321,'2020-04-07 20:36:49','重庆','高新区',4,0,4,0),(322,'2020-04-07 20:36:49','重庆','永川区',5,0,5,0),(323,'2020-04-07 20:36:49','重庆','江津区',4,0,4,0),(324,'2020-04-07 20:36:49','重庆','武隆区',1,0,1,0),(325,'2020-04-07 20:36:49','重庆','梁平区',4,0,4,0),(326,'2020-04-07 20:36:49','重庆','城口县',2,0,2,0),(327,'2020-04-07 20:36:49','重庆','黔江区',2,0,2,0),(328,'2020-04-07 20:36:49','重庆','秀山县',1,0,1,0),(329,'2020-04-07 20:36:49','河南','境外输入',3,0,2,0),(330,'2020-04-07 20:36:49','河南','漯河',36,0,35,0),(331,'2020-04-07 20:36:49','河南','许昌',39,0,38,1),(332,'2020-04-07 20:36:49','河南','周口',76,0,75,1),(333,'2020-04-07 20:36:49','河南','南阳',156,0,153,3),(334,'2020-04-07 20:36:49','河南','信阳',274,0,272,2),(335,'2020-04-07 20:36:49','河南','郑州',157,0,152,5),(336,'2020-04-07 20:36:49','河南','济源示范区',5,0,5,0),(337,'2020-04-07 20:36:49','河南','安阳',53,0,53,0),(338,'2020-04-07 20:36:49','河南','新乡',57,0,54,3),(339,'2020-04-07 20:36:49','河南','地区待确认',0,0,0,0),(340,'2020-04-07 20:36:49','河南','商丘',91,0,88,3),(341,'2020-04-07 20:36:49','河南','驻马店',139,0,139,0),(342,'2020-04-07 20:36:49','河南','焦作',32,0,31,1),(343,'2020-04-07 20:36:49','河南','开封',26,0,26,0),(344,'2020-04-07 20:36:49','河南','平顶山',58,0,57,1),(345,'2020-04-07 20:36:49','河南','洛阳',31,0,30,1),(346,'2020-04-07 20:36:49','河南','濮阳',17,0,17,0),(347,'2020-04-07 20:36:49','河南','鹤壁',19,0,19,0),(348,'2020-04-07 20:36:49','河南','三门峡',7,0,6,1),(349,'2020-04-07 20:36:49','湖南','境外输入',1,0,0,0),(350,'2020-04-07 20:36:49','湖南','张家界',5,0,5,0),(351,'2020-04-07 20:36:49','湖南','娄底',76,0,76,0),(352,'2020-04-07 20:36:49','湖南','怀化',40,0,40,0),(353,'2020-04-07 20:36:49','湖南','永州',44,0,44,0),(354,'2020-04-07 20:36:49','湖南','郴州',39,0,39,0),(355,'2020-04-07 20:36:49','湖南','益阳',60,0,60,0),(356,'2020-04-07 20:36:49','湖南','湘西自治州',8,0,8,0),(357,'2020-04-07 20:36:49','湖南','常德',82,0,82,0),(358,'2020-04-07 20:36:49','湖南','岳阳',156,0,155,1),(359,'2020-04-07 20:36:49','湖南','邵阳',102,0,101,1),(360,'2020-04-07 20:36:49','湖南','湘潭',36,0,36,0),(361,'2020-04-07 20:36:49','湖南','株洲',80,0,80,0),(362,'2020-04-07 20:36:49','湖南','衡阳',48,0,48,0),(363,'2020-04-07 20:36:49','湖南','长沙',242,0,240,2),(364,'2020-04-07 20:36:49','江西','境外输入',2,0,1,0),(365,'2020-04-07 20:36:49','江西','吉安',22,0,22,0),(366,'2020-04-07 20:36:49','江西','南昌',230,0,230,0),(367,'2020-04-07 20:36:49','江西','上饶',123,0,123,0),(368,'2020-04-07 20:36:49','江西','新余',130,0,130,0),(369,'2020-04-07 20:36:49','江西','抚州',72,0,72,0),(370,'2020-04-07 20:36:49','江西','九江',118,0,118,0),(371,'2020-04-07 20:36:49','江西','赣州',76,0,75,1),(372,'2020-04-07 20:36:49','江西','萍乡',33,0,33,0),(373,'2020-04-07 20:36:49','江西','宜春',106,0,106,0),(374,'2020-04-07 20:36:49','江西','鹰潭',18,0,18,0),(375,'2020-04-07 20:36:49','江西','景德镇',6,0,6,0),(376,'2020-04-07 20:36:49','江西','赣江新区',1,0,1,0),(377,'2020-04-07 20:36:49','贵州','境外输入',1,0,0,0),(378,'2020-04-07 20:36:49','贵州','贵阳',36,0,35,1),(379,'2020-04-07 20:36:49','贵州','遵义',32,0,32,0),(380,'2020-04-07 20:36:49','贵州','六盘水',10,0,9,1),(381,'2020-04-07 20:36:49','贵州','毕节',23,0,23,0),(382,'2020-04-07 20:36:49','贵州','黔南州',17,0,17,0),(383,'2020-04-07 20:36:49','贵州','安顺',4,0,4,0),(384,'2020-04-07 20:36:49','贵州','黔东南州',10,0,10,0),(385,'2020-04-07 20:36:49','贵州','铜仁',10,0,10,0),(386,'2020-04-07 20:36:49','贵州','黔西南州',4,0,4,0),(387,'2020-04-07 20:36:49','西藏','拉萨',1,0,1,0),(388,'2020-04-07 20:36:49','新疆','兵团第九师',4,0,3,1),(389,'2020-04-07 20:36:49','新疆','吐鲁番',3,0,3,0),(390,'2020-04-07 20:36:49','新疆','乌鲁木齐',23,0,23,0),(391,'2020-04-07 20:36:49','新疆','昌吉州',4,0,4,0),(392,'2020-04-07 20:36:49','新疆','第八师石河子',4,0,3,1),(393,'2020-04-07 20:36:49','新疆','兵团第四师',10,0,9,1),(394,'2020-04-07 20:36:49','新疆','伊犁州',18,0,18,0),(395,'2020-04-07 20:36:49','新疆','六师五家渠',2,0,2,0),(396,'2020-04-07 20:36:49','新疆','兵团第十二师',3,0,3,0),(397,'2020-04-07 20:36:49','新疆','巴州',3,0,3,0),(398,'2020-04-07 20:36:49','新疆','第七师',1,0,1,0),(399,'2020-04-07 20:36:49','新疆','阿克苏',1,0,1,0),(400,'2020-04-07 20:36:49','宁夏','境外输入',3,0,3,0),(401,'2020-04-07 20:36:49','宁夏','银川',34,0,34,0),(402,'2020-04-07 20:36:49','宁夏','吴忠',28,0,28,0),(403,'2020-04-07 20:36:49','宁夏','固原',5,0,5,0),(404,'2020-04-07 20:36:49','宁夏','中卫',3,0,3,0),(405,'2020-04-07 20:36:49','宁夏','石嘴山',1,0,1,0),(406,'2020-04-07 20:36:49','宁夏','宁东管委会',1,0,1,0),(407,'2020-04-07 20:36:49','安徽','黄山',9,0,9,0),(408,'2020-04-07 20:36:49','安徽','宣城',6,0,6,0),(409,'2020-04-07 20:36:49','安徽','池州',17,0,17,0),(410,'2020-04-07 20:36:49','安徽','亳州',108,0,108,0),(411,'2020-04-07 20:36:49','安徽','六安',69,0,69,0),(412,'2020-04-07 20:36:49','安徽','宿州',41,0,41,0),(413,'2020-04-07 20:36:49','安徽','阜阳',155,0,155,0),(414,'2020-04-07 20:36:49','安徽','滁州',13,0,13,0),(415,'2020-04-07 20:36:49','安徽','安庆',83,0,83,0),(416,'2020-04-07 20:36:49','安徽','铜陵',29,0,29,0),(417,'2020-04-07 20:36:49','安徽','淮北',27,0,27,0),(418,'2020-04-07 20:36:49','安徽','马鞍山',38,0,38,0),(419,'2020-04-07 20:36:49','安徽','淮南',27,0,27,0),(420,'2020-04-07 20:36:49','安徽','蚌埠',160,0,155,5),(421,'2020-04-07 20:36:49','安徽','芜湖',34,0,34,0),(422,'2020-04-07 20:36:49','安徽','合肥',174,0,173,1),(423,'2020-04-07 20:36:49','广西','境外输入',2,0,2,0),(424,'2020-04-07 20:36:49','广西','北海',44,0,43,1),(425,'2020-04-07 20:36:49','广西','防城港',19,0,19,0),(426,'2020-04-07 20:36:49','广西','来宾',11,0,11,0),(427,'2020-04-07 20:36:49','广西','柳州',24,0,24,0),(428,'2020-04-07 20:36:49','广西','南宁',55,0,55,0),(429,'2020-04-07 20:36:49','广西','河池',28,0,27,1),(430,'2020-04-07 20:36:49','广西','桂林',32,0,32,0),(431,'2020-04-07 20:36:49','广西','玉林',11,0,11,0),(432,'2020-04-07 20:36:49','广西','钦州',8,0,8,0),(433,'2020-04-07 20:36:49','广西','贵港',8,0,8,0),(434,'2020-04-07 20:36:49','广西','梧州',5,0,5,0),(435,'2020-04-07 20:36:49','广西','百色',3,0,3,0),(436,'2020-04-07 20:36:49','广西','贺州',4,0,4,0),(437,'2020-04-07 20:36:49','海南','海口',39,0,39,0),(438,'2020-04-07 20:36:49','海南','儋州',15,0,14,1),(439,'2020-04-07 20:36:49','海南','三亚',54,0,53,1),(440,'2020-04-07 20:36:49','海南','东方',3,0,2,1),(441,'2020-04-07 20:36:49','海南','万宁',13,0,13,0),(442,'2020-04-07 20:36:49','海南','澄迈县',9,0,8,1),(443,'2020-04-07 20:36:49','海南','昌江县',7,0,7,0),(444,'2020-04-07 20:36:49','海南','保亭',3,0,3,0),(445,'2020-04-07 20:36:49','海南','琼海',6,0,5,1),(446,'2020-04-07 20:36:49','海南','临高县',6,0,6,0),(447,'2020-04-07 20:36:49','海南','陵水县',4,0,4,0),(448,'2020-04-07 20:36:49','海南','乐东',2,0,2,0),(449,'2020-04-07 20:36:49','海南','文昌',3,0,3,0),(450,'2020-04-07 20:36:49','海南','定安县',3,0,2,1),(451,'2020-04-07 20:36:49','海南','琼中县',1,0,1,0),(452,'2020-04-07 20:36:49','青海','海北州',3,0,3,0),(453,'2020-04-07 20:36:49','青海','西宁',15,0,15,0); 45 | /*!40000 ALTER TABLE `details` ENABLE KEYS */; 46 | UNLOCK TABLES; 47 | 48 | -- 49 | -- Table structure for table `history` 50 | -- 51 | 52 | DROP TABLE IF EXISTS `history`; 53 | /*!40101 SET @saved_cs_client = @@character_set_client */; 54 | /*!50503 SET character_set_client = utf8mb4 */; 55 | CREATE TABLE `history` ( 56 | `ds` datetime NOT NULL COMMENT '日期', 57 | `confirm` int(11) DEFAULT NULL COMMENT '累计确诊', 58 | `confirm_add` int(11) DEFAULT NULL COMMENT '当日新增确诊', 59 | `suspect` int(11) DEFAULT NULL COMMENT '剩余疑似', 60 | `suspect_add` int(11) DEFAULT NULL COMMENT '当日新增疑似', 61 | `heal` int(11) DEFAULT NULL COMMENT '累计治愈', 62 | `heal_add` int(11) DEFAULT NULL COMMENT '当日新增治愈', 63 | `dead` int(11) DEFAULT NULL COMMENT '累计死亡', 64 | `dead_add` int(11) DEFAULT NULL COMMENT '当日新增死亡', 65 | PRIMARY KEY (`ds`) USING BTREE 66 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; 67 | /*!40101 SET character_set_client = @saved_cs_client */; 68 | 69 | -- 70 | -- Dumping data for table `history` 71 | -- 72 | 73 | LOCK TABLES `history` WRITE; 74 | /*!40000 ALTER TABLE `history` DISABLE KEYS */; 75 | INSERT INTO `history` VALUES ('2020-01-13 00:00:00',41,NULL,0,NULL,0,NULL,1,NULL),('2020-01-14 00:00:00',41,NULL,0,NULL,0,NULL,1,NULL),('2020-01-15 00:00:00',41,NULL,0,NULL,5,NULL,2,NULL),('2020-01-16 00:00:00',45,NULL,0,NULL,8,NULL,2,NULL),('2020-01-17 00:00:00',62,NULL,0,NULL,12,NULL,2,NULL),('2020-01-18 00:00:00',198,NULL,0,NULL,17,NULL,3,NULL),('2020-01-19 00:00:00',275,NULL,0,NULL,18,NULL,4,NULL),('2020-01-20 00:00:00',291,77,54,27,25,0,6,0),('2020-01-21 00:00:00',440,149,37,53,25,0,9,3),('2020-01-22 00:00:00',574,131,393,257,25,0,17,8),('2020-01-23 00:00:00',835,259,1072,680,34,6,25,8),('2020-01-24 00:00:00',1297,444,1965,1118,38,3,41,16),('2020-01-25 00:00:00',1985,688,2684,1309,49,11,56,15),('2020-01-26 00:00:00',2761,769,5794,3806,51,2,80,24),('2020-01-27 00:00:00',4535,1771,6973,2077,60,9,106,26),('2020-01-28 00:00:00',5997,1459,9239,3248,103,43,132,26),('2020-01-29 00:00:00',7736,1737,12167,4148,124,21,170,38),('2020-01-30 00:00:00',9720,1982,15238,4812,171,47,213,43),('2020-01-31 00:00:00',11821,2102,17988,5019,243,72,259,46),('2020-02-01 00:00:00',14411,2590,19544,4562,328,85,304,45),('2020-02-02 00:00:00',17238,2829,21558,5173,475,147,361,57),('2020-02-03 00:00:00',20471,3235,23214,5072,632,157,425,64),('2020-02-04 00:00:00',24363,3893,23260,3971,892,262,491,65),('2020-02-05 00:00:00',28060,3697,24702,5328,1153,261,564,73),('2020-02-06 00:00:00',31211,3143,26359,4833,1542,387,637,73),('2020-02-07 00:00:00',34598,3401,27657,4214,2052,510,723,86),('2020-02-08 00:00:00',37251,2656,28942,3916,2651,600,812,89),('2020-02-09 00:00:00',40235,3062,23589,4008,3283,632,909,97),('2020-02-10 00:00:00',42708,2484,21675,3536,3998,716,1017,108),('2020-02-11 00:00:00',44730,2022,16067,3342,4742,744,1114,97),('2020-02-12 00:00:00',59882,15153,13435,2807,5915,1173,1368,254),('2020-02-13 00:00:00',63932,5093,10109,2450,6728,1083,1381,121),('2020-02-14 00:00:00',66576,2644,8969,2277,8101,1373,1524,143),('2020-02-15 00:00:00',68584,2009,8228,1918,9425,1324,1666,142),('2020-02-16 00:00:00',70635,2051,7264,1563,10853,1425,1772,105),('2020-02-17 00:00:00',72528,1891,6242,1432,12561,1701,1870,98),('2020-02-18 00:00:00',74279,1751,5248,1185,14387,1826,2006,136),('2020-02-19 00:00:00',75002,820,4922,1277,16157,1781,2121,115),('2020-02-20 00:00:00',75993,892,5206,1614,18266,2109,2239,118),('2020-02-21 00:00:00',76392,399,5365,1361,20673,2394,2348,109),('2020-02-22 00:00:00',77041,649,4148,882,22907,2235,2445,97),('2020-02-23 00:00:00',77262,416,3434,620,24757,1850,2595,150),('2020-02-24 00:00:00',77779,517,2824,530,27353,2596,2666,71),('2020-02-25 00:00:00',78190,411,2491,439,29775,2422,2718,52),('2020-02-26 00:00:00',78630,440,2358,508,32531,2756,2747,29),('2020-02-27 00:00:00',78959,329,2308,452,36157,3626,2791,44),('2020-02-28 00:00:00',79389,430,1418,248,39049,2892,2838,47),('2020-02-29 00:00:00',79968,579,851,132,41675,2626,2873,35),('2020-03-01 00:00:00',80174,206,715,141,44518,2843,2915,42),('2020-03-02 00:00:00',80302,128,587,129,47260,2742,2946,31),('2020-03-03 00:00:00',80422,120,520,143,49914,2654,2984,38),('2020-03-04 00:00:00',80565,143,522,143,52109,2195,3015,31),('2020-03-05 00:00:00',80710,145,482,102,53793,1684,3045,30),('2020-03-06 00:00:00',80813,103,502,99,55477,1684,3073,28),('2020-03-07 00:00:00',80859,46,458,84,57143,1666,3100,27),('2020-03-08 00:00:00',80904,45,421,60,58684,1541,3123,23),('2020-03-09 00:00:00',80924,20,349,36,59982,1298,3140,17),('2020-03-10 00:00:00',80955,31,285,31,61567,1585,3162,22),('2020-03-11 00:00:00',80992,25,253,33,62887,1320,3173,11),('2020-03-12 00:00:00',81003,11,147,33,64216,1329,3180,7),('2020-03-13 00:00:00',81021,18,115,17,65649,1433,3194,14),('2020-03-14 00:00:00',81048,27,113,39,67022,1373,3204,10),('2020-03-15 00:00:00',81077,29,134,41,67863,841,3218,14),('2020-03-16 00:00:00',81116,39,128,45,68799,936,3231,13),('2020-03-17 00:00:00',81151,35,119,21,69725,926,3242,11),('2020-03-18 00:00:00',81235,84,105,23,70547,822,3250,8),('2020-03-19 00:00:00',81300,65,104,31,71284,737,3253,3),('2020-03-20 00:00:00',81416,116,106,36,71876,592,3261,8),('2020-03-21 00:00:00',81498,82,118,45,72382,506,3267,6),('2020-03-22 00:00:00',81600,102,136,47,72841,459,3276,9),('2020-03-23 00:00:00',81747,147,132,35,73299,458,3283,7),('2020-03-24 00:00:00',81846,99,134,33,73791,492,3287,4),('2020-03-25 00:00:00',81960,114,159,58,74196,405,3293,6),('2020-03-26 00:00:00',82078,118,189,49,74737,541,3298,5),('2020-03-27 00:00:00',82213,135,184,29,75122,385,3301,3),('2020-03-28 00:00:00',82341,128,174,28,75600,478,3306,5),('2020-03-29 00:00:00',82447,106,168,17,75937,337,3311,5),('2020-03-30 00:00:00',82545,98,183,44,76225,288,3314,3),('2020-03-31 00:00:00',82631,86,172,26,76415,190,3321,7),('2020-04-01 00:00:00',82724,93,153,20,76610,195,3327,6),('2020-04-02 00:00:00',82802,78,135,12,76785,175,3331,4),('2020-04-03 00:00:00',82861,73,114,11,76984,199,3335,4),('2020-04-04 00:00:00',82930,55,107,11,77210,226,3338,3),('2020-04-05 00:00:00',83005,75,88,10,77348,138,3340,1),('2020-04-06 00:00:00',83071,66,89,12,77450,102,3340,0); 76 | /*!40000 ALTER TABLE `history` ENABLE KEYS */; 77 | UNLOCK TABLES; 78 | 79 | -- 80 | -- Table structure for table `hotsearch` 81 | -- 82 | 83 | DROP TABLE IF EXISTS `hotsearch`; 84 | /*!40101 SET @saved_cs_client = @@character_set_client */; 85 | /*!50503 SET character_set_client = utf8mb4 */; 86 | CREATE TABLE `hotsearch` ( 87 | `id` int(11) NOT NULL AUTO_INCREMENT, 88 | `dt` datetime DEFAULT NULL, 89 | `content` varchar(255) DEFAULT NULL, 90 | PRIMARY KEY (`id`) 91 | ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; 92 | /*!40101 SET character_set_client = @saved_cs_client */; 93 | 94 | -- 95 | -- Dumping data for table `hotsearch` 96 | -- 97 | 98 | LOCK TABLES `hotsearch` WRITE; 99 | /*!40000 ALTER TABLE `hotsearch` DISABLE KEYS */; 100 | INSERT INTO `hotsearch` VALUES (1,'2020-04-08 15:38:46','新型肺炎实时动态1634584'),(2,'2020-04-08 15:38:46','女孩高喊我的武汉回来了1478546'),(3,'2020-04-08 15:38:46','英国新冠ICU病房画面756245'),(4,'2020-04-08 15:38:46','武汉解封灯光秀672165'),(5,'2020-04-08 15:38:46','全球护士缺口达590万559541'),(6,'2020-04-08 15:38:46','袁隆平称中国不会出现粮荒483645'),(7,'2020-04-08 15:38:46','英国请求美国提供200台呼吸机468751'),(8,'2020-04-08 15:38:46','绥芬河市所有小区实行封闭管理456542'),(9,'2020-04-08 15:38:46','特朗普与3M公司和解436524'),(10,'2020-04-08 15:38:46','国外病死率高于中国病死率397894'),(11,'2020-04-08 15:38:46','以色列将在全国范围内实施封城385642'),(12,'2020-04-08 15:38:46','广州已隔离六千余名外籍人员369652'),(13,'2020-04-08 15:38:46','国家卫健委回应张静静去世356410'),(14,'2020-04-08 15:38:46','武汉女子给江苏护师寄10箱鸭脖348765'),(15,'2020-04-08 15:38:46','张静静在返程飞机上的一幕333651'),(16,'2020-04-08 15:38:46','毛坦厂高三考生广场戴口罩晨读328752'),(17,'2020-04-08 15:38:46','法国医生称把非洲当疫苗试验场318425'),(18,'2020-04-08 15:38:46','以色列将在全国范围内实施封城295510'),(19,'2020-04-08 15:38:46','柏林请求德国军方保护口罩运输289648'),(20,'2020-04-08 15:38:46','无接触快递架死件越来越多257826'); 101 | /*!40000 ALTER TABLE `hotsearch` ENABLE KEYS */; 102 | UNLOCK TABLES; 103 | /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; 104 | 105 | /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; 106 | /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; 107 | /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; 108 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 109 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 110 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 111 | /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; 112 | 113 | -- Dump completed on 2020-04-09 22:11:36 114 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/spider.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import json 3 | import time 4 | import pymysql 5 | from selenium.webdriver import Chrome,ChromeOptions 6 | import traceback 7 | import sys 8 | 9 | #返回历史数据和当日详细数据 10 | def get_tencent_data(): 11 | url1 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5" 12 | url2 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other" 13 | headers = { 14 | 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36' 15 | } 16 | r1 = requests.get(url1, headers) 17 | r2 = requests.get(url2, headers) 18 | 19 | #json字符串转字典 20 | res1 = json.loads(r1.text) 21 | res2 = json.loads(r2.text) 22 | 23 | data_all1 = json.loads(res1["data"]) 24 | data_all2 = json.loads(res2["data"]) 25 | 26 | #历史数据 27 | history = {} 28 | for i in data_all2["chinaDayList"]: 29 | ds = "2020." + i["date"] 30 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间 31 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式 32 | confirm = i["confirm"] 33 | suspect = i["suspect"] 34 | heal = i["heal"] 35 | dead = i["dead"] 36 | history[ds] = {"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead} 37 | for i in data_all2["chinaDayAddList"]: 38 | ds = "2020." + i["date"] 39 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间 40 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式 41 | confirm = i["confirm"] 42 | suspect = i["suspect"] 43 | heal = i["heal"] 44 | dead = i["dead"] 45 | history[ds].update({"confirm_add": confirm, "suspect_add": suspect, "heal_add": heal, "dead_add": dead}) 46 | 47 | #当日详细数据 48 | details = [] 49 | update_time = data_all1["lastUpdateTime"] 50 | data_country = data_all1["areaTree"] #list 25个国家 51 | data_province = data_country[0]["children"] #中国各省 52 | for pro_infos in data_province: 53 | province = pro_infos["name"] #省名 54 | for city_infos in pro_infos["children"]: 55 | city = city_infos["name"] 56 | confirm = city_infos["total"]["confirm"] 57 | confirm_add = city_infos["today"]["confirm"] 58 | heal = city_infos["total"]["heal"] 59 | dead = city_infos["total"]["dead"] 60 | details.append([update_time, province, city, confirm, confirm_add, heal, dead]) 61 | return history, details 62 | 63 | 64 | def get_conn(): 65 | #建立连接 66 | conn = pymysql.connect(host="127.0.0.1", user="root", password="root", db="cov", charset="utf8") 67 | #创建游标 68 | cursor = conn.cursor() 69 | return conn,cursor 70 | 71 | def close_conn(conn,cursor): 72 | if cursor: 73 | cursor.close() 74 | if conn: 75 | conn.close() 76 | 77 | #插入details数据 78 | def update_details(): 79 | cursor = None 80 | conn = None 81 | try: 82 | li = get_tencent_data()[1] #0是历史数据,1是当日详细数据 83 | conn,cursor = get_conn() 84 | sql = "insert into details(update_time,province,city,confirm,confirm_add,heal,dead) values(%s,%s,%s,%s,%s,%s,%s)" 85 | sql_query = "select %s=(select update_time from details order by id desc limit 1)" #对比当前最大时间戳 86 | #对比当前最大时间戳 87 | cursor.execute(sql_query,li[0][0]) 88 | if not cursor.fetchone()[0]: 89 | print(f"{time.asctime()}开始更新数据") 90 | for item in li: 91 | cursor.execute(sql,item) 92 | conn.commit() 93 | print(f"{time.asctime()}更新到最新数据") 94 | else: 95 | print(f"{time.asctime()}已是最新数据!") 96 | except: 97 | traceback.print_exc() 98 | finally: 99 | close_conn(conn,cursor) 100 | 101 | 102 | #插入history数据 103 | def insert_history(): 104 | cursor = None 105 | conn = None 106 | try: 107 | dic = get_tencent_data()[0]#0代表历史数据字典 108 | print(f"{time.asctime()}开始插入历史数据") 109 | conn,cursor = get_conn() 110 | sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)" 111 | for k,v in dic.items(): 112 | cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"), 113 | v.get("suspect_add"),v.get("heal"),v.get("heal_add"), 114 | v.get("dead"),v.get("dead_add")]) 115 | conn.commit() 116 | print(f"{time.asctime()}插入历史数据完毕") 117 | except: 118 | traceback.print_exc() 119 | finally: 120 | close_conn(conn,cursor) 121 | 122 | 123 | #更新历史数据 124 | def update_history(): 125 | cursor = None 126 | conn = None 127 | try: 128 | dic = get_tencent_data()[0]#0代表历史数据字典 129 | print(f"{time.asctime()}开始更新历史数据") 130 | conn,cursor = get_conn() 131 | sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)" 132 | sql_query = "select confirm from history where ds=%s" 133 | for k,v in dic.items(): 134 | if not cursor.execute(sql_query,k): 135 | cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"), 136 | v.get("suspect_add"),v.get("heal"),v.get("heal_add"), 137 | v.get("dead"),v.get("dead_add")]) 138 | conn.commit() 139 | print(f"{time.asctime()}历史数据更新完毕") 140 | except: 141 | traceback.print_exc() 142 | finally: 143 | close_conn(conn,cursor) 144 | 145 | 146 | #返回百度疫情热搜 147 | def get_baidu_hot(): 148 | option = ChromeOptions() #创建谷歌浏览器实例 149 | option.add_argument("--headless")#隐藏浏览器 150 | option.add_argument("--no-sandbox") #禁用沙盘 部署在linux上访问chrome要求这样 151 | 152 | url = 'https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1' 153 | brower = Chrome(options = option) 154 | brower.get(url) 155 | #找到展开按钮 156 | but = brower.find_element_by_css_selector('#ptab-0 > div > div.VirusHot_1-5-5_32AY4F.VirusHot_1-5-5_2RnRvg > section > div') #定位到点击展开按钮 157 | but.click() #点击展开 158 | 159 | time.sleep(1)#爬虫与反爬,模拟人等待1秒 160 | 161 | c = brower.find_elements_by_xpath('//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]') 162 | context = [i.text for i in c] #获取标签内容 163 | print(context) 164 | return context 165 | 166 | 167 | #将疫情热搜插入数据库 168 | def update_hotsearch(): 169 | cursor = None 170 | conn = None 171 | try: 172 | context = get_baidu_hot() 173 | print(f"{time.asctime()}开始更新热搜数据") 174 | conn, cursor = get_conn() 175 | sql = "insert into hotsearch(dt,content) values(%s,%s)" 176 | ts = time.strftime("%Y-%m-%d %X") 177 | for i in context: 178 | cursor.execute(sql,(ts,i)) #插入数据 179 | conn.commit() #提交事务保存数据 180 | print(f"{time.asctime()}数据更新完毕") 181 | except: 182 | traceback.print_exc() 183 | finally: 184 | close_conn(conn,cursor) 185 | 186 | 187 | 188 | # his,de = get_tencent_data() 189 | # print(his) 190 | # print(de) 191 | if __name__ == "__main__": 192 | insert_history() 193 | update_details() 194 | update_hotsearch() -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/static/css/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | background: #333; 4 | } 5 | 6 | #title { 7 | position: absolute; 8 | width: 40%; 9 | height: 10%; 10 | top: 0; 11 | left: 30%; 12 | color: white; 13 | font-size: 40px; 14 | 15 | display: flex; 16 | align-items: center; 17 | justify-content: center; 18 | } 19 | 20 | #tim { 21 | position: absolute; 22 | /* width: 30%; */ 23 | height: 10%; 24 | top: 5%; 25 | right: 2%; 26 | color: #FFFFFF; 27 | font-size: 20px; 28 | } 29 | 30 | #c1 { 31 | position: absolute; 32 | width: 40%; 33 | height: 30%; 34 | top: 10%; 35 | left: 30%; 36 | /* background: #777777; */ 37 | } 38 | 39 | .num { 40 | width: 25%; 41 | float: left; 42 | display: flex; 43 | align-items: center; 44 | justify-content: center; 45 | color: gold; 46 | font-size: 20px; 47 | } 48 | .txt { 49 | width: 25%; 50 | float: left; 51 | font-family: "幼圆"; 52 | display: flex; 53 | align-items: center; 54 | justify-content: center; 55 | font-size: 20px; 56 | color: white; 57 | } 58 | 59 | #c2 { 60 | position: absolute; 61 | width: 40%; 62 | height: 60%; 63 | top: 40%; 64 | left: 30%; 65 | background: #888888; 66 | } 67 | 68 | #l1 { 69 | position: absolute; 70 | width: 30%; 71 | height: 45%; 72 | top: 10%; 73 | left: 0%; 74 | background: #666666; 75 | } 76 | 77 | #l2 { 78 | position: absolute; 79 | width: 30%; 80 | height: 45%; 81 | top: 55%; 82 | left: 0%; 83 | background: #777777; 84 | } 85 | 86 | #r1 { 87 | position: absolute; 88 | width: 30%; 89 | height: 45%; 90 | top: 10%; 91 | right: 0%; 92 | background: #666666; 93 | } 94 | 95 | #r2 { 96 | position: absolute; 97 | width: 30%; 98 | height: 45%; 99 | top: 55%; 100 | right: 0%; 101 | background: #777777; 102 | } 103 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/static/js/controller.js: -------------------------------------------------------------------------------- 1 | function gettime() { 2 | $.ajax({ 3 | url: "/time", 4 | timeout: 10000, //超时时间设置为10秒; 5 | success: function(data) { 6 | $("#tim").html(data) 7 | }, 8 | error: function(xhr, type, errorThrown) { 9 | } 10 | }); 11 | } 12 | 13 | function get_c1_data() { 14 | $.ajax({ 15 | url: "/c1", 16 | success: function(data) { 17 | $(".num h1").eq(0).text(data.confirm); 18 | $(".num h1").eq(1).text(data.suspect); 19 | $(".num h1").eq(2).text(data.heal); 20 | $(".num h1").eq(3).text(data.dead); 21 | }, 22 | error: function(xhr, type, errorThrown) { 23 | } 24 | }) 25 | } 26 | 27 | function get_c2_data() { 28 | $.ajax({ 29 | url:"/c2", 30 | success: function(data) { 31 | ec_center_option.series[0].data=data.data 32 | ec_center.setOption(ec_center_option) 33 | }, 34 | error: function(xhr, type, errorThrown) { 35 | 36 | } 37 | }) 38 | } 39 | 40 | function get_l1_data() { 41 | $.ajax({ 42 | url:"/l1", 43 | success: function(data) { 44 | ec_left1_Option.xAxis[0].data=data.day 45 | ec_left1_Option.series[0].data=data.confirm 46 | ec_left1_Option.series[1].data=data.suspect 47 | ec_left1_Option.series[2].data=data.heal 48 | ec_left1_Option.series[3].data=data.dead 49 | ec_left1.setOption(ec_left1_Option) 50 | }, 51 | error: function(xhr, type, errorThrown) { 52 | 53 | } 54 | }) 55 | } 56 | 57 | function get_l2_data() { 58 | $.ajax({ 59 | url:"/l2", 60 | success: function(data) { 61 | ec_left2_Option.xAxis[0].data=data.day 62 | ec_left2_Option.series[0].data=data.confirm_add 63 | ec_left2_Option.series[1].data=data.suspect_add 64 | ec_left2.setOption(ec_left2_Option) 65 | }, 66 | error: function(xhr, type, errorThrown) { 67 | } 68 | }) 69 | } 70 | 71 | function get_r1_data() { 72 | $.ajax({ 73 | url: "/r1", 74 | success: function (data) { 75 | ec_right1_option.xAxis.data=data.city; 76 | ec_right1_option.series[0].data=data.confirm; 77 | ec_right1.setOption(ec_right1_option); 78 | } 79 | }) 80 | } 81 | 82 | function get_r2_data() { 83 | $.ajax({ 84 | url: "/r2", 85 | success: function (data) { 86 | ec_right2_option.series[0].data=data.kws; 87 | ec_right2.setOption(ec_right2_option); 88 | } 89 | }) 90 | } 91 | 92 | 93 | gettime() 94 | get_c1_data() 95 | get_c2_data() 96 | get_l1_data() 97 | get_l2_data() 98 | get_r1_data() 99 | get_r2_data() 100 | 101 | setInterval(gettime,1000) 102 | setInterval(get_c1_data,1000*10) 103 | setInterval(get_c2_data,10000*10) 104 | setInterval(get_l1_data,10000*10) 105 | setInterval(get_l2_data,10000*10) 106 | setInterval(get_r1_data,10000*10) 107 | setInterval(get_r2_data,10000*10) -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/static/js/ec_center.js: -------------------------------------------------------------------------------- 1 | var ec_center = echarts.init(document.getElementById('c2'), "dark"); 2 | 3 | var mydata = [{'name': '上海', 'value': 318}, {'name': '云南', 'value': 162}] 4 | 5 | var ec_center_option = { 6 | title: { 7 | text: '', 8 | subtext: '', 9 | x: 'left' 10 | }, 11 | tooltip: { 12 | trigger: 'item' 13 | }, 14 | //左侧小导航图标 15 | visualMap: { 16 | show: true, 17 | x: 'left', 18 | y: 'bottom', 19 | textStyle: { 20 | fontSize: 8, 21 | }, 22 | splitList: [{ start: 1,end: 9 }, 23 | {start: 10, end: 99 }, 24 | { start: 100, end: 999 }, 25 | { start: 1000, end: 9999 }, 26 | { start: 10000 }], 27 | color: ['#8A3310', '#C64918', '#E55B25', '#F2AD92', '#F9DCD1'] 28 | }, 29 | //配置属性 30 | series: [{ 31 | name: '累计确诊人数', 32 | type: 'map', 33 | mapType: 'china', 34 | roam: false, //拖动和缩放 35 | itemStyle: { 36 | normal: { 37 | borderWidth: .5, //区域边框宽度 38 | borderColor: '#009fe8', //区域边框颜色 39 | areaColor: "#ffefd5", //区域颜色 40 | }, 41 | emphasis: { //鼠标滑过地图高亮的相关设置 42 | borderWidth: .5, 43 | borderColor: '#4b0082', 44 | areaColor: "#fff", 45 | } 46 | }, 47 | label: { 48 | normal: { 49 | show: true, //省份名称 50 | fontSize: 8, 51 | }, 52 | emphasis: { 53 | show: true, 54 | fontSize: 8, 55 | } 56 | }, 57 | data:[] //mydata //数据 58 | }] 59 | }; 60 | ec_center.setOption(ec_center_option) -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/static/js/ec_left1.js: -------------------------------------------------------------------------------- 1 | var ec_left1 = echarts.init(document.getElementById('l1'), "dark"); 2 | 3 | var ec_left1_Option = { 4 | //标题样式 5 | title: { 6 | text: "全国累计趋势", 7 | textStyle: { 8 | // color: 'white', 9 | }, 10 | left: 'left', 11 | }, 12 | tooltip: { 13 | trigger: 'axis', 14 | //指示器 15 | axisPointer: { 16 | type: 'line', 17 | lineStyle: { 18 | color: '#7171C6' 19 | } 20 | }, 21 | }, 22 | legend: { 23 | data: ['累计确诊', '现有疑似', "累计治愈", "累计死亡"], 24 | left: "right" 25 | }, 26 | 27 | //图形位置 28 | grid: { 29 | left: '4%', 30 | right: '6%', 31 | bottom: '4%', 32 | top: 50, 33 | containLabel: true 34 | }, 35 | xAxis: [{ 36 | type: 'category', 37 | //x轴坐标点开始与结束点位置都不在最边缘 38 | // boundaryGap : true, 39 | data: []// 40 | // data: ['01.20', '01.21', '01.22'] 41 | }], 42 | yAxis: [{ 43 | type: 'value', 44 | //y轴字体设置 45 | axisLabel: { 46 | show: true, 47 | color: 'white', 48 | fontSize: 12, 49 | formatter: function(value) { 50 | if (value >= 1000) { 51 | value = value / 1000 + 'k'; 52 | } 53 | return value; 54 | } 55 | }, 56 | //y轴线设置显示 57 | axisLine: { 58 | show: true 59 | }, 60 | //与x轴平行的线样式 61 | splitLine: { 62 | show: true, 63 | lineStyle: { 64 | color: '#17273B', 65 | width: 1, 66 | type: 'solid', 67 | } 68 | } 69 | }], 70 | series: [{ 71 | name: "累计确诊", 72 | type: 'line', 73 | smooth: true, 74 | data: []//[260, 406, 529] 75 | }, { 76 | name: "现有疑似", 77 | type: 'line', 78 | smooth: true, 79 | data: []//[54, 37, 3935] 80 | }, 81 | { 82 | name: "累计治愈", 83 | type: 'line', 84 | smooth: true, 85 | data: []//[25, 25, 25] 86 | }, { 87 | name: "累计死亡", 88 | type: 'line', 89 | smooth: true, 90 | data: []//[6, 9, 17] 91 | }] 92 | }; 93 | 94 | ec_left1.setOption(ec_left1_Option) 95 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/static/js/ec_left2.js: -------------------------------------------------------------------------------- 1 | var ec_left2 = echarts.init(document.getElementById('l2'), "dark"); 2 | var ec_left2_Option = { 3 | tooltip: { 4 | trigger: 'axis', 5 | //指示器 6 | axisPointer: { 7 | type: 'line', 8 | lineStyle: { 9 | color: '#7171C6' 10 | } 11 | }, 12 | }, 13 | legend: { 14 | data: ['新增确诊', '新增疑似'], 15 | left: "right" 16 | }, 17 | //标题样式 18 | title: { 19 | text: "全国新增趋势", 20 | textStyle: { 21 | color: 'white', 22 | }, 23 | left: 'left' 24 | }, 25 | //图形位置 26 | grid: { 27 | left: '4%', 28 | right: '6%', 29 | bottom: '4%', 30 | top: 50, 31 | containLabel: true 32 | }, 33 | xAxis: [{ 34 | type: 'category', 35 | //x轴坐标点开始与结束点位置都不在最边缘 36 | // boundaryGap : true, 37 | 38 | data: [] 39 | }], 40 | yAxis: [{ 41 | type: 'value', 42 | //y轴字体设置 43 | 44 | //y轴线设置显示 45 | axisLine: { 46 | show: true 47 | }, 48 | axisLabel: { 49 | show: true, 50 | color: 'white', 51 | fontSize: 12, 52 | formatter: function(value) { 53 | if (value >= 1000) { 54 | value = value / 1000 + 'k'; 55 | } 56 | return value; 57 | } 58 | }, 59 | //与x轴平行的线样式 60 | splitLine: { 61 | show: true, 62 | lineStyle: { 63 | color: '#17273B', 64 | width: 1, 65 | type: 'solid', 66 | } 67 | } 68 | }], 69 | series: [{ 70 | name: "新增确诊", 71 | type: 'line', 72 | smooth: true, 73 | data: [] 74 | }, { 75 | name: "新增疑似", 76 | type: 'line', 77 | smooth: true, 78 | data: [] 79 | }] 80 | }; 81 | 82 | ec_left2.setOption(ec_left2_Option) 83 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/static/js/ec_right1.js: -------------------------------------------------------------------------------- 1 | var ec_right1 = echarts.init(document.getElementById('r1'),"dark"); 2 | var ec_right1_option = { 3 | //标题样式 4 | title : { 5 | text : "非湖北地区城市确诊TOP5", 6 | textStyle : { 7 | color : 'white', 8 | }, 9 | left : 'left' 10 | }, 11 | color: ['#3398DB'], 12 | tooltip: { 13 | trigger: 'axis', 14 | axisPointer: { // 坐标轴指示器,坐标轴触发有效 15 | type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' 16 | } 17 | }, 18 | xAxis: { 19 | type: 'category', 20 | data: [] 21 | }, 22 | yAxis: { 23 | type: 'value' 24 | }, 25 | series: [{ 26 | data: [], 27 | type: 'bar', 28 | barMaxWidth:"50%" 29 | }] 30 | }; 31 | ec_right1.setOption(ec_right1_option) -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/static/js/ec_right2.js: -------------------------------------------------------------------------------- 1 | var ec_right2 = echarts.init(document.getElementById('r2'), "dark"); 2 | 3 | var ddd = [{'name': '肺炎', 'value': '12734670'}, {'name': '实时', 'value': '12734670'}, 4 | {'name': '新型', 'value': '12734670'}] 5 | var ec_right2_option = { 6 | // backgroundColor: '#515151', 7 | title : { 8 | text : "今日疫情热搜", 9 | textStyle : { 10 | color : 'white', 11 | }, 12 | left : 'left' 13 | }, 14 | tooltip: { 15 | show: false 16 | }, 17 | series: [{ 18 | type: 'wordCloud', 19 | // drawOutOfBound:true, 20 | gridSize: 1, 21 | sizeRange: [12, 55], 22 | rotationRange: [-45, 0, 45, 90], 23 | // maskImage: maskImage, 24 | 25 | //这是让词云图的颜色随机 26 | textStyle: { 27 | normal: { 28 | color: function () { 29 | return 'rgb(' + 30 | Math.round(Math.random() * 255) + 31 | ', ' + Math.round(Math.random() * 255) + 32 | ', ' + Math.round(Math.random() * 255) + ')' 33 | } 34 | } 35 | }, 36 | // left: 'center', 37 | // top: 'center', 38 | // // width: '96%', 39 | // // height: '100%', 40 | right: null, 41 | bottom: null, 42 | // width: 300, 43 | // height: 200, 44 | // top: 20, 45 | data: [] 46 | }] 47 | } 48 | 49 | ec_right2.setOption(ec_right2_option); 50 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | My Page 6 | 7 | 8 | 9 |

疫情追踪

10 |

实时报道

11 | 12 | 28 | 29 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/templates/main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 疫情监控 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
全国疫情实时追踪
14 |
15 |
我是左1
16 |
我是左2
17 |
18 |

19 |

20 |

21 |

22 |

累计确诊

23 |

剩余疑似

24 |

累计治愈

25 |

累计死亡

26 |
27 |
我是中2
28 |
我是右1
29 |
我是右2
30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/templates/test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 27 | 28 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/utils.py: -------------------------------------------------------------------------------- 1 | import time 2 | import pymysql 3 | 4 | 5 | def get_time(): 6 | time_str = time.strftime("%Y{}%m{}%d{} %X") 7 | return time_str.format("年","月","日") #因为直接写不支持直接识别中文,才用format写 8 | 9 | 10 | #return: 连接,游标 11 | def get_conn(): 12 | 13 | # 创建连接 14 | conn = pymysql.connect(host="127.0.0.1", 15 | user="root", 16 | password="root", 17 | db="cov", 18 | charset="utf8") 19 | # 创建游标 20 | cursor = conn.cursor()# 执行完毕返回的结果集默认以元组显示 21 | return conn, cursor 22 | 23 | 24 | def close_conn(conn, cursor): 25 | cursor.close() 26 | conn.close() 27 | 28 | def query(sql,*args): 29 | """ 30 | 封装通用查询 31 | :param sql: 32 | :param args: 33 | :return: 返回查询到的结果,((),(),)的形式 34 | """ 35 | conn, cursor = get_conn() 36 | cursor.execute(sql,args) 37 | res = cursor.fetchall() 38 | close_conn(conn, cursor) 39 | return res 40 | 41 | 42 | def get_c1_data(): 43 | """ 44 | :return: 返回大屏div id=c1 的数据 45 | """ 46 | # 因为会更新多次数据,取时间戳最新的那组数据 47 | sql = "select sum(confirm)," \ 48 | "(select suspect from history order by ds desc limit 1)," \ 49 | "sum(heal)," \ 50 | "sum(dead) " \ 51 | "from details " \ 52 | "where update_time=(select update_time from details order by update_time desc limit 1) " 53 | res = query(sql) 54 | return res[0] 55 | 56 | #返回各省数据 57 | def get_c2_data(): 58 | # 因为会更新多次数据,取时间戳最新的那组数据 59 | sql = "select province,sum(confirm) from details " \ 60 | "where update_time=(select update_time from details " \ 61 | "order by update_time desc limit 1) " \ 62 | "group by province" 63 | res = query(sql) 64 | return res 65 | 66 | 67 | def get_l1_data(): 68 | 69 | sql = "select ds,confirm,suspect,heal,dead from history" 70 | res = query(sql) 71 | return res 72 | 73 | def get_l2_data(): 74 | 75 | sql = "select ds,confirm_add,suspect_add from history" 76 | res = query(sql) 77 | return res 78 | 79 | 80 | #返回非湖北地区城市确诊人数前5名 81 | def get_r1_data(): 82 | 83 | sql = 'SELECT city,confirm FROM ' \ 84 | '(select city,confirm from details ' \ 85 | 'where update_time=(select update_time from details order by update_time desc limit 1) ' \ 86 | 'and province not in ("湖北","北京","上海","天津","重庆","香港","台湾") ' \ 87 | 'union all ' \ 88 | 'select province as city,sum(confirm) as confirm from details ' \ 89 | 'where update_time=(select update_time from details order by update_time desc limit 1) ' \ 90 | 'and province in ("北京","上海","天津","重庆","香港","台湾") group by province) as a ' \ 91 | 'ORDER BY confirm DESC LIMIT 5' 92 | res = query(sql) 93 | return res 94 | 95 | #返回最近的20条热搜 96 | def get_r2_data(): 97 | sql = 'select content from hotsearch order by id desc limit 20' 98 | res = query(sql) # 格式 (('民警抗疫一线奋战16天牺牲1037364',), ('四川再派两批医疗队1537382',) 99 | return res 100 | 101 | 102 | # if __name__ == "__main__": 103 | # print(get_r2_data()) 104 | 105 | 106 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/爬取并处理腾讯疫情数据.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import json 3 | import time 4 | 5 | #返回历史数据和当日详细数据 6 | def get_tencent_data(): 7 | url1 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5" 8 | url2 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other" 9 | headers = { 10 | 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36' 11 | } 12 | r1 = requests.get(url1, headers) 13 | r2 = requests.get(url2, headers) 14 | 15 | #json字符串转字典 16 | res1 = json.loads(r1.text) 17 | res2 = json.loads(r2.text) 18 | 19 | data_all1 = json.loads(res1["data"]) 20 | data_all2 = json.loads(res2["data"]) 21 | 22 | #历史数据 23 | history = {} 24 | for i in data_all2["chinaDayList"]: 25 | ds = "2020." + i["date"] 26 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间 27 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式 28 | confirm = i["confirm"] 29 | suspect = i["suspect"] 30 | heal = i["heal"] 31 | dead = i["dead"] 32 | history[ds] = {"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead} 33 | for i in data_all2["chinaDayAddList"]: 34 | ds = "2020." + i["date"] 35 | tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间 36 | ds = time.strftime("%Y-%m-%d", tup) #改变时间输入格式,不然插入数据库会报错,数据库是datatime格式 37 | confirm = i["confirm"] 38 | suspect = i["suspect"] 39 | heal = i["heal"] 40 | dead = i["dead"] 41 | history[ds].update({"confirm_add": confirm, "suspect_add": suspect, "heal_add": heal, "dead_add": dead}) 42 | 43 | #当日详细数据 44 | details = [] 45 | update_time = data_all1["lastUpdateTime"] 46 | data_country = data_all1["areaTree"] #list 25个国家 47 | data_province = data_country[0]["children"] #中国各省 48 | for pro_infos in data_province: 49 | province = pro_infos["name"] #省名 50 | for city_infos in pro_infos["children"]: 51 | city = city_infos["name"] 52 | confirm = city_infos["total"]["confirm"] 53 | confirm_add = city_infos["today"]["confirm"] 54 | heal = city_infos["total"]["heal"] 55 | dead = city_infos["total"]["dead"] 56 | details.append([update_time, province, city, confirm, confirm_add, heal, dead]) 57 | return history, details 58 | 59 | 60 | 61 | 62 | 63 | his,de = get_tencent_data() 64 | print(his) 65 | print(de) 66 | -------------------------------------------------------------------------------- /开发过程中的版本/COVID-19_Tracking_本机/爬取百度热搜.py: -------------------------------------------------------------------------------- 1 | from selenium.webdriver import Chrome,ChromeOptions 2 | import time 3 | 4 | option = ChromeOptions() 5 | option.add_argument("--headless")#隐藏浏览器 6 | option.add_argument("--no-sandbox") #禁用沙盘 部署在linux上访问chrome要求这样 7 | url = 'https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1' 8 | 9 | brower = Chrome(options = option) 10 | #brower = Chrome() 11 | brower.get(url) 12 | but = brower.find_element_by_css_selector('#ptab-0 > div > div.VirusHot_1-5-5_32AY4F.VirusHot_1-5-5_2RnRvg > section > div') #定位到点击展开按钮 13 | but.click() #点击展开 14 | 15 | 16 | time.sleep(1)#爬虫与反爬,模拟人等待1秒 17 | c = brower.find_elements_by_xpath('//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]') 18 | for i in c: 19 | print(i.text) 20 | -------------------------------------------------------------------------------- /疫情数据网站.txt: -------------------------------------------------------------------------------- 1 | 各大平台疫情数据的网站 2 | 3 | https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1     百度 4 | 5 | https://news.qq.com//zt2020/page/feiyan.htm   腾讯 6 | 7 | 8 | 爬取腾讯yq数据 9 | https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5 10 | 11 | https://view.inews.qq.com/g2/getOnsInfo?name=disease_other 12 | 13 | 14 | 我们要爬取百度的疫情数据平台的今日疫情热搜 15 | 16 | https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1 17 | --------------------------------------------------------------------------------