Пример #1
0
def get_eventbmap(pos) -> BMap:
    #[(lo,la),(lo,la)]这种格式即可
    BAIDU_AK = "HOTBRAfU1jGcQKHBX15ucKsfZO722eyN"
    center = (117.20, 39.12)
    c = BMap()
    c.add_schema(
        baidu_ak=BAIDU_AK,
        center=[117.20, 39.12],
        zoom=10,
        is_roam=False,
    )
    sequence = []
    for i in range(len(pos)):
        c.add_coordinate(str(i), pos[i][0], pos[i][1])  #[(posindex,lo,la)]
        sequence.append((str(i), 0.1))  #这里名字和pos要对应
    c.add(
        "投诉坐标",  #系列名称
        sequence,
        type_="scatter",  #"heatmap" 可以切换显示的类型热力图或散点图
        label_opts=opts.LabelOpts(formatter="{b}"),
        symbol_size=5)
    c.set_series_opts(effect_opts=opts.EffectOpts(is_show=True),
                      label_opts=opts.LabelOpts(is_show=False))
    c.add_control_panel(
        scale_control_opts=opts.BMapScaleControlOpts(),
        navigation_control_opts=opts.BMapNavigationControlOpts(),
        maptype_control_opts=opts.BMapTypeControlOpts())
    #c.set_global_opts(visualmap_opts=opts.VisualMapOpts())
    return c
Пример #2
0
def test_bmap():
    b = BMap()
    b.add_schema(baidu_ak='iMplFNfYyAf4e7EleegtObtcOZdliriG',center=[116.395645,39.929986],zoom=9)
    
    # 定义坐标对应的名称,添加到坐标库中 add_coordinate(name, lng, lat)
    engine = create_engine('mysql+pymysql://root:123456@localhost:3306/house')

    # 查询语句,选出employee表中的所有数据
    sql = '''select * from 4sstore_beijing;'''
    # read_sql_query的两个参数: sql语句, 数据库连接
    df = pd.read_sql_query(sql, engine)
    data_pair=[]
    for index,row in df.iterrows():
        b.add_coordinate(row['name'], float(row['lng']),float(row['lat']))
        data_pair.append((row['name'], None))
       
    # Geo 图类型,有 scatter, effectScatter, heatmap, lines 4 种,建议使用
    # from pyecharts.globals import GeoType
    # GeoType.GeoType.EFFECT_SCATTER,GeoType.HEATMAP,GeoType.LINES
    
     # 将数据添加到地图上
    b.add('bmap', data_pair, "scatter" ,symbol_size=5)
    # 设置样式
    b.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    b.set_global_opts(
            visualmap_opts=opts.VisualMapOpts(is_piecewise=False),
            title_opts=opts.TitleOpts(title="北京4s店分布")
            )
    return b
Пример #3
0
def bdapi():
    friends = bot.friends(update=True)
    dd1 = defaultdict(int)  # 如果调用字典的key不存在的时候,默认value为0
    for hy in friends:
        # print(hy.city)
        if '\u9fa5' >= hy.city >= '\u4e00':  # 如果省份是汉字就保留,否则就舍弃,因为在中国地图上也不会显示
            city = hy.city + "市"  # 必须要加,不加会名字识别不到
            dd1[city] += 1  # 每次进来如果key相同则进行累加
    sj = [list(a) for a in zip(dd1.keys(), dd1.values())]
    # 地图部分
    BD_AK = "xC9wlIKWG31GZwZ87jFBGO6RycDZf7Ue"
    MR_ZX = [108.9550557300, 34.3247934100]  # 定义地图的默认中心位置
    m3 = BMap()
    # 进去的地图中心点 可以在网址查询 http://www.gpsspg.com/maps.htm 但是这里有一点需要注意,地图给出来的维度和经度,这里的顺序是经纬度,需要调整下
    m3.add_schema(
        baidu_ak=BD_AK,
        center=MR_ZX,
        zoom=8  # 缩放程度
    )
    m3.add(
        series_name="",
        data_pair=sj,
        label_opts=opts.LabelOpts("{b}"),
    )
    m3.set_global_opts(
        title_opts=opts.TitleOpts("百度API展示微信好友分布"),
        visualmap_opts=opts.VisualMapOpts(
            is_piecewise=True, max_=180,
            pos_bottom=40),  # 最后一个是设置提示距离底端的距离,防止百度的log将数据挡住
    )
    m3.render("./kshwy/map_bdapi.html")
    webbrowser.open("E:\study\kshwy\map_bdapi.html", autoraise=True)
