地图三级展示

地图三级展示

目录

|--file
	|--get.js
	|--index.html

1、新建file 文件夹;然后新建get.jsindex.html文件,并将下面代码分别复制进去。
2、进入file文件夹,执行

node get.js  //主要是获取geoJSON数据

3、然后打开index.html即可。

var http = require('https');
var fs = require('fs');

fs.mkdir('./data/',function(err) {
  if (err) {
    console.log("data文件夹已经存在");
  }
getData("100000");
})
function getData(str) {
  var html = '';
  http.get('https://geo.datav.aliyun.com/areas_v2/bound/' + str + '_full.json', function (req, res) {
    req.on('data', function (data) {
      html += data;
    });
    req.on('end', function () {
      var json = html.toString();
      if (json.indexOf('The specified key does not exist.') < 0) {
        writeJson(json, str);
        if(json.indexOf("adcode") > -1){
          var data = JSON.parse(json).features;
          for (let j = 0; j < data.length; j++) {
            getData(data[j].properties.adcode);
          }
        }
      }else{
        getDataL(str)
      }
    });
  });

}
function getDataL(str) {
  var html = '';
  http.get('https://geo.datav.aliyun.com/areas_v2/bound/' + str + '.json', function (req, res) {
    req.on('data', function (data) {
      html += data;
    });
    req.on('end', function () {
      var json = html.toString();
      writeJson(json, str);
    });
  });
}
function writeJson(json, str) {
  fs.writeFile('./data/' + str + '.json', json, function (err) {
    if (err) {
      console.log(err);
    }
    console.log('success');
  })
}


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Map</title>
    <script src="https://cdn.bootcss.com/echarts/4.4.0-rc.1/echarts.min.js"></script>
    <script src="https://www.jq22.com/jquery/jquery-1.10.2.js"></script>
    <script src="https://www.jq22.com/demo/echarts-chinazMap201911172308/china-main-city-map.js" charset="utf-8"></script>
  </head>
<body>

<div id="main" style="width:calc(100vw);height:calc(100vh);"></div>
<script type="text/javascript">
  //https://www.jq22.com/demo/echarts-chinazMap201911172308/dblClickMap.html
  var myChart = echarts.init(document.getElementById('main'));
  //存储切换的每一级地图信息
  var mapStack = [];
  var timeFn = null;
  var curMap = {};
  var cityMap = {};
  //初始化地图
  loadMap('100000', 'china');
  /**
   绑定用户切换地图区域事件
   cityMap对象存储着地图区域名称和区域的信息(name-code)
   当mapCode有值,说明可以切换到下级地图
   同时保存上级地图的编号和名称
   */
  myChart.on('mapselectchanged', function(params) {
    clearTimeout(timeFn);
    //由于单击事件和双击事件冲突,故单击的响应事件延迟250毫秒执行
    timeFn = setTimeout(function(){
      var name = params.batch[0].name;
      var mapCode = cityMap[name];
      if (!mapCode) {
        alert('无下一级区域地图显示');
        return;
      }
      loadMap(mapCode, name);
      //将上一级地图信息压入mapStack
      mapStack.push({
        mapCode: curMap.mapCode,
        mapName: curMap.mapName
      });
    }, 250);
  });
  /**
   绑定双击事件,并加载上一级地图
   */
  myChart.on('dblclick', function(params) {
    //当双击事件发生时,清除单击事件,仅响应双击事件
    clearTimeout(timeFn);
    var map = mapStack.pop();
    if (!mapStack.length && !map) {
      alert('已经到达最上一级地图了');
      return;
    }
    loadMap(map.mapCode, map.mapName);
  });
  function loadMap(mapCode, mapName) {
    $.getJSON('./' + mapCode + '.json',
      function (data) {
      if (data) {
        if(data.features.length===1){
          cityMap[data.features[0].properties.name]=undefined;
        }else{
          data.features.map(i=>{
            cityMap[i.properties.name]=i.properties.adcode;
          });
        }
        echarts.registerMap(mapName, data);
        var option = {
          tooltip: {
            trigger: 'item',
            formatter: '{b}'
          },
          series: [
            {
              name: '',
              type: 'map',
              mapType: mapName,
              selectedMode : 'multiple',
              label: {
                normal: {
                  show: true
                },
                emphasis: {
                  show: true
                }
              },
              data:[
              ]
            }
          ]
        };
        myChart.setOption(option);
        curMap = {
          mapCode: mapCode,
          mapName: mapName
        };
      } else {
        alert('无法加载该地图');
      }
    });
  }
</script>
</body>
</html>


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值