• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

微信小程序----map组件实现检索【定位位置】周边的POI

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

效果图

实现方法

  1. 地图采用微信小程序提供的map组件;
  2. 周边的数据坐标点通过高德地图提供的API接口,获取定位位置的周边或者指定位置周边的数据。

WXML

<view class="map_container">
  <view class="map-tab-bar">
    <view class="map-tab-li {{item.id == status ? \'active\' : \'\'}}" bindtap="getType" data-type="{{item.id}}" wx:key="aroundListId" wx:for="{{aroundList}}">{{item.name}}</view>
  </view>
  <map class="map" longitude="{{longitude}}" latitude="{{latitude}}" include-points="{{points}}" markers=\'{{markers}}\'></map>
  <view class="map-tab-bar map-foot {{isShow ? \'\' : \'map-hide\'}}">
    <view class="map-name">{{name}}</view>
    <view class="map-address">{{address}}</view>
  </view>
</view>

WXSS

.map_container{
  width: 100%;
  height: 100%;
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
}
.map{
  width: 100%;
  height: 100%;
}
.map-tab-bar{
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  z-index: 1000;
  font-size: 0;
  background-color: #fff;
}
.map-hide{display: none;}
.map-foot{
  top: auto;
  bottom: 0;
  padding: 0 10px;
}
.map-name{
  height: 80rpx;
  line-height: 80rpx;
  font-size: 35rpx;
  overflow: hidden;
}
.map-address{
  height: 60rpx;
  line-height: 60rpx;
  font-size: 25rpx;
  overflow: hidden;
}
.map-tab-li{
  display: inline-block;
  width: 25%;
  overflow: hidden;
  height: 70rpx;
  line-height: 70rpx;
  text-align: center;
  font-size: 30rpx;
  color: #333;
}
.map-tab-li.active{color: #fff;background-color: lightgreen;border-radius: 5px;}

JS

var app = getApp();
var amap = app.data.amap;
var key = app.data.key;
Page({
  data: {
    aroundList: [
      {
        name: \'汽车服务\',
        id: \'010000\'
      },
      {
        name: \'汽车销售\',
        id: \'020000\'
      },
      {
        name: \'汽车维修\',
        id: \'030000\'
      },
      {
        name: \'摩托车\',
        id: \'040000\'
      },
      {
        name: \'餐饮\',
        id: \'050000\'
      },
      {
        name: \'购物\',
        id: \'060000\'
      },
      {
        name: \'生活\',
        id: \'070000\'
      },
      {
        name: \'体育休闲\',
        id: \'080000\'
      },
      {
        name: \'医疗保健\',
        id: \'090000\'
      },
      {
        name: \'住宿\',
        id: \'100000\'
      },
      {
        name: \'风景名胜\',
        id: \'110000\'
      },
      {
        name: \'商务住宅\',
        id: \'120000\'
      }
    ],
    status:null,
    latitude: null,
    longitude: null,
    isShow: false,
    markers: [],
    points: [],
    location: \'\',
    name:\'\',
    address: \'\'
  },
  onLoad: function () {
    // 页面加载获取当前定位位置为地图的中心坐标
    var _this = this;
    wx.getLocation({
      success(data) {
        if (data) {
          _this.setData({
            latitude: data.latitude,
            longitude: data.longitude,
            markers:[{
              id:0,
              latitude: data.latitude,
              longitude: data.longitude,
              iconPath: \'../../src/images/ding.png\',
              width: 32,
              height: 32
            }]
          });
        }
      }
    });
  },
  getType(e) {//获取选择的附近关键词,同时更新状态
    this.setData({ status: e.currentTarget.dataset.type})
    this.getAround(e.currentTarget.dataset.keywords,e.currentTarget.dataset.type);
  },
  getAround(keywords,types) {//通过关键词获取附近的点,只取前十个,同时保证十个点在地图中显示
    var _this = this;
    var myAmap = new amap.AMapWX({ key: key });
    myAmap.getPoiAround({
      iconPath: \'../../src/images/blue.png\',
      iconPathSelected: \'../../src/images/ding.png\',
      querykeywords: keywords,
      querytypes: types,
      location: _this.data.location,
      success(data) {
        if (data.markers) {
          var markers = [], points = [];
          for (var value of data.markers) {
            if (value.id > 9) break;
            if(value.id == 0){
              _this.setData({
                name: value.name,
                address: value.address,
                isShow: true
              })
            }
            markers.push({
              id: value.id,
              latitude: value.latitude,
              longitude: value.longitude,
              title: value.name,
              iconPath: value.iconPath,
              width: 32,
              height: 32,
              anchor: { x: .5, y: 1 },
              label: {
                content: value.name,
                color: \'green\',
                fontSize: 12,
                borderRadius: 5,
                bgColor: \'#fff\',
                padding: 3,
                x: 0,
                y: -50,
                textAlign: \'center\'
              }
            });
            points.push({
              latitude: value.latitude,
              longitude: value.longitude
            })
          }
          _this.setData({
            markers: markers,
            points: points
          })
        }
      },
      fail: function (info) {
        wx.showToast({title: info})
      }
    })
  }
});

总结

  1. 由于是移动端,所以人为限制只显示了9条周边数据,防止重叠部分太多。
  2. 添加指定位置的周边的方法—-添加一个input,将给的关键字进行搜索,然后返回坐标,改变地图中心坐标。
  3. 改变中心坐标还有采用微信小程序自己的API(wx.chooseLocation),改变地图中心坐标。参考:微信小程序—-map路线规划
  4. 高德地图提供API和微信小程序提供API的优劣:1、目前高德提供的API返回数据很快,最少目前比微信小程序自己的快很多;2、缺点也很明显就是由于是外部提供的,所以需要进行对应配置,麻烦;3、微信小程序提供的API优势就是属于本身,不用额外配置,如果以后优化了,更好。 
    实例: 

 

用高德地图提供的 getInputtips 接口,搜索关键字和城市,返回的坐标,然后改变地图中心坐标。
// 页面加载以输入地址为地图的中心坐标
// 假如输入的是:成都 欧尚庭院
myAmap.getInputtips({
  keywords: \'欧尚庭院\',
  city: \'成都\',
  success(res) {
    var tip = res.tips[0];
    var lo = tip.location.split(\',\')[0];
    var la = tip.location.split(\',\')[1];

    _this.setData({
      latitude: la,
      longitude: lo,
      location: tip.location,
      markers: [{
        id: 0,
        latitude: la,
        longitude: lo,
        iconPath: \'../../src/images/ding.png\',
        width: 32,
        height: 32
      }]
    })
  }
})

 

 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
    热门话题
    阅读排行榜

    扫描微信二维码

    查看手机版网站

    随时了解更新最新资讯

    139-2527-9053

    在线客服(服务时间 9:00~18:00)

    在线QQ客服
    地址:深圳市南山区西丽大学城创智工业园
    电邮:jeky_zhao#qq.com
    移动电话:139-2527-9053

    Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap