高德地图根据名称批量在线获取坐标

功能主要是通过导入excel生成坐标,在把生成好的坐标导出excel
写这个功能之前应为公司要做离线地图,要把所有的企业标记在地图上,库里有一万多家企业,重点是不能访问外网,总不能一个一个查,在一个一个更新,所有就写了这个方法,先在自己电脑批量生成坐标,生成excel,再写一个存储过程更新数据库。

比较重要的几个js文件

html部分:











名称 x y


下面是代码:

        // 在线读入excel
      function readWorkbookFromLocalFile(file, callback) {
            var reader = new FileReader();
            reader.onload = function(e) {
                var data = e.target.result;
                var workbook = XLSX.read(data, {
                    type: 'binary'
                });
                if(callback) callback(workbook);
            };
            reader.readAsBinaryString(file);
        }


                 $(function() {
            document.getElementById('file').addEventListener('change', function(e) {
                var files = e.target.files;
                if(files.length == 0) return;
                var f = files[0];
                if(!/\.xlsx$/g.test(f.name)) {
                    alert('仅支持读取xlsx格式!');
                    return;
                }
                readWorkbookFromLocalFile(f, function(workbook) {
                    readWorkbook(workbook);
                });
            });
            //loadRemoteFile('./sample/test.xlsx');
        });

                   function readWorkbook(workbook) {
            var sheetNames = workbook.SheetNames; // 工作表名称集合
            var worksheet = workbook.Sheets[sheetNames[0]]; // 这里我们只读取第一张sheet
            var csv = XLSX.utils.sheet_to_csv(worksheet);
            csv2table(csv);
        }

        // 将csv转换成表格
        function csv2table(csv) {
            var rows = csv.split('\n');
            rows.pop(); // 最后一行没用的
            rows.forEach(function(row, idx) {
                var columns = row.split(',');

                columns.forEach(function(column) {
                                            
                                            // 每读到一个企业名称就查询一次,在回调函数中把值附在页面
                    mapObj.plugin(["AMap.PlaceSearch"], function() {

                        var msearch = new AMap.PlaceSearch(); //构造地点查询类
                        AMap.event.addListener(msearch, "complete", placeSearch_CallBack1); //查询成功时的回调函数
                        msearch.setCity("江苏");  // 根据自己需要选择城市
                        msearch.search(column); //关键字查询查询
                    });

                });

            });
        }
                    
                    // 回调函数 可自行打印data的值,里面有地址,名称,企业类型等一些数据
                    function placeSearch_CallBack1(data) {
            var poiArr = data.poiList.pois;
            //poiArr[0].location.getLng();  //X
            //poiArr[0].location.getLat();  //Y
            $("#tbody").append('<tr><td>' + poiArr[0].name + '</td><td>' + poiArr[0].location.getLng() + '</td><td>' + poiArr[0].location.getLat() + '</td></tr>');
        }


                    // ------------------------------导出---------------------------------------
                    function exportExcel() {
                            // 直接使用js中的方法,非常方便
            var sheet = XLSX.utils.table_to_sheet($('table')[0]);
            openDownloadDialog(sheet2blob(sheet), '导出.xlsx');
        }

                    // 将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载
        function sheet2blob(sheet, sheetName) {
            sheetName = sheetName || 'sheet1';
            var workbook = {
                SheetNames: [sheetName],
                Sheets: {}
            };
            workbook.Sheets[sheetName] = sheet;
            // 生成excel的配置项
            var wopts = {
                bookType: 'xlsx', // 要生成的文件类型
                bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
                type: 'binary'
            };
            var wbout = XLSX.write(workbook, wopts);
            var blob = new Blob([s2ab(wbout)], {
                type: "application/octet-stream"
            });
            // 字符串转ArrayBuffer
            function s2ab(s) {
                var buf = new ArrayBuffer(s.length);
                var view = new Uint8Array(buf);
                for(var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
                return buf;
            }
            return blob;
        }

                     /**
         * 通用的打开下载对话框方法,没有测试过具体兼容性
         * @param url 下载地址,也可以是一个blob对象,必选
         * @param saveName 保存文件名,可选
         */
        function openDownloadDialog(url, saveName) {
            if(typeof url == 'object' && url instanceof Blob) {
                url = URL.createObjectURL(url); // 创建blob地址
            }
            var aLink = document.createElement('a');
            aLink.href = url;
            aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
            var event;
            if(window.MouseEvent) event = new MouseEvent('click');
            else {
                event = document.createEvent('MouseEvents');
                event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
            }
            aLink.dispatchEvent(event);
        }

猜你喜欢

转载自www.cnblogs.com/itzuoyou/p/10912745.html