/** * Created by Administrator on 2018/7/17. */ var googleMap = { search_id: null, map_id: null, listData: [], map: {}, marker: null, markerList: [], infoWindow: null, geocoder: null, callback: null, defaultAddress: "", imageDomain: "", init: function (callback, queryAddress, imageUrl) { googleMap.search_id = document.getElementById("address_all"); googleMap.map_id = document.getElementById("MapContent"); googleMap.listData = []; googleMap.markerList = []; googleMap.defaultAddress = queryAddress; googleMap.imageDomain = imageUrl; googleMap.deleteLink(); var items = []; var item = {}; item['lat'] = parseFloat("30.6574389"); item['lng'] = parseFloat("104.06592380000006"); items[0] = item; googleMap.listData = items; googleMap.listData = items; googleMap.initMap(); if (googleMap.defaultAddress == "") { googleMap.initMapFirst(); } else { googleMap.searchAddress(); } googleMap.callback = callback; }, deleteLink: function () { //删除google的字体 var e = document; var t = e.getElementsByTagName("head")[0], a = t.insertBefore; t.insertBefore = function (e, i) { e.href && e.href.indexOf("fonts.googleapis.com") > -1 || a.call(t, e, i) } }, initMap: function () { var data = []; if (('undefined' != googleMap.listData) && googleMap.listData.length > 0) { data[0] = googleMap.listData[0]; var LatLng = new google.maps.LatLng(data[0].lat, data[0].lng); if (data.length > 0) { googleMap.map = new google.maps.Map(googleMap.map_id, { zoom: 14, center: LatLng }); } } googleMap.geocoder = new google.maps.Geocoder(); //添加监听点击地图事件 google.maps.event.addListener(googleMap.map, 'click', function (event) { googleMap.placeMarker(event.latLng); }); //搜索文本框的回车事件 googleMap.search_id.onkeydown = function () { if (event.keyCode == 13) { googleMap.searchAddress(); } } }, initMapFirst: function () { if (('undefined' != googleMap.listData) && (googleMap.listData.length > 0)) { googleMap.GetAddress(googleMap.listData[0].lat, googleMap.listData[0].lng); } }, addInfowindow: function (lat, lng, address, newArray, isCallBack) { var message = "<div style='text-align:left;'>"; message += "<br />"; message += "纬度:<span style='color:#06c;'>" + lat + "</span> 经度:<span style='color: #FD7917;'>" + lng + "</span>"; message += "<br />"; message += "地址:" + address; message += "</div>"; if (googleMap.marker) { googleMap.marker.setMap(null); } var imageUrl = {}; if (isCallBack == 1) { imageUrl = { url: googleMap.imageDomain + "/static/location_01.png", // image is 512 x 512 scaledSize: new google.maps.Size(30, 40), } } else { imageUrl = { url: googleMap.imageDomain + "/static/location_01.png", // image is 512 x 512 scaledSize: new google.maps.Size(30, 40), } } googleMap.marker = new google.maps.Marker({ title: address, map: googleMap.map, position: new google.maps.LatLng(lat, lng), icon: imageUrl }); if (googleMap.infowindow) { googleMap.infowindow.close(); } googleMap.infowindow = new google.maps.InfoWindow({ content: message, size: new google.maps.Size(50, 50) }); googleMap.infowindow.open(googleMap.map, googleMap.marker); //设置居中 googleMap.map.setCenter(new google.maps.LatLng(lat, lng)); if (googleMap.callback != null && isCallBack == 1) { googleMap.callback({ "lat": lat, "lng": lng, "address": address, "areaArray": newArray, }) } }, GetAddress: function (lat, lng) { var address = "四川成都天府广场"; googleMap.addInfowindow(lat, lng, address); return address; }, searchAddress: function () { var address = googleMap.search_id.value; googleMap.geocoder.geocode({ 'address': address }, function (results, status) { if (status == google.maps.GeocoderStatus.OK) { googleMap.getAddress(results, 1); } }); }, placeMarker: function (location) { //地图的点击事件,根据点击的点获取经度,纬度和地址信息 if (googleMap.geocoder) { googleMap.geocoder.geocode({ 'location': location }, function (results, status) { if (status == google.maps.GeocoderStatus.OK) { googleMap.getAddress(results, 1); } }); } }, getAddress: function (results, isCallBack) { var re = /^[\u4E00-\u9FA5]+$/; if (results[0]) { var Address = results[0].formatted_address; var newArray = []; results.forEach(item => { if (re.test(item.formatted_address)) { item.address_components.forEach(arrItem => { var name = arrItem.long_name.replace('省', '').replace('市', ''); if (!googleMap.isExists(newArray, name)) { newArray.push(name); } }) } }); googleMap.addInfowindow(results[0].geometry.location.lat(), results[0].geometry.location.lng(), Address, newArray, isCallBack); } }, //判断数组是否存在 值 isExists: function (arr, item) { var flag = false; for (var i = 0; i < arr.length; i++) { if (arr[i] == item) { flag = true; break; } } return flag; }, initLine: function (dataList, _this) { let _dataList = JSON.parse(JSON.stringify(dataList)); let lat = parseFloat(_dataList[0].lat); let lng = parseFloat(_dataList[0].lng); let center = { lng: lng, lat: lat } //创建地图实例,zoom是缩放比例 _this.map = new google.maps.Map(document.getElementById('map_canvas'), { zoom: 7, center: center, mapTypeId: google.maps.MapTypeId.ROADMAP }); _this.directionsDisplay.setMap(_this.map); googleMap.calcRoute(_dataList, _this) }, calcRoute: function (_dataList, _this) { // 创建路径规划 // 分解数据 获得起 止 以及中间数据 let lat = parseFloat(_dataList[0].lat); let lng = parseFloat(_dataList[0].lng); let elat = parseFloat(_dataList[_dataList.length - 1].lat); let elng = parseFloat(_dataList[_dataList.length - 1].lng); let start = lat + ',' + lng; let end = elat + ',' + elng; let waypoints = []; if (_dataList.length > 2) { _dataList.forEach((x, index) => { if (index >= 1 && index !== (_dataList.length - 1)) { let obj = { location: x.lat + ',' + x.lng }; waypoints.push(obj) } }); } let request = { // 组装连线数据 origin: start, // 起 destination: end, // 止 travelMode: google.maps.TravelMode.DRIVING, // waypoints: [{location:"30.5226477,104.05806469999993"},{location:"30.67416759999999,104.04721970000003"}] // 中间点数据 }; if (waypoints.length > 0) { request.waypoints = waypoints } _this.directionsService.route(request, function (result, status) { if (status == google.maps.DirectionsStatus.OK) { _this.directionsDisplay.setDirections(result); } }); }, }; export default googleMap;