微信小程序中使用高德地图关键词搜索以及点击位置获取位置信息

之前写了一般微信腾讯地图位置服务,小程序插件版。那个非常好用,在没发现那个之前用的是位置服务的js版的。 不展示效果了,因为我改成用位置服务插件版了。

我做的是点击跳转到地图页,然后从地图页携带数据返回。 里面有搜索框,以及点击地图,获取地图的经纬度,然后传给腾讯位置服务的api获取返回的位置信息。

自己去官网下载 js文件 我放在 libs/qqmap-wx-jssdk.js

官网地址:https://lbs.qq.com/qqmap_wx_jssdk/method-getsuggestion.html

关键词搜索:qqmapsdk.getSuggestion() 经纬度反查位置:qqmapsdk.reverseGeocoder()

1、poimap.wxml

注:如果在地图上面浮动东西, 因为地图层级原因,需要专门用 cover-view !!!!
<!--pages/poimap/poimap.wxml-->
<view class="container">
  <!--绑定输入事件-->
  <input class="input" auto-focus placeholder="请输入···" bindinput="getsuggest" value="{{backfill}}"></input>
  <map class='map' longitude="{{longitude}}" latitude="{{latitude}}" scale="16" bindtap="clickMap" markers="{{markers}}" show-location>
    <cover-view class="input-panel">
      <!--关键词输入提示列表渲染-->
      <cover-view class="sel-item" wx:for="{{suggestion}}" wx:key="index" >
          <!--绑定回填事件-->
          <cover-view bindtap="backfill" data-id="{{index}}">
            <!--渲染地址title-->
            <cover-view >{{item.title}}</cover-view>
            <!--渲染详细地址-->
            <cover-view style="font-size:24rpx;color:#666;">{{item.addr}}</cover-view>
          </cover-view>
      </cover-view>
    </cover-view>
    <cover-view class="btn-panel">
      <cover-view class="button" bindtap='onClickDefine' type="default">确定</cover-view>
    </cover-view>
  </map>
  
</view>

2、poimap.wxss

/* pages/poimap/poimap.wxss */
.input{
  margin:4rpx 10rpx;
  border:1px solid #ccc;
  height:70rpx;
  line-height: 70rpx;
  font-size: 30rpx;
  border-radius: 10rpx;
  background-color: #fff;
  padding:0 20rpx;
}
.map{
  width:100%;
  height:calc( 100% - 70rpx );
}
.map .input-panel{
  position: absolute;
  left:10rpx;
  top:0;
  width:calc( 100% - 20rpx );
  min-height: 10rpx;
  font-size: 26rpx;
}
.input-panel .sel-item{
  min-height: 60rpx;
  padding:6rpx 20rpx;
  background-color: #fff;
  border-bottom: 1rpx dashed #ccc;
  z-index: 10000;
}
.map .btn-panel{
  position: absolute;
  left:10rpx;
  bottom:70rpx;
  width:calc( 100% - 20rpx );
  height:90rpx;
}
.btn-panel .button{
  height:90rpx;
  line-height: 90rpx;
  border:none;
  letter-spacing: 5rpx;
  font-size: 32rpx;
  color:#fff;
  text-align: center;
  border-radius: 10rpx;
  background-color: #33b5e5;
}

3、poimap.js

// pages/poimap/poimap.js

//公用函数
const Common = require("../../utils/common.js");
const QQMapWX = require("../../libs/qqmap-wx-jssdk.js");
var qqmapsdk;
//获取应用实例
const app = getApp();

