地图选址功能完善1

昨天实现的地址选址功能发现一个bug,

有时候会报以上错误,有时候又是正常的,感觉好像是加载顺序的问题,然后查了好半天文档,发现在main.js中,

Vue.use(VueAMap)

在以上一行代码之前加入一个

localStorage.clear();

就好了,目前没有出现什么错误,如果后续发现bug再来完善。

来来来,上代码:

main.js文件

import Vue from 'vue'
import VueAMap from 'vue-amap'
import App from './App'
import router from './router'
Vue.config.productionTip = false
localStorage.clear();
Vue.use(VueAMap)
VueAMap.initAMapApiLoader({
  //高德的key
  key: "cc644a48b701c256e9a827f068743fdd",
  // 插件集合
  plugin: [
    "AMap.Autocomplete",// 输入提示插件 
    "AMap.PlaceSearch",// POI搜索插件
    "AMap.Scale",// 右下角缩略图插件 比例尺
    "AMap.OverView",// 地图鹰眼插件
    "AMap.ToolBar",// 地图工具条
    "AMap.MapType",// 类别切换控件,实现默认图层与卫星图、实施交通图层之间切换的控制
    "AMap.PolyEditor",// 编辑 折线多,边形
    "AMap.CircleEditor",// 圆形编辑器插件
    "AMap.Geolocation", // 定位控件,用来获取和展示用户主机所在的经纬度位置
    "AMap.Geocoder",// 地理编码与逆地理编码服务,用于地址描述与坐标间的相互转换
    "AMap.AMapUI",// UI组件
  ],
  v: "1.4.4",
  uiVersion: "1.0.11" // 版本号
});

/* eslint-disable no-new */

new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

地图选点调用vue 文件

<template>
  <div class="myIndexWrap">
    <!-- 地图选点 -->
    <div class="mapWrap">
      <h3>地图选点</h3>
      <div class="addrWrap">
        <input type="text" v-model="address" style="width:400px;" />
        <img src="@/assets/mapIcon.png" @click="showMap = !showMap" />

        <GaodeMap
          v-show="showMap"
          class="mapBox"
          @selectedAddr="selectedAddr"
        />
      </div>
    </div>
  </div>
</template>

<script type='text/ecmascript-6'>
import GaodeMap from "@/components/GaodeMap.vue";//地图选点
export default {
  components: {
    GaodeMap
  },
  data() {
    return {
      showMap: true,
      address: "",
    };
  },
  mounted() {},
  methods: {
    //地图选址功能
    selectedAddr(data) {
      this.address = data.formattedAddress;
    }
  }
};
</script>

<style lang='scss' scoped>
.myIndexWrap {
  width: 1200px;
  min-height: 800px;
  height: auto;
  border: 1px solid #000;
  display: flex;
  flex-flow: column;
  h3 {
    padding-left: 50px;
  }
  
  // 地图选点-Style
  .addrWrap {
    display: flex;
    flex-wrap: row;
    input {
      width: 200px;
      height: 30px;
      margin-left: 20px;
    }
    img {
      width: 30px;
      height: 30px;
    }
    .mapBox {
      margin-left: 50px;
      margin-bottom: 100px;
    }
  }
 
}
</style>

GaodeMap.vue文件

<template>
  <div class="amap-wrapper">
    <el-amap-search-box
      class="search-box"
      :search-option="searchOption"
      :on-search-result="onSearchResult"
    ></el-amap-search-box>
    <el-amap
      vid="amapDemo"
      :zoom="zoom"
      class="amap-demo"
      :plugin="plugin"
      :events="events"
    >
      <el-amap-marker
        v-for="(marker,index) in markers"
        :key="index"
        :position="marker"
      ></el-amap-marker>
    </el-amap>
    <div class="toolbar">
      position: [{{ lng }}, {{ lat }}] address: {{ address }}
    </div>
  </div>
</template>


<script type='text/ecmascript-6'>
export default {
  components: {},
  data() {
    let self = this;
    self.city = self.city || "南京";
    return {
      zoom: 12,
      // center: [121.59996, 31.197646],
      address: "",
      // 在全国范围内搜索地址
      searchOption: {
        city: "全国",
        citylimit: true
      },
      markers: [
        [121.59996, 31.197646],
        [121.40018, 31.197622],
        [121.69991, 31.207649]
      ],
      plugin: [
        {
          pName: "ToolBar",
          events: {
            init(instance) {
              // console.log(instance);
            }
          }
        }
      ],
      events: {
        init(map) {
          
        },
        click: e => {
          let { lng, lat } = e.lnglat;
          self.lng = lng;
          self.lat = lat;
          // 这里通过高德 SDK 完成。
          var geocoder = new AMap.Geocoder({
            radius: 1000,
            extensions: "all"
          });
          geocoder.getAddress([lng, lat], function(status, result) {
            if (status === "complete" && result.info === "OK") {
              if (result && result.regeocode) {
                console.log('地址==>',result.regeocode)
                self.address = result.regeocode.formattedAddress;
                let province = result.regeocode.addressComponent.province;
                let city     = result.regeocode.addressComponent.city;
                let area     = result.regeocode.addressComponent.district;
                let street   = result.regeocode.addressComponent.township;
                self.$nextTick();
                // 将拿到的地址通过emit方式发送给父组件,回显数据
                let address = {
                  province:province,
                  city:city,
                  area:area,
                  street:street,
                  formattedAddress:self.address
                };
                self.$emit('selectedAddr',address);
              }
            }
          });
        }
      },
      lng: 0,
      lat: 0,
      mapCenter:null,
    };
  },
  mounted() {},
  methods: {
    onSearchResult(pois) {
      this.markers = [];
      let latSum = 0;
      let lngSum = 0;
      if (pois.length > 0) {
        pois.forEach(poi => {
          let { lng, lat } = poi;
          lngSum += lng;
          latSum += lat;
          this.markers.push([poi.lng, poi.lat]);
        });
        let center = {
          lng: lngSum / pois.length,
          lat: latSum / pois.length
        };
        this.mapCenter = [center.lng, center.lat];
      }
    },
    // 将搜索出来的结果添加标记
    addMarker: function() {
      let lng = 121.5 + Math.round(Math.random() * 1000) / 10000;
      let lat = 31.197646 + Math.round(Math.random() * 500) / 10000;
      this.markers.push([lng, lat]);
    }
  }
};
</script>

<style lang='scss' scoped>
.amap-wrapper {
  width: 800px;
  height: 500px;
  border: 1px solid #666;
  background:rgb(207, 203, 203);
}
</style>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
小程序内嵌H5实现地图选址的方法有多种,我来介绍一种常用的方式。 首先,我们需要在小程序中创建一个button按钮,用户点击该按钮后会跳转到H5页面。可以通过小程序的wx.navigateTo函数实现页面跳转,并传递参数给H5页面。 在H5页面中,我们可以引入地图相关的JavaScript库,例如百度地图API或者高德地图API。通过调用API提供的函数和方法,可以实现在H5页面上显示地图,并提供选址的功能。 在地图选址的过程中,可以使用地图API提供的搜索功能,让用户输入关键字,然后根据关键字在地图上搜索相关位置,并在地图上标注出搜索结果。用户可以在搜索结果中选择一个位置作为选址。 当用户在H5页面上选中了一个位置后,可以通过调用JavaScript代码的方式将选中的位置信息传递给小程序。在H5页面中,可以使用window.location.href实现页面跳转,并将选中的位置信息作为url参数传递给小程序。 在小程序中,可以通过wx.navigateBack函数回到上一个页面,并通过上一个页面的参数接收选中的位置信息。然后,可以使用这些位置信息在小程序中进行相应的处理,例如显示选址结果、保存选址信息等。 综上所述,通过小程序内嵌H5实现地图选址的步骤为:小程序中创建按钮 → 跳转到H5页面并传递参数 → H5页面显示地图并实现选址功能 → 用户选中位置并将选中位置信息传递给小程序 → 小程序接收选中位置信息并进行相应处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值