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

发布时间:2020-02-07 15:12:46编辑:丝画阁阅读(27)

功能主要是通过导入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('
' + poiArr[0].name + ' ' + poiArr[0].location.getLng() + ' ' + poiArr[0].location.getLat() + ' ');
        } // ------------------------------导出--------------------------------------- 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);
        }

关键字