天地图开发指南

news2024/11/25 1:01:16

1、 申请天地图key

1.1注册账号

注册地址:https://uums.tianditu.gov.cn/register

1.2 申请开发者

登录后 ,申请开发者https://console.tianditu.gov.cn/api/register

1.3 创建应用

点击控制台,创建应用

在这里插入图片描述

1.4 天地图key

在这里插入图片描述

2、天地图api使用

2.1首先再vue的public文件夹下面的index.html引入天地图js

 <script
      type="text/javascript"
      src="http://api.tianditu.gov.cn/api?v=4.0&tk=自己天地图的key"
    ></script>

在这里插入图片描述

2.2在vue页面里面

在这里插入图片描述
在这里插入图片描述

2.2 给天地图加图层

在这里插入图片描述
在这里插入图片描述

3 、地图操作

3.1放大缩小

在这里插入图片描述

<template>
  <div class="home">
    天地图
    <div id="map">
      <div class="btns">
        <input type="button" value="放大 +" @click="ZoomUp" />
        <input type="button" value="缩小 -" @click="ZoomDown" />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
        map: '',
        zoom: 18
    };
  },
  computed: {},
  mounted() {
    this.map = new T.Map("map");
    this.map.centerAndZoom(new T.LngLat(116.40769, 39.89945), this.zoom);
    this.map.enableScrollWheelZoom();
  },
  methods: {
    ZoomUp() {
      // 放大一级地图
      this.map.zoomIn();
    },
    ZoomDown() {
      // 缩小一级地图
      this.map.zoomOut();
    },
  },
};
</script>

<style lang="scss" scoped>
.home {
  #map {
    width: 100vw;
    height: 90vh;
    position: relative;
    .btns {
      position: absolute;
      width: 200px;
      height: 200px;
      border: 1px solid red;
      top: 10;
      left: 10;
      z-index: 999;
    }
  }
}
.flex {
  display: flex;
}
.flex-s {
  display: flex;
  justify-content: space-between;
}
</style>

3.2移动地图位置并指定缩放精度

将地图中心点,移动到指定位置,同时指定缩放精度

<template>
  <div class="home">
    天地图
    <div id="map">
      <div class="btns">
        <input type="button" value="放大 +" @click="ZoomUp" />
        <input type="button" value="缩小 -" @click="ZoomDown" />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
      map: "",
      zoom: 18,
    };
  },
  computed: {},
  mounted() {
    this.map = new T.Map("map");
    this.map.centerAndZoom(new T.LngLat(116.40769, 39.89945), this.zoom);
    this.map.enableScrollWheelZoom();
    setTimeout(() => {
      // 将地图中心点,移动到指定位置,同时指定缩放精度
      this.map.panTo(new T.LngLat(116.64899, 40.12948), 12);
    }, 2000);
  },
  methods: {
    ZoomUp() {
      // 放大一级地图
      this.map.zoomIn();
    },
    ZoomDown() {
      // 缩小一级地图
      this.map.zoomOut();
    },
  },
};
</script>

<style lang="scss" scoped>
.home {
  #map {
    width: 100vw;
    height: 90vh;
    position: relative;
    .btns {
      position: absolute;
      width: 200px;
      height: 200px;
      border: 1px solid red;
      top: 10;
      left: 10;
      z-index: 999;
    }
  }
}
.flex {
  display: flex;
}
.flex-s {
  display: flex;
  justify-content: space-between;
}
</style>

在这里插入图片描述

3.3 地图设置指定缩放等级

<template>
  <div class="home">
    天地图
    <div id="map">
      <div class="btns">
        <input type="button" value="放大 +" @click="ZoomUp" />
        <input type="button" value="缩小 -" @click="ZoomDown" />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
      map: "",
      zoom: 18,
    };
  },
  computed: {},
  mounted() {
    this.map = new T.Map("map");
    this.map.centerAndZoom(new T.LngLat(116.40769, 39.89945), this.zoom);
    this.map.enableScrollWheelZoom();
    setTimeout(() => {
      // 设置地图的缩放等级
      this.map.setZoom(14);
    }, 2000);
  },
  methods: {
    ZoomUp() {
      // 放大一级地图
      this.map.zoomIn();
    },
    ZoomDown() {
      // 缩小一级地图
      this.map.zoomOut();
    },
  },
};
</script>

<style lang="scss" scoped>
.home {
  #map {
    width: 100vw;
    height: 90vh;
    position: relative;
    .btns {
      position: absolute;
      width: 200px;
      height: 200px;
      border: 1px solid red;
      top: 10;
      left: 10;
      z-index: 999;
    }
  }
}
.flex {
  display: flex;
}
.flex-s {
  display: flex;
  justify-content: space-between;
}
</style>

在这里插入图片描述

3.4 设置地图不能被拖拽,两秒后开启拖拽地图

<template>
  <div class="home">
    天地图
    <div id="map">
      <div class="btns">
        <input type="button" value="放大 +" @click="ZoomUp" />
        <input type="button" value="缩小 -" @click="ZoomDown" />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
      map: "",
      zoom: 18,
    };
  },
  computed: {},
  mounted() {
    this.map = new T.Map("map");
    this.map.centerAndZoom(new T.LngLat(116.40769, 39.89945), this.zoom);
    this.map.enableScrollWheelZoom();
    this.map.disableDrag();
    setTimeout(() => {
      alert("地图可以拖拽");
      // 设置地图的缩放等级
      this.map.enableDrag();
    }, 2000);
  },
  methods: {
    ZoomUp() {
      // 放大一级地图
      this.map.zoomIn();
    },
    ZoomDown() {
      // 缩小一级地图
      this.map.zoomOut();
    },
  },
};
</script>

<style lang="scss" scoped>
.home {
  #map {
    width: 100vw;
    height: 90vh;
    position: relative;
    .btns {
      position: absolute;
      width: 200px;
      height: 200px;
      border: 1px solid red;
      top: 10;
      left: 10;
      z-index: 999;
    }
  }
}
.flex {
  display: flex;
}
.flex-s {
  display: flex;
  justify-content: space-between;
}
</style>

在这里插入图片描述

3.5 获取地图的可视区域

<template>
  <div class="home">
    天地图
    <div id="map">
      <div class="btns">
        <input type="button" value="放大 +" @click="ZoomUp" />
        <input type="button" value="缩小 -" @click="ZoomDown" />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
      map: "",
      zoom: 18,
    };
  },
  computed: {},
  mounted() {
    this.initMap();
  },
  methods: {
    ZoomUp() {
      // 放大一级地图
      this.map.zoomIn();
    },
    ZoomDown() {
      // 缩小一级地图
      this.map.zoomOut();
    },
    initMap() {
      this.map = new T.Map("map");
      this.map.centerAndZoom(new T.LngLat(116.40769, 39.89945), this.zoom);
      this.map.enableScrollWheelZoom();
      const bs = this.map.getBounds(); //获取可视区域
      var bssw = bs.getSouthWest(); //可视区域左下角
      var bsne = bs.getNorthEast(); //可视区域右上角
      // 可视区域变化,缩放等级、屏显分辨率、中心点 lng 经度  lat 纬度
      console.log("bssw", bssw);
      console.log("bsne", bsne);
    },
  },
};
</script>

<style lang="scss" scoped>
.home {
  #map {
    width: 100vw;
    height: 90vh;
    position: relative;
    .btns {
      position: absolute;
      width: 200px;
      height: 200px;
      border: 1px solid red;
      top: 10;
      left: 10;
      z-index: 999;
    }
  }
}
.flex {
  display: flex;
}
.flex-s {
  display: flex;
  justify-content: space-between;
}
</style>

在这里插入图片描述

4、 地图参数设置

4.1设置地图中心点及缩放级别

根据指定的经度、纬度、缩放级别 设置地图中心点

