zoukankan      html  css  js  c++  java
  • echarts-map-区县

    首先通过百度获取经纬度

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
        <title>批量地址</title>
        <style type="text/css">
            body,
            html {
                width: 100%;
                height: 100%;
                margin: 0;
                font-family: "微软雅黑";
            }
    
            #l-map {
                height: 300px;
                width: 100%;
            }
    
            #r-result {
                width: 100%;
                font-size: 14px;
                line-height: 20px;
            }
        </style>
        <script type="text/javascript"
            src="http://api.map.baidu.com/api?v=2.0&ak=UZv8h1dSCG8ZRYNiNMMVC76T9uZ4z4Wd"></script>
    </head>
    
    <body>
        <div id="l-map"></div>
        <div id="r-result">
            <input type="button" value="成都市锦江区" onclick="getBoundary()" id="butotn" />
            <div id="result"></div>
        </div>
    </body>
    
    </html>
    <script type="text/javascript">
        let mapData = [];
        var xmJson = '';
        var mapName = ["锦江区", "青羊区", "金牛区", "武侯区", "成华区", "龙泉驿区", "青白江区", "新都区", "温江区", "金堂县", "双流县", "郫县", "大邑县", "蒲江县", "新津县", "崇州市", "都江堰市", "彭州市", "邛崃市"]
        // 百度地图API功能
        var map = new BMap.Map("l-map");
        map.centerAndZoom(new BMap.Point(104.076126, 30.668558), 13);
        map.enableScrollWheelZoom(true);
        let index = 0;
        function getBoundary() {
            var bdary = new BMap.Boundary();
            // var name = document.getElementById("butotn").value;
            var name = mapName[index]
            document.getElementById("butotn").value = mapName[index]
            bdary.get(name, function (rs) {       //获取行政区域
                map.clearOverlays();
                console.log(rs.boundaries)
                console.log(rs.boundaries.join(';'))
                xmJson = rs.boundaries.join(';')  //清除地图覆盖物       
                var count = rs.boundaries.length; //行政区域的点有多少个
                for (var i = 0; i < count; i++) {
                    var ply = new BMap.Polygon(rs.boundaries[i], { strokeWeight: 2, strokeColor: "#ff0000" }); //建立多边形覆盖物
                    map.addOverlay(ply);  //添加覆盖物
                    map.setViewport(ply.getPath());    //调整视野         
                }
                get();
                index++;
            });
        }
    
    
        //josn对象
        var eachart = {
            "type": "FeatureCollection",
            "features": [
                {
                    "type": "Feature",
                    "properties": {
                        "name": "",
                        "cp": []
                    },
                    "geometry": {
                        "type": "Polygon",
                        "coordinates": [
                            //存放经纬度
                        ]
                    }
                }
            ]
        }
    
    
        function get() {
            var lsit = [];
            //xmJson你要的区域的经纬度字符串
            var xmList = xmJson.split(';');
            xmList.forEach(item => {
                lsit.push([Number(item.split(',')[0]), Number(item.split(',')[1])]);
            })
            eachart.features[0].geometry.coordinates.push(lsit);
            console.log(JSON.stringify(eachart))
        }
    
    
    </script>
    View Code

    然后组装成JSON数据格式

    {
        "type": "FeatureCollection",
        "features": [
            {
                "type": "Feature",
                "properties": {
                    "name": "成华区",
                    "cp": [
                        104.16545,
                        30.703645
                    ]
                },
                "geometry": {
                    "type": "Polygon",
                    "coordinates": [
                        [
                            [
                                104.237952,
                                30.696182
                            ],
                            [
                                104.235141,
                                30.706489
                            ],
                            [
                                104.228293,
                                30.704868
                            ],
                            [
                                104.222874,
                                30.708396
                            ],
                            [
                                104.223716,
                                30.713675
                            ],
                            [
                                104.229604,
                                30.716935
                            ],
                            [
                                104.221657,
                                30.717436
                            ],
                            [
                                104.218142,
                                30.710594
                            ],
                            [
                                104.214574,
                                30.710075
                            ],
                            [
                                104.205882,
                                30.723492
                            ],
                            [
                                104.197771,
                                30.72383
                            ],
                            [
                                104.195817,
                                30.732807
                            ],
                            [
                                104.189829,
                                30.728377
                            ],
                            [
                                104.186696,
                                30.735357
                            ],
                            [
                                104.177538,
                                30.735944
                            ],
                            [
                                104.158397,
                                30.745255
                            ],
                            [
                                104.14277,
                                30.742709
                            ],
                            [
                                104.145055,
                                30.749937
                            ],
                            [
                                104.141556,
                                30.755137
                            ],
                            [
                                104.141347,
                                30.74917
                            ],
                            [
                                104.134105,
                                30.755318
                            ],
                            [
                                104.135359,
                                30.746261
                            ],
                            [
                                104.125033,
                                30.745897
                            ],
                            [
                                104.125161,
                                30.738285
                            ],
                            [
                                104.11525,
                                30.73461
                            ],
                            [
                                104.108846,
                                30.73758
                            ],
                            [
                                104.108522,
                                30.728851
                            ],
                            [
                                104.096793,
                                30.727867
                            ],
                            [
                                104.093371,
                                30.721048
                            ],
                            [
                                104.08419,
                                30.722523
                            ],
                            [
                                104.080398,
                                30.718586
                            ],
                            [
                                104.077249,
                                30.722903
                            ],
                            [
                                104.077821,
                                30.704229
                            ],
                            [
                                104.099538,
                                30.702899
                            ],
                            [
                                104.099976,
                                30.692941
                            ],
                            [
                                104.095091,
                                30.685509
                            ],
                            [
                                104.101219,
                                30.682475
                            ],
                            [
                                104.096123,
                                30.675943
                            ],
                            [
                                104.103058,
                                30.669987
                            ],
                            [
                                104.095176,
                                30.659098
                            ],
                            [
                                104.132428,
                                30.643242
                            ],
                            [
                                104.135019,
                                30.634618
                            ],
                            [
                                104.133841,
                                30.63183
                            ],
                            [
                                104.130951,
                                30.632732
                            ],
                            [
                                104.131486,
                                30.628952
                            ],
                            [
                                104.133885,
                                30.630122
                            ],
                            [
                                104.134471,
                                30.625833
                            ],
                            [
                                104.141356,
                                30.624098
                            ],
                            [
                                104.143514,
                                30.628269
                            ],
                            [
                                104.146104,
                                30.623476
                            ],
                            [
                                104.153178,
                                30.629042
                            ],
                            [
                                104.162,
                                30.629752
                            ],
                            [
                                104.168284,
                                30.625937
                            ],
                            [
                                104.171336,
                                30.630226
                            ],
                            [
                                104.1665,
                                30.636386
                            ],
                            [
                                104.171597,
                                30.641509
                            ],
                            [
                                104.170613,
                                30.646719
                            ],
                            [
                                104.163188,
                                30.653027
                            ],
                            [
                                104.167226,
                                30.655508
                            ],
                            [
                                104.161175,
                                30.659494
                            ],
                            [
                                104.160203,
                                30.670187
                            ],
                            [
                                104.15747,
                                30.66717
                            ],
                            [
                                104.153584,
                                30.673763
                            ],
                            [
                                104.163394,
                                30.672782
                            ],
                            [
                                104.172308,
                                30.681483
                            ],
                            [
                                104.175575,
                                30.675791
                            ],
                            [
                                104.179689,
                                30.67522
                            ],
                            [
                                104.181443,
                                30.679355
                            ],
                            [
                                104.190453,
                                30.678315
                            ],
                            [
                                104.197477,
                                30.682007
                            ],
                            [
                                104.197852,
                                30.688007
                            ],
                            [
                                104.203743,
                                30.690287
                            ],
                            [
                                104.224414,
                                30.68736
                            ],
                            [
                                104.234542,
                                30.689603
                            ],
                            [
                                104.237952,
                                30.696182
                            ]
                        ]
                    ]
                }
            }]

    然后在页面中引用

    <template>
      <div class="map-container" :style="{height:cHeight+'px'}">
        <div id="cityChart" style="height:650px;"></div>
      </div>
    </template>
    
    
    <script>
    var data = [
      { name: "锦江区", value: 1522 },
      { name: "青羊区", value: 1522 },
      { name: "金牛区", value: 1522 },
      { name: "武侯区", value: 1522 },
      { name: "成华区", value: 1522 },
      { name: "龙泉驿区", value: 1522 },
      { name: "青白江区", value: 1522 },
      { name: "新都区", value: 1522 },
      { name: "温江区", value: 1522 },
      { name: "金堂县", value: 1522 },
      { name: "双流区", value: 1522 },
      { name: "郫县", value: 1522 },
      { name: "大邑县", value: 1522 },
      { name: "蒲江县", value: 1522 },
      { name: "新津县", value: 1522 },
      { name: "崇州市", value: 1522 },
      { name: "都江堰市", value: 1522 },
      { name: "彭州市", value: 1522 },
      { name: "邛崃市", value: 1522 }
    ];
    // "锦江区", "青羊区", "金牛区", "武侯区", "成华区", "龙泉驿区", "青白江区", "新都区", "温江区", "金堂县",
    //  "双流县", "郫县", "大邑县", "蒲江县", "新津县", "崇州市", "都江堰市", "彭州市", "邛崃市"
    var geoCoordMap = {
      锦江区: [104.124056, 30.615172],
      青羊区: [103.989526, 30.688243],
      金牛区: [104.02977, 30.72898],
      武侯区: [104.012287, 30.638195],
      成华区: [104.16545, 30.703645],
      龙泉驿区: [104.282733, 30.568914],
      青白江区: [104.277558, 30.882827],
      新都区: [104.160276, 30.839179],
      温江区: [103.829124, 30.687249],
      金堂县: [104.429336, 30.876876],
      双流区: [103.945257, 30.581848],
      郫县: [103.903863, 30.805438],
      大邑县: [103.491074, 30.603734],
      蒲江县: [103.501422, 30.215031],
      新津县: [103.811877, 30.410574],
      崇州市: [103.637103, 30.647489],
      都江堰市: [103.639402, 30.998792],
      彭州市: [103.954456, 31.006716],
      邛崃市: [103.44968, 30.429509]
    };
    function randomValue() {
      return Math.round(Math.random() * 1000);
    }
    function convertData(data) {
      var res = [];
      for (var i = 0; i < data.length; i++) {
        var geoCoord = geoCoordMap[data[i].name];
        if (geoCoord) {
          res.push({
            name: data[i].name,
            value: geoCoord.concat(data[i].value)
          });
        }
      }
      return res;
    }
    var geoJson = require("../mapJson/chengdu.json");
    
    export default {
      name: "home",
      props: {
        cWidth: {
          type: String,
          default: "1050"
        },
        cHeight: {
          type: String,
          default: "650"
        },
        parentName: {
          type: String,
          default: ""
        },
        addressChange: {
          type: Function,
          default: () => {
            return;
          }
        },
        mapData: {
          type: Array,
          default: () => {
            return data;
          }
        }
      },
      data() {
        return {
          // mapData: [],
          listData: [],
          maxNumber: 0
        };
      },
      methods: {
        drawLine() {
          var mapChart = this.$echarts.init(document.getElementById("cityChart"));
          this.$echarts.registerMap("成都市", geoJson);
          var option = {
            tooltip: {
              trigger: "item",
              formatter: function(params) {
                return params.name + " : " + params.value[2];
              }
            },
            visualMap: {
              min: 0,
              max: 5000,
              left: "80px",
              top: "bottom",
              calculable: true,
              show: false,
              inRange: {
                color: ["#fbfbd6", "#ffff27", "#fb1d1d"]
              },
              textStyle: {
                color: "#fff"
              }
            },
            geo: {
              map: "成都市",
              roam: "false", //是否开启缩放
              zoom: 1.2, //默认显示比例大小
              top: "10%",
              left: "25%",
              label: {
                emphasis: {
                  show: true,
                  color: "rgba(255, 255, 255,0.8)"
                }
              },
              itemStyle: {
                normal: {
                  areaColor: "rgba(0, 150, 194,0)",
                  borderWidth: 1,
                  borderColor: "rgba(132,184,255,1)",
                  shadowBlur: 20,
                  shadowColor: "rgba(132,184,255,1)"
                },
                emphasis: {
                  areaColor: "#244090", //高亮时的地区背景色
                  shadowOffsetX: 10,
                  shadowOffsetY: 10,
                  shadowBlur: 20,
                  borderWidth: 0,
                  shadowColor: "rgba(0,0,0,0.5)"
                }
              }
            },
            series: [
              {
                name: "四川",
                type: "effectScatter",
                coordinateSystem: "geo",
                data: convertData(this.mapData),
                symbolSize: function(a, b) {
                  return a[2] / 50 > 20 ? 20 : a[2] / 50;
                },
                symbolRotate: 35,
                label: {
                  normal: {
                    show: false
                  },
                  emphasis: {
                    show: false
                  }
                },
                itemStyle: {
                  emphasis: {
                    borderColor: "#fff",
                    borderWidth: 1
                  }
                }
              }
            ]
            // series: [
            //   {
            //     label: {
            //       normal: {
            //         show: true
            //       },
            //       emphasis: {
            //         show: true
            //       }
            //     },
            //     type: "map",
            //     zoom: 1,
            //     roam: true,
            //     map: "成都市"
            //   }
            // ]
          };
          /*
          var option = {
            tooltip: {
              trigger: "item",
              formatter: function(params) {
                return params.name + " : " + params.value[2];
              }
            },
            visualMap: {
              min: 0,
              max: 5000,
              left: "80px",
              top: "bottom",
              calculable: true,
              show: false,
              inRange: {
                color: ["#fbfbd6", "#ffff27", "#fb1d1d"]
              },
              textStyle: {
                color: "#fff"
              }
            },
            geo: {
              map: "四川",
              roam: "false", //是否开启缩放
              zoom: 1.2, //默认显示比例大小
              top: "10%",
              left: "25%",
              label: {
                emphasis: {
                  show: true,
                  color: "rgba(255, 255, 255,0.8)"
                }
              },
              itemStyle: {
                normal: {
                  areaColor: "rgba(0, 150, 194,0)",
                  borderWidth: 1,
                  borderColor: "rgba(132,184,255,1)",
                  shadowBlur: 20,
                  shadowColor: "rgba(132,184,255,1)"
                },
                emphasis: {
                  areaColor: "#244090", //高亮时的地区背景色
                  shadowOffsetX: 10,
                  shadowOffsetY: 10,
                  shadowBlur: 20,
                  borderWidth: 0,
                  shadowColor: "rgba(0,0,0,0.5)"
                }
              }
            },
            series: [
              {
                name: "四川",
                type: "effectScatter",
                coordinateSystem: "geo",
                data: convertData(this.mapData),
                symbolSize: function(a, b) {
                  return a[2] / 50 > 20 ? 20 : a[2] / 50;
                },
                symbolRotate: 35,
                label: {
                  normal: {
                    show: false
                  },
                  emphasis: {
                    show: false
                  }
                },
                itemStyle: {
                  emphasis: {
                    borderColor: "#fff",
                    borderWidth: 1
                  }
                }
              }
            ]
          };
          */
          mapChart.setOption(option);
          window.addEventListener("resize", function() {
            mapChart.resize();
          });
          mapChart.off("click");
          mapChart.on("click", params => {
            let temp = "";
            let temName = params.name.substring(params.name.length - 1);
            if (temName == "") {
              temp = params.name.substring(0, params.name.length - 1);
            } else if (temName == "") {
              temp = params.name.substring(0, 2);
            }
            this.$emit("addressChange", temp);
          });
        },
        getScHandler() {
          this.$emit("addressChange", "四川");
        }
      },
      mounted() {
        this.drawLine();
        this.listData = this.mapData.slice(1, 4);
      },
      watch: {
        mapData() {
          this.drawLine();
          this.listData = this.mapData.slice(1, 4);
          this.maxNumber = this.mapData[0].value;
        }
      }
    };
    </script>
    
    <style scoped lang="less">
    @import url(../../../../static/css/public.less);
    .map-container {
      width: 100%;
      height: 650px;
      position: absolute;
      background: url(../../../../static/imgs/map-bg.png) center no-repeat;
      background-size: 100% 100%;
      // margin: 0 20px;
      top: 0;
      left: 0;
      z-index: 111;
      #cityChart {
        width: 100%;
        height: 100%;
        margin: 0 auto;
      }
      .map-btn {
        position: absolute;
        right: 40px;
        bottom: 40px;
        z-index: 11;
        padding: 5px 20px;
        color: #fff;
        border: 1px solid #fff;
        border-radius: 5px;
        cursor: pointer;
        background: #ff4400;
      }
      .ranking-box {
        position: absolute;
        left: 40px;
        bottom: 40px;
        z-index: 11;
        color: #fff;
        width: 170px;
        .ranking-header {
          padding: 5px;
          background: linear-gradient(to top, #025ec6, #23c2fe);
          font-size: 17px;
        }
        .ranking-list {
          background: rgba(0, 76, 136, 0.44);
          .ranking-item {
            padding: 10px;
            .ranking-name {
              font-size: 13px;
            }
          }
          .ranking-img {
            width: 40px;
            height: 23px;
            margin-right: 10px;
            flex-shrink: 0;
            img {
              width: 100%;
            }
          }
          .ranking-img {
            align-self: flex-end;
          }
        }
      }
    }
    </style>
  • 相关阅读:
    [POI2011]Lightning Conductor
    [NOI2009]诗人小G

    公告&留言板
    联合省选 2020 题解
    年末时的一些思维碎屑
    RE:ゼロから始める AFO 生活
    退役前的做题记录6.0
    2019年湖南省大学生计算机程序设计竞赛 (HNCPC2019) 简要题解
    300iq Contest 1 简要题解
  • 原文地址:https://www.cnblogs.com/huangmin1992/p/10710413.html
Copyright © 2011-2022 走看看