Пример #4
0
def get_bmap(pos) -> BMap:
    BAIDU_AK = "HOTBRAfU1jGcQKHBX15ucKsfZO722eyN"
    #center = (117.20, 39.12)
    c = BMap()
    c.add_schema(baidu_ak=BAIDU_AK,
                 center=[117.20, 39.12],
                 zoom=10,
                 is_roam=False)
    sequence = []
    for i in range(len(pos)):
        #print(pos[i])
        c.add_coordinate(pos[i][0], pos[i][2], pos[i][1])
        sequence.append((str(i), 5))
    c.add(
        "投诉坐标",  #系列名称
        sequence,
        type_="scatter",  #"heatmap" 可以切换显示的类型热力图或散点图
        label_opts=opts.LabelOpts(formatter="{b}"),
        symbol_size=4  #scatter大小
    )
    #.add("bmap",
    #[{"coord":[117.21, 39.13],"sim":10},{"coord":[117.20, 39.13],"sim":20},{"coord":[117.21, 39.12],"sim":5}],
    #[list(z) for z in zip(Faker.provinces, Faker.values())],#zip将迭代对像打包成元组最后的结果是[['浙江',v1],['广东',v2]]
    #[[117.21, 39.13],[117.20, 39.12],[117.22, 39.10],[117.25, 39.11],[117.19, 39.02],[117.20, 39.12]],
    #type_="heatmap",
    #label_opts=opts.LabelOpts(formatter="{b}"))
    c.set_series_opts(
        effect_opts=opts.EffectOpts(is_show=True),
        label_opts=opts.LabelOpts(is_show=False),
    )
    c.add_control_panel(
        scale_control_opts=opts.BMapScaleControlOpts(),
        navigation_control_opts=opts.BMapNavigationControlOpts(),
        maptype_control_opts=opts.BMapTypeControlOpts())
    #copyright_control_opts=opts.BMapCopyrightTypeOpts(copyright_="我的")
    #geo_location_control_opts=opts.BMapGeoLocationControlOpts()
    #overview_map_opts=opts.BMapOverviewMapControlOpts(is_open=True),
    #c.set_global_opts(visualmap_opts=opts.VisualMapOpts(pos_left="right"))
    return c
Пример #5
0
                 })
    coord = prepare_coord(load_street_pickle())
    for s, (long, lat) in coord.items():
        m.add_coordinate(s, long, lat)
    speed, n_slice = read_speed()
    # Match T-GCN expand 3 times... (don't know why)
    idx_map = list(range(0, 114 - 12 - 3 - 1)) + list(range(114, 143 - 12 - 3))
    pred_speed, n_slice1 = read_pred_speed()
    assert len(idx_map) == n_slice1
    m.add(series_name="actual",
          type_="heatmap",
          data_pair=get_data_pair(speed, 0)).add(
              series_name="predict",
              type_="heatmap",
              data_pair=get_data_pair(pred_speed, 0),
          ).add_control_panel(
              copyright_control_opts=opts.BMapCopyrightTypeOpts(position=3),
              maptype_control_opts=opts.BMapTypeControlOpts(
                  type_=BMapType.MAPTYPE_CONTROL_DROPDOWN),
              scale_control_opts=opts.BMapScaleControlOpts(),
              overview_map_opts=opts.BMapOverviewMapControlOpts(is_open=True),
              navigation_control_opts=opts.BMapNavigationControlOpts(),
              geo_location_control_opts=opts.BMapGeoLocationControlOpts(),
          ).set_global_opts(
              visualmap_opts=opts.VisualMapOpts(
                  min_=0,
                  max_=60,
                  range_color=['blue', 'blue', 'green', 'yellow', 'red']),
              title_opts=opts.TitleOpts(title="Traffic Status of Xi'An"))
    m.render('test.html')
Пример #6
0
from pyecharts.charts import BMap
from pyecharts import options as opts

from parse_xml import get_coordinate_list
baidu_log_offset = 0.010598
baidu_lat_offset = 0.00203
# 不习惯链式调用的开发者依旧可以单独调用方法
bmap = BMap(init_opts=opts.InitOpts(width='2000px', height='1000px'))
bmap.add_schema(baidu_ak='GvrsNgKWZokjb1yG7gOphfmHFsrBn8AL',
                center=[113.975994, 22.59844],
                zoom=16)
