mtl-js-sdk
Version:
179 lines (149 loc) • 5.16 kB
JavaScript
;
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();
});
}