<template>
  <div class="home">
    天地图
    <div id="map">
      <div class="btns">
        <input type="button" value="放大 +" @click="ZoomUp" />
        <input type="button" value="缩小 -" @click="ZoomDown" />
        经度:<input type="text" v-model="lng" />
        <br />
        纬度:<input type="text" v-model="lat" />
        <br />
        缩放级别:<input type="text" v-model="zoom" />
        <br />
        <input type="button" value="设置中心点" @click="setCenterAndZoom" />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
      map: "",
      zoom: 18,
      lng: "116.64899",
      lat: "40.12948",
    };
  },
  computed: {},
  mounted() {
    this.initMap();
  },
  methods: {
    ZoomUp() {
      // 放大一级地图
      this.map.zoomIn();
    },
    ZoomDown() {
      // 缩小一级地图
      this.map.zoomOut();
    },
    initMap() {
      this.map = new T.Map("map");
      this.map.centerAndZoom(new T.LngLat(116.40769, 39.89945), this.zoom);
      this.map.enableScrollWheelZoom();
      const bs = this.map.getBounds(); //获取可视区域
      var bssw = bs.getSouthWest(); //可视区域左下角
      var bsne = bs.getNorthEast(); //可视区域右上角
      // 可视区域变化,缩放等级、屏显分辨率、中心点 lng 经度  lat 纬度
      console.log("bssw", bssw);
      console.log("bsne", bsne);
    },
    setCenterAndZoom() {
      this.map.centerAndZoom(new T.LngLat(this.lng, this.lat), this.zoom);
    },
  },
};
</script>

<style lang="scss" scoped>
.home {
  #map {
    width: 100vw;
    height: 90vh;
    position: relative;
    .btns {
      position: absolute;
      width: 200px;
      height: 200px;
      border: 1px solid red;
      top: 10;
      left: 10;
      z-index: 999;
    }
  }
}
.flex {
  display: flex;
}
.flex-s {
  display: flex;
  justify-content: space-between;
}
</style>

在这里插入图片描述

4.2 是否允许地图双击鼠标放大、是否允许鼠标滚轮放大缩小地图、是否允许鼠标拖拽地图、是否允许键盘操作地图

<template>
  <div class="home">
    天地图
    <div id="map">
      <div class="btns">
        <input type="button" value="放大 +" @click="ZoomUp" />
        <input type="button" value="缩小 -" @click="ZoomDown" />
        经度:<input type="text" v-model="lng" />
        <br />
        纬度:<input type="text" v-model="lat" />
        <br />
        缩放级别:<input type="text" v-model="zoom" />
        <br />
        <input type="button" value="设置中心点" @click="setCenterAndZoom" />
        <input
          type="button"
          value="开启双击放大地图"
          @click="enableDoubleClickZoom"
        /><br />
        <input
          type="button"
          value="禁止双击放大地图"
          @click="disableDoubleClickZoom"
        /><br />
        <input
          type="button"
          value="允许鼠标滚轮缩放地图"
          @click="enableScrollWheelZoom"
        /><br />
        <input
          type="button"
          value="禁止鼠标滚轮缩放地图"
          @click="disableScrollWheelZoom"
        /><br />
        <input
          type="button"
          value="允许鼠标惯性拖拽"
          @click="enableInertia"
        /><br />
        <input
          type="button"
          value="禁止鼠标惯性拖拽"
          @click="disableInertia"
        /><br />
        <input
          type="button"
          value="允许键盘操作地图"
          @click="enableKeyboard"
        /><br />
        <input
          type="button"
          value="禁止键盘操作地图"
          @click="disableKeyboard"
        /><br />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
      map: "",
      zoom: 18,
      lng: "116.64899",
      lat: "40.12948",
    };
  },
  computed: {},
  mounted() {
    this.initMap();
  },
  methods: {
    ZoomUp() {
      // 放大一级地图
      this.map.zoomIn();
    },
    ZoomDown() {
      // 缩小一级地图
      this.map.zoomOut();
    },
    initMap() {
      this.map = new T.Map("map");
      this.map.centerAndZoom(new T.LngLat(116.40769, 39.89945), this.zoom);
      this.map.enableScrollWheelZoom();
      const bs = this.map.getBounds(); //获取可视区域
      var bssw = bs.getSouthWest(); //可视区域左下角
      var bsne = bs.getNorthEast(); //可视区域右上角
      // 可视区域变化,缩放等级、屏显分辨率、中心点 lng 经度  lat 纬度
      console.log("bssw", bssw);
      console.log("bsne", bsne);
    },
    setCenterAndZoom() {
      this.map.centerAndZoom(new T.LngLat(this.lng, this.lat), this.zoom);
    },
    enableDoubleClickZoom() {
      this.map.enableDoubleClickZoom();
    },
    disableDoubleClickZoom() {
      this.map.disableDoubleClickZoom();
    },
    enableScrollWheelZoom() {
      this.map.enableScrollWheelZoom();
    },
    disableScrollWheelZoom() {
      this.map.disableScrollWheelZoom();
    },
    enableInertia() {
      this.map.enableInertia();
    },
    disableInertia() {
      this.map.disableInertia();
    },
    enableKeyboard() {
      this.map.enableKeyboard();
    },
    disableKeyboard() {
      this.map.disableKeyboard();
    },
  },
};
</script>

<style lang="scss" scoped>
.home {
  #map {
    width: 100vw;
    height: 90vh;
    position: relative;
    .btns {
      position: absolute;
      width: 200px;
      min-height: 200px;
      border: 1px solid red;
      top: 10;
      left: 10;
      z-index: 999;
    }
  }
}
.flex {
  display: flex;
}
.flex-s {
  display: flex;
  justify-content: space-between;
}
</style>

在这里插入图片描述

5 、地图信息获取

5.1 获取地图中心点位置、获取当前缩放级别

<template>
  <div class="home">
    天地图
    <div id="map">
      <div class="btns">
        <input type="button" value="放大 +" @click="ZoomUp" />
        <input type="button" value="缩小 -" @click="ZoomDown" />
        经度:<input type="text" v-model="lng" />
        <br />
        纬度:<input type="text" v-model="lat" />
        <br />
        缩放级别:<input type="text" v-model="zoom" />
        <br />
        <input type="button" value="设置中心点" @click="setCenterAndZoom" />
        <input
          type="button"
          value="开启双击放大地图"
          @click="enableDoubleClickZoom"
        /><br />
        <input
          type="button"
          value="禁止双击放大地图"
          @click="disableDoubleClickZoom"
        /><br />
        <input
          type="button"
          value="允许鼠标滚轮缩放地图"
          @click="enableScrollWheelZoom"
        /><br />
        <input
          type="button"
          value="禁止鼠标滚轮缩放地图"
          @click="disableScrollWheelZoom"
        /><br />
        <input
          type="button"
          value="允许鼠标惯性拖拽"
          @click="enableInertia"
        /><br />
        <input
          type="button"
          value="禁止鼠标惯性拖拽"
          @click="disableInertia"
        /><br />
        <input
          type="button"
          value="允许键盘操作地图"
          @click="enableKeyboard"
        /><br />
        <input
          type="button"
          value="禁止键盘操作地图"
          @click="disableKeyboard"
        /><br />
        <input
          type="button"
          value="获取地图中心点坐标"
          @click="getCenter"
        /><br />
        <input
          type="button"
          value="获取当前地图的缩放级别"
          @click="getZoom"
        /><br />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
      map: "",
      zoom: 18,
      lng: "116.64899",
      lat: "40.12948",
    };
  },
  computed: {},
  mounted() {
    this.initMap();
  },
  methods: {
    ZoomUp() {
      // 放大一级地图
      this.map.zoomIn();
    },
    ZoomDown() {
      // 缩小一级地图
      this.map.zoomOut();
    },
    initMap() {
      this.map = new T.Map("map");
      this.map.centerAndZoom(new T.LngLat(116.40769, 39.89945), this.zoom);
      this.map.enableScrollWheelZoom();
      const bs = this.map.getBounds(); //获取可视区域
      var bssw = bs.getSouthWest(); //可视区域左下角
      var bsne = bs.getNorthEast(); //可视区域右上角
      // 可视区域变化,缩放等级、屏显分辨率、中心点 lng 经度  lat 纬度
      console.log("bssw", bssw);
      console.log("bsne", bsne);
    },
    setCenterAndZoom() {
      this.map.centerAndZoom(new T.LngLat(this.lng, this.lat), this.zoom);
    },
    enableDoubleClickZoom() {
      this.map.enableDoubleClickZoom();
    },
    disableDoubleClickZoom() {
      this.map.disableDoubleClickZoom();
    },
    enableScrollWheelZoom() {
      this.map.enableScrollWheelZoom();
    },
    disableScrollWheelZoom() {
      this.map.disableScrollWheelZoom();
    },
    enableInertia() {
      this.map.enableInertia();
    },
    disableInertia() {
      this.map.disableInertia();
    },
    enableKeyboard() {
      this.map.enableKeyboard();
    },
    disableKeyboard() {
      this.map.disableKeyboard();
    },
    getCenter() {
      const c = this.map.getCenter();
      alert(`经度 ${c.getLng()}  纬度:${c.getLat()}`);
    },
    getZoom() {
      alert(`当前地图缩放级别为:${this.map.getZoom()}`);
    },
  },
};
</script>