coordinate_list = get_coordinate_list('build/my-data.xml')
bunch_points = [[i[2], 1] for i in coordinate_list]
for i, v in enumerate(coordinate_list):
    bmap.add_coordinate(v[2], baidu_log_offset + v[0], baidu_lat_offset + v[1])
bmap.add('shenzhen', bunch_points, label_opts=opts.LabelOpts(is_show=False))

bmap.set_global_opts(legend_opts=opts.LegendOpts(is_show=False))
bmap.render()
Пример #7
0
def plot_map(point_data, path):
    point_data = point_data[point_data['remarks'] != 'no_result']
    data = point_data[['lat_BaiDu', 'long_BaiDu', 'behavior', 'label']].copy()
    data.columns = ['lat', 'lon', 'behavior', 'label']

    # 地图中心
    map_center = [data['lon'].mean(), data['lat'].mean()]
    # 初始化百度地图
    bd_map = BMap(init_opts=opts.InitOpts(width="1920px", height="1080px"))
    bd_map.add_schema(baidu_ak=KEY,
                      center=map_center,
                      zoom=8, is_roam=True,
                      map_style=None,
                      )

    color = ['red', 'green', 'blue', 'yellow', 'gold', 'cyan', 'magenta', 'purple']

    behavior_list = data.drop_duplicates(['behavior'])['behavior'].copy()  # 剔除重复的数据文件路径
    i = 0
    for behavior in behavior_list:
        behavior_data = data[data['behavior'] == behavior]
        # behavior_color = color_choice()  # 从color列表中随机抽取一个颜色
        behavior_color = color[i]
        i = i + 1

        map_data = []
        # 利用BMap.add_coordinate 将坐标值赋值给一个地点名称,并增加近BMap对象地理信息中
        for j in range(len(behavior_data)):
            name = behavior + str(j)
            longitude = behavior_data['lon'].iloc[j]
            latitude = behavior_data['lat'].iloc[j]

            bd_map.add_coordinate(name=name,
                                  longitude=longitude,
                                  latitude=latitude
                                  )
            map_data.append((name, 1))

        # 将地点增加到百度地图
        bd_map = bd_map.add(
            series_name=behavior,
            type_="scatter",
            data_pair=map_data,
            symbol_size=20,
            effect_opts=opts.EffectOpts(),
            label_opts=opts.LabelOpts(formatter="{b}", position="left", is_show=False),
            itemstyle_opts=opts.ItemStyleOpts(color=behavior_color),
        )

    # 显示聚类分析的结果
    label_list = data.drop_duplicates(['label'])['label'].copy()

    map_data = []

    for label in label_list:
        if label == -1:
            continue
        else:
            label_data = data[data['label'] == label]

            # 将聚类点命名增加至地图地名空间

            name = '高风险路段_' + str(label)

            bd_map.add_coordinate(name=name,
                                  longitude=label_data['lon'].mean(),
                                  latitude=label_data['lat'].mean()
                                  )
            map_data.append((name, len(label_data)))

    # 将地点增加到百度地图
    bd_map = bd_map.add(
        series_name='高风险行为频发路段',
        type_="scatter",
        data_pair=map_data,
        symbol_size=50,
        # blur_size=500,
        is_selected=True,  # 是否选中图例
        effect_opts=opts.EffectOpts(),
        label_opts=opts.LabelOpts(formatter="{b}", position="right", is_show=False),
        itemstyle_opts=opts.ItemStyleOpts(color='rgba(138,43,226, 0.8)'),
    )

    # 将绘图结果输出至网页文件
    bd_map = bd_map.add_control_panel(maptype_control_opts=opts.BMapTypeControlOpts(position=1),
                                      )

    # 设置图例
    bd_map = bd_map.set_global_opts(legend_opts=opts.LegendOpts(is_show=True,
                                                                item_height=50,
                                                                ),
                                    title_opts=opts.TitleOpts(title="新奥危险货物运输高风险路段聚类分析图"),
                                    )

    bd_map = bd_map.render(path)

    # 用浏览器打开文件
    webbrowser.open(path)
    return bd_map
