本文实例讲述了微信小程序使用map组件实现检索(定位位置)周边的POI功能。分享给大家供大家参考,具体如下:
声明
bug: 页面顶部分类【汽车服务、汽车销售等】列表和页脚的详细地址在真机测试是会出现不显示问题?
造成原因:在小程序map组件的同一区域,map组件的视图层比普通的文本视图层要高,所以在真机会遮挡!
解决办法:将该文本视图采用cover-view,放在map中。
感谢: 感谢Lrj_estranged指出问题!
效果图
实现方法
1. 地图采用微信小程序提供的map组件;
2. 周边的数据坐标点通过高德地图提供的API接口,获取定位位置的周边或者指定位置周边的数据。
WXML
<view class="map_container"> <map class="map" longitude="{{longitude}}" latitude="{{latitude}}" include-points="{{points}}" markers='{{markers}}'> <cover-view class="map-tab-bar"> <cover-viewclass="map-tab-li {{item.id == status " bindtap="getType" data-type="{{item.id}}" wx:key="aroundListId" wx:for="{{aroundList}}">{{item.name}}</cover-view> </cover-view> <cover-viewclass="map-tab-bar map-foot {{isShow "> <cover-viewclass="map-name">{{name}}</cover-view> <cover-viewclass="map-address">{{address}}</cover-view> </cover-view> </map> </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的优劣:①、目前高德提供的API返回数据很快,最少目前比微信小程序自己的快很多;②、缺点也很明显就是由于是外部提供的,所以需要进行对应配置,麻烦;③、微信小程序提供的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 }] }) } })
希望本文所述对大家微信小程序开发有所帮助。
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 邱锋泽.2024-COlOR.Free【发现梦想】【FLAC分轨】
- 群星 《10年朋友Vol.8》滚石台湾版[WAV+CUE][1.G]
- 群星《2024好听新歌31》十倍音质 U盘音乐 [WAV分轨][1.1G]
- 群星《全天后》华纳[WAV+CUE][1.1G]
- 许乐《声愿HQCD》[正版原抓WAV+CUE]
- 黄凯芹《给你留念》头版限量编号MQA-UHQCD2024[低速原抓WAV+CUE]
- 黑鸭子2008-今生最爱[首版][WAV+CUE]
- 彭海桐.2000-好好想想你【SONY】【WAV+CUE】
- 群星.1995-亚洲电视剧集主题曲大全·乐作剧2CD【滚石】【WAV+CUE】
- 林强.1992-春风少年兄【魔岩】【WAV+CUE】
- 世界顶级汽车音响试音王《金色的草原》24K金碟[低速原抓WAV+CUE][1G]
- 周深 /Faouzia《解密 电影原声带》[320K/MP3][39.32MB]
- 周深 /Faouzia《解密 电影原声带》[FLAC/分轨][199.46MB]
- 英雄联盟s14亚军队伍是哪支 英雄联盟s14亚军队伍介绍
- 英雄联盟s14夺冠队伍是哪支 英雄联盟s14夺冠队SKT T1队伍介绍