<style lang="scss" scoped>
.home {
  #map {
    width: 100vw;
    height: 90vh;
    position: relative;
    .btns {
      position: absolute;
      width: 200px;
      min-height: 200px;
      border: 1px solid red;
      top: 10;
      left: 10;
      z-index: 999;
    }
  }
}
.flex {
  display: flex;
}
.flex-s {
  display: flex;
  justify-content: space-between;
}
</style>

在这里插入图片描述
在这里插入图片描述

6 、自定义图层

<template>
  <div class="home">
    天地图
    <div id="map">
      <div class="btns">
        <input type="button" value="放大 +" @click="ZoomUp" />
        <input type="button" value="缩小 -" @click="ZoomDown" />
        经度:<input type="text" v-model="lng" />
        <br />
        纬度:<input type="text" v-model="lat" />
        <br />
        缩放级别:<input type="text" v-model="zoom" />
        <br />
        <input type="button" value="设置中心点" @click="setCenterAndZoom" />
        <input
          type="button"
          value="开启双击放大地图"
          @click="enableDoubleClickZoom"
        /><br />
        <input
          type="button"
          value="禁止双击放大地图"
          @click="disableDoubleClickZoom"
        /><br />
        <input
          type="button"
          value="允许鼠标滚轮缩放地图"
          @click="enableScrollWheelZoom"
        /><br />
        <input
          type="button"
          value="禁止鼠标滚轮缩放地图"
          @click="disableScrollWheelZoom"
        /><br />
        <input
          type="button"
          value="允许鼠标惯性拖拽"
          @click="enableInertia"
        /><br />
        <input
          type="button"
          value="禁止鼠标惯性拖拽"
          @click="disableInertia"
        /><br />
        <input
          type="button"
          value="允许键盘操作地图"
          @click="enableKeyboard"
        /><br />
        <input
          type="button"
          value="禁止键盘操作地图"
          @click="disableKeyboard"
        /><br />
        <input
          type="button"
          value="获取地图中心点坐标"
          @click="getCenter"
        /><br />
        <input
          type="button"
          value="获取当前地图的缩放级别"
          @click="getZoom"
        /><br />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
      map: "",
      zoom: 18,
      lng: "116.64899",
      lat: "40.12948",
    };
  },
  computed: {},
  mounted() {
    var imageURL =
      "http://t0.tianditu.gov.cn/img_w/wmts?" +
      "SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles" +
      "&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=天地图key";

    // 创建自定义图层对象
    var lay = new T.TileLayer(imageURL, { minZoom: 1, maxZoom: 18 });
    var config = { layers: [lay] };
    //   初始化地图对象

    var map = new T.Map("map", config);
    var zoom = 18;
    map.centerAndZoom(new T.LngLat(116.40769, 39.89945), zoom);
    map.enableScrollWheelZoom();
    // this.initMap();
  },
  methods: {
    ZoomUp() {
      // 放大一级地图
      this.map.zoomIn();
    },
    ZoomDown() {
      // 缩小一级地图
      this.map.zoomOut();
    },
    initMap() {
      this.map = new T.Map("map");
      this.map.centerAndZoom(new T.LngLat(116.40769, 39.89945), this.zoom);
      this.map.enableScrollWheelZoom();
      const bs = this.map.getBounds(); //获取可视区域
      var bssw = bs.getSouthWest(); //可视区域左下角
      var bsne = bs.getNorthEast(); //可视区域右上角
      // 可视区域变化,缩放等级、屏显分辨率、中心点 lng 经度  lat 纬度
      console.log("bssw", bssw);
      console.log("bsne", bsne);
    },
    setCenterAndZoom() {
      this.map.centerAndZoom(new T.LngLat(this.lng, this.lat), this.zoom);
    },
    enableDoubleClickZoom() {
      this.map.enableDoubleClickZoom();
    },
    disableDoubleClickZoom() {
      this.map.disableDoubleClickZoom();
    },
    enableScrollWheelZoom() {
      this.map.enableScrollWheelZoom();
    },
    disableScrollWheelZoom() {
      this.map.disableScrollWheelZoom();
    },
    enableInertia() {
      this.map.enableInertia();
    },
    disableInertia() {
      this.map.disableInertia();
    },
    enableKeyboard() {
      this.map.enableKeyboard();
    },
    disableKeyboard() {
      this.map.disableKeyboard();
    },
    getCenter() {
      const c = this.map.getCenter();
      alert(`经度 ${c.getLng()}  纬度:${c.getLat()}`);
    },
    getZoom() {
      alert(`当前地图缩放级别为:${this.map.getZoom()}`);
    },
  },
};
</script>

<style lang="scss" scoped>
.home {
  #map {
    width: 100vw;
    height: 90vh;
    position: relative;
    .btns {
      position: absolute;
      width: 200px;
      min-height: 200px;
      border: 1px solid red;
      top: 10;
      left: 10;
      z-index: 999;
    }
  }
}
.flex {
  display: flex;
}
.flex-s {
  display: flex;
  justify-content: space-between;
}
</style>

在这里插入图片描述

7、 叠加其他的WMS服务图层

<template>
  <div class="home">
    天地图
    <div id="map">
      <div class="btns">
        <input type="button" value="放大 +" @click="ZoomUp" />
        <input type="button" value="缩小 -" @click="ZoomDown" />
        经度:<input type="text" v-model="lng" />
        <br />
        纬度:<input type="text" v-model="lat" />
        <br />
        缩放级别:<input type="text" v-model="zoom" />
        <br />
        <input type="button" value="设置中心点" @click="setCenterAndZoom" />
        <input
          type="button"
          value="开启双击放大地图"
          @click="enableDoubleClickZoom"
        /><br />
        <input
          type="button"
          value="禁止双击放大地图"
          @click="disableDoubleClickZoom"
        /><br />
        <input
          type="button"
          value="允许鼠标滚轮缩放地图"
          @click="enableScrollWheelZoom"
        /><br />
        <input
          type="button"
          value="禁止鼠标滚轮缩放地图"
          @click="disableScrollWheelZoom"
        /><br />
        <input
          type="button"
          value="允许鼠标惯性拖拽"
          @click="enableInertia"
        /><br />
        <input
          type="button"
          value="禁止鼠标惯性拖拽"
          @click="disableInertia"
        /><br />
        <input
          type="button"
          value="允许键盘操作地图"
          @click="enableKeyboard"
        /><br />
        <input
          type="button"
          value="禁止键盘操作地图"
          @click="disableKeyboard"
        /><br />
        <input
          type="button"
          value="获取地图中心点坐标"
          @click="getCenter"
        /><br />
        <input
          type="button"
          value="获取当前地图的缩放级别"
          @click="getZoom"
        /><br />
        <input
          type="button"
          value="叠加WMS 服务图层"
          @click="
            addWmsLayer(
              'topp:states',
              'http://localhost:8080/assets/logo'
            )
          "
        /><br />
        <input
          type="button"
          value="删除wms 服务图层"
          @click="delWmsLayer"
        /><br />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
      map: "",
      zoom: 18,
      lng: "116.64899",
      lat: "40.12948",
    };
  },
  computed: {},
  mounted() {
    this.initMap();
  },
  methods: {
    ZoomUp() {
      // 放大一级地图
      this.map.zoomIn();
    },
    ZoomDown() {
      // 缩小一级地图
      this.map.zoomOut();
    },
    initMap() {
      this.map = new T.Map("map");
      this.map.centerAndZoom(new T.LngLat(116.40769, 39.89945), this.zoom);
      this.map.enableScrollWheelZoom();
      const bs = this.map.getBounds(); //获取可视区域
      var bssw = bs.getSouthWest(); //可视区域左下角
      var bsne = bs.getNorthEast(); //可视区域右上角
      // 可视区域变化,缩放等级、屏显分辨率、中心点 lng 经度  lat 纬度
      console.log("bssw", bssw);
      console.log("bsne", bsne);
    },
    setCenterAndZoom() {
      this.map.centerAndZoom(new T.LngLat(this.lng, this.lat), this.zoom);
    },
    enableDoubleClickZoom() {
      this.map.enableDoubleClickZoom();
    },
    disableDoubleClickZoom() {
      this.map.disableDoubleClickZoom();
    },
    enableScrollWheelZoom() {
      this.map.enableScrollWheelZoom();
    },
    disableScrollWheelZoom() {
      this.map.disableScrollWheelZoom();
    },
    enableInertia() {
      this.map.enableInertia();
    },
    disableInertia() {
      this.map.disableInertia();
    },
    enableKeyboard() {
      this.map.enableKeyboard();
    },
    disableKeyboard() {
      this.map.disableKeyboard();
    },
    getCenter() {
      const c = this.map.getCenter();
      alert(`经度 ${c.getLng()}  纬度:${c.getLat()}`);
    },
    getZoom() {
      alert(`当前地图缩放级别为:${this.map.getZoom()}`);
    },
    addWmsLayer(layers, url) {
      const config = {
        version: "1.1.0", //请求服务的版本
        request: "GetMap",
        layers: layers,
        transparent: true, //输出图像背景是否透明
        styles: "", //每个请求图层的用","分隔的描述样式
        format: "image/png", //输出图像的类型
      };
      this.getWms(url, config);
    },
    getWms(url, config) {
      if (this.wmsLayer) {
        this.map.removeLayer(this.wmsLayer);
      }
      this.wmsLayer = new T.TileLayer.WMS(url, config);
      this.map.addLayer(this.wmsLayer);
    },
    delWmsLayer() {
      this.map.removeLayer(this.wmsLayer);
    },
  },
};
</script>

