ホームページ  >  記事  >  ウェブフロントエンド  >  bing Mapの操作とvueプロジェクトでの利用方法

bing Mapの操作とvueプロジェクトでの利用方法

php中世界最好的语言
php中世界最好的语言オリジナル
2018-05-25 14:44:002301ブラウズ

今回は、Vue プロジェクトで Bing Map を使用する方法と、Vue プロジェクトで Bing Map を使用する際の 注意事項 について説明します。実際のケースを見てみましょう。

前に書いてください

Amap、Sogou、Tencentではなく、Baidu Mapだけが中国でグローバルデータベースを持っているようですが、Baidu Mapのデータ更新が間に合わないため、関連プロジェクトを実行するときに使用する必要があります。外部データを探す場合は、bingMap を使用することをお勧めします。

Bing Mapの使い方チュートリアル(基本編)

参考資料:bing Map公式チュートリアル

Bing Mapの初期化

Bing Mapのリソースのご紹介

<script type=&#39;text/javascript&#39; src=&#39;http://www.bing.com/api/maps/mapcontrol?callback=GetMap&key=[YOUR_BING_MAPS_KEY]&#39; async defer></script>

りー

マップ コントロール パラメーターを設定します

共通コントロール パラメーター

ブランチ
ロードするマップ SDK のブランチ: リリース (デフォルト)、実験的
コールバック
マップ コントロール スクリプトがロードされた後のコールバック (デフォルト: GetMap)
key
ユーザーは userKey (詳細) を使用します
setLang
マップラベルとナビゲーションコントロールに使用される言語を指定します
一般的に使用される: 中国本土 (zh-CN)、香港 (zh-HK)、簡体字中国語 (zh-Hans)、台湾 ( zh- TW)、英語-英国 (en-GB)、英語-米国 (en-US)
setMkt (詳細)
UR (詳細)

bing マップにマップ イベントを追加 (参照)

<p id="myMap"></p>
<script type=&#39;text/javascript&#39;>
 function GetMap()
 {
  var map = new Microsoft.Maps.Map('#myMap');
  //Add your post map load code here.
 }
</script>
bing Mapピンを追加する (詳細)

基本的なピンの例

// 核心代码-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'); });
demo_1

demo_2

カスタム画像ピンを追加する (詳細)

function 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);
}

カスタムアイコン付きピン

Bing Map は画鋲にイベントを追加します

コア コード

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);
}
bing Map は画鋲にホバー スタイルを追加します

中心となるのは、Bing Map で画鋲にイベントを追加し、イベントを通じて画鋲のスタイルを変更することです

//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'); });
Addホバー スタイルを画鋲に変更

地図の固定アンカー

カスタム ピンを使用するときに開発者が遭遇する最も

一般的な問題の 1 つは、地図をズームするとピンがずれているように見えることです。または固定されている場所から。これは、ピン オプションのアンカー ポイントの値が正しくないことが原因です。アンカー ポイントは、画像の左上隅を基準とした画像のどのピクセル座標がピン位置座標と重なるかを指定します。 共通

設定リファレンス

bing Map vue を使用して vue に bing Map を導入する場合、問題が発生する可能性があります

vue は通常、インポートを通じてサードパーティのプラグインを参照するため、2 つの問題がありますHTML で bing Map SDK を導入するためにスクリプト タグを使用すると発生します

1. コンソールにエラーが報告されます: Mirosoft が定義されていません

2. vue-cli はエラーを報告します: Mirosoft が定義されていません

これは非同期読み込みのため、「Mirosoft」を呼び出すときにSDKが正常に参照されない可能性があります

「Mirosoftが定義されていません」エラーを解決してください

ドキュメントリファレンス

「Mirosoftが定義されていません」を解決してください" エラー。マップを呼び出す前に、関連するツール クラスをプロジェクトに正しく導入できれば問題ありません。

// 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中文网其它相关文章!

推荐阅读:

Angular项目中使用scss步骤详解

怎样使用vue2.0+koa2+mongodb实现注册登陆

以上がbing Mapの操作とvueプロジェクトでの利用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。