Page({

  /**
   * 页面的初始数据
   */
  data: {
    img_server_url: app.globalData.img_server_url,
    latitude: 22.533773,
    longitude: 114.057678,
    markers: [],
    polyline: [],
    controls: [],
    //关键词搜索
    suggestion:[],
    selItem:null,
    type:'',
    backfill:''
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 实例化API核心类
    qqmapsdk = new QQMapWX({
      key: 'YPNBZ-PMSCX-G664V-7XBWG-SYFB6-KRBUO'
    });
    
  this.getLocation();
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },
  clickMap(e) {
    var poi = e.detail;
    this.reverseGeocoder(poi.latitude + ',' + poi.longitude, this);
  },
  // 获取当前位置
  getLocation(){
    var me = this;
    wx.getLocation({
      type: 'wgs84',//wgs84 gcj02
      // altitude:true,
      success: function (res) {
        me.setData({
          latitude: res.latitude,
          longitude: res.longitude
        });
        me.reverseGeocoder(res.latitude + ',' + res.longitude, me);
      },
      fail: function (e) {
        console.log(e);
      }
    });
  },
  //根据经纬度获取位置
  reverseGeocoder(location, me) {
    wx.showLoading({
      title: '加载中···',
      mask: true
    });
    qqmapsdk.reverseGeocoder({
      location: location,
      success: function (res) {//成功后的回调
        var result = res.result;
        var title = result.formatted_addresses.recommend;
        title=title.replace(/\([^\)]*\)/g, "");
        var selItem  = { // 获取返回结果,放到sug数组中
          title: title,
          addr: result.address,
          province: result.ad_info.province,
          city: result.ad_info.city,
          adcode: result.ad_info.adcode,
          district: result.ad_info.district,
          latitude: result.location.lat,
          longitude: result.location.lng,
        };
        var markers = []; 
        markers.push({
          iconPath: "../../images/poi_icon.png",
          latitude: result.location.lat,
          longitude: result.location.lng,
          width: 22,
          height: 32
        });
        me.setData({
          backfill: title,
          markers: markers,
          selItem: selItem
        });
        wx.hideLoading()
      },
      fail: function (error) {
        console.error(error);
      }
    })
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    
  },
  //数据回填方法
  backfill: function (e) {
    var id = e.currentTarget.dataset.id;
    var selItem;
    for (var i = 0; i < this.data.suggestion.length; i++) {
      if (i == id) {
        selItem = this.data.suggestion[i];
        this.setData({
          backfill: this.data.suggestion[i].title
        });
        break;
      }
    }
    var markers=[];
    markers.push({
      iconPath: "../../images/poi_icon.png",
      longitude: selItem.longitude,
      latitude: selItem.latitude,
      width: 22,
      height: 32
    });
    this.setData({
      markers: markers,
      longitude: selItem.longitude,
      latitude: selItem.latitude,
      suggestion:[],
      selItem: selItem
    });
  },
  // 点击确定
  onClickDefine() {
      // 这个地方给该赋值的数据赋值既可。在这个地方把数据给全局变量既可
    app.globalData.address_name = selItem.title;
  app.globalData.address = selItem.addr;
  app.globalData.address_poi = selItem.latitude + ',' + selItem.longitude;
    wx.navigateBack({
      delta: 1
    });
  },
  //触发关键词输入提示事件
  getsuggest: function (e) {
    var _this = this;
    var location = this.data.latitude + ',' + this.data.longitude;
    var keyword = e.detail.value.replace(/\s+/g, '');
    if (keyword==""){
      return;
    }
    //调用关键词提示接口
    qqmapsdk.getSuggestion({
      //获取输入框值并设置keyword参数
      keyword: keyword, //用户输入的关键词,可设置固定值,如keyword:'KFC'
      location: location,
      region:'深圳', //设置城市名,限制关键词所示的地域范围,非必填参数
      success: function (res) {//搜索成功后的回调
        var sug = [];
        for (var i = 0; i < res.data.length; i++) {
          sug.push({ // 获取返回结果,放到sug数组中
            title: res.data[i].title,
            id: res.data[i].id,
            addr: res.data[i].address,
            province: res.data[i].province,
            city: res.data[i].city,
            adcode: res.data[i].adcode,
            district: res.data[i].district,
            latitude: res.data[i].location.lat,
            longitude: res.data[i].location.lng
          });
        }
        //设置suggestion属性,将关键词搜索结果以列表形式展示
        _this.setData({
          suggestion: sug
        });
      },
      fail: function (error) {
        console.error(error);
      }
    });
  }
})
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容