leaflet前端JS实现高德地图POI兴趣点批量分类下载(附源码下载)

前言

leaflet 入门开发系列环境知识点了解:

内容概览

leaflet前端JS实现高德地图POI兴趣点批量分类下载
源代码demo下载

  • 效果图如下:

具体实现思路:
1.高德开发平台注册账号,控制台创建应用,注册web服务key,高德poi下载需要用到

2.前端JS直接ajax请求https高德poi兴趣点接口,批量下载poi点数据

  • 核心代码,完整源码见尾部下载
     var map = null; //地图对象
     var packageName = '打包下载'; // 打包文件名称
     var zip = new JSZip();
     var geojsonNameList = []; // geojson文件名称列表
     var poiTypeList = []; //poi下载类别列表
     var geojsonList = []; // geojson文件列表
     var filePath = null;
     var loading;
     var node = document.getElementById('map');
     var city = "";
     var offset = 20;
     var page = 1;
     // 打开文件按钮点击事件
     $("input[type='file']").change(function () {
       var file = this.files[0];
       if (window.FileReader) {
     	// 判断csv文件编码
     	var reader = new FileReader();
         reader.readAsText(file);
         //监听文件读取结束后事件    
         reader.onloadend = function (e) {
     	  var content = e.target.result;
     	  var encodingRight = content.indexOf("�") === -1;
     	  if (encodingRight) {
     		//console.log("编码UTF-8格式文件");
     		readerFile(file,"text/plain;charset=utf8");
     	  } else {
     		//console.log("编码格式错误,请上传UTF-8格式文件");
     		readerFile(file,"text/plain;charset=gb2312");
     	  }
         };
       }
     });
     // 导出兴趣点点击事件
     $("#mapexport_btn").click(function () {
       city = document.getElementById('city').value.replace(/ /g,'');
       if(city.length === 0){
          Qmsg.warning('<i style="color:red">下载区域必填项</i>', {
     		  html: true
     	 });
          return;
       }
       geojsonList = []; // geojson文件列表
       goDownloadGeojsonFile();
     });
     // 地图初始化
     initMap();
     
     function readerFile(file,encode){
     	var readerfile = new FileReader();
     	readerfile.readAsDataURL(file);
     	//监听文件读取结束后事件    
     	readerfile.onloadend = function (e) {
     	  filePath = e.target.result;
     	  //console.log('文件路径:' + e.target.result);
     	  // 读取文件数据处理中……
     	  loading = Qmsg.loading("读取文件数据处理中……");
     	  openFile(encode);
     	};	
     }
    
     // 地图初始化加载
     function initMap() {
       map = L.map('map');
       L.tileLayer('http://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}', { subdomains: ["1", "2", "3", "4"], crossOrigin: true }).addTo(map);
       map.setView([22.83883628, 113.50329857], 16);  //设置缩放级别及中心点
     }
     // 打开文件读取数据函数
     function openFile(encode) {
       var result = [];
       var xhr = new XMLHttpRequest();
       xhr.open("GET", filePath, false);
       xhr.overrideMimeType(encode);
       xhr.onload = function (e) {
         if (xhr.readyState === 4) {
           if (xhr.status === 200) {
     	    var isUtf8 = encode.indexOf("utf8") !== -1;
     		if(isUtf8){
     		  result = csvJSONutf8(xhr.responseText);
     		}
     		else{
     		  result = csvJSONgb2312(xhr.responseText);
     		}
             //console.log(result);
             loadDataFromCSV(result);
           } else {
             console.error(xhr.statusText);
             Qmsg.warning('<i style="color:red">读取CSV或者txt文件报错异常</i>', {
               html: true
             });
             loading.close();
           }
         }
       };
       xhr.send(null);
     }
     // 数据预处理,批量转换坐标点
     function loadDataFromCSV(dataList) {
     	poiTypeList = []; //poi下载类别列表
     	geojsonNameList = [];
     	for (var i = 0; i < dataList.length; i++) {
     		var data = dataList[i];
     		if(data.length !== 0){
                 geojsonNameList.push(data);
     			var obj = {
     			   "types":data
     			}
     		    poiTypeList.push(obj);
     		}
     	}
     	console.log(poiTypeList);
     	// 处理完成
     	Qmsg.info('<i style="color:red">数据预处理完成</i>', { html: true });
     	loading.close();
     }
     // csv数据源转换json格式数据源-utf8
     function csvJSONutf8(csv) {
       var lines = csv.split("\n");
       var result = [];
       for (var i = 0; i < lines.length; i++) {
     	var currentline = lines[i];
     	currentline = currentline.replace('\"', '').replace('\r', '').replace('\"', '');
         result.push(currentline);
       }
       return result;
     }
     // csv数据源转换json格式数据源-gb2312
     function csvJSONgb2312(csv) {
       var lines = csv.split("\n");
       var result = [];
       for (var i = 0; i < lines.length; i++) {
     	var currentline = lines[i];
     	currentline = currentline.replace('\"', '').replace('\r', '').replace('\"', '');
     	result.push(currentline);
       }
       return result;
     }
    
     // 批量下载poi点geojson文件
     …………
    

完整内容点击跳转到小专栏文章

posted @ 2022-06-06 10:11  GIS之家  阅读(453)  评论(0编辑  收藏  举报