当前位置:   article > 正文

微信小程序地图

微信小程序地图

  微信小程序作为一种轻量级应用开发平台,广泛应用于各类服务场景中。今天我们将通过一个实际案例,演示如何在微信小程序中实现“查看附近美食餐厅”的功能。

  项目概述
  我们将开发一个微信小程序,用户可以通过该程序查看自己当前位置附近的美食餐厅,并在地图上显示这些餐厅的位置。点击地图上的标记,可以查看餐厅的详细信息。

  功能需求 获取用户当前位置 显示带有当前定位的地图 查询并显示附近的美食餐厅 点击餐厅标记查看餐厅详情 开发步骤

  初始化项目 首先,在微信开发者工具中创建一个新的小程序项目,并配置好基本文件结构:
pages/
index/
index.wxml
index.js
index.wxss
index.json
restaurant/
restaurant.wxml
restaurant.js
restaurant.wxss
restaurant.json
cloudfunctions/
getNearbyRestaurants/
index.js
package.json
app.json
app.js
app.wxss
配置路由 (app.json)
在 app.json 中添加页面路径配置:
json

  1. {
  2. "pages": [
  3. "pages/index/index",
  4. "pages/restaurant/restaurant"
  5. ],
  6. "window": {
  7. "navigationBarBackgroundColor": "#ffffff",
  8. "navigationBarTextStyle": "black",
  9. "navigationBarTitleText": "附近美食",
  10. "backgroundColor": "#eeeeee",
  11. "backgroundTextStyle": "light"
  12. }
  13. }

3.创建主页界面 (index.wxml)
在 pages/index/index.wxml 中,我们将使用地图组件来展示地图,并添加一个按钮用于获取附近餐厅:

wxml

  1. <view class="container">
  2. <map id="map"
  3. longitude="{{longitude}}"
  4. latitude="{{latitude}}"
  5. show-location
  6. markers="{{markers}}"
  7. bindmarkertap="onMarkerTap"
  8. style="width: 100%; height: 500px;">
  9. </map>
  10. <button bindtap="getNearbyRestaurants">查看附近美食</button>
  11. </view>

  4.实现主页逻辑 (index.js)
在 pages/index/index.js 中,我们需要实现获取当前位置和查询附近餐厅的功能:

javascript

  1. Page({
  2. data: {
  3. latitude: 0,
  4. longitude: 0,
  5. markers: []
  6. },
  7. onLoad: function() {
  8. this.getLocation();
  9. },
  10. getLocation: function() {
  11. wx.getLocation({
  12. type: 'gcj02',
  13. success: (res) => {
  14. this.setData({
  15. latitude: res.latitude,
  16. longitude: res.longitude
  17. });
  18. this.getNearbyRestaurants(); // 自动加载附近餐厅
  19. },
  20. fail: () => {
  21. wx.showToast({
  22. title: '无法获取地理位置',
  23. icon: 'none'
  24. });
  25. }
  26. });
  27. },
  28. getNearbyRestaurants: function() {
  29. wx.cloud.callFunction({
  30. name: 'getNearbyRestaurants',
  31. data: {
  32. latitude: this.data.latitude,
  33. longitude: this.data.longitude
  34. },
  35. success: (res) => {
  36. const restaurants = res.result.data;
  37. const markers = restaurants.map((restaurant, index) => ({
  38. id: index,
  39. latitude: restaurant.location.latitude,
  40. longitude: restaurant.location.longitude,
  41. title: restaurant.name
  42. }));
  43. this.setData({
  44. markers: markers
  45. });
  46. },
  47. fail: (err) => {
  48. wx.showToast({
  49. title: '获取数据失败',
  50. icon: 'none'
  51. });
  52. console.error(err);
  53. }
  54. });
  55. },
  56. onMarkerTap: function(event) {
  57. const markerId = event.markerId;
  58. const marker = this.data.markers[markerId];
  59. wx.navigateTo({
  60. url: `/pages/restaurant/restaurant?name=${marker.title}`
  61. });
  62. }
  63. });

  5.详情页界面 (restaurant.wxml)
在 pages/restaurant/restaurant.wxml 中展示餐厅详情:

wxml

  1. <view class="container">
  2. <text>餐厅名称: {{name}}</text>
  3. </view>

  6.详情页逻辑 (restaurant.js)
在 pages/restaurant/restaurant.js 中实现显示餐厅名称:

javascript

  1. Page({
  2. data: {
  3. name: ''
  4. },
  5. onLoad: function(options) {
  6. if (options.name) {
  7. this.setData({
  8. name: options.name
  9. });
  10. }
  11. }
  12. });

  7.设置样式 (index.wxss 和 restaurant.wxss)
用简单的CSS样式美化页面:

index.wxss

  1. .container {
  2. display: flex;
  3. flex-direction: column;
  4. align-items: center;
  5. justify-content: center;
  6. padding: 20px;
  7. }
  8. button {
  9. margin-top

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/747677
推荐阅读
相关标签
  

闽ICP备14008679号