Пример #8
0
def plot_scatter_map(route_data, path):
    route_data = route_data[route_data['speed'] > 10.0]
    data = route_data[['lat_BaiDu', 'long_BaiDu', 'behavior', 'label']].copy()
    data.columns = ['lat', 'lon', 'behavior', 'label']

    # 地图中心
    map_center = [data['lon'].mean(), data['lat'].mean()]
    # 初始化百度地图
    bd_map = BMap(init_opts=opts.InitOpts(width="1920px", height="1080px"))
    bd_map.add_schema(
        baidu_ak=KEY,
        center=map_center,
        zoom=8,
        is_roam=True,
        map_style=None,
    )

    color = [
        'red', 'green', 'blue', 'yellow', 'gold', 'cyan', 'magenta', 'purple'
    ]

    # 将数据分为异常路段和正常路段
    normal_route = data[data['label'] <= -0.0].copy()
    risk_route = data[data['label'] > 0.0].copy()

    # 绘制正常路段散点图,颜色为绿色
    normal_map_data = []
    # 利用BMap.add_coordinate 将坐标值赋值给一个地点名称,并增加近BMap对象地理信息中
    for i in range(len(normal_route)):
        name = 'low_risk' + str(i)
        longitude = normal_route['lon'].iloc[i]
        latitude = normal_route['lat'].iloc[i]

        bd_map.add_coordinate(name=name,
                              longitude=longitude,
                              latitude=latitude)
        normal_map_data.append((name, -1))

    # 绘制高风险路段散点图,颜色为红色
    risk_map_data = []
    # 利用BMap.add_coordinate 将坐标值赋值给一个地点名称,并增加近BMap对象地理信息中
    for j in range(len(risk_route)):
        name = 'high_risk' + str(j)
        longitude = risk_route['lon'].iloc[j]
        latitude = risk_route['lat'].iloc[j]

        bd_map.add_coordinate(name=name,
                              longitude=longitude,
                              latitude=latitude)
        risk_map_data.append((name, -1))

    # 将低风险轨迹散点标识在百度地图上
    bd_map = bd_map.add(
        series_name='低风险路段',
        type_="scatter",
        data_pair=normal_map_data,
        symbol_size=10,
        effect_opts=opts.EffectOpts(),
        label_opts=opts.LabelOpts(formatter="{b}",
                                  position="left",
                                  is_show=False),
        itemstyle_opts=opts.ItemStyleOpts(color='green'),
    )

    # 将高风险轨迹散点标识在百度地图上
    bd_map = bd_map.add(
        series_name='高风险路段',
        type_="scatter",
        data_pair=risk_map_data,
        symbol_size=20,
        effect_opts=opts.EffectOpts(),
        label_opts=opts.LabelOpts(formatter="{b}",
                                  position="left",
                                  is_show=False),
        itemstyle_opts=opts.ItemStyleOpts(color='red'),
    )

    # 将绘图结果输出至网页文件
    bd_map = bd_map.add_control_panel(
        maptype_control_opts=opts.BMapTypeControlOpts(position=1), )
    # 设置图例
    bd_map = bd_map.set_global_opts(
        legend_opts=opts.LegendOpts(
            is_show=True,
            item_height=50,
        ),
        title_opts=opts.TitleOpts(title="新奥危险货物运输高风险路段聚类分析图"),
    )
    # 将地图加载到网页
    bd_map = bd_map.render(path)

    # 用浏览器打开文件
    webbrowser.open(path)
    return bd_map
