Home > Article > Web Front-end > How to operate bing Map and use it in vue project
This time I will show you how to use bing Map in the vue project. What are the precautions for using bing map in the vue project? The following is a practical case, let's take a look.
Write it at the front
It seems that only Baidu Maps has a global database in China, not Amap, Sogou, or Tencent, but Since the data of Baidu Map is not updated in a timely manner, it is best to use bingMap when doing related projects that require the use of foreign data.bing Map usage tutorial (basic)
Reference document: bing Map official tutorial## Bing Map initialization
Introduce bing map resources<script type='text/javascript' src='http://www.bing.com/api/maps/mapcontrol?callback=GetMap&key=[YOUR_BING_MAPS_KEY]' async defer></script>
<p id="myMap"></p>
<script type='text/javascript'>
function GetMap()
{
var map = new Microsoft.Maps.Map('#myMap');
//Add your post map load code here.
}
</script>
Set map control parameters
Commonly used control parametersbranchWhich branch of the map sdk is loaded: release (default), experimental
Add map events to bing map (reference)
callback
Callback after the map control script is loaded (default: GetMap)
key
userKey used by the user (details)
setLang
Specify the language used for map labels and navigation controls
Commonly used : Mainland China (zh-CN), Hong Kong (zh-HK), Simplified Chinese (zh-Hans), Taiwan (zh-TW), English-UK (en-GB), English-United States (en-US)
setMkt (details)
UR (details)
// 核心代码-demo Microsoft.Maps.Events.addHandler(你的地图名称, 触发地图事件名称, function() { 触发的事件 }); // 常用实例 //Add view change events to the map. // 视图更改事件 Microsoft.Maps.Events.addHandler(map, 'viewchangestart', function () { highlight('mapViewChangeStart'); }); Microsoft.Maps.Events.addHandler(map, 'viewchange', function () { highlight('mapViewChange'); }); Microsoft.Maps.Events.addHandler(map, 'viewchangeend', function () { highlight('mapViewChangEnd'); }); //Add mouse events to the map. // 鼠标事件 Microsoft.Maps.Events.addHandler(map, 'click', function () { highlight('mapClick'); }); Microsoft.Maps.Events.addHandler(map, 'dblclick', function () { highlight('mapDblClick'); }); Microsoft.Maps.Events.addHandler(map, 'rightclick', function () { highlight('mapRightClick'); }); Microsoft.Maps.Events.addHandler(map, 'mousedown', function () { highlight('mapMousedown'); }); Microsoft.Maps.Events.addHandler(map, 'mouseout', function () { highlight('mapMouseout'); }); Microsoft.Maps.Events.addHandler(map, 'mouseover', function () { highlight('mapMouseover'); }); Microsoft.Maps.Events.addHandler(map, 'mouseup', function () { highlight('mapMouseup'); }); Microsoft.Maps.Events.addHandler(map, 'mousewheel', function () { highlight('mapMousewheel'); }); //Add addition map event handlers Microsoft.Maps.Events.addHandler(map, 'maptypechanged', function () { highlight('maptypechanged'); });
bing Map Add pin (details)
Basic Pin Examplefunction GetMap() {
var map = new Microsoft.Maps.Map('#myMap', {
credentials: 'Your Bing Maps Key',
center: new Microsoft.Maps.Location(47.6149, -122.1941)
});
var center = map.getCenter();
//Create custom Pushpin
// 创建一个图钉
var pin = new Microsoft.Maps.Pushpin(center, {
// demo_1
title: 'Microsoft', // 图钉的标题
subTitle: 'City Center', // 图钉主体文字
text: '1' // 图钉内的文字
// demo_2
color: 'red', // 纯色图钉
});
//Add the pushpin to the map
map.entities.push(pin);
}
demo_1
demo_2
Add a custom image pin (details)
function GetMap() { var map = new Microsoft.Maps.Map('#myMap', { credentials: 'You Bing Maps Key' }); var center = map.getCenter(); //Create custom Pushpin var pin = new Microsoft.Maps.Pushpin(center, { icon: 'images/poi_custom.png', // 自定义图片路径 anchor: new Microsoft.Maps.Point(12, 39) }); //Add the pushpin to the map map.entities.push(pin); }
Custom icon pin
bing Map Add events to push pinsCore code
//Create a pushpin. var pushpin = new Microsoft.Maps.Pushpin(map.getCenter()); map.entities.push(pushpin); //Add mouse events to the pushpin. // 将自定义方法及鼠标事件添加到图钉上面 Microsoft.Maps.Events.addHandler(pushpin, 'click', function () { highlight('pushpinClick'); }); Microsoft.Maps.Events.addHandler(pushpin, 'mousedown', function () { highlight('pushpinMousedown'); }); Microsoft.Maps.Events.addHandler(pushpin, 'mouseout', function () { highlight('pushpinMouseout'); }); Microsoft.Maps.Events.addHandler(pushpin, 'mouseover', function () { highlight('pushpinMouseover'); }); Microsoft.Maps.Events.addHandler(pushpin, 'mouseup', function () { highlight('pushpinMouseup'); });
bing Map Add hover style to push pins
The core is still for bing Map Add events to push pins and modify the style of push pins through events
// demo var defaultColor = 'blue'; var hoverColor = 'red'; var mouseDownColor = 'purple'; var pin = new Microsoft.Maps.Pushpin(map.getCenter(), { color: defaultColor }); map.entities.push(pin); Microsoft.Maps.Events.addHandler(pin, 'mouseover', function (e) { e.target.setOptions({ color: hoverColor }); }); Microsoft.Maps.Events.addHandler(pin, 'mousedown', function (e) { e.target.setOptions({ color: mouseDownColor }); }); Microsoft.Maps.Events.addHandler(pin, 'mouseout', function (e) { e.target.setOptions({ color: defaultColor }); });
Add hover style to push pins
bing Map fixed anchor pointOne of the most
common issuesthat developers encounter when using custom pins is that when they zoom the map, it appears as if their pins are drifting to or Move away from where it was anchored. This is due to incorrect anchor point values in the pin options. The anchor point specifies which pixel coordinate of the image, relative to the upper left corner of the image, should overlap the pin position coordinate. Common
Configuration Referencebing Map Using vue may introduce bing Map in vue Problems you will encounter
Since Vue generally refers to third-party plug-ins through import, there will be two problems when using script tags to introduce bing Map SDK in HTML
1 . An error will be reported in the console: Mirosorft is not defined
2.vue-cli will report an error: Mirosorft is not defined
The reason here is due to asynchronous loading, so when calling "Mirosorft" Sometimes the SDK may not be referenced successfully
Solving the error "Mirosoft is not defined"
Document referenceTo solve the "Mirosoft is not defined" error, just ensure that the relevant tool classes can be correctly introduced in the project before calling the map.
// bing map init devTools export default { init: function (){ console.log("初始化bing地图脚本..."); // bing map key const bingUesrKey = '你的bingMap Key'; const BingMap_URL = 'http://www.bing.com/api/maps/mapcontrol?callback=GetMap&key=' + bingUesrKey; return new Promise((resolve, reject) => { if(typeof Microsoft !== "undefined") { resolve(Microsoft); return true; } // 插入script脚本 let scriptNode = document.createElement("script"); scriptNode.setAttribute("type", "text/javascript"); scriptNode.setAttribute("src", BingMap_URL); document.body.appendChild(scriptNode); // 等待页面加载完毕回调 let timeout = 0; let interval = setInterval(() => { // 超时10秒加载失败 if(timeout >= 20) { reject(); clearInterval(interval); console.error("bing地图脚本初始化失败..."); } // 加载成功 if(typeof Microsoft !== "undefined") { resolve(Microsoft); clearInterval(interval); console.log("bing地图脚本初始化成功..."); } timeout += 1; }, 500); }); } } // bing map vue import bingMap from './**/bing-map'; bingMap.init() .then((Microsoft) => { console.log(Microsoft) console.log("加载成功...") // 开始地图操作 })
集成bing Map组件到vue中
需要达到的功能
在vue项目中成功加载bing Map (完成)
当点击bing Map的时候,返回点击点的经纬度 (完成)
子组件触发事件返回参数到父组件
当已有经纬度的时候,加载bingMap自动显示其经纬度所在的位置并设置图钉 (待完成)
子组件触发事件返回参数到父组件
实现原理
vue-$meit
核心代码
// 子组件 <template> <p @click="iclick"></p> </template> methods:{ iclick(){ let data = { a:'data' }; this.$emit('ievent', data1, 'data2Str'); } } // 父组件 <i-template @ievent = "ievent"></i-template> methods:{ ievent(...data){ console.log('allData:',data); // data为包含传过来所有数据的数组,第一个元素是对象,第二个元素是字符串 } }
封装bing Map通用组件
// 核心代码 <template> <p class="map-container"> <p id="localMap"></p> </p> </template> <script> import initBingMap from './initMap.js' export default { data () { return { lngNum: null, // 经度 latNum: null, // 纬度 } }, created: function () { let _this = this; initBingMap.init() .then((Microsoft) => { console.log(Microsoft) console.log("加载成功...") _this.initMap(); }) }, methods: { initMap () { let _this = this; let map = new Microsoft.Maps.Map('#localMap', { credentials: 'AgzeobkGvmpdZTFuGa7_6gkaHH7CXHKsFiTQlBvi55x-QLZLh1rSjhd1Da9bfPhD' }); Microsoft.Maps.Events.addHandler(map, 'click', _this.getClickLocation); }, getClickLocation (e) { //若点击到地图的标记上,而非地图上 let [_this, loc] = [this, null]; if (e.targetType == 'pushpin') { loc = e.target.getLocation(); } //若点击到地图上 else { var point = new Microsoft.Maps.Point(e.pageX, e.pageY); loc = e.target.tryPixelToLocation(point, Microsoft.Maps.PixelReference.page); } console.log(loc.latitude+", "+loc.longitude); console.log(loc); _this.lngNum = loc.longitude; _this.latNum = loc.latitude; let data = { lngNum: _this.lngNum, latNum: _this.latNum } this.$emit('getLocationNums',data); }, } } </script> <style scoped> .map-container { width: 100%; height: 400px; border: 1px solid #000; } </style> 在组件中调用bing Map通用组件 // 引入bingMap import bingMapsLayer from 'bingMap.vue' // component中定义 components: { bingMapsLayer }, // template中使用 <bing-maps-layer @getLocationNums="getLocationNums"></bing-maps-layer> // 定义触发点击标记返回经纬度的事件函数 getLocationNums (...data) { let _this = this; console.log('click'); console.log(data); // 这里的data中即子组件bingMap返回的点击获取的经纬度值 },
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
The above is the detailed content of How to operate bing Map and use it in vue project. For more information, please follow other related articles on the PHP Chinese website!