<style lang="scss" scoped>
.home {
  #map {
    width: 100vw;
    height: 90vh;
    position: relative;
    .btns {
      position: absolute;
      width: 200px;
      min-height: 200px;
      border: 1px solid red;
      top: 10;
      left: 10;
      z-index: 999;
    }
  }
}
.flex {
  display: flex;
}
.flex-s {
  display: flex;
  justify-content: space-between;
}
</style>

在这里插入图片描述

在这里插入图片描述

8、添加基本控件

添加缩放控件、添加比例尺、添加鹰眼控件、添加版权信息、加载地图类型控件、添加符号控件

<template>
  <div class="home">
    天地图
    <div id="map">
      <div class="btns">
        <input type="button" value="放大 +" @click="ZoomUp" />
        <input type="button" value="缩小 -" @click="ZoomDown" />
        经度:<input type="text" v-model="lng" />
        <br />
        纬度:<input type="text" v-model="lat" />
        <br />
        缩放级别:<input type="text" v-model="zoom" />
        <br />
        <input type="button" value="设置中心点" @click="setCenterAndZoom" />
        <input
          type="button"
          value="开启双击放大地图"
          @click="enableDoubleClickZoom"
        /><br />
        <input
          type="button"
          value="禁止双击放大地图"
          @click="disableDoubleClickZoom"
        /><br />
        <input
          type="button"
          value="允许鼠标滚轮缩放地图"
          @click="enableScrollWheelZoom"
        /><br />
        <input
          type="button"
          value="禁止鼠标滚轮缩放地图"
          @click="disableScrollWheelZoom"
        /><br />
        <input
          type="button"
          value="允许鼠标惯性拖拽"
          @click="enableInertia"
        /><br />
        <input
          type="button"
          value="禁止鼠标惯性拖拽"
          @click="disableInertia"
        /><br />
        <input
          type="button"
          value="允许键盘操作地图"
          @click="enableKeyboard"
        /><br />
        <input
          type="button"
          value="禁止键盘操作地图"
          @click="disableKeyboard"
        /><br />
        <input
          type="button"
          value="获取地图中心点坐标"
          @click="getCenter"
        /><br />
        <input
          type="button"
          value="获取当前地图的缩放级别"
          @click="getZoom"
        /><br />
        <input
          type="button"
          value="叠加WMS 服务图层"
          @click="
            addWmsLayer('topp:states', 'http://localhost:8080/assets/logo')
          "
        /><br />
        <input
          type="button"
          value="删除wms 服务图层"
          @click="delWmsLayer"
        /><br />
        <input
          type="button"
          value="添加缩放控件"
          @click="addZoomControl"
        /><br />
        <input
          type="button"
          value="添加比例尺控件"
          @click="addScaleControl"
        /><br />
        <input
          type="button"
          value="添加鹰眼控件"
          @click="addOverViewMapControl"
        /><br />
        <input
          type="button"
          value="添加地图版权控件"
          @click="addcopyControl"
        /><br />
        <input
          type="button"
          value="添加地图类型控件"
          @click="addMapType"
        /><br />
        <input
          type="button"
          value="添加符号类控件 "
          @click="addMilitarySymbols"
        /><br />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
      map: "",
      zoom: 18,
      lng: "116.64899",
      lat: "40.12948",
    };
  },
  computed: {},
  mounted() {
    this.initMap();
  },
  methods: {
    ZoomUp() {
      // 放大一级地图
      this.map.zoomIn();
    },
    ZoomDown() {
      // 缩小一级地图
      this.map.zoomOut();
    },
    initMap() {
      this.map = new T.Map("map");
      this.map.centerAndZoom(new T.LngLat(116.40769, 39.89945), this.zoom);
      this.map.enableScrollWheelZoom();
      const bs = this.map.getBounds(); //获取可视区域
      var bssw = bs.getSouthWest(); //可视区域左下角
      var bsne = bs.getNorthEast(); //可视区域右上角
      // 可视区域变化,缩放等级、屏显分辨率、中心点 lng 经度  lat 纬度
      console.log("bssw", bssw);
      console.log("bsne", bsne);
    },
    setCenterAndZoom() {
      this.map.centerAndZoom(new T.LngLat(this.lng, this.lat), this.zoom);
    },
    enableDoubleClickZoom() {
      this.map.enableDoubleClickZoom();
    },
    disableDoubleClickZoom() {
      this.map.disableDoubleClickZoom();
    },
    enableScrollWheelZoom() {
      this.map.enableScrollWheelZoom();
    },
    disableScrollWheelZoom() {
      this.map.disableScrollWheelZoom();
    },
    enableInertia() {
      this.map.enableInertia();
    },
    disableInertia() {
      this.map.disableInertia();
    },
    enableKeyboard() {
      this.map.enableKeyboard();
    },
    disableKeyboard() {
      this.map.disableKeyboard();
    },
    getCenter() {
      const c = this.map.getCenter();
      alert(`经度 ${c.getLng()}  纬度:${c.getLat()}`);
    },
    getZoom() {
      alert(`当前地图缩放级别为:${this.map.getZoom()}`);
    },
    addWmsLayer(layers, url) {
      const config = {
        version: "1.1.0", //请求服务的版本
        request: "GetMap",
        layers: layers,
        transparent: true, //输出图像背景是否透明
        styles: "", //每个请求图层的用","分隔的描述样式
        format: "image/png", //输出图像的类型
      };
      this.getWms(url, config);
    },
    getWms(url, config) {
      if (this.wmsLayer) {
        this.map.removeLayer(this.wmsLayer);
      }
      this.wmsLayer = new T.TileLayer.WMS(url, config);
      this.map.addLayer(this.wmsLayer);
    },
    delWmsLayer() {
      this.map.removeLayer(this.wmsLayer);
    },
    addZoomControl() {
      if (this.zoomControl) {
        return;
      }
      this.zoomControl = new T.Control.Zoom();
      this.map.addControl(this.zoomControl);
      this.zoomControl.setPosition(T_ANCHOR_TOP_LEFT);
    },
    addScaleControl() {
      if (this.scaleControl) {
        return;
      }
      this.scaleControl = new T.Control.Scale();
      this.map.addControl(this.scaleControl);
    },
    addOverViewMapControl() {
      if (this.overViewMapControl) {
        return;
      }
      this.overViewMapControl = new T.Control.OverviewMap({
        isOpen: true,
        size: new T.Point(200, 200),
        // 设置小地图,鹰眼的初始化大小
      });
      this.map.addControl(this.overViewMapControl);
    },
    addcopyControl() {
      if (this.copyControl) {
        return;
      }
      this.copyControl = new T.Control.Copyright({
        position: T_ANCHOR_TOP_LEFT,
        // 初始化地图版权的位置
      });
      this.map.addControl(this.copyControl);

      // 返回地图的可视区域
      const bs = this.map.getBounds();
      // 添加版权信息
      this.copyControl.addCopyright({
        id: 10,
        content: `<a href="http://wwww.baidu.com">这里是自定义版权控件的位置,可以加超链接</a>`,
        bounds: bs,
      });
    },
    addMapType() {
      if (this.mapTypeControl) {
        return;
      }
      this.mapTypeControl = new T.Control.MapType();
      this.map.addControl(this.mapTypeControl);
    },
    addMilitarySymbols() {
      // if (this.militarySymbols) {
      //     return
      // }
      //允许鼠标滚轮缩放地图
      this.map.enableScrollWheelZoom();
      const militarySymbols = new T.Control.militarySymbols({
        position: T_ANCHOR_TOP_LEFT,
        // 初始化符号位置
      });
      this.map.addControl(militarySymbols);
    },
  },
};
</script>

<style lang="scss" scoped>
.home {
  #map {
    width: 100vw;
    height: 90vh;
    position: relative;
    .btns {
      position: absolute;
      width: 200px;
      min-height: 200px;
      border: 1px solid red;
      top: 10;
      left: 10;
      z-index: 999;
    }
  }
}
.flex {
  display: flex;
}
.flex-s {
  display: flex;
  justify-content: space-between;
}
</style>

在这里插入图片描述

9 、地图右键菜单

9.1 简单添加右键菜单

<template>
  <div class="home">
    天地图
    <div id="map">
      <div class="btns">
        <input type="button" value="放大 +" @click="ZoomUp" />
        <input type="button" value="缩小 -" @click="ZoomDown" />
        经度:<input type="text" v-model="lng" />
        <br />
        纬度:<input type="text" v-model="lat" />
        <br />
        缩放级别:<input type="text" v-model="zoom" />
        <br />
        <input type="button" value="设置中心点" @click="setCenterAndZoom" />
        <input
          type="button"
          value="开启双击放大地图"
          @click="enableDoubleClickZoom"
        /><br />
        <input
          type="button"
          value="禁止双击放大地图"
          @click="disableDoubleClickZoom"
        /><br />
        <input
          type="button"
          value="允许鼠标滚轮缩放地图"
          @click="enableScrollWheelZoom"
        /><br />
        <input
          type="button"
          value="禁止鼠标滚轮缩放地图"
          @click="disableScrollWheelZoom"
        /><br />
        <input
          type="button"
          value="允许鼠标惯性拖拽"
          @click="enableInertia"
        /><br />
        <input
          type="button"
          value="禁止鼠标惯性拖拽"
          @click="disableInertia"
        /><br />
        <input
          type="button"
          value="允许键盘操作地图"
          @click="enableKeyboard"
        /><br />
        <input
          type="button"
          value="禁止键盘操作地图"
          @click="disableKeyboard"
        /><br />
        <input
          type="button"
          value="获取地图中心点坐标"
          @click="getCenter"
        /><br />
        <input
          type="button"
          value="获取当前地图的缩放级别"
          @click="getZoom"
        /><br />
        <input
          type="button"
          value="叠加WMS 服务图层"
          @click="
            addWmsLayer('topp:states', 'http://localhost:8080/assets/logo')
          "
        /><br />
        <input
          type="button"
          value="删除wms 服务图层"
          @click="delWmsLayer"
        /><br />
        <input
          type="button"
          value="添加缩放控件"
          @click="addZoomControl"
        /><br />
        <input
          type="button"
          value="添加比例尺控件"
          @click="addScaleControl"
        /><br />
        <input
          type="button"
          value="添加鹰眼控件"
          @click="addOverViewMapControl"
        /><br />
        <input
          type="button"
          value="添加地图版权控件"
          @click="addcopyControl"
        /><br />
        <input
          type="button"
          value="添加地图类型控件"
          @click="addMapType"
        /><br />
        <input
          type="button"
          value="添加符号类控件 "
          @click="addMilitarySymbols"
        /><br />
        <input type="button" value="添加右键菜单" @click="addMenu" /><br />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
      map: "",
      zoom: 18,
      lng: "116.64899",
      lat: "40.12948",
      menus: "",
    };
  },
  computed: {},
  mounted() {
    this.initMap();
  },
  methods: {
    ZoomUp() {
      // 放大一级地图
      this.map.zoomIn();
    },
    ZoomDown() {
      // 缩小一级地图
      this.map.zoomOut();
    },
    initMap() {
      this.map = new T.Map("map");
      this.map.centerAndZoom(new T.LngLat(116.40769, 39.89945), this.zoom);
      this.map.enableScrollWheelZoom();
      const bs = this.map.getBounds(); //获取可视区域
      var bssw = bs.getSouthWest(); //可视区域左下角
      var bsne = bs.getNorthEast(); //可视区域右上角
      // 可视区域变化,缩放等级、屏显分辨率、中心点 lng 经度  lat 纬度
      console.log("bssw", bssw);
      console.log("bsne", bsne);
    },
    setCenterAndZoom() {
      this.map.centerAndZoom(new T.LngLat(this.lng, this.lat), this.zoom);
    },
    enableDoubleClickZoom() {
      this.map.enableDoubleClickZoom();
    },
    disableDoubleClickZoom() {
      this.map.disableDoubleClickZoom();
    },
    enableScrollWheelZoom() {
      this.map.enableScrollWheelZoom();
    },
    disableScrollWheelZoom() {
      this.map.disableScrollWheelZoom();
    },
    enableInertia() {
      this.map.enableInertia();
    },
    disableInertia() {
      this.map.disableInertia();
    },
    enableKeyboard() {
      this.map.enableKeyboard();
    },
    disableKeyboard() {
      this.map.disableKeyboard();
    },
    getCenter() {
      const c = this.map.getCenter();
      alert(`经度 ${c.getLng()}  纬度:${c.getLat()}`);
    },
    getZoom() {
      alert(`当前地图缩放级别为:${this.map.getZoom()}`);
    },
    addWmsLayer(layers, url) {
      const config = {
        version: "1.1.0", //请求服务的版本
        request: "GetMap",
        layers: layers,
        transparent: true, //输出图像背景是否透明
        styles: "", //每个请求图层的用","分隔的描述样式
        format: "image/png", //输出图像的类型
      };
      this.getWms(url, config);
    },
    getWms(url, config) {
      if (this.wmsLayer) {
        this.map.removeLayer(this.wmsLayer);
      }
      this.wmsLayer = new T.TileLayer.WMS(url, config);
      this.map.addLayer(this.wmsLayer);
    },
    delWmsLayer() {
      this.map.removeLayer(this.wmsLayer);
    },
    addZoomControl() {
      if (this.zoomControl) {
        return;
      }
      this.zoomControl = new T.Control.Zoom();
      this.map.addControl(this.zoomControl);
      this.zoomControl.setPosition(T_ANCHOR_TOP_LEFT);
    },
    addScaleControl() {
      if (this.scaleControl) {
        return;
      }
      this.scaleControl = new T.Control.Scale();
      this.map.addControl(this.scaleControl);
    },
    addOverViewMapControl() {
      if (this.overViewMapControl) {
        return;
      }
      this.overViewMapControl = new T.Control.OverviewMap({
        isOpen: true,
        size: new T.Point(200, 200),
        // 设置小地图,鹰眼的初始化大小
      });
      this.map.addControl(this.overViewMapControl);
    },
    addcopyControl() {
      if (this.copyControl) {
        return;
      }
      this.copyControl = new T.Control.Copyright({
        position: T_ANCHOR_TOP_LEFT,
        // 初始化地图版权的位置
      });
      this.map.addControl(this.copyControl);

      // 返回地图的可视区域
      const bs = this.map.getBounds();
      // 添加版权信息
      this.copyControl.addCopyright({
        id: 10,
        content: `<a href="http://wwww.baidu.com">这里是自定义版权控件的位置,可以加超链接</a>`,
        bounds: bs,
      });
    },
    addMapType() {
      if (this.mapTypeControl) {
        return;
      }
      this.mapTypeControl = new T.Control.MapType();
      this.map.addControl(this.mapTypeControl);
    },
    addMilitarySymbols() {
      // if (this.militarySymbols) {
      //     return
      // }
      //允许鼠标滚轮缩放地图
      this.map.enableScrollWheelZoom();
      const militarySymbols = new T.Control.militarySymbols({
        position: T_ANCHOR_TOP_LEFT,
        // 初始化符号位置
      });
      this.map.addControl(militarySymbols);
    },
    addMenu() {
      this.menus = new T.ContextMenu({
        width: 50,
      });
      const menu1 = new T.MenuItem("放大", this.zoomIn);
      const menu2 = new T.MenuItem("缩小", this.zoomOut);
      this.menus.addItem(menu1);
      this.menus.addItem(menu2);
      this.map.addContextMenu(this.menus);
    },
  },
};
</script>

<style lang="scss" scoped>
.home {
  #map {
    width: 100vw;
    height: 90vh;
    position: relative;
    .btns {
      position: absolute;
      width: 200px;
      min-height: 200px;
      border: 1px solid red;
      top: 10;
      left: 10;
      z-index: 999;
    }
  }
}
.flex {
  display: flex;
}
.flex-s {
  display: flex;
  justify-content: space-between;
}
</style>


在这里插入图片描述

9.2 添加带有分割线的右键菜单

<template>
  <div class="home">
    天地图
    <div id="map">
      <div class="btns">
        <input type="button" value="放大 +" @click="ZoomUp" />
        <input type="button" value="缩小 -" @click="ZoomDown" />
        经度:<input type="text" v-model="lng" />
        <br />
        纬度:<input type="text" v-model="lat" />
        <br />
        缩放级别:<input type="text" v-model="zoom" />
        <br />
        <input type="button" value="设置中心点" @click="setCenterAndZoom" />
        <input
          type="button"
          value="开启双击放大地图"
          @click="enableDoubleClickZoom"
        /><br />
        <input
          type="button"
          value="禁止双击放大地图"
          @click="disableDoubleClickZoom"
        /><br />
        <input
          type="button"
          value="允许鼠标滚轮缩放地图"
          @click="enableScrollWheelZoom"
        /><br />
        <input
          type="button"
          value="禁止鼠标滚轮缩放地图"
          @click="disableScrollWheelZoom"
        /><br />
        <input
          type="button"
          value="允许鼠标惯性拖拽"
          @click="enableInertia"
        /><br />
        <input
          type="button"
          value="禁止鼠标惯性拖拽"
          @click="disableInertia"
        /><br />
        <input
          type="button"
          value="允许键盘操作地图"
          @click="enableKeyboard"
        /><br />
        <input
          type="button"
          value="禁止键盘操作地图"
          @click="disableKeyboard"
        /><br />
        <input
          type="button"
          value="获取地图中心点坐标"
          @click="getCenter"
        /><br />
        <input
          type="button"
          value="获取当前地图的缩放级别"
          @click="getZoom"
        /><br />
        <input
          type="button"
          value="叠加WMS 服务图层"
          @click="
            addWmsLayer('topp:states', 'http://localhost:8080/assets/logo')
          "
        /><br />
        <input
          type="button"
          value="删除wms 服务图层"
          @click="delWmsLayer"
        /><br />
        <input
          type="button"
          value="添加缩放控件"
          @click="addZoomControl"
        /><br />
        <input
          type="button"
          value="添加比例尺控件"
          @click="addScaleControl"
        /><br />
        <input
          type="button"
          value="添加鹰眼控件"
          @click="addOverViewMapControl"
        /><br />
        <input
          type="button"
          value="添加地图版权控件"
          @click="addcopyControl"
        /><br />
        <input
          type="button"
          value="添加地图类型控件"
          @click="addMapType"
        /><br />
        <input
          type="button"
          value="添加符号类控件 "
          @click="addMilitarySymbols"
        /><br />
        <input type="button" value="添加右键菜单" @click="addMenu" /><br />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
      map: "",
      zoom: 18,
      lng: "116.64899",
      lat: "40.12948",
      menus: "",
    };
  },
  computed: {},
  mounted() {
    this.initMap();
  },
  methods: {
    ZoomUp() {
      // 放大一级地图
      this.map.zoomIn();
    },
    ZoomDown() {
      // 缩小一级地图
      this.map.zoomOut();
    },
    initMap() {
      this.map = new T.Map("map");
      this.map.centerAndZoom(new T.LngLat(116.40769, 39.89945), this.zoom);
      this.map.enableScrollWheelZoom();
      const bs = this.map.getBounds(); //获取可视区域
      var bssw = bs.getSouthWest(); //可视区域左下角
      var bsne = bs.getNorthEast(); //可视区域右上角
      // 可视区域变化,缩放等级、屏显分辨率、中心点 lng 经度  lat 纬度
      console.log("bssw", bssw);
      console.log("bsne", bsne);
    },
    setCenterAndZoom() {
      this.map.centerAndZoom(new T.LngLat(this.lng, this.lat), this.zoom);
    },
    enableDoubleClickZoom() {
      this.map.enableDoubleClickZoom();
    },
    disableDoubleClickZoom() {
      this.map.disableDoubleClickZoom();
    },
    enableScrollWheelZoom() {
      this.map.enableScrollWheelZoom();
    },
    disableScrollWheelZoom() {
      this.map.disableScrollWheelZoom();
    },
    enableInertia() {
      this.map.enableInertia();
    },
    disableInertia() {
      this.map.disableInertia();
    },
    enableKeyboard() {
      this.map.enableKeyboard();
    },
    disableKeyboard() {
      this.map.disableKeyboard();
    },
    getCenter() {
      const c = this.map.getCenter();
      alert(`经度 ${c.getLng()}  纬度:${c.getLat()}`);
    },
    getZoom() {
      alert(`当前地图缩放级别为:${this.map.getZoom()}`);
    },
    addWmsLayer(layers, url) {
      const config = {
        version: "1.1.0", //请求服务的版本
        request: "GetMap",
        layers: layers,
        transparent: true, //输出图像背景是否透明
        styles: "", //每个请求图层的用","分隔的描述样式
        format: "image/png", //输出图像的类型
      };
      this.getWms(url, config);
    },
    getWms(url, config) {
      if (this.wmsLayer) {
        this.map.removeLayer(this.wmsLayer);
      }
      this.wmsLayer = new T.TileLayer.WMS(url, config);
      this.map.addLayer(this.wmsLayer);
    },
    delWmsLayer() {
      this.map.removeLayer(this.wmsLayer);
    },
    addZoomControl() {
      if (this.zoomControl) {
        return;
      }
      this.zoomControl = new T.Control.Zoom();
      this.map.addControl(this.zoomControl);
      this.zoomControl.setPosition(T_ANCHOR_TOP_LEFT);
    },
    addScaleControl() {
      if (this.scaleControl) {
        return;
      }
      this.scaleControl = new T.Control.Scale();
      this.map.addControl(this.scaleControl);
    },
    addOverViewMapControl() {
      if (this.overViewMapControl) {
        return;
      }
      this.overViewMapControl = new T.Control.OverviewMap({
        isOpen: true,
        size: new T.Point(200, 200),
        // 设置小地图,鹰眼的初始化大小
      });
      this.map.addControl(this.overViewMapControl);
    },
    addcopyControl() {
      if (this.copyControl) {
        return;
      }
      this.copyControl = new T.Control.Copyright({
        position: T_ANCHOR_TOP_LEFT,
        // 初始化地图版权的位置
      });
      this.map.addControl(this.copyControl);

      // 返回地图的可视区域
      const bs = this.map.getBounds();
      // 添加版权信息
      this.copyControl.addCopyright({
        id: 10,
        content: `<a href="http://wwww.baidu.com">这里是自定义版权控件的位置,可以加超链接</a>`,
        bounds: bs,
      });
    },
    addMapType() {
      if (this.mapTypeControl) {
        return;
      }
      this.mapTypeControl = new T.Control.MapType();
      this.map.addControl(this.mapTypeControl);
    },
    addMilitarySymbols() {
      // if (this.militarySymbols) {
      //     return
      // }
      //允许鼠标滚轮缩放地图
      this.map.enableScrollWheelZoom();
      const militarySymbols = new T.Control.militarySymbols({
        position: T_ANCHOR_TOP_LEFT,
        // 初始化符号位置
      });
      this.map.addControl(militarySymbols);
    },
    // addMenu() {
    //   this.menus = new T.ContextMenu({
    //     width: 50,
    //   });
    //   const menu1 = new T.MenuItem("放大", this.zoomIn);
    //   const menu2 = new T.MenuItem("缩小", this.zoomOut);
    //   this.menus.addItem(menu1);
    //   this.menus.addItem(menu2);
    //   this.map.addContextMenu(this.menus);
    // },
    addMenu() {
      this.menus = new T.ContextMenu({
        width: 70,
      });
      const menu1 = new T.MenuItem("放大", this.zoomIn);
      const menu2 = new T.MenuItem("缩小", this.zoomOut);
      const menu3 = new T.MenuItem("放大最大", this.setZoom);
      const menu4 = new T.MenuItem("查看全国", this.setTotal);
      this.menus.addItem(menu1);
      this.menus.addItem(menu2);
      this.menus.addSeparator();
      this.menus.addItem(menu3);
      this.menus.addItem(menu4);
      this.map.addContextMenu(this.menus);
    },
  },
};
</script>

<style lang="scss" scoped>
.home {
  #map {
    width: 100vw;
    height: 90vh;
    position: relative;
    .btns {
      position: absolute;
      width: 200px;
      min-height: 200px;
      border: 1px solid red;
      top: 10;
      left: 10;
      z-index: 999;
    }
  }
}
.flex {
  display: flex;
}
.flex-s {
  display: flex;
  justify-content: space-between;
}
</style>

在这里插入图片描述

9.3获取右键菜单的坐标

<template>
  <div class="home">
    天地图
    <div id="map">
      <div class="btns">
        <input type="button" value="放大 +" @click="ZoomUp" />
        <input type="button" value="缩小 -" @click="ZoomDown" />
        经度:<input type="text" v-model="lng" />
        <br />
        纬度:<input type="text" v-model="lat" />
        <br />
        缩放级别:<input type="text" v-model="zoom" />
        <br />
        <input type="button" value="设置中心点" @click="setCenterAndZoom" />
        <input
          type="button"
          value="开启双击放大地图"
          @click="enableDoubleClickZoom"
        /><br />
        <input
          type="button"
          value="禁止双击放大地图"
          @click="disableDoubleClickZoom"
        /><br />
        <input
          type="button"
          value="允许鼠标滚轮缩放地图"
          @click="enableScrollWheelZoom"
        /><br />
        <input
          type="button"
          value="禁止鼠标滚轮缩放地图"
          @click="disableScrollWheelZoom"
        /><br />
        <input
          type="button"
          value="允许鼠标惯性拖拽"
          @click="enableInertia"
        /><br />
        <input
          type="button"
          value="禁止鼠标惯性拖拽"
          @click="disableInertia"
        /><br />
        <input
          type="button"
          value="允许键盘操作地图"
          @click="enableKeyboard"
        /><br />
        <input
          type="button"
          value="禁止键盘操作地图"
          @click="disableKeyboard"
        /><br />
        <input
          type="button"
          value="获取地图中心点坐标"
          @click="getCenter"
        /><br />
        <input
          type="button"
          value="获取当前地图的缩放级别"
          @click="getZoom"
        /><br />
        <input
          type="button"
          value="叠加WMS 服务图层"
          @click="
            addWmsLayer('topp:states', 'http://localhost:8080/assets/logo')
          "
        /><br />
        <input
          type="button"
          value="删除wms 服务图层"
          @click="delWmsLayer"
        /><br />
        <input
          type="button"
          value="添加缩放控件"
          @click="addZoomControl"
        /><br />
        <input
          type="button"
          value="添加比例尺控件"
          @click="addScaleControl"
        /><br />
        <input
          type="button"
          value="添加鹰眼控件"
          @click="addOverViewMapControl"
        /><br />
        <input
          type="button"
          value="添加地图版权控件"
          @click="addcopyControl"
        /><br />
        <input
          type="button"
          value="添加地图类型控件"
          @click="addMapType"
        /><br />
        <input
          type="button"
          value="添加符号类控件 "
          @click="addMilitarySymbols"
        /><br />
        <input type="button" value="添加右键菜单" @click="addMenu" /><br />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  components: {},
  data() {
    return {
      map: "",
      zoom: 18,
      lng: "116.64899",
      lat: "40.12948",
      menus: "",
    };
  },
  computed: {},
  mounted() {
    this.initMap();
  },
  methods: {
    ZoomUp() {
      // 放大一级地图
      this.map.zoomIn();
    },
    ZoomDown() {
      // 缩小一级地图
      this.map.zoomOut();
    },
    initMap() {
      this.map = new T.Map("map");
      this.map.centerAndZoom(new T.LngLat(116.40769, 39.89945), this.zoom);
      this.map.enableScrollWheelZoom();
      const bs = this.map.getBounds(); //获取可视区域
      var bssw = bs.getSouthWest(); //可视区域左下角
      var bsne = bs.getNorthEast(); //可视区域右上角
      // 可视区域变化,缩放等级、屏显分辨率、中心点 lng 经度  lat 纬度
      console.log("bssw", bssw);
      console.log("bsne", bsne);
    },
    setCenterAndZoom() {
      this.map.centerAndZoom(new T.LngLat(this.lng, this.lat), this.zoom);
    },
    enableDoubleClickZoom() {
      this.map.enableDoubleClickZoom();
    },
    disableDoubleClickZoom() {
      this.map.disableDoubleClickZoom();
    },
    enableScrollWheelZoom() {
      this.map.enableScrollWheelZoom();
    },
    disableScrollWheelZoom() {
      this.map.disableScrollWheelZoom();
    },
    enableInertia() {
      this.map.enableInertia();
    },
    disableInertia() {
      this.map.disableInertia();
    },
    enableKeyboard() {
      this.map.enableKeyboard();
    },
    disableKeyboard() {
      this.map.disableKeyboard();
    },
    getCenter() {
      const c = this.map.getCenter();
      alert(`经度 ${c.getLng()}  纬度:${c.getLat()}`);
    },
    getZoom() {
      alert(`当前地图缩放级别为:${this.map.getZoom()}`);
    },
    addWmsLayer(layers, url) {
      const config = {
        version: "1.1.0", //请求服务的版本
        request: "GetMap",
        layers: layers,
        transparent: true, //输出图像背景是否透明
        styles: "", //每个请求图层的用","分隔的描述样式
        format: "image/png", //输出图像的类型
      };
      this.getWms(url, config);
    },
    getWms(url, config) {
      if (this.wmsLayer) {
        this.map.removeLayer(this.wmsLayer);
      }
      this.wmsLayer = new T.TileLayer.WMS(url, config);
      this.map.addLayer(this.wmsLayer);
    },
    delWmsLayer() {
      this.map.removeLayer(this.wmsLayer);
    },
    addZoomControl() {
      if (this.zoomControl) {
        return;
      }
      this.zoomControl = new T.Control.Zoom();
      this.map.addControl(this.zoomControl);
      this.zoomControl.setPosition(T_ANCHOR_TOP_LEFT);
    },
    addScaleControl() {
      if (this.scaleControl) {
        return;
      }
      this.scaleControl = new T.Control.Scale();
      this.map.addControl(this.scaleControl);
    },
    addOverViewMapControl() {
      if (this.overViewMapControl) {
        return;
      }
      this.overViewMapControl = new T.Control.OverviewMap({
        isOpen: true,
        size: new T.Point(200, 200),
        // 设置小地图,鹰眼的初始化大小
      });
      this.map.addControl(this.overViewMapControl);
    },
    addcopyControl() {
      if (this.copyControl) {
        return;
      }
      this.copyControl = new T.Control.Copyright({
        position: T_ANCHOR_TOP_LEFT,
        // 初始化地图版权的位置
      });
      this.map.addControl(this.copyControl);

      // 返回地图的可视区域
      const bs = this.map.getBounds();
      // 添加版权信息
      this.copyControl.addCopyright({
        id: 10,
        content: `<a href="http://wwww.baidu.com">这里是自定义版权控件的位置,可以加超链接</a>`,
        bounds: bs,
      });
    },
    addMapType() {
      if (this.mapTypeControl) {
        return;
      }
      this.mapTypeControl = new T.Control.MapType();
      this.map.addControl(this.mapTypeControl);
    },
    addMilitarySymbols() {
      // if (this.militarySymbols) {
      //     return
      // }
      //允许鼠标滚轮缩放地图
      this.map.enableScrollWheelZoom();
      const militarySymbols = new T.Control.militarySymbols({
        position: T_ANCHOR_TOP_LEFT,
        // 初始化符号位置
      });
      this.map.addControl(militarySymbols);
    },
    // addMenu() {
    //   this.menus = new T.ContextMenu({
    //     width: 50,
    //   });
    //   const menu1 = new T.MenuItem("放大", this.zoomIn);
    //   const menu2 = new T.MenuItem("缩小", this.zoomOut);
    //   this.menus.addItem(menu1);
    //   this.menus.addItem(menu2);
    //   this.map.addContextMenu(this.menus);
    // },
    // addMenu() {
    //   this.menus = new T.ContextMenu({
    //     width: 70,
    //   });
    //   const menu1 = new T.MenuItem("放大", this.zoomIn);
    //   const menu2 = new T.MenuItem("缩小", this.zoomOut);
    //   const menu3 = new T.MenuItem("放大最大", this.setZoom);
    //   const menu4 = new T.MenuItem("查看全国", this.setTotal);
    //   this.menus.addItem(menu1);
    //   this.menus.addItem(menu2);
    //   this.menus.addSeparator();
    //   this.menus.addItem(menu3);
    //   this.menus.addItem(menu4);
    //   this.map.addContextMenu(this.menus);
    // },
    addMenu() {
      this.menus = new T.ContextMenu({
        width: 100,
      });
      const menu1 = new T.MenuItem("放大", this.zoomIn);
      const menu2 = new T.MenuItem("缩小", this.zoomOut);
      const menu3 = new T.MenuItem("放大最大", this.setZoom);
      const menu4 = new T.MenuItem("查看全国", this.setTotal);
      const menu5 = new T.MenuItem("右键获取坐标", this.LngLat);
      this.menus.addItem(menu1);
      this.menus.addItem(menu2);
      this.menus.addSeparator();
      this.menus.addItem(menu3);
      this.menus.addItem(menu4);
      this.menus.addSeparator();
      this.menus.addItem(menu5);
      this.map.addContextMenu(this.menus);
    },
  },
};
</script>

<style lang="scss" scoped>
.home {
  #map {
    width: 100vw;
    height: 90vh;
    position: relative;
    .btns {
      position: absolute;
      width: 200px;
      min-height: 200px;
      border: 1px solid red;
      top: 10;
      left: 10;
      z-index: 999;
    }
  }
}
.flex {
  display: flex;
}
.flex-s {
  display: flex;
  justify-content: space-between;
}
</style>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/939526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何开发一款飞机聊天app?即时通讯系统

随着航空业的快速发展&#xff0c;飞机旅行已经成为人们生活中常见的一部分。而在飞行期间&#xff0c;人们往往希望能够与其他乘客进行交流&#xff0c;分享旅行经历或者寻找旅途中的伴侣。为了满足这一需求&#xff0c;开发一款专门用于飞机上的聊天应用程序成为了一个有意的…

个人博客系统——SSM框架

项目特点&#xff1a; 1.使用手工加盐算法代替明文&#xff0c;提高用户隐私安全性 2.登录功能的验证使用了拦截器 3.支持分布式 Session存储和缓存都放到了Redis里面 具体实现步骤 1.创建一个SSM项目 ​​​​​​​ 2.准备项目 先删除项目中无用的文件和目录 引入前端…

项目进度管理:项目经理做了无用功,如何解决?

李思是一个职场新人&#xff0c;项目经理分配了一个简单的任务给她&#xff0c;完成一份关于竞品功能的调查报告&#xff0c;以便为公司的产品提供参考。 李思第二天回复称进展顺利&#xff0c;预计两天时间能完成。 然而&#xff0c;当项目经理收到厚厚的调研报告时&#x…

Gitlab创建一个空项目

1. 创建项目 Project slug是访问地址的后缀&#xff0c;跟前边的ProjectUrl拼在一起&#xff0c;就是此项目的首页地址&#xff1b; Visibility Level选择默认私有即可&#xff0c;选择内部或者公开&#xff0c;就会暴露代码。 勾选Readme选项&#xff0c;这样项目内默认会带…

怎么看待目前的游戏市场格局,看好哪儿家公司?

近三十年来&#xff0c;中国游戏砥砺前行经过近四十年的发展&#xff0c;将计算机技术、互动媒体技术、艺术设计、经济系统、商业模式等进行了充分融合应用&#xff0c;作为 “ 第九艺术 ” 已经成为文化产业 的重要支柱&#xff0c;其硬件和软件创新也不断改变着人们的娱乐消费…

小研究 - 多租户Java虚拟机的设计与实现(二)

多租户技术&#xff0c;让一个软件实例同时服务于不同的组织&#xff0c;在云计算环境中被广泛运用&#xff0c;极大的节约了基础设施资源。但是&#xff0c;云计算环境中使用最广的Java语言却没有提供相应的多租户功能。为此&#xff0c;云服务提供商不得不对自己的应用服务器…

arcgis的MapServer服务查询出来的结果geometry坐标点带*的问题

不知道小伙伴使用arcgis server服务做查询的时候&#xff0c;有没有遇到下面的问题 原因是查询结果中出现*字符 这个问题一直困扰了我很久&#xff1a;因为从数据库查询的坐标点是没有问题的。 一开始有同事遇到过&#xff0c;说重新插入下就好了&#xff0c;有时候确实能解决…

Qt-creater 在线安装太慢,换国内源

Qt 在线安装太慢,换国内源 下载安装包 实例使用清华源 如下图先下载安装包exe文件 url: 链接: https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/ 下载安装包到本地目录D:\ Powershell进入本地目录D:\ 使用参数方式换国内清华源 换国内清华源 …

嵌入式AI助力当代商业的发展

数字化转型的业务影响是广泛的&#xff0c;但购买者应寻求嵌入式AI在以下领域具有最大的影响力&#xff1a; 1.业务流程和任务的自动化 当买家搜索购买包含AI的软件时&#xff0c;他们应该研究该解决方案为员工自动执行日常任务的方式。嵌入式AI应该节省员工的时间和精力&#…

Maven之高版本的 lombok 和 tomcat 7 插件冲突问题

高版本的 lombok 和 tomcat 7 插件冲突问题 在开发期间&#xff0c;当我们使用 tomcat7-maven-plugin 来作为运行环境运行我们项目使&#xff0c;如果我们项目中使用了 1.16.20 及以上版本的 lombok 包&#xff0c;项目启动时会报错&#xff1a; for annotations org.apache.…

工业级PDA高精度导航定位

工业级PDA是指能到达防尘、防水、防摔三防等级&#xff0c;并具备实时采集、自动存储、即时显示、即时反馈、自动处理和自动传输等功能的移动智能终端。为满足如农业、铁路、空间、勘测与绘图等复杂环境领域的需要&#xff0c;目前高端工业级PDA普遍具备高精度的导航定位功能&a…

Apple Configurator iphone ipad 设备管控 描述文件使用方法

一、准备 App Store 下载安装 Apple Configurator 二、Apple Configurator 注册组织&#xff0c; -----------这个组织可以是个人&#xff0c;或者其它组织导出-------再导入进来&#xff1a; 三、描述文件配置&#xff1a;“” 根据管控需求进行配置 “” 四、使用 Ap…

Django(7)-项目实战-发布会管理

登录功能 模板页面 sign/templates/index.html <!DOCTYPE html> <html> <head><title>Login Page</title> </head> <body><h1>发布会管理</h1><form action"/login/" method"post"><la…

Flask加amis学校管理系统java学生教务信息jsp源代码Mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 Flask加amis学校管理系统 系统有3权限&#xff1a;学…

lnmp架构-mysql1

1.MySQL数据库编译 make完之后是这样的 mysql 初始化 所有这种默认不在系统环境中的路径里 就这样加 这样就可以直接调用 不用输入路径调用 2.初始化 重置密码 3.mysql主从复制 配置master 配置slave 当master 端中还没有插入数据时 在server2 上配slave 此时master 还没进…

【java基础——interface接口】

JAVA基础 interface接口 文章目录 JAVA基础接口 Interface 接口 Interface 接口是一种特殊的抽象类&#xff0c;它定义了一组抽象方法和常量&#xff0c;并且不包含具体实现。 只允许声明静态常量&#xff1a;必须且默认为 public static final 。声明抽象方法&#xff1a;必…

数据结构1

数据结构是计算机科学中存储和组织数据的一种方式&#xff0c;它定义了数据的表示方式和对数据进行操作的方法&#xff0c;常见的数据结构包括数组、栈、链表、队列、树、图等。 目录 一、常见的数据结构 1.数组 2.栈 3.队列 4.链表 5.树 6.图 一、常见的数据结构 1.数…

H5 + C3基础(五)(seo相关标签 顶部快捷栏实践 Logo seo)

seo相关标签 & 顶部快捷栏实践 seo相关标签titledescriptionkeywords 顶部快捷栏实践Logo seo seo相关标签 seo&#xff1a;搜索引擎优化&#xff0c;是一种利用搜索引擎规则提高网站在搜索引擎结果中自然排名的方式&#xff0c;进而提高网站的自然流量。 前端开发中主要s…

【Tkinter系列01/15】界面初步和布局

一、说明 一般来说&#xff0c;界面开发中&#xff0c;如果不是大型的软件&#xff0c;就不必用QT之类的实现&#xff0c;用Tkinter已经足够&#xff0c;然而即便是Tkinter规模不大&#xff0c;也需要一个系统专业的学习过程&#xff0c;本篇将是对Tkinter系列介绍的一篇博文。…

JavaSE(下)

一、集合进阶 双列集合Map<>【Java】Map集合概述 双列集合特点 Map常见API 三种遍历方式 1、由键找值,创建键的集合 2、通过键值对对对象进行遍历 3、利用lambda表达式进行遍历 HashMap HashMap的特点 HashMap的底层 总结 例题 package com.itheima.Mapdemo;import java.…