Пример #9
0
    #     series_name='低风险路段',
    #     type_="scatter",
    #     data_pair=normal_map_data,
    #     symbol_size=10,
    #     effect_opts=opts.EffectOpts(),
    #     label_opts=opts.LabelOpts(formatter="{b}", position="left", is_show=False),
    #     itemstyle_opts=opts.ItemStyleOpts(color='green'),
    # )

    # 将高风险轨迹散点标识在百度地图上
    bd_map = bd_map.add(
        series_name='高风险路段',
        type_="scatter",
        data_pair=risk_map_data,
        symbol_size=20,
        effect_opts=opts.EffectOpts(),
        label_opts=opts.LabelOpts(formatter="{b}",
                                  position="left",
                                  is_show=False),
        itemstyle_opts=opts.ItemStyleOpts(color='red'),
    )

    # 将低风险路线标识在百度地图上
    bd_map = bd_map.add(
        series_name='低风险路段',
        type_="lines",
        is_polyline=True,
        data_pair=all_map_data,
        linestyle_opts=opts.LineStyleOpts(opacity=0.8, width=5),
        effect_opts=opts.EffectOpts(),
        label_opts=opts.LabelOpts(formatter="{b}",
Пример #10
0
output = 'json'
ak = 'Z2hzbMkqq4hgAS0IPHgRYPoRfjP9QBee'
url = 'http://api.map.baidu.com/place/v2/search?q=华中科技大学食堂&region=武汉&output=' + output + '&ak=' + ak
r = requests.get(url)
r_js = r.json()
for i in range(0, 9):
    names = r_js['results'][i]['name']
    lng_ = r_js['results'][i]['location']['lng']
    lat_ = r_js['results'][i]['location']['lat']
    print(names, lng_, lat_)

c = BMap()
c.width = "1000px"
c.height = "800px"
c.add_schema(baidu_ak='Z2hzbMkqq4hgAS0IPHgRYPoRfjP9QBee',
             center=[114.421214, 30.519139],
             zoom=17)
for i in range(0, 9):
    c.add_coordinate(r_js['results'][i]['name'],
                     r_js['results'][i]['location']['lng'],
                     r_js['results'][i]['location']['lat'])
    c.add("华中科技大学食堂", [(r_js['results'][i]['name'], "#404a59")],
          color="#404a59")
c.set_global_opts(title_opts=opts.TitleOpts(title="BMap-基本示例"),
                  visualmap_opts=opts.VisualMapOpts(is_piecewise=True))
c.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
c.render()
'''driver = webdriver.Chrome()
driver.get("F:///pyecharts/untitled/html/road.html")
driver.get("http://127.0.0.1:8848/untitled/road.html")'''
Пример #11
0
def route_plot(data, map_center):
    # 初始化百度地图
    bd_map = BMap(init_opts=opts.InitOpts(width="1920px", height="1080px"))
    bd_map.add_schema(
        baidu_ak=KEY,
        center=map_center,
        zoom=10,
        is_roam=True,
        map_style={
            "styleJson": [{
                "featureType": "estatelabel",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#8d694eff"
                }
            }, {
                "featureType": "restaurantlabel",
                "elementType": "labels",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "restaurantlabel",
                "elementType": "labels.icon",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "lifeservicelabel",
                "elementType": "labels",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "lifeservicelabel",
                "elementType": "labels.icon",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "transportationlabel",
                "elementType": "labels.icon",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "transportationlabel",
                "elementType": "labels",
                "stylers": {
                    "visibility": "on"
                }
            }, {
                "featureType": "financelabel",
                "elementType": "labels.icon",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "financelabel",
                "elementType": "labels",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "land",
                "elementType": "geometry",
                "stylers": {
                    "color": "#ffffffff"
                }
            }, {
                "featureType": "building",
                "elementType": "geometry.topfill",
                "stylers": {
                    "color": "#e7dfd6ff"
                }
            }, {
                "featureType": "building",
                "elementType": "geometry.sidefill",
                "stylers": {
                    "color": "#f4ebe2ff"
                }
            }, {
                "featureType": "building",
                "elementType": "geometry.stroke",
                "stylers": {
                    "color": "#b9a797ff"
                }
            }, {
                "featureType": "estatelabel",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#ebe1d8ff"
                }
            }, {
                "featureType": "estatelabel",
                "elementType": "labels.icon",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "estatelabel",
                "elementType": "labels.text",
                "stylers": {
                    "fontsize": "28"
                }
            }, {
                "featureType": "manmade",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#72533aff"
                }
            }, {
                "featureType": "manmade",
                "elementType": "geometry",
                "stylers": {
                    "color": "#ecececff"
                }
            }, {
                "featureType": "manmade",
                "elementType": "labels.text",
                "stylers": {
                    "fontsize": "36"
                }
            }, {
                "featureType": "manmade",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#b6997fff"
                }
            }, {
                "featureType": "green",
                "elementType": "geometry",
                "stylers": {
                    "color": "#ecececff"
                }
            }, {
                "featureType": "education",
                "elementType": "geometry",
                "stylers": {
                    "color": "#ecececff"
                }
            }, {
                "featureType": "medical",
                "elementType": "geometry",
                "stylers": {
                    "color": "#ecececff"
                }
            }, {
                "featureType": "scenicspots",
                "elementType": "geometry",
                "stylers": {
                    "color": "#ecececff"
                }
            }, {
                "featureType": "entertainment",
                "elementType": "geometry",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "estate",
                "elementType": "geometry",
                "stylers": {
                    "color": "#ecececff"
                }
            }, {
                "featureType": "shopping",
                "elementType": "geometry",
                "stylers": {
                    "visibility": "on",
                    "color": "#ecececff"
                }
            }, {
                "featureType": "transportation",
                "elementType": "geometry",
                "stylers": {
                    "color": "#ecececff"
                }
            }, {
                "featureType": "transportation",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#72533aff"
                }
            }, {
                "featureType": "transportation",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#b6997fff"
                }
            }, {
                "featureType": "transportation",
                "elementType": "labels.text",
                "stylers": {
                    "fontsize": "36"
                }
            }, {
                "featureType": "medical",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#72533aff"
                }
            }, {
                "featureType": "medical",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#b6997fff"
                }
            }, {
                "featureType": "medical",
                "elementType": "labels.text",
                "stylers": {
                    "fontsize": "36"
                }
            }, {
                "featureType": "education",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#72533aff"
                }
            }, {
                "featureType": "education",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#b6997fff"
                }
            }, {
                "featureType": "education",
                "elementType": "labels.text",
                "stylers": {
                    "fontsize": "36"
                }
            }, {
                "featureType": "carservicelabel",
                "elementType": "labels",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "carservicelabel",
                "elementType": "labels.icon",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "shoppinglabel",
                "elementType": "labels.icon",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "hotellabel",
                "elementType": "labels.icon",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "governmentlabel",
                "elementType": "labels.icon",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "companylabel",
                "elementType": "labels.icon",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "businesstowerlabel",
                "elementType": "labels.icon",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "entertainmentlabel",
                "elementType": "labels",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "entertainmentlabel",
                "elementType": "labels.icon",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "medicallabel",
                "elementType": "labels.icon",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "educationlabel",
                "elementType": "labels.icon",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "scenicspotslabel",
                "elementType": "labels.icon",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "airportlabel",
                "elementType": "labels.icon",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "airportlabel",
                "elementType": "labels.text",
                "stylers": {
                    "fontsize": "36"
                }
            }, {
                "featureType": "airportlabel",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#72533aff"
                }
            }, {
                "featureType": "airportlabel",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#b6997fff"
                }
            }, {
                "featureType": "scenicspotslabel",
                "elementType": "labels.text",
                "stylers": {
                    "fontsize": "28"
                }
            }, {
                "featureType": "scenicspotslabel",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#4a4a4aff"
                }
            }, {
                "featureType": "scenicspotslabel",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#ffffffff"
                }
            }, {
                "featureType": "educationlabel",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#8d694eff"
                }
            }, {
                "featureType": "educationlabel",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#ebe1d8ff"
                }
            }, {
                "featureType": "educationlabel",
                "elementType": "labels.text",
                "stylers": {
                    "fontsize": "26"
                }
            }, {
                "featureType": "medicallabel",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#8d694eff"
                }
            }, {
                "featureType": "medicallabel",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#ebe1d8ff"
                }
            }, {
                "featureType": "medicallabel",
                "elementType": "labels.text",
                "stylers": {
                    "fontsize": "24"
                }
            }, {
                "featureType": "businesstowerlabel",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#ebe1d8ff"
                }
            }, {
                "featureType": "businesstowerlabel",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#8d694eff"
                }
            }, {
                "featureType": "businesstowerlabel",
                "elementType": "labels.text",
                "stylers": {
                    "fontsize": "24"
                }
            }, {
                "featureType": "companylabel",
                "elementType": "labels",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "hotellabel",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#8d694eff"
                }
            }, {
                "featureType": "hotellabel",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#ebe1d8ff"
                }
            }, {
                "featureType": "hotellabel",
                "elementType": "labels.text",
                "stylers": {
                    "fontsize": "24"
                }
            }, {
                "featureType": "shoppinglabel",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#8d694eff"
                }
            }, {
                "featureType": "shoppinglabel",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#ebe1d8ff"
                }
            }, {
                "featureType": "transportationlabel",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#4a4a4aff"
                }
            }, {
                "featureType": "transportationlabel",
                "elementType": "labels.text",
                "stylers": {
                    "fontsize": "24"
                }
            }, {
                "featureType": "scenicspots",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#72533aff"
                }
            }, {
                "featureType": "scenicspots",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#b6997fff"
                }
            }, {
                "featureType": "scenicspots",
                "elementType": "labels.text",
                "stylers": {
                    "fontsize": "36"
                }
            }, {
                "featureType": "governmentlabel",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#4a4a4aff"
                }
            }, {
                "featureType": "scenicspotslabel",
                "elementType": "labels",
                "stylers": {
                    "visibility": "off"
                }
            }, {
                "featureType": "district",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#ffffffff"
                }
            }, {
                "featureType": "district",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#72533aff",
                    "weight": "3.5"
                }
            }, {
                "featureType": "town",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#72533aff",
                    "weight": "3"
                }
            }, {
                "featureType": "town",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#ffffffff"
                }
            }, {
                "featureType": "village",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#ffffffff",
                    "weight": "2.5"
                }
            }, {
                "featureType": "village",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#72533aff",
                    "weight": "40"
                }
            }, {
                "featureType": "village",
                "elementType": "labels.text",
                "stylers": {
                    "fontsize": "20"
                }
            }, {
                "featureType": "highway",
                "elementType": "geometry.fill",
                "stylers": {
                    "color": "#fdf0daff"
                }
            }, {
                "featureType": "highway",
                "elementType": "geometry.stroke",
                "stylers": {
                    "color": "#ffd993ff"
                }
            }, {
                "featureType": "highway",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#000000ff"
                }
            }, {
                "featureType": "highway",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#ffffffff"
                }
            }, {
                "featureType": "nationalway",
                "elementType": "geometry.fill",
                "stylers": {
                    "color": "#fdf0daff"
                }
            }, {
                "featureType": "nationalway",
                "elementType": "geometry.stroke",
                "stylers": {
                    "color": "#ffd993ff"
                }
            }, {
                "featureType": "nationalway",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#000000ff"
                }
            }, {
                "featureType": "nationalway",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#ffffffff"
                }
            }, {
                "featureType": "provincialway",
                "elementType": "geometry.stroke",
                "stylers": {
                    "color": "#ffd993ff"
                }
            }, {
                "featureType": "provincialway",
                "elementType": "geometry.fill",
                "stylers": {
                    "color": "#fdf0daff"
                }
            }, {
                "featureType": "provincialway",
                "elementType": "labels.text.fill",
                "stylers": {
                    "color": "#000000ff"
                }
            }, {
                "featureType": "provincialway",
                "elementType": "labels.text.stroke",
                "stylers": {
                    "color": "#ffffffff"
                }
            }, {
                "featureType": "subway",
                "elementType": "geometry.fill",
                "stylers": {
                    "color": "#f5a117ff"
                }
            }, {
                "featureType": "manmade",
                "elementType": "labels",
                "stylers": {
                    "visibility": "on"
                }
            }]
        },
    )
    # 剔除重复的数据文件路径
    truck_list = data.drop_duplicates(['truck_license'
                                       ])['truck_license'].to_list()
    # 将数据根据时间间隔大于10分钟的规则进行分割,保存进list

    # 将每一段行程数据保存进一个列表
    trip_list = []

    for truck in truck_list:
        print(truck)
        truck_temp = data[data['truck_license'] == truck].copy()

        # 剔除车辆静止时的数据
        truck_temp = truck_temp[truck_temp['distance_gps'] > 20].copy()

        # 将行程数据按照时间序列排序
        truck_temp = truck_temp.sort_values(by='time')

        # 通过相邻GPS坐标计算的行程距离
        truck_temp = gps_distance(earth_r=EARTH_REDIUS, data=truck_temp)

        # 以间距大于100米采样
        # truck_temp = truck_temp[truck_temp['distance_gps'] > 100].copy()
        truck_temp = gps_distance(earth_r=EARTH_REDIUS, data=truck_temp)

        # 重新计算提出零速度后的相邻数据行之间的时间间隔
        truck_temp = driving_time(truck_temp)

        # 获取行程间隔数据的索引列表,初定为间距2km以上时认为是分隔的路线
        time_cut_index = truck_temp[truck_temp['distance_gps'] > 2000].index
        index_bp = truck_temp.index[0]
        index_ep = truck_temp.index[len(truck_temp) - 1]

        if len(time_cut_index) > 1:

            for i in range(len(time_cut_index)):
                if i == 0:
                    trip_temp_data = truck_temp.loc[index_bp:time_cut_index[i]]
                    trip_temp_data = trip_temp_data.drop(
                        index=[time_cut_index[i]])
                else:
                    trip_temp_data = truck_temp.loc[
                        time_cut_index[i - 1]:time_cut_index[i]]
                    trip_temp_data = trip_temp_data.drop(
                        index=[time_cut_index[i]])

                # 只有具备一定长度的路线才被绘制,初定为至少包括5个轨迹坐标点
                if len(trip_temp_data) > 50:
                    bd_map = bd_map.add(
                        series_name='低风险路段' + truck + str(i),
                        type_="lines",
                        is_polyline=True,
                        data_pair=[
                            route_to_baidu_line(trip_temp_data, color='green')
                        ],
                        linestyle_opts=opts.LineStyleOpts(opacity=0.8,
                                                          width=5),
                        effect_opts=opts.EffectOpts(),
                        label_opts=opts.LabelOpts(formatter="{b}",
                                                  position="left",
                                                  is_show=False),
                        itemstyle_opts=opts.ItemStyleOpts(color='green'),
                        # 如果不是最新版本的话可以注释下面的参数(效果差距不大)
                        progressive=200,
                        progressive_threshold=500,
                    )
                    print('低风险路段_' + truck + '_', str(i))
                    print(route_to_baidu_line(trip_temp_data, color='green'))

    # 设置图例
    bd_map = bd_map.set_global_opts(
        legend_opts=opts.LegendOpts(
            is_show=False,  # 不显示标签
        ),
        title_opts=opts.TitleOpts(title="新奥危险货物运输高风险路段聚类分析图"),
    )

    return bd_map
