openlayer加載百度地圖。

問題:由於百度地圖原點在右下角,ol的在左上角。所以在ol里加載會需要對瓦片的xy編號做一些處理。

注意兩點:1:橫向編號小於0時改爲M|x|如(-7改爲 M7),縱向編號始終取反。

直接上代碼:

<template>
  <div class="container">
    <div class="title">
      <h3>百度地圖</h3>
      <el-button type="primary" @click="backHome">返回Home</el-button><br />
    </div>
    <div id="map" class="map">
      <div id="mouse-position"></div>
    </div>
  </div>
</template>

<script>
import "ol/ol.css";
import Map from "ol/Map";
import View from "ol/View";
import { Tile } from "ol/layer";
import { XYZ, TileImage } from "ol/source";
import TileGrid from "ol/tilegrid/TileGrid";
import { defaults, MousePosition } from "ol/control";
import { transform } from "ol/proj";

export default {
  data() {
    return {
      map: {}
    };
  },
  mounted() {
    this.initmap();
  },
  methods: {
    initmap() {
      let resolutions = [];
      let baiduX,baiduY;

      for (let i = 0; i < 19; i++) {
        resolutions[i] = Math.pow(2, 18 - i);
      }
      let tilegrid = new TileGrid({
        origin: [0, 0],
        resolutions: resolutions
      });
      
      let baidu_source = new TileImage({
        projection:"EPSG:3857",
        tileGrid: tilegrid,
        tileUrlFunction: function(tileCoord) {
          if (!tileCoord)  return "";
          let z = tileCoord[0];
          let x = tileCoord[1];
          let y = tileCoord[2];
          // 對編號xy處理
          baiduX = (x<0) ? x : 'M'+(-x);
          baiduY = -y;
          return "http://online3.map.bdimg.com/onlinelabel/?qt=tile&x="+baiduX+"&y="+baiduY+"&z="+z+"&styles=pl&udt=20151021&scaler=1&p=1";
        }
      });

      let baidu_layer = new Tile({
        source: baidu_source
      });

      let map = new Map({
        target: "map",
        layers: [baidu_layer],
        view: new View({
          projection: "EPSG:3857", 
          center: [13531290.967373039, 4675318.865056401],
          zoom: 12
        }),
        // 顯示鼠標位置座標
        controls: defaults().extend([
          new MousePosition({
            target: document.getElementById("mouse-position")
          })
        ])
      });
    },
    backHome() {
      this.$router.replace("/"); 
    }
  }
};
</script>

<style scoped></style>

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章