czmap
Version:
- 提供统一的API 实现不同的地图(百度、高德、腾讯)应用 丝滑切换 - 主要实现功能 - 基础地图展示 - 路径 - 围栏 #### 相关API使用
152 lines (146 loc) • 5.31 kB
text/typescript
import {initBMap as initBMapFn } from './BMap'
import {initAMap as initAMapFn } from './AMap'
import {initTMap as initTMapFn} from './TMap'
import { optionsTp } from './types/options'
export {optionsTp}
export default class CMap {
mapAk: string;
$options: any;
static wd:any = window || {}
constructor(options:optionsTp) {
this.$options = options;
this.mapAk = '';
const { type } = options
if (CMap.wd.$catch && CMap.wd.$catch === type){
if (type && type === 'TMAP') {
this.initTMap()
} else if (type && type === 'AMAP') {
this.initAMap()
} else if (type && type === 'BMAP') {
this.initBMap()
}
} else {
this.initMap()
}
}
// 初始化地图
initMap() {
const { type } = this.$options;
this.getMapAK(type);
(window as any).$catch = type;
if (type && type === 'TMAP') {
this.createTMap()
} else if (type && type === 'AMAP') {
this.createAMap()
} else if (type && type === 'BMAP') {
this.createBMap()
}
}
// 获取地图的ak
getMapAK(type:string) {
const {
mapAk
} = this.$options
if (mapAk) {
this.mapAk = mapAk
} else {
switch (type) {
case 'TMAP': {
this.mapAk = 'OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77'
break
}
case 'AMAP': {
this.mapAk = 'c081218aae02057742b9f1a100d6cf66'
break
}
default: {
this.mapAk = 'f7HnzEYGLgOyMyDVTh99ZEQqjlEzuhyC'
}
}
}
}
// 初始化百度地图
createBMap() {
const self = this, wd:any = window || {}
const {
drivingPath,
enclosure,
coordType
} = this.$options
const link = document.createElement('link');
link.setAttribute('rel', 'stylesheet');
link.setAttribute('type', 'text/css');
link.setAttribute('href', 'http://api.map.baidu.com/res/webgl/10/bmap.css');
document.getElementsByTagName('head')[0].appendChild(link);
// 百度地图 需要坐标系转换的一个插件 默认进入的时是GBJ02 的坐标系 需要转换为BD09的坐标
if (!coordType){
const coord = document.createElement('script');
coord.src = `https://unpkg.com/gcoord/dist/gcoord.js`;
document.body.appendChild(coord);
}
const s = document.createElement('script');
s.src = `http://api.map.baidu.com/getscript?type=webgl&v=1.0&ak=${self.mapAk}&services=&t=${(new Date).getTime()}`;
document.body.appendChild(s);
wd.BMapGL_loadScriptTime = (new Date).getTime();
wd.BMapGL = wd.BMapGL || {};
wd.BMapGL.apiLoad = function () {
delete wd.BMapGL.apiLoad;
console.log(!enclosure, !enclosure || enclosure && enclosure.type != 'district')
if (!enclosure || enclosure && enclosure.type != 'district') {
console.log(33333, "初始化轨迹")
self.initBMap()
}
};
if (drivingPath && drivingPath.length >= 2) {
const trackAnim = document.createElement('script');
trackAnim.src = `//mapopen.bj.bcebos.com/github/BMapGLLib/TrackAnimation/src/TrackAnimation.min.js`;
document.body.appendChild(trackAnim);
}
if (enclosure && enclosure.type === 'district'){
s.onload = function(){
console.log(33333, "初始化非轨迹")
self.initBMap()
}
}
}
// 初始化高德地图 - 加载
createAMap() {
const self = this,
{
enclosure
} = this.$options;
const url = `https://webapi.amap.com/maps?v=2.0&key=${self.mapAk}&&plugin=AMap.Scale,AMap.HawkEye,AMap.ToolBar,AMap.MapType`;
const jsapi = document.createElement('script');
jsapi.src = url;
document.body.appendChild(jsapi);
jsapi.onload = function () {
if (enclosure && enclosure.type === 'district'){
const prov = document.createElement('script');
prov.src = '//webapi.amap.com/ui/1.1/main.js?v=1.1.1'
document.body.appendChild(prov);
prov.onload = function () {
self.initAMap()
}
} else {
self.initAMap()
}
}
}
// 初始化腾讯地图 - 加载
createTMap() {
const self = this
const url = `https://map.qq.com/api/gljs?v=1.exp&key=${self.mapAk}`;
const jsapi = document.createElement('script');
jsapi.src = url;
document.body.appendChild(jsapi);
jsapi.onload = function () {
self.initTMap()
}
}
// 初始百度地图 - 抹平API操作
initBMap = initBMapFn
// 初始化高德地图 - 抹平API操作
initAMap = initAMapFn
// 初始腾讯德地图 - 抹平API操作
initTMap = initTMapFn
}