基于百度地图JavaScript API,员工住址统计

2023-10-13 21:20

本文主要是介绍基于百度地图JavaScript API,员工住址统计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

公司一般都有通讯和住址的统计,但是文字化的表格根本就不知道住在哪。

用百度地图就可以轻松解决,

而且公司还经常人员变动,读取excel中的内容,就不用每次还要更改地图文件了。

在遇到需要聚餐在地图中标点时,在文本框中输入地址,多个地址需要用英文逗号“,”分割。

 

为了单个文件的方便,存放更雅观这里引用的全是网络地址:

<script src="http://api.map.baidu.com/getscript?v=2.0&ak=你的密钥"></script>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script>
<script src="https://cdn.bootcss.com/xlsx/0.14.3/xlsx.full.min.js"></script>
<script src="https://cdn.bootcss.com/angular.js/1.7.4/angular.min.js"></script>

 

下面是全部js代码:

  1 // 百度地图API功能
  2     var map = new BMap.Map("l-map");
  3     map.centerAndZoom(new BMap.Point(114.413121, 30.480956), 13);
  4     map.enableScrollWheelZoom(true);
  5     var index = 0;
  6     var myGeo = new BMap.Geocoder();
  7     var adds = [];
  8     var names = [];
  9     var myFile;
 10     function change() {
 11         console.log("a");
 12         var adds = document.getElementById("chi").value.split(',');
 13         for (i in adds) {
 14             geocodeSearch("", adds[i], 1)
 15         }
 16     };
 17 
 18     function bdGEO(flag) {
 19         for (var i = 0; i < adds.length; i++) {
 20             var name = names[i];
 21             var add = adds[i];
 22             geocodeSearch(name, add, flag);
 23         }
 24     }
 25     function geocodeSearch(name, add, flag) {
 26         console.log(add);
 27         myGeo.getPoint(add, function (point) {
 28             if (point) {
 30                 var address = new BMap.Point(point.lng, point.lat);
 31                 addMarker(address, new BMap.Label(name + "\n" + add, { offset: new BMap.Size(20, -10) }), flag);
 32             }
 33         }, "武汉市");
 34     }
 35 
 36     function getMyIcon(flag) {
 37         var path = "http://api.map.baidu.com/img/markers.png";
 38         var p;
 39         if (flag == 0)
 40             p = {
 41                 offset: new BMap.Size(10, 25), // 指定定位位置  
 42 
 43                 imageOffset: new BMap.Size(0, -275) // 设置图片偏移  
 44             };
 45         else if (flag == 1)
 46             p = {
 47                 offset: new BMap.Size(10, 25), // 指定定位位置  
 48 
 49                 imageOffset: new BMap.Size(0, -300) // 设置图片偏移  
 50             };
 51 
 52 
 53         return myIcon = new BMap.Icon(path, new BMap.Size(20, 25), p);
 54 
 55     }
 56     // 编写自定义函数,创建标注
 57     function addMarker(point, label, flag) {
 58         var marker = new BMap.Marker(point, { icon: getMyIcon(flag) });
 59         map.addOverlay(marker);
 60         marker.setLabel(label);
 61     }
 62     
 63     (function () {
 64         var app = angular.module('myApp', []);
 65         app.controller('MyController', ['$scope', myController]);
 66 
 67         var excelJsonObj = [];
 68         function myController($scope) {
 69             $scope.uploadExcel = function () {
 70                 myFile = document.getElementById('file');
 71                 var input = myFile;
 72                 var reader = new FileReader();
 73                 reader.onload = function () {
 74                     var fileData = reader.result;
 75                     var workbook = XLSX.read(fileData, { type: 'binary' });
 76 
 77                     // 表格的表格范围,可用于判断表头是否数量是否正确
 78                     var fromTo = '';
 80                     var sheet0 = workbook.Sheets[workbook.SheetNames[0]];//sheet0代表excel表格中的第一页
 81                     var str = XLSX.utils.sheet_to_json(sheet0);//利用接口实现转换。
 82                     names = [];
 83                     adds = [];
 84                     for (var i in str) {
 85                         names.push(str[i].__EMPTY_1);
 86                         adds.push(str[i].__EMPTY_3);
 87                     }
 88                     bdGEO(0);
 89 
 90                 };
 91                 //获取地图上所有的覆盖物
 92                 var allOverlay = map.getOverlays();
 93                 for (var i = 1; i < allOverlay.length; i++) {
 94                     if (allOverlay[i].toString() == "[object Marker]") {
 95                         // if (allOverlay[i].getPosition().lng == longitude(待删除标注的经度) && allOverlay[i].getPosition().lat == latitude(待删除标注纬度)) {
 96                         //     map.removeOverlay(allOverlay[i]);
 97                         // }
 98                         map.removeOverlay(allOverlay[i]);
 99                         console.log(allOverlay[i]);
100                     }
101                 }
102                 if (document.getElementById("chi").value != "") {
103                     change();
104                 }
105                 if (myFile.value != "")
106                     reader.readAsBinaryString(input.files[0]);
107 
108             };
109         }
110     })();
111 
112     var comAddr = new BMap.Point(114.413121, 30.480956);
113     var label = new BMap.Label("公司地址", { offset: new BMap.Size(20, -10) });
114     label.setStyle({
115         color: "#f11",
116         borderColor: "#000",
117         backgroundColor: "#aaa"
118     });
119     addMarker(comAddr, label, 1);

附上源码下载地址:(含通讯录模板)

https://download.csdn.net/download/qq_38415250/11239541

 

转载请注明出处。

 

转载于:https://www.cnblogs.com/baissy/p/11009932.html

这篇关于基于百度地图JavaScript API,员工住址统计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/205961

相关文章

SpringBoo WebFlux+MongoDB实现非阻塞API过程

《SpringBooWebFlux+MongoDB实现非阻塞API过程》本文介绍了如何使用SpringBootWebFlux和MongoDB实现非阻塞API,通过响应式编程提高系统的吞吐量和响应性能... 目录一、引言二、响应式编程基础2.1 响应式编程概念2.2 响应式编程的优势2.3 响应式编程相关技术

java中4种API参数传递方式统一说明

《java中4种API参数传递方式统一说明》在Java中,我们可以使用不同的方式来传递参数给方法或函数,:本文主要介绍java中4种API参数传递方式的相关资料,文中通过代码介绍的非常详细,需要的... 目录1. 概述2. 参数传递方式分类2.1 Query Parameters(查询参数)2.2 Path

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格

SpringBoot返回文件让前端下载的几种方式

《SpringBoot返回文件让前端下载的几种方式》文章介绍了开发中文件下载的两种常见解决方案,并详细描述了通过后端进行下载的原理和步骤,包括一次性读取到内存和分块写入响应输出流两种方法,此外,还提供... 目录01 背景02 一次性读取到内存,通过响应输出流输出到前端02 将文件流通过循环写入到响应输出流

SpringBoot+Vue3整合SSE实现实时消息推送功能

《SpringBoot+Vue3整合SSE实现实时消息推送功能》在日常开发中,我们经常需要实现实时消息推送的功能,这篇文章将基于SpringBoot和Vue3来简单实现一个入门级的例子,下面小编就和大... 目录前言先大概介绍下SSE后端实现(SpringBoot)前端实现(vue3)1. 数据类型定义2.

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码