UNPKG

mtl-js-sdk

Version:

179 lines (149 loc) 5.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.amapOpen = amapOpen; var _loadScript = require("./loadScript"); var _loadMap = require("./loadMap"); var _mapConfig = require("./mapConfig"); function amapOpen(obj) { var longitude = obj.longitude, latitude = obj.latitude; (0, _loadScript.loadScript)(_mapConfig.amapURL, function () { var state = { amap: null, // 地图HTML元素 map: null, // 地图实例 marker: null, // 地图标点 geolocation: null, // 地图定位插件 geocoder: null, // 地图逆地理编码插件 check: null, // 地址列表选中标记 selectId: '' // 地址列表选中id }; var mapProps = { resizeEnable: true, zoom: 15, center: [longitude, latitude] }; var markerProps = { position: [longitude, latitude] }; var geocoderProps = { radius: 1000, extensions: 'all' }; var geolocationProps = { enableHighAccuracy: true, timeout: 10000, buttonPosition: 'RB' }; var bindPlugins = function bindPlugins() { // 点标记 AMap.plugin('AMap.Marker', function () { state.marker = new AMap.Marker(markerProps); state.map.add(state.marker); }); // 逆编码插件 AMap.plugin('AMap.Geocoder', function () { state.geocoder = new AMap.Geocoder(geocoderProps); state.map.addControl(state.geocoder); }); // 定位插件 AMap.plugin('AMap.Geolocation', function () { state.geolocation = new AMap.Geolocation(geolocationProps); state.map.addControl(state.geolocation); }); }; var bindEvents = function bindEvents() { //地图点击事件 state.map.on('click', function (e) { var lng = e.lnglat.getLng(); var lat = e.lnglat.getLat(); var lnglat = [lng, lat]; state.marker.setPosition(lnglat); state.map.setCenter(lnglat); getAddr(lnglat); }); //关闭地图 document.querySelector('#mtl_map_navbar_back').onclick = function () { state.map && state.map.destroy(); state.amap.parentNode.removeChild(state.amap); }; //确认地址 document.querySelector('#mtl_map_navbar_confirm').onclick = function () { var addrstr = document.querySelector("#mtl_map_navbar_addr").innerText; var lnglat = state.marker.getPosition(); var zoom = state.map.getZoom(); var res = { addrstr: addrstr, longitude: lnglat.lng, latitude: lnglat.lat, zoom: zoom }; state.map & state.map.destroy(); state.amap.parentNode.removeChild(state.amap); obj && obj.success(res); }; }; var mapCreate = function mapCreate() { (0, _loadMap.loadMapStyle)(); state.amap = (0, _loadMap.loadMapHTML)(); state.map = new AMap.Map('mtl_map_container', mapProps); }; var mapInit = function mapInit() { // 根据openLocation传的值设置标记 state.marker.setPosition([longitude, latitude]); getAddr([longitude, latitude]); }; //逆地理编码and创建地址列表 var getAddr = function getAddr(lnglat) { state.geocoder.getAddress(lnglat, function (status, result) { if (status === 'complete' && result.regeocode) { updateAddr(result.regeocode.formattedAddress); createAddrList(result.regeocode.pois); } else { console.log('根据经纬度查询地址失败'); } }); }; //创建地址列表 var createAddrList = function createAddrList(data) { document.querySelector("#mtl_map_addrlist").innerHTML = ''; state.selectId = ''; data.map(function (item) { document.querySelector("#mtl_map_addrlist").append(createAddrItem(item)); }); }; var createAddrItem = function createAddrItem(item) { var listItem = document.createElement("li"); listItem.innerHTML = "<div><p>".concat(item.name, "</p><span>").concat(item.address, "</span></div>"); listItem.id = item.id; listItem.onclick = function () { addrItemClick(item); }; return listItem; }; var addrItemClick = function addrItemClick(item) { var lnglat = [item.location.lng, item.location.lat]; updateAddr(item.address + item.name); state.marker.setPosition(lnglat); state.map.setCenter(lnglat); selectedItem(item.id); }; var selectedItem = function selectedItem(currentId) { state.selectId = currentId; if (state.selectId !== '' && state.check !== null) { state.check.parentNode.removeChild(state.check); } state.check = document.createElement("span"); state.check.innerText = "√"; document.querySelector("#" + currentId).append(state.check); }; //更新顶端地址 var updateAddr = function updateAddr(addr) { document.querySelector("#mtl_map_navbar_addr").innerText = addr; }; mapCreate(); bindPlugins(); bindEvents(); mapInit(); }); }