一、要求:
我们有的是热情、激情、无限的动力,清明三天放假休息,为了纪念牺牲的烈士,我们集体决定仿照约翰·霍普金斯大学制作全球疫情发布图(WEB版),可以实时访问。行动起来吧。随时抽查,今天工作八小时。
二、我的全球疫情发布图:
三、设计思路:
1、准备数据:使用python从网页上爬取数据,并存入mysql数据库。
1)全球数据爬取:
import requests import json from pymysql import * import requests from retrying import retry headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36" ,"Referer": "https://wp.m.163.com/163/page/news/virus_report/index.html?_nw_=1&_anw_=1"} def _parse_url(url): response = requests.get(url,headers=headers,timeout=3) #3秒之后返回 return response.content.decode() def parse_url(url): try: html_str = _parse_url(url) except: html_str = None return html_str class yiqing: f = 0 url="https://c.m.163.com/ug/api/wuhan/app/data/list-total?t=316765429316" def getContent_list(self,html_str): dict_data = json.loads(html_str) content_list = dict_data["data"] return content_list def saveContent_list(self,i): temp = 0; temp += 1; # 打开数据库连接(ip/数据库用户名/登录密码/数据库名) con = connect("localhost", "root", "root", "text") # 使用 cursor() 方法创建一个游标对象 cursor cursors = con.cursor() # 使用 execute() 方法执行 SQL 查询 返回的是你影响的行数 if self.f ==0 : cursors.execute("delete from provinces") self.f = self.f+1 row = cursors.execute("insert into provinces values(%s,%s,%s,%s,%s,%s,%s,%s)", (temp,i.get('name'),i.get('total').get('confirm'), i.get('total').get('suspect'),i.get('total').get('heal'), i.get('total').get('dead'),i.get('total').get('severe'), i.get('lastUpdateTime'))) con.commit()#提交事务 con.close()# 关闭数据库连接 def run(self): #实现主要逻辑 #请求数据 html_str = parse_url(self.url) #获取数据 content_list = self.getContent_list(html_str) values = content_list["areaTree"] for i in values: self.saveContent_list(i) if __name__ == '__main__': yq = yiqing() yq.run() print('爬取,存储成功!!')
2)历史数据爬取:
import requests import json from pymysql import * import requests from retrying import retry headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36" ,"Referer": "https://wp.m.163.com/163/page/news/virus_report/index.html?_nw_=1&_anw_=1"} def _parse_url(url): response = requests.get(url,headers=headers,timeout=3) #3秒之后返回 return response.content.decode() def parse_url(url): try: html_str = _parse_url(url) except: html_str = None return html_str class yiqing: f = 0 url="https://c.m.163.com/ug/api/wuhan/app/data/list-total?t=316765429316" def getContent_list(self,html_str): dict_data = json.loads(html_str) content_list = dict_data["data"] return content_list def saveContent_list(self,i): # 打开数据库连接(ip/数据库用户名/登录密码/数据库名) con = connect("localhost", "root", "root", "text") # 使用 cursor() 方法创建一个游标对象 cursor cursors = con.cursor() # 使用 execute() 方法执行 SQL 查询 返回的是你影响的行数 row = cursors.execute("insert into world_(name,confirm,suspect,heal,dead,severe,lastUpdateTime) values(%s,%s,%s,%s,%s,%s,%s)", ('中国',i.get('total').get('confirm'), i.get('total').get('suspect'),i.get('total').get('heal'), i.get('total').get('dead'),i.get('total').get('severe'), i.get('date'))) con.commit()#提交事务 con.close()# 关闭数据库连接 def run(self): #实现主要逻辑 #请求数据 html_str = parse_url(self.url) #获取数据 content_list = self.getContent_list(html_str) values = content_list["chinaDayList"] for i in values: self.saveContent_list(i) if __name__ == '__main__': yq = yiqing() yq.run() print('爬取,存储成功!!')
2、先完成三个数据列表:分别降序展示全世界各国的的确诊人数、死亡人数和治愈人数(在数据库层面按照不同字段降序排列)。
3、之后是右下方的历史数据,使用echart的折线图展示(暂时直爬取到中国的历史数据!!嘻嘻。)
4、最后在echart的基础上使用world.js画世界地图。
1)dao层:
/** * @param province * @return * @throws SQLException */ public List<Province> getWorldData_() throws SQLException { QueryRunner qr = new QueryRunner(DBUtils.getDataSource()); String sql = "select * from provinces order by confirm desc"; List<Province> query = qr.query(sql, new BeanListHandler<Province>(Province.class)); return query; } /** * @param province * @return * @throws SQLException */ public List<Province> getWorldData_1() throws SQLException { QueryRunner qr = new QueryRunner(DBUtils.getDataSource()); String sql = "select * from provinces order by heal desc"; List<Province> query = qr.query(sql, new BeanListHandler<Province>(Province.class)); return query; } /** * @param province * @return * @throws SQLException */ public List<Province> getWorldData_2() throws SQLException { QueryRunner qr = new QueryRunner(DBUtils.getDataSource()); String sql = "select * from provinces order by dead desc"; List<Province> query = qr.query(sql, new BeanListHandler<Province>(Province.class)); return query; } /** * @return * @throws SQLException */ public List<Total> getWorldinfo() throws SQLException { QueryRunner qr = new QueryRunner(DBUtils.getDataSource()); String sql = "select * from provinces order by confirm desc"; List<Total> query = qr.query(sql, new BeanListHandler<Total>(Total.class)); return query; } /** * @return * @throws SQLException */ public List<Province> getWorldData_H() throws SQLException { QueryRunner qr = new QueryRunner(DBUtils.getDataSource()); String sql = "select * from world_ "; List<Province> query = qr.query(sql, new BeanListHandler<Province>(Province.class)); return query; }
2)servlet层:
/** * @param request * @param response */ private void world_dt(HttpServletRequest request, HttpServletResponse response)throws SQLException, ServletException, IOException { List<Province> list = dao.getWorldData_(); Gson gson = new Gson(); String json = gson.toJson(list); response.getWriter().write(json); } /** * @param request * @param response */ private void history(HttpServletRequest request, HttpServletResponse response) throws SQLException, ServletException, IOException { List<Province> list = dao.getWorldData_H(); Gson gson = new Gson(); String json = gson.toJson(list); response.getWriter().write(json); } /** * @param request * @param response */ private void total(HttpServletRequest request, HttpServletResponse response)throws SQLException, ServletException, IOException { List<Province> list = dao.getWorldData_(); List<Province> list_1 = dao.getWorldData_1(); List<Province> list_2 = dao.getWorldData_2(); int allTotal = 0; int allDead = 0; int allHeal = 0; for (Province total : list) { allTotal += Integer.parseInt(total.getConfirm()); allDead += Integer.parseInt(total.getDead()); allHeal += Integer.parseInt(total.getHeal()); } request.setAttribute("list", list); request.setAttribute("list_1", list_1); request.setAttribute("list_2", list_2); request.setAttribute("allTotal", allTotal); request.setAttribute("allDead", allDead); request.setAttribute("allHeal", allHeal); request.getRequestDispatcher("worldyq.jsp").forward(request, response); }
3)视图层:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>世界疫情</title> <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" /> <script src="js/jquery-1.11.3.min.js" type="text/javascript"></script> <script src="js/bootstrap.min.js" type="text/javascript"></script> <script src="js/echarts.js"></script> <style type="text/css"> body { background:#000000 } div { float: left; } #left { width: 300px; height: 700px; } </style> </head> <body background="#000"> <div id="left"> <div style="background-color: #4B4B4B;width: 300px;height: 130px;margin-top: 10px;margin-left: 10px;"> <h1 style="color: red;" align="center"> <font size="5" color="#ffffff">总确诊人数:</font> ${allTotal} </h1> </div> <div style="margin-top: 10px;margin-left: 10px;background-color: #4B4B4B;BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; SCROLLBAR-SHADOW-COLOR: #3d5054; SCROLLBAR-3DLIGHT-COLOR: #3d5054; SCROLLBAR-ARROW-COLOR: #ffd6da;SCROLLBAR-DARKSHADOW-COLOR: #85989c; SCROLLBAR-FACE-COLOR: #889b9f; SCROLLBAR-HIGHLIGHT-COLOR: #c3d6da; OVERFLOW: auto; WIDTH: 300px; HEIGHT: 580px" align=center;"> <table class="table"> <c:forEach items="${list}" var="item"> <tr> <td> <h3 style="color: red;"> ${item.confirm } <font size="5" color="#ffffff">${item.name }</font> </h3> </td> </tr> </c:forEach> </table> </div> <div style="background-color: #4B4B4B;width: 300px;height: 150px;margin-top: 10px;margin-left: 10px;"> <h1 style="color: red;" align="center"> <font size="5" color="#ffffff">更新时间:</font><br> ${list[0].lastUpdateTime} </h1> </div> </div> <div style="width: 1000px;height: 800px;background-color: #4B4B4B;margin-top: 10px;margin-left: 20px;" > <div id="main" style="width: 1000px;height:800px;border:1px solid #ccc"></div> </div> <div style="width: 550px; height: 900px;margin-top: 10px;margin-left: 10px;"> <div style="width: 49%; height: 600px;background-color: #4B4B4B;background-color: #4B4B4B;BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; SCROLLBAR-SHADOW-COLOR: #3d5054; SCROLLBAR-3DLIGHT-COLOR: #3d5054; SCROLLBAR-ARROW-COLOR: #ffd6da;SCROLLBAR-DARKSHADOW-COLOR: #85989c; SCROLLBAR-FACE-COLOR: #889b9f; SCROLLBAR-HIGHLIGHT-COLOR: #c3d6da; OVERFLOW: auto;"> <h1 style="color: #ffffff" align="center"> <font size="4" color="#ffffff">总死亡人数:<br></font> ${allDead} </h1> <table class="table" style="overflow-y:scroll;"> <c:forEach items="${list_2}" var="item"> <tr> <td> <h2 style="color: red;"> ${item.dead }死亡<br/> <font size="3" color="#ffffff">${item.name }</font> </h2> </td> </tr> </c:forEach> </table> </div> <div style="width: 49%; height: 600px;background-color: #4B4B4B;margin-left: 10px;background-color: #4B4B4B;BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid; SCROLLBAR-SHADOW-COLOR: #3d5054; SCROLLBAR-3DLIGHT-COLOR: #3d5054; SCROLLBAR-ARROW-COLOR: #ffd6da;SCROLLBAR-DARKSHADOW-COLOR: #85989c; SCROLLBAR-FACE-COLOR: #889b9f; SCROLLBAR-HIGHLIGHT-COLOR: #c3d6da; OVERFLOW: auto;"> <h1 align="center"> <font size="4" color="#ffffff">总治愈人数:<br></font> <font color="#33CC00">${allHeal}</font> </h1> <table class="table" style="overflow-y:scroll;"> <c:forEach items="${list_1}" var="item"> <tr> <td> <h2 style="color:#33CC00"> ${item.heal }治愈<br/> <font size="3" color="#ffffff">${item.name }</font> </h2> </td> </tr> </c:forEach> </table> </div> <!-- 为 ECharts 准备一个具备大小(宽高)的Dom --> <div id="main_1" style="width: 100%; height: 250px;background-color: #4B4B4B;margin-top: 10px;"></div> </div> </body> <script type="text/javascript"> var dt; $(function(){ $.ajax({ url : "data?method=history", async : false, type : "POST", success : function(data) { dt = data; //alert(dt[0].name); }, error : function() { alert("请求失败"); }, dataType : "json" }); var myChart = echarts.init(document.getElementById('main_1')); //alert(dt); var xd = new Array(0)//长度为33 var yd = new Array(0)//长度为33 for (var i = 0; i < dt.length; i+=5) { xd.push(dt[i].lastUpdateTime); yd.push(dt[i].confirm); } //alert(xd); //alert(yd); // 指定图表的配置项和数据 var option_1 = { title : { text : '确诊人数' }, tooltip : { trigger : 'axis' }, legend : { data : [ '确诊人数' ] }, grid : { left : '3%', right : '4%', bottom : '3%', containLabel : true }, toolbox : { feature : { saveAsImage : {} } }, xAxis : { type : 'category', boundaryGap : false, axisLabel : { //横坐标上的文字斜着显示 文字颜色 begin interval : 0, rotate : 45, margin : 10, textStyle : { color : "#ec6869" } //横坐标上的文字换行显示 文字颜色end }, data : xd }, yAxis : { type : 'value', }, series : [ { name : '确诊人数', type : 'line', stack : '总量', data : yd } ] }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option_1); }); </script> <script src="js/echarts.min.js"></script> <script src="js/world.js"></script> <script type="text/javascript"> var wdt; $(function(){ $.ajax({ url : "data?method=world_dt", async : false, type : "POST", success : function(data) { wdt = data; //alert("1"); //alert(dt[0].name); }, error : function() { alert("请求失败"); }, dataType : "json" }); var myChart = echarts.init(document.getElementById('main')); var wxd = new Array(0) var wyd = new Array(0) var mydata = new Array(0); for (var i = 0; i < wdt.length; i++) { var d = {}; d["name"] = wdt[i].name; d["value"] = wdt[i].confirm; d["suspect"] = wdt[i].suspect; d["heal"] = wdt[i].heal; d["dead"] = wdt[i].dead; d["servere"] = wdt[i].servere; mydata.push(d); } option = { title: { sublink: 'http://esa.un.org/wpp/Excel-Data/population.htm', left: 'center', top: 'top' }, tooltip: { formatter : function(params) { return params.name + '<br/>' + '确诊人数 : ' + params.value + '<br/>' + '死亡人数 : ' + params['data'].dead + '<br/>' + '治愈人数 : ' + params['data'].heal + '<br/>'+ '疑似患者人数 : ' + params['data'].suspect; }//数据格式化 }, //左侧小导航 visualMap : { min : 0, max : 500, inRange : { color : ['#CC6633', '#ffaa85', '#bc1a19','#990000' ] //取值范围的颜色 }, pieces:[ {gt:5000}, {gt:1000,lte:4999}, {gte:500,lte:999}, {gte:1,lte:499}, {value:0,label:'0',color:'#ffffff'}, ], show : true //图注 }, series: [ { name: '世界疫情', type: 'map', mapType: 'world', roam: true, itemStyle:{ emphasis:{label:{show:true}} }, data: mydata, nameMap:{ "Canada": "加拿大", "Turkmenistan": "土库曼斯坦", "Saint Helena": "圣赫勒拿", "Lao PDR": "老挝", "Lithuania": "立陶宛", "Cambodia": "柬埔寨", "Ethiopia": "埃塞俄比亚", "Faeroe Is.": "法罗群岛", "Swaziland": "斯威士兰", "Palestine": "巴勒斯坦", "Belize": "伯利兹", "Argentina": "阿根廷", "Bolivia": "玻利维亚", "Cameroon": "喀麦隆", "Burkina Faso": "布基纳法索", "Aland": "奥兰群岛", "Bahrain": "巴林", "Saudi Arabia": "沙特阿拉伯", "Fr. Polynesia": "法属波利尼西亚", "Cape Verde": "佛得角", "W. Sahara": "西撒哈拉", "Slovenia": "斯洛文尼亚", "Guatemala": "危地马拉", "Guinea": "几内亚", "Dem. Rep. Congo": "刚果(金)", "Germany": "德国", "Spain": "西班牙", "Liberia": "利比里亚", "Netherlands": "荷兰", "Jamaica": "牙买加", "Solomon Is.": "所罗门群岛", "Oman": "阿曼", "Tanzania": "坦桑尼亚", "Costa Rica": "哥斯达黎加", "Isle of Man": "曼岛", "Gabon": "加蓬", "Niue": "纽埃", "Bahamas": "巴哈马", "New Zealand": "新西兰", "Yemen": "也门", "Jersey": "泽西岛", "Pakistan": "巴基斯坦", "Albania": "阿尔巴尼亚", "Samoa": "萨摩亚", "Czech Rep.": "捷克", "United Arab Emirates": "阿拉伯联合酋长国", "Guam": "关岛", "India": "印度", "Azerbaijan": "阿塞拜疆", "N. Mariana Is.": "北马里亚纳群岛", "Lesotho": "莱索托", "Kenya": "肯尼亚", "Belarus": "白俄罗斯", "Tajikistan": "塔吉克斯坦", "Turkey": "土耳其", "Afghanistan": "阿富汗", "Bangladesh": "孟加拉国", "Mauritania": "毛里塔尼亚", "Dem. Rep. Korea": "朝鲜", "Saint Lucia": "圣卢西亚", "Br. Indian Ocean Ter.": "英属印度洋领地", "Mongolia": "蒙古", "France": "法国", "Cura?ao": "库拉索岛", "S. Sudan": "南苏丹", "Rwanda": "卢旺达", "Slovakia": "斯洛伐克", "Somalia": "索马里", "Peru": "秘鲁", "Vanuatu": "瓦努阿图", "Norway": "挪威", "Malawi": "马拉维", "Benin": "贝宁", "St. Vin. and Gren.": "圣文森特和格林纳丁斯", "Korea": "韩国", "Singapore": "新加坡", "Montenegro": "黑山共和国", "Cayman Is.": "开曼群岛", "Togo": "多哥", "China": "中国", "Heard I. and McDonald Is.": "赫德岛和麦克唐纳群岛", "Armenia": "亚美尼亚", "Falkland Is.": "马尔维纳斯群岛(福克兰)", "Ukraine": "乌克兰", "Ghana": "加纳", "Tonga": "汤加", "Finland": "芬兰", "Libya": "利比亚", "Dominican Rep.": "多米尼加", "Indonesia": "印度尼西亚", "Mauritius": "毛里求斯", "Eq. Guinea": "赤道几内亚", "Sweden": "瑞典", "Vietnam": "越南", "Mali": "马里", "Russia": "俄罗斯", "Bulgaria": "保加利亚", "United States": "美国", "Romania": "罗马尼亚", "Angola": "安哥拉", "Chad": "乍得", "South Africa": "南非", "Fiji": "斐济", "Liechtenstein": "列支敦士登", "Malaysia": "马来西亚", "Austria": "奥地利", "Mozambique": "莫桑比克", "Uganda": "乌干达", "Japan": "日本", "Niger": "尼日尔", "Brazil": "巴西", "Kuwait": "科威特", "Panama": "巴拿马", "Guyana": "圭亚那", "Madagascar": "马达加斯加", "Luxembourg": "卢森堡", "American Samoa": "美属萨摩亚", "Andorra": "安道尔", "Ireland": "爱尔兰", "Italy": "意大利", "Nigeria": "尼日利亚", "Turks and Caicos Is.": "特克斯和凯科斯群岛", "Ecuador": "厄瓜多尔", "U.S. Virgin Is.": "美属维尔京群岛", "Brunei": "文莱", "Australia": "澳大利亚", "Iran": "伊朗", "Algeria": "阿尔及利亚", "El Salvador": "萨尔瓦多", "C?te d'Ivoire": "科特迪瓦", "Chile": "智利", "Puerto Rico": "波多黎各", "Belgium": "比利时", "Thailand": "泰国", "Haiti": "海地", "Iraq": "伊拉克", "S?o Tomé and Principe": "圣多美和普林西比", "Sierra Leone": "塞拉利昂", "Georgia": "格鲁吉亚", "Denmark": "丹麦", "Philippines": "菲律宾", "S. Geo. and S. Sandw. Is.": "南乔治亚岛和南桑威奇群岛", "Moldova": "摩尔多瓦", "Morocco": "摩洛哥", "Namibia": "纳米比亚", "Malta": "马耳他", "Guinea-Bissau": "几内亚比绍", "Kiribati": "基里巴斯", "Switzerland": "瑞士", "Grenada": "格林纳达", "Seychelles": "塞舌尔", "Portugal": "葡萄牙", "Estonia": "爱沙尼亚", "Uruguay": "乌拉圭", "Antigua and Barb.": "安提瓜和巴布达", "Lebanon": "黎巴嫩", "Uzbekistan": "乌兹别克斯坦", "Tunisia": "突尼斯", "Djibouti": "吉布提", "Greenland": "格陵兰", "Timor-Leste": "东帝汶", "Dominica": "多米尼克", "Colombia": "哥伦比亚", "Burundi": "布隆迪", "Bosnia and Herz.": "波斯尼亚和黑塞哥维那", "Cyprus": "塞浦路斯", "Barbados": "巴巴多斯", "Qatar": "卡塔尔", "Palau": "帕劳", "Bhutan": "不丹", "Sudan": "苏丹", "Nepal": "尼泊尔", "Micronesia": "密克罗尼西亚", "Bermuda": "百慕大", "Suriname": "苏里南", "Venezuela": "委内瑞拉", "Israel": "以色列", "St. Pierre and Miquelon": "圣皮埃尔和密克隆群岛", "Central African Rep.": "中非", "Iceland": "冰岛", "Zambia": "赞比亚", "Senegal": "塞内加尔", "Papua New Guinea": "巴布亚新几内亚", "Trinidad and Tobago": "特立尼达和多巴哥", "Zimbabwe": "津巴布韦", "Jordan": "约旦", "Gambia": "冈比亚", "Kazakhstan": "哈萨克斯坦", "Poland": "波兰", "Eritrea": "厄立特里亚", "Kyrgyzstan": "吉尔吉斯斯坦", "Montserrat": "蒙特塞拉特", "New Caledonia": "新喀里多尼亚", "Macedonia": "马其顿", "Paraguay": "巴拉圭", "Latvia": "拉脱维亚", "Hungary": "匈牙利", "Syria": "叙利亚", "Honduras": "洪都拉斯", "Myanmar": "缅甸", "Mexico": "墨西哥", "Egypt": "埃及", "Nicaragua": "尼加拉瓜", "Cuba": "古巴", "Serbia": "塞尔维亚", "Comoros": "科摩罗", "United Kingdom": "英国", "Fr. S. Antarctic Lands": "南极洲", "Congo": "刚果(布)", "Greece": "希腊", "Sri Lanka": "斯里兰卡", "Croatia": "克罗地亚", "Botswana": "博茨瓦纳", "Siachen Glacier": "锡亚琴冰川地区" } } ] }; myChart.setOption(option); }); </script> </html>
四、遇到的问题:
1、使用world.js对于的世界各国的名称是英文,而我的数据库中的国名是中文名。
解决方法:在echart ->option ->series 中加入国名的从英文到中文的映射。
国名映射:
nameMap : { "Canada" : "加拿大", "Turkmenistan" : "土库曼斯坦", "Saint Helena" : "圣赫勒拿", "Lao PDR" : "老挝", "Lithuania" : "立陶宛", "Cambodia" : "柬埔寨", "Ethiopia" : "埃塞俄比亚", "Faeroe Is." : "法罗群岛", "Swaziland" : "斯威士兰", "Palestine" : "巴勒斯坦", "Belize" : "伯利兹", "Argentina" : "阿根廷", "Bolivia" : "玻利维亚", "Cameroon" : "喀麦隆", "Burkina Faso" : "布基纳法索", "Aland" : "奥兰群岛", "Bahrain" : "巴林", "Saudi Arabia" : "沙特阿拉伯", "Fr. Polynesia" : "法属波利尼西亚", "Cape Verde" : "佛得角", "W. Sahara" : "西撒哈拉", "Slovenia" : "斯洛文尼亚", "Guatemala" : "危地马拉", "Guinea" : "几内亚", "Dem. Rep. Congo" : "刚果(金)", "Germany" : "德国", "Spain" : "西班牙", "Liberia" : "利比里亚", "Netherlands" : "荷兰", "Jamaica" : "牙买加", "Solomon Is." : "所罗门群岛", "Oman" : "阿曼", "Tanzania" : "坦桑尼亚", "Costa Rica" : "哥斯达黎加", "Isle of Man" : "曼岛", "Gabon" : "加蓬", "Niue" : "纽埃", "Bahamas" : "巴哈马", "New Zealand" : "新西兰", "Yemen" : "也门", "Jersey" : "泽西岛", "Pakistan" : "巴基斯坦", "Albania" : "阿尔巴尼亚", "Samoa" : "萨摩亚", "Czech Rep." : "捷克", "United Arab Emirates" : "阿拉伯联合酋长国", "Guam" : "关岛", "India" : "印度", "Azerbaijan" : "阿塞拜疆", "N. Mariana Is." : "北马里亚纳群岛", "Lesotho" : "莱索托", "Kenya" : "肯尼亚", "Belarus" : "白俄罗斯", "Tajikistan" : "塔吉克斯坦", "Turkey" : "土耳其", "Afghanistan" : "阿富汗", "Bangladesh" : "孟加拉国", "Mauritania" : "毛里塔尼亚", "Dem. Rep. Korea" : "朝鲜", "Saint Lucia" : "圣卢西亚", "Br. Indian Ocean Ter." : "英属印度洋领地", "Mongolia" : "蒙古", "France" : "法国", "Cura?ao" : "库拉索岛", "S. Sudan" : "南苏丹", "Rwanda" : "卢旺达", "Slovakia" : "斯洛伐克", "Somalia" : "索马里", "Peru" : "秘鲁", "Vanuatu" : "瓦努阿图", "Norway" : "挪威", "Malawi" : "马拉维", "Benin" : "贝宁", "St. Vin. and Gren." : "圣文森特和格林纳丁斯", "Korea" : "韩国", "Singapore" : "新加坡", "Montenegro" : "黑山共和国", "Cayman Is." : "开曼群岛", "Togo" : "多哥", "China" : "中国", "Heard I. and McDonald Is." : "赫德岛和麦克唐纳群岛", "Armenia" : "亚美尼亚", "Falkland Is." : "马尔维纳斯群岛(福克兰)", "Ukraine" : "乌克兰", "Ghana" : "加纳", "Tonga" : "汤加", "Finland" : "芬兰", "Libya" : "利比亚", "Dominican Rep." : "多米尼加", "Indonesia" : "印度尼西亚", "Mauritius" : "毛里求斯", "Eq. Guinea" : "赤道几内亚", "Sweden" : "瑞典", "Vietnam" : "越南", "Mali" : "马里", "Russia" : "俄罗斯", "Bulgaria" : "保加利亚", "United States" : "美国", "Romania" : "罗马尼亚", "Angola" : "安哥拉", "Chad" : "乍得", "South Africa" : "南非", "Fiji" : "斐济", "Liechtenstein" : "列支敦士登", "Malaysia" : "马来西亚", "Austria" : "奥地利", "Mozambique" : "莫桑比克", "Uganda" : "乌干达", "Japan" : "日本", "Niger" : "尼日尔", "Brazil" : "巴西", "Kuwait" : "科威特", "Panama" : "巴拿马", "Guyana" : "圭亚那", "Madagascar" : "马达加斯加", "Luxembourg" : "卢森堡", "American Samoa" : "美属萨摩亚", "Andorra" : "安道尔", "Ireland" : "爱尔兰", "Italy" : "意大利", "Nigeria" : "尼日利亚", "Turks and Caicos Is." : "特克斯和凯科斯群岛", "Ecuador" : "厄瓜多尔", "U.S. Virgin Is." : "美属维尔京群岛", "Brunei" : "文莱", "Australia" : "澳大利亚", "Iran" : "伊朗", "Algeria" : "阿尔及利亚", "El Salvador" : "萨尔瓦多", "C?te d'Ivoire" : "科特迪瓦", "Chile" : "智利", "Puerto Rico" : "波多黎各", "Belgium" : "比利时", "Thailand" : "泰国", "Haiti" : "海地", "Iraq" : "伊拉克", "S?o Tomé and Principe" : "圣多美和普林西比", "Sierra Leone" : "塞拉利昂", "Georgia" : "格鲁吉亚", "Denmark" : "丹麦", "Philippines" : "菲律宾", "S. Geo. and S. Sandw. Is." : "南乔治亚岛和南桑威奇群岛", "Moldova" : "摩尔多瓦", "Morocco" : "摩洛哥", "Namibia" : "纳米比亚", "Malta" : "马耳他", "Guinea-Bissau" : "几内亚比绍", "Kiribati" : "基里巴斯", "Switzerland" : "瑞士", "Grenada" : "格林纳达", "Seychelles" : "塞舌尔", "Portugal" : "葡萄牙", "Estonia" : "爱沙尼亚", "Uruguay" : "乌拉圭", "Antigua and Barb." : "安提瓜和巴布达", "Lebanon" : "黎巴嫩", "Uzbekistan" : "乌兹别克斯坦", "Tunisia" : "突尼斯", "Djibouti" : "吉布提", "Greenland" : "格陵兰", "Timor-Leste" : "东帝汶", "Dominica" : "多米尼克", "Colombia" : "哥伦比亚", "Burundi" : "布隆迪", "Bosnia and Herz." : "波斯尼亚和黑塞哥维那", "Cyprus" : "塞浦路斯", "Barbados" : "巴巴多斯", "Qatar" : "卡塔尔", "Palau" : "帕劳", "Bhutan" : "不丹", "Sudan" : "苏丹", "Nepal" : "尼泊尔", "Micronesia" : "密克罗尼西亚", "Bermuda" : "百慕大", "Suriname" : "苏里南", "Venezuela" : "委内瑞拉", "Israel" : "以色列", "St. Pierre and Miquelon" : "圣皮埃尔和密克隆群岛", "Central African Rep." : "中非", "Iceland" : "冰岛", "Zambia" : "赞比亚", "Senegal" : "塞内加尔", "Papua New Guinea" : "巴布亚新几内亚", "Trinidad and Tobago" : "特立尼达和多巴哥", "Zimbabwe" : "津巴布韦", "Jordan" : "约旦", "Gambia" : "冈比亚", "Kazakhstan" : "哈萨克斯坦", "Poland" : "波兰", "Eritrea" : "厄立特里亚", "Kyrgyzstan" : "吉尔吉斯斯坦", "Montserrat" : "蒙特塞拉特", "New Caledonia" : "新喀里多尼亚", "Macedonia" : "马其顿", "Paraguay" : "巴拉圭", "Latvia" : "拉脱维亚", "Hungary" : "匈牙利", "Syria" : "叙利亚", "Honduras" : "洪都拉斯", "Myanmar" : "缅甸", "Mexico" : "墨西哥", "Egypt" : "埃及", "Nicaragua" : "尼加拉瓜", "Cuba" : "古巴", "Serbia" : "塞尔维亚", "Comoros" : "科摩罗", "United Kingdom" : "英国", "Fr. S. Antarctic Lands" : "南极洲", "Congo" : "刚果(布)", "Greece" : "希腊", "Sri Lanka" : "斯里兰卡", "Croatia" : "克罗地亚", "Botswana" : "博茨瓦纳", "Siachen Glacier" : "锡亚琴冰川地区" }
2、world.js废了好大劲才找到的。
world.js :https://pan.baidu.com/s/1XbtgJxLjk0oiXAYCdLJY4A
3、开始不会在echart用使用world.js(不会画世界地图)
参考:https://blog.csdn.net/mm_hello11/article/details/82989883
来源:https://www.cnblogs.com/20183544-wangzhengshuai/p/12632435.html