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>

 

posted @ 2019-04-15 14:21  面包_girl  阅读(556)  评论(0编辑  收藏  举报
/* 鼠标点击文字特效 */