import store from '@/store' import AMapLoader from '@amap/amap-jsapi-loader' export function toPixel(arr) { return new window.AMap.Pixel(arr[0], arr[1]) } export function toSize(arr) { return new window.AMap.Size(arr[0], arr[1]) } export function pixelTo(pixel) { if (Array.isArray(pixel)) return pixel return [pixel.getX(), pixel.getY()] } export function toLngLat(arr) { return new window.AMap.LngLat(arr[0], arr[1]) } export function lngLatTo(lngLat) { if (!lngLat) return if (Array.isArray(lngLat)) return lngLat.slice() return [lngLat.getLng(), lngLat.getLat()] } /** * 逆地址解析 * @param coordinate 坐标数组[lng,lat] * @returns {*[]} */ export function reverseLnglat(coordinate) { let lnglat = [] if (coordinate instanceof Array) { // 如果是Array[lng,lat] lnglat = coordinate } else if (coordinate instanceof String) { // 如果是字符串(lng,lat) lnglat = coordinate.split(',') } else if (coordinate instanceof Object) { lnglat = [coordinate.lng, coordinate.lat] } return new Promise((resolve, reject) => { if (lnglat.length === 2) { AMapLoader.load({ key: store.getters.amapKey // 秘钥 }).then((AMap) => { AMap.plugin('AMap.Geocoder', function() { var geocoder = new AMap.Geocoder({ city: '' }) geocoder.getAddress(lnglat, function(status, result) { if (status === 'complete' && result.info === 'OK') { resolve(result.regeocode) // result为对应的地理位置详细信息 } else { reject('no address') } }) }) }).catch(error => { reject(error) }) } else { reject('no address') } }) } /** * 坐标系转换 * @param coordinate 坐标数组[lng,lat] */ export function convertLnglat(coordinate) { // 安全码 window._AMapSecurityConfig = { securityJsCode: store.getters.amapSecurityCode } return new Promise((resolve, reject) => { AMapLoader.load({ key: store.getters.amapKey // 秘钥 }).then((AMap) => { debugger AMap.convertFrom(coordinate, 'gps', (status, result) => { if (result.info === 'ok') { const lnglats = result.locations[0] resolve([lnglats.lng, lnglats.lat]) // Array.<LngLat> } else { reject('convert error:' + result.info) } }) }) }) } /** * @param arrs 二重数组 southWest, northEast */ export function toBounds(arrs) { return new window.AMap.Bounds(toLngLat(arrs[0]), toLngLat(arrs[1])) } export const commonConvertMap = { position: toLngLat, offset: toPixel, bounds: toBounds, LngLat: toLngLat, Pixel: toPixel, Size: toSize, Bounds: toBounds }