(function () { // 图片路径 const locationIMGPath = 'img/location.png'; const markerBalckPath = 'img/marker_black.svg'; const markerRedPath = 'img/marker_red.svg'; const markerBluePath = 'img/marker_blue.svg'; let map; let lastMarker = null; let lastClickedMarker = null; let isShowWaterIntakeDetail = false; let zoom = 12; document.addEventListener('DOMContentLoaded', function () { initMap(); // buttonOverLay(); mountMethodToWindow(); }); window.onload = function () { //加载坐标点 window.Android.loadMarker(); }; // 初始化地图 function initMap() { var imageURL = "http://t0.tianditu.gov.cn/img_w/wmts?" + "SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles" + "&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=d8beed89b43160a9a185e5aff431f85d"; //创建自定义图层对象 var lay = new T.TileLayer(imageURL, { minZoom: 1, maxZoom: 18 }); var config = { layers: [lay] }; map = new T.Map("mapDiv", config); var scale = new T.Control.Scale(); //添加比例尺控件 map.addControl(scale); map.centerAndZoom(new T.LngLat(116.40769, 39.89945), zoom); //地图的初始化中心点,此为北京的经纬度 map.addEventListener("click", closeWaterIntakeDetail); } // 地图点击后获取经纬度 function getLngLat(lnglat) { console.log(lnglat.lng.toFixed(6) + "," + lnglat.lat.toFixed(6)); addClickOverLay(lnglat); } // 点击后添加坐标点 function addClickOverLay(lnglat) { removeMyOverLay(); let marker = new T.Marker( new T.LngLat(lnglat.lng, lnglat.lat) // 创建标注 ); map.addOverLay(marker); // 将标注添加到地图中 // 设置弹出的窗口样式 let infoWin = new T.InfoWindow(); let sContent = "
" + "
" + "
电话 : (010)88187700
地址:北京市顺义区机场东路国门商务区地理信息产业园2号楼天地图大厦" + "
" + "" + "
" + "
"; infoWin.setContent(sContent); // 添加点击事件 marker.addEventListener("click", function () { marker.openInfoWindow(infoWin); }); lastMarker = marker; } // 删除上次点击后添加的标注 function removeMyOverLay() { if (lastMarker !== null) { map.removeOverLay(lastMarker); // 将标注从地图中移除 } } // 模拟添加取水口标注 function buttonOverLay() { map.clearOverLays(); // 清理地图上的所有覆盖物 let data_info = [ [116.417854, 39.921988, "235取水口"], [116.406605, 39.921585, "237取水口"], [116.412222, 39.912345, "236取水口"] ]; for (let i = 0; i < data_info.length; i++) { let icon = new T.Icon({ iconUrl: markerBluePath, iconSize: new T.Point(27, 27), iconAnchor: new T.Point(10, 25) }); let marker = new T.Marker( new T.LngLat(data_info[i][0], data_info[i][1]), // 创建标注 { icon: icon } ); marker.addEventListener("click", function (data) { addMarkerListener(data); }); map.addOverLay(marker); // 将标注添加到地图中 let label = new T.Label({ text: data_info[i][2], position: marker.getLngLat(), offset: new T.Point(-50, 10), // 设置标注文字的位置 opacity: 1, // 设置文本的显示不透明度(范围0-1) }); label.setBorderLine(0); // 设置文本的边框线宽 label.setBackgroundColor("transparent"); // 设置文本的背景色(透明色) label.setFontColor("#0000FF"); label.setFontSize(10); map.addOverLay(label); } } // 显示标注点击后的窗口 function openInfo(content, e) { let point = e.lnglat; let markerInfoWin = new T.InfoWindow(content, { offset: new T.Point(0, -30) }); map.openInfoWindow(markerInfoWin, point); // 开启信息窗口 } // 手机获取到定位后显示定位 function locationOverLay(lng, lag) { console.log("function》》》》》locationOverLay"); map.centerAndZoom(new T.LngLat(lng, lag), map.getZoom()); let icon = new T.Icon({ iconUrl: locationIMGPath, iconSize: new T.Point(27, 27), iconAnchor: new T.Point(10, 25) }); let marker = new T.Marker(new T.LngLat(lng, lag), { icon: icon }); map.addOverLay(marker); } //设置地图中心点 function setCenterAndZoom(lng, lat,thiszoom) { zoom=thiszoom; console.log("function》》》》》setCenterAndZoom>>>>lng:" + lng + ",lat:" + lat); map.centerAndZoom(new T.LngLat(lng, lat), zoom); } // 将方法挂载到 window 上 function mountMethodToWindow() { window.locationOverLay = locationOverLay; window.showToast = showToast; window.addMarker = addMarker; window.setCenterAndZoom = setCenterAndZoom; } // 调用原生安卓方法显示取水口详情 function showWaterIntakeDetail(data) { isShowWaterIntakeDetail = true; window.Android.showWaterIntakeView(data); } // 调用原生安卓方法隐藏取水口详情 function closeWaterIntakeDetail(data) { if (lastClickedMarker !== null) { // 如果有点击取水口则将取水口恢复成黑色 // 上次点击的标注改为黑色 var defaulticon = new T.Icon({ iconUrl: markerBluePath, iconSize: new T.Point(27, 27), iconAnchor: new T.Point(10, 25) }); lastClickedMarker.setIcon(defaulticon); } if (isShowWaterIntakeDetail) { // 假如显示了取水口详情则隐藏取水口详情 isShowWaterIntakeDetail = false; window.Android.closeWaterIntakeView(); } else { // 假如没有显示取水口则添加点击的坐标 getLngLat(data.lnglat); } } // 点击标注的事件 function addMarkerListener(data) { chageMarkerIcon(data); showWaterIntakeDetail("模拟数据"); } // 修改点击标注的图标 function chageMarkerIcon(data) { // 点击的标注改为红色 var currentMarker = data.target; // 点击后图标 var clickedIcon = new T.Icon({ iconUrl: markerRedPath, iconSize: new T.Point(27, 27), iconAnchor: new T.Point(10, 25) }); // 设置当前点击的 marker 为点击后图标 currentMarker.setIcon(clickedIcon); // 判断点击的不是同一个坐标 if (lastClickedMarker !== null) { if (!isEqualsLngLat(data.target.getLngLat(), lastClickedMarker.getLngLat())) { var defaulticon = new T.Icon({ iconUrl: markerBluePath, iconSize: new T.Point(27, 27), iconAnchor: new T.Point(10, 25) }); lastClickedMarker.setIcon(defaulticon); } } lastClickedMarker = data.target; } //调安卓原生 function showToast() { // 调用 JavaScript 接口对象的方法 window.Android.showToast('Hello, Android!'); } // 判断两个坐标是否一致 function isEqualsLngLat(data1, data2) { return data1.lat === data2.lat && data1.lng === data2.lng; } //添加从原生传过来的坐标并显示在地图上 function addMarker(jsonData) { console.log("function》》》》》addMarker"); var array = JSON.parse(jsonData); var icon = new T.Icon({ iconUrl: markerBluePath, iconSize: new T.Point(27, 27), iconAnchor: new T.Point(10, 25) }); array.forEach(element => { let marker = new T.Marker( new T.LngLat(element[0], element[1]) // 创建标注 , { icon: icon }); //添加点击事件 marker.addEventListener("click", (data) => { addMarkerListener(data) }); map.addOverLay(marker); // 将标注添加到地图中 let label = new T.Label({ text: element[2], position: marker.getLngLat(), offset: new T.Point(-35, 8), // 设置标注文字的位置 opacity: 1, // 设置文本的显示不透明度(范围0-1) }); label.setBorderLine(0); // 设置文本的边框线宽 label.setBackgroundColor("transparent"); // 设置文本的背景色(透明色) label.setFontColor("#0000FF"); label.setFontSize(10); map.addOverLay(label); }); return "addMarker加载成功" } })();