def locate():
    # 对数据进行绘图
    station_data = pd.read_csv("station.csv",header = 0, sep = '\t')
    latitude = station_data['lat'].values
    longitude = station_data['lng'].values
    index = station_data['station_id'].values
    length = len(latitude)
    mag = [1] * length
    #可视化
    BMaps = BMap()
    data_pair = dict.fromkeys(index, 0)

    user = pd.read_csv("mobile.csv",header = 0, sep = '\t')
    locate = user['station_id'].values
    count = user['count'].values

    for i in range(len(locate)):
        try:
            if count[i] >= 10:
                data_pair[locate[i]] += int(count[i])
        except:
            pass

    for i in range(len(index)):
        BMaps.add_coordinate(index[i], longitude[i], latitude[i])

    BMaps.add_schema(baidu_ak = 'UoW1wfwAiRoBPYeh52XzdUGGoByxmUN2',
                    center=(121.37, 31.23),
                    zoom=10,
                    map_style={
            "styleJson": [
                {
                    "featureType": "water",
                    "elementType": "all",
                    "stylers": {"color": "#031628"},
                },
                {
                    "featureType": "land",
                    "elementType": "geometry",
                    "stylers": {"color": "#000102"},
                },
                {
                    "featureType": "highway",
                    "elementType": "all",
                    "stylers": {"color": "#50A3BA"},
                },

                {
                    "featureType": "local",
                    "elementType": "geometry",
                    "stylers": {"color": "#000000"},
                },
                {
                    "featureType": "railway",
                    "elementType": "geometry.fill",
                    "stylers": {"color": "#000000"},
                },
                {
                    "featureType": "railway",
                    "elementType": "geometry.stroke",
                    "stylers": {"color": "#08304b"},
                },
                {
                    "featureType": "building",
                    "elementType": "geometry.fill",
                    "stylers": {"color": "#000000"},
                },
                {
                    "featureType": "all",
                    "elementType": "labels.text.fill",
                    "stylers": {"color": "#857f7f"},
                },
                {
                    "featureType": "all",
                    "elementType": "labels.text.stroke",
                    "stylers": {"color": "#000000"},
                },
                {
                    "featureType": "building",
                    "elementType": "geometry",
                    "stylers": {"color": "#022338"},
                },
                {
                    "featureType": "green",
                    "elementType": "geometry",
                    "stylers": {"color": "#062032"},
                },
                {
                    "featureType": "boundary",
                    "elementType": "all",
                    "stylers": {"color": "#465b6c"},
                },
                {
                    "featureType": "manmade",
                    "elementType": "all",
                    "stylers": {"color": "#022338"},
                },
                {
                    "featureType": "label",
                    "elementType": "all",
                    "stylers": {"visibility": "on"},
                },
            ]
        })

    # 添加数据点
    data_pair = [list(z) for z in zip(data_pair.keys(), data_pair.values())]
    BMaps.add('次数', data_pair,type_="scatter",symbol_size=3, label_opts=opts.LabelOpts(is_show=False))
    
    pieces = [
            {'max': 10000, 'label': '10000以下', 'color': '#50A3BA'},
            {'min': 10000, 'max': 20000, 'label': '10000-20000', 'color': '#E2C568'},
            {'min': 20000, 'max': 30000, 'label': '20000-30000', 'color': '#D94E5D'},
            {'min': 30000, 'max': 40000, 'label': '30000-40000', 'color': '#3700A4'},
            {'min': 40000, 'label': '40000+', 'color': '#81AE9F'},
        ]

    BMaps.set_global_opts(
            visualmap_opts=opts.VisualMapOpts(is_piecewise=True, pieces= pieces, pos_top='top', pos_left = 'right'),
            title_opts=opts.TitleOpts(title="基站频率分布>10")
        )
    #导出图像
    BMaps.render('基站频率分布10.html')