高德地圖根據名稱批量在線獲取坐標


功能主要是通過導入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);
		}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM