vue使用谷歌地图实现地点查询

效果
vue使用谷歌地图实现地点查询_第1张图片
vue使用谷歌地图实现地点查询_第2张图片
代码
首先在index.html中引入谷歌地图资源

 <script src="https://maps.googleapis.com/maps/api/js?key='你的api密钥'&libraries=places">
  script>

页面中

<template>
  <div class="pac-card div-style" id="pac-card">
    <div id="map" class="flex-item1"></div>

    <div id="pac-container" class="flex-item2">
      <el-input
        v-model="localValue"
        ref="autocompleteInput"
        type="text"
        placeholder="输入地址"
        @input="handleInput"
      />
      <ul
        v-if="predictions.length != 0 && localValue != ''"
        class="autocomplete-list"
      >
        <li
          style="list-style: none"
          v-for="prediction in predictions"
          :key="prediction.place_id"
          @click="selectPrediction(prediction)"
        >
          {{ prediction.description }}
        </li>
      </ul>
    </div>
  </div>
</template>

<script>
export default {
  name: "addressMap",
  data() {
    return {
      localValue: "",
      map: "",
      marker: "",
      longitude: -73.98633,
      latitude: 40.749933,
      predictions: [], // 存储搜索框提示的预测结果
    };
  },
  methods: {
    selectPrediction(prediction) {
      this.localValue = prediction.description;
      this.predictions = [];
      const that = this;
      // 创建 PlacesService 对象
      const placesService = new google.maps.places.PlacesService(map);
      // 获取地点的 Place ID
      const placeId = prediction.place_id;
      // 发起 Places API 请求
      placesService.getDetails({ placeId: placeId }, function (place, status) {
        if (status === google.maps.places.PlacesServiceStatus.OK) {
          // 获取地点的经纬度坐标
          that.latitude = place.geometry.location.lat();
          that.longitude = place.geometry.location.lng();
          that.initMap();
        } else {
          alert("无法找到该地点!");
        }
      });
    },
    handleInput() {
      const autocompleteService = new google.maps.places.AutocompleteService();
      autocompleteService.getPlacePredictions(
        { input: this.localValue },
        (predictions, status) => {
          if (status === google.maps.places.PlacesServiceStatus.OK) {
            this.predictions = predictions;
          } else {
            this.predictions = [];
          }
        }
      );
    },
    initMap() {
      const map = new google.maps.Map(document.getElementById("map"), {
        center: { lat: this.latitude, lng: this.longitude },
        zoom: 13,
        mapTypeControl: false,
      });
    },
  },
  mounted() {
    this.initMap();
  },
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss">
#map {
  overflow: hidden;
  width: 300px;
  height: 400px;
  margin: 0;
}
.div-style {
  display: flex;
}
.flex-item1 {
  flex: 2;
}
.flex-item2 {
  flex: 1;
}
.autocomplete-list {
  height: 200px;
  overflow: auto;
  ul {
    li {
      margin: 10px 0;
    }
  }
}
</style>

你可能感兴趣的:(地图,vue.js,前端,javascript)