微信小程序地图案例

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

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

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

  1. 初始化项目 首先,在微信开发者工具中创建一个新的小程序项目,并配置好基本文件结构:
  • 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
  1. 配置路由 (app.json)
    在 app.json 中添加页面路径配置:

json

{
  "pages": [
    "pages/index/index",
    "pages/restaurant/restaurant"
  ],
  "window": {
    "navigationBarBackgroundColor": "#ffffff",
    "navigationBarTextStyle": "black",
    "navigationBarTitleText": "附近美食",
    "backgroundColor": "#eeeeee",
    "backgroundTextStyle": "light"
  }
}
  1. 创建主页界面 (index.wxml)
    在 pages/index/index.wxml 中,我们将使用地图组件来展示地图,并添加一个按钮用于获取附近餐厅:

xml

<view class="container">
  <map id="map" 
       longitude="{{longitude}}" 
       latitude="{{latitude}}" 
       show-location 
       markers="{{markers}}" 
       bindmarkertap="onMarkerTap"
       style="width: 100%; height: 500px;">
  </map>
  <button bindtap="getNearbyRestaurants">查看附近美食</button>
</view>
  1. 实现主页逻辑 (index.js)
    在 pages/index/index.js 中,我们需要实现获取当前位置和查询附近餐厅的功能:

javascript

Page({
  data: {
    latitude: 0,
    longitude: 0,
    markers: []
  },
  
  onLoad: function() {
    this.getLocation();
  },
  
  getLocation: function() {
    wx.getLocation({
      type: 'gcj02',
      success: (res) => {
        this.setData({
          latitude: res.latitude,
          longitude: res.longitude
        });
        this.getNearbyRestaurants(); // 自动加载附近餐厅
      },
      fail: () => {
        wx.showToast({
          title: '无法获取地理位置',
          icon: 'none'
        });
      }
    });
  },
  
  getNearbyRestaurants: function() {
    wx.cloud.callFunction({
      name: 'getNearbyRestaurants',
      data: {
        latitude: this.data.latitude,
        longitude: this.data.longitude
      },
      success: (res) => {
        const restaurants = res.result.data;
        const markers = restaurants.map((restaurant, index) => ({
          id: index,
          latitude: restaurant.location.latitude,
          longitude: restaurant.location.longitude,
          title: restaurant.name
        }));
        this.setData({
          markers: markers
        });
      },
      fail: (err) => {
        wx.showToast({
          title: '获取数据失败',
          icon: 'none'
        });
        console.error(err);
      }
    });
  },
  
  onMarkerTap: function(event) {
    const markerId = event.markerId;
    const marker = this.data.markers[markerId];
    wx.navigateTo({
      url: `/pages/restaurant/restaurant?name=${marker.title}`
    });
  }
});
  1. 详情页界面 (restaurant.wxml)
    在 pages/restaurant/restaurant.wxml 中展示餐厅详情:

xml

<view class="container">
  <text>餐厅名称: {{name}}</text>
</view>
  1. 详情页逻辑 (restaurant.js)
    在 pages/restaurant/restaurant.js 中实现显示餐厅名称:

javascript

Page({
  data: {
    name: ''
  },
  
  onLoad: function(options) {
    if (options.name) {
      this.setData({
        name: options.name
      });
    }
  }
});
  1. 设置样式 (index.wxss 和 restaurant.wxss)
    用简单的CSS样式美化页面:

index.wxss

.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 20px;
}

button {
  margin-top
[好像出错了,请稍后再试。]

相关推荐

  1. 程序地图案例

    2024-06-18 17:42:04       5 阅读
  2. 程序地图

    2024-06-18 17:42:04       6 阅读
  3. 程序地图功能详解

    2024-06-18 17:42:04       6 阅读
  4. 程序实现腾讯地图

    2024-06-18 17:42:04       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-18 17:42:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-18 17:42:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-18 17:42:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-18 17:42:04       18 阅读

热门阅读

  1. C# OpenCvSharp函数形参-Size

    2024-06-18 17:42:04       6 阅读
  2. Linux 常用命令 - stat 【显示文件状态信息】

    2024-06-18 17:42:04       4 阅读
  3. 串口触摸屏的键盘控制

    2024-06-18 17:42:04       6 阅读
  4. 【杂记-浅谈OSPF协议中的RouterDeadInterval】

    2024-06-18 17:42:04       6 阅读
  5. 巴中青少年编程:开启未来科技的无限可能

    2024-06-18 17:42:04       5 阅读
  6. 自定义缓冲区(可用于串口等)

    2024-06-18 17:42:04       4 阅读
  7. wifi MLME

    2024-06-18 17:42:04       7 阅读