VUE 实现google 地图展示,搜索,获取经纬度

安装Google 依赖 npm i @googlemaps/js-api-loader

  <template>
  <q-dialog maximized v-model="showDialog" flat  ref="mapdialog">
  <q-form  @submit="mapsave" ref="popform" class="dialog_card column">
    <h5 class="view_title justify-between q-px-md">
        {{maptype}}
      <q-btn dense icon="close" v-close-popup />
    </h5>
    <q-scroll-area class="col row">
        <div class="row dialog_form padding20-l">
            <table
                class="cross_table advance-tab"
                boreder="0"
                cellpadding="0"
                cellspacing="2"
                >
                <tbody>
                    <tr>
                    <td class="">
                        <h5 class="q-text-als">
                        {{ $t("depart.Address") }}:
                        </h5>
                    </td>
                    <td class="wtex">
                        <q-input
                        class="q-inputw"
                        outlined
                        dense
                        v-model="mapaddess"
                        type="text"
                        />
                    </td>
                
                    <td class="">
                    <q-btn
                        class="q-mx-sm btn_search_ls"
                        color="primary"
                        :label="$t('depart.Search')"
                        @click="mapsearch"
                    />
                    </td>
                    <td class="wtex">
                        
                    </td>

                    <td class="">
                
                    </td>
                    <td class="wtex">
                    
                    </td>
                    </tr>

                
                </tbody>

                </table>
            </div>



            <div id="map" style="width: 100%; height: 800px;"></div>
    </q-scroll-area>
   
    <div class="row justify-end q-pa-md q-bordertop">
       <div class="on-left" style="width:100%;" > {{this.$t("depart.latitude")}}:{{savelat}}   {{this.$t("depart.longitude")}}:{{savelng}}</div>
       <q-btn
        class="q-mx-sm btn_search_ls"
        color="primary"
        :label="$t('depart.commitBtn')"
        type="submit"
      />

      <q-btn
        outline
        class="btn_normal_als"
        color="primary"
        :label="$t('depart.closeBtn')"
        v-close-popup
      />
    </div>
  </q-form>
</q-dialog>
  </template>



   <script>
  import { Loader } from "@googlemaps/js-api-loader";

const loader = new Loader({
  apiKey: "xxxxxxxxxxxxxxxx",
  version: "weekly",
});

	
	let map;
	let marker;
	let defaultLatLng = { lat: 13.876016, lng: 100.576993 };
	let geocoder;
	
	export default {
	  name: "googlemap",
	  components: {
	
	  },
	  data() {
	    return {
	        maptype:"Map",
	        showDialog: false,
	        mapaddess:"",
	        center:{lat:13.876016, lng:100.576993},
	        savelat:13.876016,
	        savelng:100.576993,
	    };
	  },
	  methods:{
	    show() {
	      this.showDialog = true;
	      this.mapaddess="";
	      this.initMap();
	    },
	    hide() {
	      this.showDialog = false;
	    },
	    initMap() {
			  loader
			    .load()
			    .then((google) => {
						// 缩放视野以包含所有给定的坐标点
			      map = new google.maps.Map(document.getElementById("map"),
			        {
								// 地图打开时的中心点位,经纬度是数字Number类型的
			          center: this.center,
								// 地图缩放参数
			          zoom: 17,
								// 最大缩放参数
			        	maxZoom: 18,
								// 最小缩放参数
			        	minZoom: 4,
								// 禁用默认UI
			          disableDefaultUI: true
			        }
			      )
	
	          marker = new google.maps.Marker({
	            map: map,
	            position: defaultLatLng,
	            draggable: true
	          });
	          map.setCenter(marker.getPosition());
	
	
	          //移动标记点获取经纬度
	          google.maps.event.addListener(marker,'dragend',this.getAreaName);
	
	
	          //地址搜索初始化
						geocoder=new google.maps.Geocoder();
			    })
			    .catch((e) => {
			      console.log(e)
			    })
			},
	    getAreaName(result){
	      this.savelat=result.latLng.lat();
	      this.savelng=result.latLng.lng();
	
	      //console.log(result);
	    },
	    //地图搜索
	    mapsearch(){
	      geocoder.geocode({ 'address': this.mapaddess }, this.GetMapLocation);
	
	    },
	
	    GetMapLocation(results, status){
	        if (status === 'OK') {
	            map.setCenter(results[0].geometry.location);
	            marker.setPosition(results[0].geometry.location);
	
	            this.savelat= results[0].geometry.location.lat();
	            this.savelng= results[0].geometry.location.lng();
	        } else {
	          console.log("error");
	        }
	    },
	    //地图保存
	    mapsave(){
	      var p = marker.getPosition();
	      this.savelat=p.lat();
	      this.savelng=p.lng();
	      this.$emit('mapsave',this.savelng,this.savelat);
	    },
	
	
	  },
	
	 
	};
	</script>

可以根据地点搜索定位到指定的位置, 移动图标可以获取经纬度。
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue2中,你可以使用谷歌地图的API来实现点击地图获取经纬度的功能。下面是一个简单的示例代码: 首先,在Vue组件中引入Google Maps API的脚本。你可以将以下代码添加到`index.html`文件的`<head>`标签中: ```html <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" async defer></script> ``` 确保将`YOUR_API_KEY`替换为你自己的谷歌地图API密钥。 然后,在你的Vue组件中,你可以创建一个地图并添加一个监听器来获取点击事件的经纬度。以下是示例代码: ```vue <template> <div id="map"></div> </template> <script> export default { mounted() { // 初始化地图 this.initMap(); }, methods: { initMap() { // 创建地图 const map = new google.maps.Map(document.getElementById("map"), { center: { lat: 0, lng: 0 }, zoom: 8, }); // 添加点击事件监听器 map.addListener("click", (event) => { const lat = event.latLng.lat(); const lng = event.latLng.lng(); console.log(`经度:${lng.toFixed(6)}, 纬度:${lat.toFixed(6)}`); // 在这里可以对获取经纬度进行处理或发送到后端等操作 }); }, }, }; </script> ``` 在上述代码中,我们首先在`mounted`生命周期钩子中调用`initMap`方法来初始化地图。在`initMap`方法中,我们创建了一个新的地图实例,并将其绑定到指定的DOM元素上。然后,我们添加了一个点击事件监听器,并在回调函数中获取了点击位置的经纬度。 请注意,你需要替换示例代码中的`YOUR_API_KEY`为你自己的谷歌地图API密钥。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值