草庐IT

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

GIS之家 2023-03-28 原文

前言

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文件
     …………
    

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

有关leaflet前端JS实现高德地图POI兴趣点批量分类下载(附源码下载)的更多相关文章

  1. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  2. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  3. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  4. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  5. ruby - 下载位置 Selenium-webdriver Cucumber Chrome - 2

    我将Cucumber与Ruby结合使用。通过Selenium-Webdriver在Chrome中运行测试时,我想将下载位置更改为测试文件夹而不是用户下载文件夹。我当前的chrome驱动程序是这样设置的:Capybara.default_driver=:seleniumCapybara.register_driver:seleniumdo|app|Capybara::Selenium::Driver.new(app,:browser=>:chrome,desired_capabilities:{'chromeOptions'=>{'args'=>%w{window-size=1920,1

  6. ruby-on-rails - HTTParty 的内存问题和下载大文件 - 2

    这会导致Ruby出现内存问题吗?我知道如果大小超过10KB,Open-URI会写入TempFile。但是HTTParty会在写入TempFile之前尝试将整个PDF保存到内存吗?src=Tempfile.new("file.pdf")src.binmodesrc.writeHTTParty.get("large_file.pdf").parsed_response 最佳答案 您可以使用Net::HTTP。参见thedocumentation(特别是标题为“流媒体响应机构”的部分)。这是文档中的示例:uri=URI('http://e

  7. ruby - 强制浏览器下载文件而不是打开文件 - 2

    我要下载http://foobar.com/song.mp3作为song.mp3,而不是让Chrome在其native中打开它浏览器中的播放器。我怎样才能做到这一点? 最佳答案 您只需要确保发送这些header:Content-Disposition:attachment;filename=song.mp3;Content-Type:application/octet-streamContent-Transfer-Encoding:binarysend_file方法为您完成:get'/:file'do|file|file=File.

  8. ruby - 检查网络文件是否存在,而不下载它? - 2

    是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby​​不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案

  9. ruby-on-rails - Assets 管道损坏 : Not compiling on the fly css and js files - 2

    我开始了一个新的Rails3.2.5项目,Assets管道不再工作了。CSS和Javascript文件不再编译。这是尝试生成Assets时日志的输出:StartedGET"/assets/application.css?body=1"for127.0.0.1at2012-06-1623:59:11-0700Servedasset/application.css-200OK(0ms)[2012-06-1623:59:11]ERRORNoMethodError:undefinedmethod`each'fornil:NilClass/Users/greg/.rbenv/versions/1

  10. ruby-on-rails - Rails - 理解 application.js 和 application.css - 2

    rails新手。只是想了解\assests目录中的这两个文件。例如,application.js文件有如下行://=requirejquery//=requirejquery_ujs//=require_tree.我理解require_tree。只是将所有JS文件添加到当前目录中。根据上下文,我可以看出requirejquery添加了jQuery库。但是它从哪里得到这些jQuery库呢?我没有在我的Assets文件夹中看到任何jquery.js文件——或者直接在我的整个应用程序中没有看到任何jquery.js文件?同样,我正在按照一些说明安装TwitterBootstrap(http:

随机推荐