web端仿微信朋友圈定位检索功能

web端仿微信朋友圈定位功能

1. 先看实现的效果。

在这里插入图片描述

在这里插入图片描述

2.实现思路

  • 用户点击时通过高德地图接口的geolocation函数获取用户的经纬度和所在的城市。然后将经纬度和城市存储起来。以便于下面其他接口使用。

  • 获取到经纬度后通过经纬度和城市去查询附近的一些商家,或者建筑物的数据。然后将这些 数据渲染到页面。

  • 当用户在输入框搜索的时候,去调用高德地图的POI接口,然后将返回的数据渲染到页面。

3.上代码

//1.引入高德地图的js
<script src="https://webapi.amap.com/maps?v=1.4.15&key=125155455445"></script>
//2. 用高德地图获取当前的定位
 mounted(){
            var that=this;
            // 用高德地图获取当前的定位
            AMap.plugin('AMap.Geolocation', function() {
                var geolocation = new AMap.Geolocation({
                    // 是否使用高精度定位,默认:true
                    enableHighAccuracy: true,
                    // 设置定位超时时间,默认:无穷大
                    timeout: 10000,
                    // 定位按钮的停靠位置的偏移量,默认:Pixel(10, 20)
                    buttonOffset: new AMap.Pixel(10, 20),
                    //  定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:			  false
                    zoomToAccuracy: true,     
                    //  定位按钮的排放位置,  RB表示右下
                    buttonPosition: 'RB',
                    useNative:false,
                })

                geolocation.getCurrentPosition()
                AMap.event.addListener(geolocation, 'complete', onComplete)
                AMap.event.addListener(geolocation, 'error', onError)

                function onComplete (data) {
                    // data是具体的定位信息
                    var arr=[]
                    arr.push(data.position.lng)
                    arr.push(data.position.lat)
                    that.location=data.position.lng+","+data.position.lat
                    // console.log(data.position.lng,data.position.lat,data.addressComponent.city)
                    that.aMapSearchNearBy(arr,data.addressComponent.city)
                }

                function onError (data) {
                    // 定位出错
                    if(data.message=="Geolocation permission denied"){
                        alert("地理定位权限被拒绝!")
                    }else if(data.message=="Browser not Support html5 geolocation"){
                        alert("浏览器不支持原生定位接口")
                    }else if(data.message=="Get geolocation time out"){
                        alert("浏览器定位超时")
                    }else if(data.message=="Get geolocation failed"){
                        alert("定位失败")
                    }
                    // alert(JSON.stringify(data));
                }
            })
                         
        },
      
        methods:{
          // 高德地图根据经纬度查询周边
            aMapSearchNearBy(centerPoint, city) {
                var that=this
                AMap.service(["AMap.PlaceSearch"], function() {
                    var placeSearch = new AMap.PlaceSearch({
                        pageSize: 10,    // 每页10条
                        pageIndex: 1,    // 获取第一页
                        city: city       // 指定城市名(如果你获取不到城市名称,这个参数也可以不传,注释掉)
                    });
                    // 第一个参数是关键字,这里传入的空表示不需要根据关键字过滤
                    // 第二个参数是经纬度,数组类型
                    // 第三个参数是半径,周边的范围
                    // 第四个参数为回调函数
                    placeSearch.searchNearBy('', centerPoint, 1000, function(status, result) {
                        // console.log(centerPoint)
                        if(result.info === 'OK') {
                            var locationList = result.poiList.pois; // 周边地标建筑列表
                            // alert(locationList[1]+"周边")
                            for(let i in locationList){
                                locationList[i].district=locationList[i].address
                            }
                            // console.log(locationList)
                            that.list=locationList
                            // console.log($("#listSearch").html())
                            // console.log(that.list)
                      // 生成地址列表html
                            // createLocationHtml(locationList);
                        } else {
                            alert('获取位置信息失败!请重试');
                        }
                    });
                });
            },
            //根据input输入的内容模糊查询地址
             searchAdress(){
                var that=this;
                $.ajax({
                    url:"https://restapi.amap.com/v3/assistant/inputtips?&key=12346654&datatype=all&keywords="+$("#inputEmail3").val()+"&location="+this.location,
                    type:"GET",
                    success:function(res){
                        if(res.info!=0){
                            if(res.count>0){
                                that.list=res.tips;
                            }
                            if(res.count==0){
                                that.list.push("暂未查询到结果")
                            }
                        }
                    }
                })
            },

注意事项

1.获取用户经纬度时候存在兼容问题。浏览器禁止了非安全域的定位请求,比如Chrome、IOS10已陆续禁止,这时候需要升级站点到HTTPS。注意Chrome不会禁止localhost等域名HTTP协议下的定位。
2.在输入数据获取模糊匹配位置信息时,高德地图用到的接口的key 要求是web服务类的key.不然无法获取信息。详细信息参考https://lbs.amap.com/api/webservice/guide/api/search/

github地址:https://github.com/Xglhngy/-.git

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值