import pyecharts.options as opts
from pyecharts.charts import BMap
data = [
["海门", 9],
["鄂尔多斯", 12],
["招远", 12],
["舟山", 12],
["齐齐哈尔", 14],
["盐城", 15],
["赤峰", 16],
["青岛", 18],
["乳山", 18],
["金昌", 19],
["泉州", 21],
["莱西", 21],
["日照", 21],
["胶南", 22],
["南通", 23],
["拉萨", 24],
["云浮", 24],
["梅州", 25],
["文登", 25],
["上海", 25],
["攀枝花", 25],
["威海", 25],
["承德", 25],
["厦门", 26],
["汕尾", 26],
["潮州", 26],
["丹东", 27],
["太仓", 27],
["曲靖", 27],
["烟台", 28],
["福州", 29],
["瓦房店", 30],
["即墨", 30],
["抚顺", 31],
["玉溪", 31],
["张家口", 31],
["阳泉", 31],
["莱州", 32],
["湖州", 32],
["汕头", 32],
["昆山", 33],
["宁波", 33],
["湛江", 33],
["揭阳", 34],
["荣成", 34],
["连云港", 35],
["葫芦岛", 35],
["常熟", 36],
["东莞", 36],
["河源", 36],
["淮安", 36],
["泰州", 36],
["南宁", 37],
["营口", 37],
["惠州", 37],
["江阴", 37],
["蓬莱", 37],
["韶关", 38],
["嘉峪关", 38],
["广州", 38],
["延安", 38],
["太原", 39],
["清远", 39],
["中山", 39],
["昆明", 39],
["寿光", 40],
["盘锦", 40],
["长治", 41],
["深圳", 41],
["珠海", 42],
["宿迁", 43],
["咸阳", 43],
["铜川", 44],
["平度", 44],
["佛山", 44],
["海口", 44],
["江门", 45],
["章丘", 45],
["肇庆", 46],
["大连", 47],
["临汾", 47],
["吴江", 47],
["石嘴山", 49],
["沈阳", 50],
["苏州", 50],
["茂名", 50],
["嘉兴", 51],
["长春", 51],
["胶州", 52],
["银川", 52],
["张家港", 52],
["三门峡", 53],
["锦州", 54],
["南昌", 54],
["柳州", 54],
["三亚", 54],
["自贡", 56],
["吉林", 56],
["阳江", 57],
["泸州", 57],
["西宁", 57],
["宜宾", 58],
["呼和浩特", 58],
["成都", 58],
["大同", 58],
["镇江", 59],
["桂林", 59],
["张家界", 59],
["宜兴", 59],
["北海", 60],
["西安", 61],
["金坛", 62],
["东营", 62],
["牡丹江", 63],
["遵义", 63],
["绍兴", 63],
["扬州", 64],
["常州", 64],
["潍坊", 65],
["重庆", 66],
["台州", 67],
["南京", 67],
["滨州", 70],
["贵阳", 71],
["无锡", 71],
["本溪", 71],
["克拉玛依", 72],
["渭南", 72],
["马鞍山", 72],
["宝鸡", 72],
["焦作", 75],
["句容", 75],
["北京", 79],
["徐州", 79],
["衡水", 80],
["包头", 80],
["绵阳", 80],
["乌鲁木齐", 84],
["枣庄", 84],
["杭州", 84],
["淄博", 85],
["鞍山", 86],
["溧阳", 86],
["库尔勒", 86],
["安阳", 90],
["开封", 90],
["济南", 92],
["德阳", 93],
["温州", 95],
["九江", 96],
["邯郸", 98],
["临安", 99],
["兰州", 99],
["沧州", 100],
["临沂", 103],
["南充", 104],
["天津", 105],
["富阳", 106],
["泰安", 112],
["诸暨", 112],
["郑州", 113],
["哈尔滨", 114],
["聊城", 116],
["芜湖", 117],
["唐山", 119],
["平顶山", 119],
["邢台", 119],
["德州", 120],
["济宁", 120],
["荆州", 127],
["宜昌", 130],
["义乌", 132],
["丽水", 133],
["洛阳", 134],
["秦皇岛", 136],
["株洲", 143],
["石家庄", 147],
["莱芜", 148],
["常德", 152],
["保定", 153],
["湘潭", 154],
["金华", 157],
["岳阳", 169],
["长沙", 175],
["衢州", 177],
["廊坊", 193],
["菏泽", 194],
["合肥", 229],
["武汉", 273],
["大庆", 279],
]
geoCoordMap = {
"海门": [121.15, 31.89],
"鄂尔多斯": [109.781327, 39.608266],
"招远": [120.38, 37.35],
"舟山": [122.207216, 29.985295],
"齐齐哈尔": [123.97, 47.33],
"盐城": [120.13, 33.38],
"赤峰": [118.87, 42.28],
"青岛": [120.33, 36.07],
"乳山": [121.52, 36.89],
"金昌": [102.188043, 38.520089],
"泉州": [118.58, 24.93],
"莱西": [120.53, 36.86],
"日照": [119.46, 35.42],
"胶南": [119.97, 35.88],
"南通": [121.05, 32.08],
"拉萨": [91.11, 29.97],
"云浮": [112.02, 22.93],
"梅州": [116.1, 24.55],
"文登": [122.05, 37.2],
"上海": [121.48, 31.22],
"攀枝花": [101.718637, 26.582347],
"威海": [122.1, 37.5],
"承德": [117.93, 40.97],
"厦门": [118.1, 24.46],
"汕尾": [115.375279, 22.786211],
"潮州": [116.63, 23.68],
"丹东": [124.37, 40.13],
"太仓": [121.1, 31.45],
"曲靖": [103.79, 25.51],
"烟台": [121.39, 37.52],
"福州": [119.3, 26.08],
"瓦房店": [121.979603, 39.627114],
"即墨": [120.45, 36.38],
"抚顺": [123.97, 41.97],
"玉溪": [102.52, 24.35],
"张家口": [114.87, 40.82],
"阳泉": [113.57, 37.85],
"莱州": [119.942327, 37.177017],
"湖州": [120.1, 30.86],
"汕头": [116.69, 23.39],
"昆山": [120.95, 31.39],
"宁波": [121.56, 29.86],
"湛江": [110.359377, 21.270708],
"揭阳": [116.35, 23.55],
"荣成": [122.41, 37.16],
"连云港": [119.16, 34.59],
"葫芦岛": [120.836932, 40.711052],
"常熟": [120.74, 31.64],
"东莞": [113.75, 23.04],
"河源": [114.68, 23.73],
"淮安": [119.15, 33.5],
"泰州": [119.9, 32.49],
"南宁": [108.33, 22.84],
"营口": [122.18, 40.65],
"惠州": [114.4, 23.09],
"江阴": [120.26, 31.91],
"蓬莱": [120.75, 37.8],
"韶关": [113.62, 24.84],
"嘉峪关": [98.289152, 39.77313],
"广州": [113.23, 23.16],
"延安": [109.47, 36.6],
"太原": [112.53, 37.87],
"清远": [113.01, 23.7],
"中山": [113.38, 22.52],
"昆明": [102.73, 25.04],
"寿光": [118.73, 36.86],
"盘锦": [122.070714, 41.119997],
"长治": [113.08, 36.18],
"深圳": [114.07, 22.62],
"珠海": [113.52, 22.3],
"宿迁": [118.3, 33.96],
"咸阳": [108.72, 34.36],
"铜川": [109.11, 35.09],
"平度": [119.97, 36.77],
"佛山": [113.11, 23.05],
"海口": [110.35, 20.02],
"江门": [113.06, 22.61],
"章丘": [117.53, 36.72],
"肇庆": [112.44, 23.05],
"大连": [121.62, 38.92],
"临汾": [111.5, 36.08],
"吴江": [120.63, 31.16],
"石嘴山": [106.39, 39.04],
"沈阳": [123.38, 41.8],
"苏州": [120.62, 31.32],
"茂名": [110.88, 21.68],
"嘉兴": [120.76, 30.77],
"长春": [125.35, 43.88],
"胶州": [120.03336, 36.264622],
"银川": [106.27, 38.47],
"张家港": [120.555821, 31.875428],
"三门峡": [111.19, 34.76],
"锦州": [121.15, 41.13],
"南昌": [115.89, 28.68],
"柳州": [109.4, 24.33],
"三亚": [109.511909, 18.252847],
"自贡": [104.778442, 29.33903],
"吉林": [126.57, 43.87],
"阳江": [111.95, 21.85],
"泸州": [105.39, 28.91],
"西宁": [101.74, 36.56],
"宜宾": [104.56, 29.77],
"呼和浩特": [111.65, 40.82],
"成都": [104.06, 30.67],
"大同": [113.3, 40.12],
"镇江": [119.44, 32.2],
"桂林": [110.28, 25.29],
"张家界": [110.479191, 29.117096],
"宜兴": [119.82, 31.36],
"北海": [109.12, 21.49],
"西安": [108.95, 34.27],
"金坛": [119.56, 31.74],
"东营": [118.49, 37.46],
"牡丹江": [129.58, 44.6],
"遵义": [106.9, 27.7],
"绍兴": [120.58, 30.01],
"扬州": [119.42, 32.39],
"常州": [119.95, 31.79],
"潍坊": [119.1, 36.62],
"重庆": [106.54, 29.59],
"台州": [121.420757, 28.656386],
"南京": [118.78, 32.04],
"滨州": [118.03, 37.36],
"贵阳": [106.71, 26.57],
"无锡": [120.29, 31.59],
"本溪": [123.73, 41.3],
"克拉玛依": [84.77, 45.59],
"渭南": [109.5, 34.52],
"马鞍山": [118.48, 31.56],
"宝鸡": [107.15, 34.38],
"焦作": [113.21, 35.24],
"句容": [119.16, 31.95],
"北京": [116.46, 39.92],
"徐州": [117.2, 34.26],
"衡水": [115.72, 37.72],
"包头": [110, 40.58],
"绵阳": [104.73, 31.48],
"乌鲁木齐": [87.68, 43.77],
"枣庄": [117.57, 34.86],
"杭州": [120.19, 30.26],
"淄博": [118.05, 36.78],
"鞍山": [122.85, 41.12],
"溧阳": [119.48, 31.43],
"库尔勒": [86.06, 41.68],
"安阳": [114.35, 36.1],
"开封": [114.35, 34.79],
"济南": [117, 36.65],
"德阳": [104.37, 31.13],
"温州": [120.65, 28.01],
"九江": [115.97, 29.71],
"邯郸": [114.47, 36.6],
"临安": [119.72, 30.23],
"兰州": [103.73, 36.03],
"沧州": [116.83, 38.33],
"临沂": [118.35, 35.05],
"南充": [106.110698, 30.837793],
"天津": [117.2, 39.13],
"富阳": [119.95, 30.07],
"泰安": [117.13, 36.18],
"诸暨": [120.23, 29.71],
"郑州": [113.65, 34.76],
"哈尔滨": [126.63, 45.75],
"聊城": [115.97, 36.45],
"芜湖": [118.38, 31.33],
"唐山": [118.02, 39.63],
"平顶山": [113.29, 33.75],
"邢台": [114.48, 37.05],
"德州": [116.29, 37.45],
"济宁": [116.59, 35.38],
"荆州": [112.239741, 30.335165],
"宜昌": [111.3, 30.7],
"义乌": [120.06, 29.32],
"丽水": [119.92, 28.45],
"洛阳": [112.44, 34.7],
"秦皇岛": [119.57, 39.95],
"株洲": [113.16, 27.83],
"石家庄": [114.48, 38.03],
"莱芜": [117.67, 36.19],
"常德": [111.69, 29.05],
"保定": [115.48, 38.85],
"湘潭": [112.91, 27.87],
"金华": [119.64, 29.12],
"岳阳": [113.09, 29.37],
"长沙": [113, 28.21],
"衢州": [118.88, 28.97],
"廊坊": [116.7, 39.53],
"菏泽": [115.480656, 35.23375],
"合肥": [117.27, 31.86],
"武汉": [114.31, 30.52],
"大庆": [125.03, 46.58],
}
def convert_data():
res = []
for i in range(len(data)):
geo_coord = geoCoordMap[data[i][0]]
geo_coord.append(data[i][1])
res.append([data[i][0], geo_coord])
return res
(
BMap(init_opts=opts.InitOpts(width="1200px", height="800px"))
.add(
type_="effectScatter",
series_name="pm2.5",
data_pair=convert_data(),
symbol_size=10,
effect_opts=opts.EffectOpts(),
label_opts=opts.LabelOpts(formatter="{b}", position="right", is_show=False),
itemstyle_opts=opts.ItemStyleOpts(color="purple"),
)
.add_schema(
baidu_ak="FAKE_AK",
center=[104.114129, 37.550339],
zoom=5,
is_roam=True,
map_style={
"styleJson": [
{
"featureType": "water",
"elementType": "all",
"stylers": {"color": "#044161"},
},
{
"featureType": "land",
"elementType": "all",
"stylers": {"color": "#004981"},
},
{
"featureType": "boundary",
"elementType": "geometry",
"stylers": {"color": "#064f85"},
},
{
"featureType": "railway",
"elementType": "all",
"stylers": {"visibility": "off"},
},
{
"featureType": "highway",
"elementType": "geometry",
"stylers": {"color": "#004981"},
},
{
"featureType": "highway",
"elementType": "geometry.fill",
"stylers": {"color": "#005b96", "lightness": 1},
},
{
"featureType": "highway",
"elementType": "labels",
"stylers": {"visibility": "off"},
},
{
"featureType": "arterial",
"elementType": "geometry",
"stylers": {"color": "#004981"},
},
{
"featureType": "arterial",
"elementType": "geometry.fill",
"stylers": {"color": "#00508b"},
},
{
"featureType": "poi",
"elementType": "all",
"stylers": {"visibility": "off"},
},
{
"featureType": "green",
"elementType": "all",
"stylers": {"color": "#056197", "visibility": "off"},
},
{
"featureType": "subway",
"elementType": "all",
"stylers": {"visibility": "off"},
},
{
"featureType": "manmade",
"elementType": "all",
"stylers": {"visibility": "off"},
},
{
"featureType": "local",
"elementType": "all",
"stylers": {"visibility": "off"},
},
{
"featureType": "arterial",
"elementType": "labels",
"stylers": {"visibility": "off"},
},
{
"featureType": "boundary",
"elementType": "geometry.fill",
"stylers": {"color": "#029fd4"},
},
{
"featureType": "building",
"elementType": "all",
"stylers": {"color": "#1a5787"},
},
{
"featureType": "label",
"elementType": "all",
"stylers": {"visibility": "off"},
},
]
},
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="全国主要城市空气质量",
subtitle="data from PM25.in",
subtitle_link="http://www.pm25.in",
pos_left="center",
title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
),
tooltip_opts=opts.TooltipOpts(trigger="item"),
)
.render("air_quality_baidu_map.html")
)
<iframe width="100%" height="800px" src="BMap/air_quality_baidu_map.html"></iframe>