• 基于百度和echars接口,实现多点连接


    引言

    今天用百度地图和echarts,实现多点连接。

    展示

    前端html

    <!DOCTYPE html>
    <html class="x-admin-sm">
        <head>
            <meta charset="UTF-8">
            <title>欢迎页面-X-admin2.2</title>
            <meta name="renderer" content="webkit">
            <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
            <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
            <link rel="stylesheet" href="/static/css/font.css">
            <link rel="stylesheet" href="/static/css/xadmin.css">
            <link rel="stylesheet" href="../static/layui/css/layui.css" media="all">
            <script src="../static/layui/layui.js" charset="utf-8"></script>
            <script type="text/javascript" src="/static/js/xadmin.js"></script>
            <script type="text/javascript" src="/static/js/jquery-3.3.1.min.js"></script>
            <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
            <script type="text/javascript" src="/static/js/bmap.js"></script>
            <script type="text/javascript" src="https://api.map.baidu.com/getscript?v=你申请的key"></script>
            <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你申请的key"></script>
    
            {#        <script src="https://cdn.jsdelivr.net/npm/echarts/dist/extension/bmap.min.js"></script>#}
    {#        <script src="https://cdn.jsdelivr.net/npm/echarts/map/js/china.js"></script>#}
    
            <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
            <!--[if lt IE 9]>
              <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
              <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
            <![endif]-->
    
        <title>地图展示</title>
        </head>
        <body>
    
        <h1 align="center"><blockquote class="layui-elem-quote">在本页面查看结构物的所有有害生物。</blockquote></h1>
        <div id="main" style="100%;height:800px"></div>
        <div id="allmap"></div>
        </body>
        <script type="text/javascript">
    
    
    
            var bmapChart = echarts.init(document.getElementById('main'));
            {#var bmapChart = new BMap.Map("main");#}
            {#bmapChart.centerAndZoom(new BMap.Point(116.404, 39.915), 11);#}
            {#var walking = new BMap.WalkingRoute(bmapChart, {renderOptions:{map: bmapChart, autoViewport: true}});#}
            {#walking.search("天坛公园", "故宫");#}
    
            // 检测对象数据
            let zuobiao = {{ zuobiao | tojson }};
    
            //首先先定义需要显示对应信息的位置坐标,按照[纬度,精度]的格式
            let geo_data = {};
            {% for row in zuobiao %}
                geo_data["{{ row['name']}}"] = [{{ row['lng'] }},{{ row['lat'] }}];
            {% endfor %}
            let geoCoordMap = geo_data;
            let convertData = function (data) {
                    var res = [];
                    for (var i = 0; i < data.length; i++) {
                        var geoCoord = geoCoordMap[data[i].name];    //首先根据data中的name作为键值读入地理坐标
                        if (geoCoord) {
                            res.push({
                                name: data[i].name,
                                value: geoCoord.concat(data[i].value),  //随后将地理坐标与对应信息值衔接起来
                                insect_names:data[i].insect_names
                            });
                        }
                    }
                    return res;
                 };
    
                 //线条颜色
                 var colors = ["#00A0E9", "#F29B76", "#F76B8F", "#6DF3AC", "#CF42E8", "#F1EA24"];
                 var option = {
                     title:{
                         text:'害虫分布地图'
                     },
                     legend: {
                         data: ['害虫严重程度'],   // 要对应series的name
                         opsition: "center",     // 图例位置
                     },
                     tooltip : {
                         trigger:  "item"   //提示框
    
                     },
                     bmap: {
                         center: [116.307698, 40.056975], // 初始化中心位置坐标
                         zoom: 5, // 地图缩放比例
                         roam: true // 开启用户缩放
                     },
    
                 };
                 // 实例化地图
                 bmapChart.setOption(option);
    
                    //地图点线传输动画效果
                    let ods = [];
                    //坐标点集合
                    var planePath =
                        'path://M1705.06,1318.313v-89.254l-319.9-221.799l0.073-208.063c0.521-84.662-26.629-121.796-63.961-121.491c-37.332-0.305-64.482,36.829-63.961,121.491l0.073,208.063l-319.9,221.799v89.254l330.343-157.288l12.238,241.308l-134.449,92.931l0.531,42.034l175.125-42.917l175.125,42.917l0.531-42.034l-134.449-92.931l12.238-241.308L1705.06,1318.313z';
    
                    {% for one in similar_region %}
                        temp = [];
                        {% for i in one %}
                            {% if not loop.last %}
                                temp.push({
                                insectName:"{{ i["insect_name"] }}",
                                fromName: "{{ i["name"] }}",
                                toName: "{{ one[loop.index]["name"] }}",
                                coords: [[{{ i["longitude"] }}, {{ i["latitude"] }}], [{{ one[loop.index]["longitude"] }},{{ one[loop.index]["latitude"] }}]]
                            });
                            {% endif %}
                        {% endfor %}
                        ods.push(temp);
                    {% endfor %}
                    option.series = [
                         {
                             name: '害虫严重程度',
                             type: 'effectScatter',    // 特效散点图,也可用普通散点图scatter
                             coordinateSystem: 'bmap', // 坐标系使用bmap,以地图作为底图
                             data: convertData(zuobiao),
                             symbolSize: function (val) {
                                return val[2] * 2;   // 用值的大小调整点的大小
                             },
                             encode: {
                                 value: 2
                             },
                             label: {
                                 formatter: '{c}',
                                 position: 'right',
                                 show: false
                             },
                             tooltip:{
                                trigger:  "item",   //提示框
                                formatter: function (item) {
                                     let msg = "<h2>城市名称:"+item["name"]+"</h2><br>";
                                     msg += "<h3>相关害虫名称:"+item["data"]["insect_names"]+"</h3><br>";
                                     msg += "<h3>害虫个数:"+item["data"]["value"][2]+"</h3><br>";
                                    return msg;
                                 }
                             },
                             itemStyle: {
                                 color:function(params){
                                     let value = params["value"][2];
                                     if (value>=1 && value <=3){
                                         return '#FBC300';
                                     }else if (value <= 6){
                                         return '#E67716';
                                     }else if (value <= 9){
                                         return '#DA251D';
                                     }else {
                                         return '#733a31';
                                     }
                                }
                             },
                             emphasis: {
                                 label: {
                                     show: true
                                 }
                            }
                         },
                        {% for one in similar_region %}
                         {
                            type: 'lines',
                            coordinateSystem: 'bmap',
                            zlevel: 2,
                            data: ods[{{ loop.index0 }}],
                            //线上面的动态特效
                            effect: {
                                show: true,
                                period: 6,
                                trailLength: 0.1,
                                symbolSize: 10,
                                symbol: planePath
                            },
                            tooltip:{
                                trigger:  "item",   //提示框
                                formatter: function (item) {
                                    {#console.log(item);#}
                                    let msg = "<h2>害虫名称:"+item["data"]["insectName"]+"</h2><br>";
                                     msg += "<h3>起始城市:"+item["data"]["fromName"]+"</h3><br>";
                                     msg += "<h3>终止城市:"+item["data"]["toName"]+"</h3><br>";
                                    return msg;
                                 }
                             },
                            lineStyle: {
                                normal: {
                                    color: function (params) {
                                        return random_color();
                                    },
                                    curveness: 0.2
                                }
                            }
                        },
                        {% endfor %}
                     ];
    
                    //实例化
                    bmapChart.setOption(option);
    
        function random_color(){
            return '#'+Math.floor(Math.random()*256).toString(10);
        }
        </script>
    
    
    </html>
    

    后台逻辑代码

    @app.route("/fbdt")
    def fbdt():
        # all_address = get_all_insect_address()
        # get_all_address()
        address_data = get_address_by_sort()
        db = pymysql.connect(host="localhost", user="root", password="root", database="reblyhc")
        # 使用cursor()方法获取操作游标
        cursor = db.cursor()
        # try:
        # 执行SQL语句
        cursor.execute("select * from address")
        # 获取所有记录列表
        results = cursor.fetchall()
        zuobiao = []
        all_insect_names = ["杨干象","松突圆蚧","双钩异翅长蠹","美国白蛾","苹果蠹蛾","枣大球蚧","松材线虫病","松疱锈病","冠瘿病","杨树花叶病毒病"
                ,"落叶松枯梢病","猕猴桃溃疡病","红脂大小蠹","薇甘菊","红棕象甲","青杨脊虎天牛","刺桐姬小蜂","枣实蝇","草履蚧","麻皮蝽","日本脊吉丁","星天牛"
                "桑天牛","松墨天牛","柳蓝叶甲","黄刺蛾","褐边绿刺蛾","霜天蛾","杨扇舟蛾","杨小舟蛾","人纹污灯蛾","丝带凤蝶"]
        similar_region = []
        for row in results:
            temp = {}
            ## 地区名字
            temp["name"] = row[1]
            temp["lng"] = row[2]
            temp["lat"] = row[3]
    
            if row[4] == None:
                insect_names = []
                for one in address_data:
                    for i in one["fbdq"]:
                        if (i in row[1]) or (row[1] in i):
                            insect_names.append(one["name"])
                            break
                temp["value"] = len(insect_names)
                temp["insect_names"] = ','.join(insect_names)
            else:
                temp["insect_names"] = row[4]
                temp["value"] = len(row[4].split(","))
            zuobiao.append(temp)
    
        for name in all_insect_names:
            temp = []
            for region in zuobiao:
                if name in region["insect_names"]:
                    temp.append({"insect_name":name,"name":region["name"],"longitude":region["lng"],"latitude":region["lat"],"isShow":True})
            similar_region.append(temp)
        db.close()
        # return render_template("dt.html",zuobiao=zuobiao)
        return render_template("ditu.html",zuobiao=zuobiao,similar_region=similar_region)
    
  • 相关阅读:
    go语言笔记——append是内置的函数!!!new是一个函数!!!调试可以使用闭包,本质上是print调试,尼玛!
    go语言笔记——defer作用DB资源等free或实现调试
    提高mysql查询效率的六种方法
    无线网络wifi (WPA/WPA2)密码破解方法
    wifi密码破解方法总结(含破解软件下载链接)
    linux 创建账户
    vim中设置tab的长度的方法
    JAVAC 命令使用方法
    Linux环境下编译并执行ava helloworld程序
    java hadoop file system API
  • 原文地址:https://www.cnblogs.com/yangxiao-/p/14890887.html
Copyright © 2020-2023  润新知