Sophomore Year Optional Course:Web 开发实践——小程序标点地图

简介: 选修课大作业:开发一款地图微信小程序。

web 开发实践课的大作业。本次小程序设计主要围绕 map 组件展开。

我们组设计了一款能够记录地图上的标点信息,并将自己的标点信息发布到帖子上的旅游类app。

github 代码地址,希望对你有所帮助~

HN6nM.png

小程序的主要功能就是记录地图上的标点信息,并上传到云数据库中;

在这里插入图片描述

以及编辑文章,把文章信息上传到云数据库中;

在这里插入图片描述

获取云数据库中的文章(最新发布的3篇)。

在这里插入图片描述

数据库设计

在这里插入图片描述

目前有两个数据库表。databasemarkers 存储本次记录中所有标点信息;databasearticles 存储该文章发布时间、文章标题、备注、内容以及对应的标点记录id(外键)。

1. 地图标点

小程序自带的 map 组件中有一个属性 markers,是一个对象数组。只要把相应格式的对象数组传给 map 组件,就会自动在地图上标记出点的信息。

在这里插入图片描述

wxml 文件:

<!-- subkey 用于调整地图样式
经纬度 latitude longitude 信息是地图初始的中心点。
本例中,要传递给 map 组件的对象数组也命名为 markers,在 js 文件中获取数据后传递给 map-->
<map id="map" 
     subkey="DKEBZ-LKBW4-B3KUP-DYSCI-IG7OS-SQBJH" 
     longitude='{{weidu}}' 
     latitude='{{jingdu}}' 
     scale="10" 
     layer-style="1" 
     show-location="true" 
     markers="{{markers}}"></map>

<!--每次点击添加标点按钮,就会获取当前位置信息,存入 markers 数组-->
<button size="default" bindtap="recstart">
    添加标点
</button>

<!--点击结束记录,将标点信息上传到数据库 databasemarkers 中,并跳转到文章编辑页面-->
<button size="default" bindtap="recstop">
    添加标点
</button>

js 文件:

let cnt=cnt+1
const db=wx.cloud.database
Page({
    data: {
        jingdu: "",
        weidu: "",
        markers: [],
    },
    recstart: function () {
        var that = this
        cnt = cnt + 1
        wx.getLocation({
            altitude: 'altitude',
            highAccuracyExpireTime: 0,
            isHighAccuracy: true,
            type: 'gcj02',
            success: (result) => {
                console.log(result)
                let marker = this.data.markers
                marker.push({
                    id: cnt-1,
                    latitude: result.latitude,
                    longitude: result.longitude,
                    width: 20,
                    height: 30
                })
                // let pointobj = this.data.polyline[0].points
                // console.log(pointobj)
                // pointobj.push(
                //   {
                //       latitude: result.latitude,
                //     longitude: result.longitude,
                //   }
                // )
                console.log(that.data.markers)
                that.setData({
                    jingdu: result.latitude,
                    weidu: result.longitude,
                    recmode: 1,
                    markers: marker,
                    // polyline:[{
                    //   points:pointobj
                    // }]
                })
            },
            // fail: (res) => {},
            // complete: (res) => {},
        })
    },
    recstop:function() {
      var that = this
      db.collection("databasemarkers").add({
        data:{
          markers:this.data.markers
        }
      }).then(res=>{
        console.log("数据添加成功!")
        console.log(res)
        var docstring=res._id
        wx.navigateTo({
        url: '/pages/addarticle/addarticle?docstring='+docstring
      })
      })
      
    },
    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        var that = this
        wx.getLocation({
            altitude: 'altitude',
            highAccuracyExpireTime: 0,
            isHighAccuracy: true,
            type: 'type',
            success: (result) => {
                console.log(result)
                this.setData({
                    jingdu: result.latitude,
                    weidu: result.longitude
                })
            }
            // fail: (res) => {},
            // complete: (res) => {},
        })
    },
})

2. 发布文章

在这里插入图片描述

添加完标点信息后,提示输入文章标题、备注、正文信息,点击提交,文章就会发布到 databasearticles 数据库中。

wxml:

<view class="inputbox">
  <view class="line" style="border-top: 1px solid #e4e4e4;">
    <label>题目</label>
    <input placeholder=" 请输入题目" bindinput="inputtitle"/>
  </view>
  <view class="line">
    <label>备注</label>
    <input placeholder=" 请输入备注信息" bindinput="inputcomment" />
  </view>
  <view class="line-content">
    <label>正文</label>
    <input placeholder=" 请输入正文" class="content" bindinput="inputcontent" />
  </view>
</view>
<button bindtap="submit" class="submit">提交</button>

js:

const db=wx.cloud.database()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    dataobj:{
      comment:"",
      content:"",
      title:"",
      markersid:""
    }
  },
  inputtitle:function(options){
    var value=options.detail.value
    console.log(value)
    this.setData({
      title:value
    })
  },
  inputcomment:function(options){
    var value=options.detail.value
    console.log(value)
    this.setData({
      comment:value
    })
  },
  inputcontent:function(options){
    var value=options.detail.value
    console.log(value)
    this.setData({
      content:value
    })
  },
  submit(){
    var mydate=new Date()
    db.collection("databasearticles").add({
      data:{
        content:this.data.content,
        markersid:this.data.markersid,
        comment:this.data.comment,
        title:this.data.title,
        createdate:mydate
      }
    }).then(res=>{
      console.log("数据添加成功!")
        console.log(res)
        wx.navigateTo({
          url: '/pages/success/success',
        })
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    var docstring=options.docstring
    console.log(docstring)
    this.setData({
      markersid:docstring
    })
  },
})

wxss:

.inputbox {
  margin-top:60rpx;
  height: 450rpx;
}

.inputbox .line {
  display: block;
  min-height:100rpx;
  line-height:100rpx;
  padding: 0 30rpx;
  border-bottom:1px solid #e4e4e4;
}

.inputbox .line-content {
  display: block;
  min-height:300rpx;
  line-height:160rpx;
  padding: 0 30rpx;
  border-bottom:1px solid #e4e4e4;
}

.inputbox .line label {
  float: left;
}

.inputbox .line-content label {
  float:left;
}

.inputbox .line input {
  height:100rpx;
  line-height:100rpx;
  float: left;
  margin-left:40rpx;
}

.inputbox .line-content input {
  width:80%;
  height:140rpx;
  line-height: 140rpx;
  float: left;
  margin-left:40rpx;
}

.submit {
  position: absolute;
    width: 80%;
    left: 0;
    right: 0;
    margin: 180rpx auto 0;
  border-radius: 98rpx;
  border: 3rpx solid rgb(0, 0, 167);
  color:rgb(0, 0, 167);
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: center;
}

3. 获取最新发布的三篇文章

在这里插入图片描述

最新发布模块可以获取云数据库中最新发布的三篇文章,原理是根据时间戳倒叙排序后取前三条记录。

db.collection("databasearticles")
      .orderBy('createdate','desc')
      .limit(3)
      .get({
        success:res=>{
          console.log(res)
          this.setData({
            new3obj:res.data//new3obj 是在 data 中定义的,用来接收最新发布的三篇文章对象集合的变量
          })
        }
      })

以上就是本小程序核心功能啦!希望对你有帮助!

目录
相关文章
|
7天前
|
前端开发 安全 JavaScript
构建高效Web应用:前后端分离架构的实践
【9月更文挑战第4天】在数字时代,Web应用已成为企业与用户互动的主要平台。本文将介绍如何通过前后端分离的架构设计来构建高效的Web应用,探讨该架构的优势,并分享实现过程中的关键步骤和注意事项。文章旨在为开发者提供一种清晰、高效的开发模式,帮助其在快速变化的市场环境中保持竞争力。
|
8天前
|
数据采集 Java 数据挖掘
Java IO异常处理:在Web爬虫开发中的实践
Java IO异常处理:在Web爬虫开发中的实践
|
21天前
|
JavaScript 安全 前端开发
Node.js身份验证全攻略:策略与实践,打造坚不可摧的Web应用安全防线!
【8月更文挑战第22天】Node.js作为强大的服务器端JavaScript平台,对于构建高效网络应用至关重要。本文探讨其身份验证策略,涵盖从基于token至复杂的OAuth 2.0及JWT。Passport.js作为认证中间件,支持本地账号验证及第三方服务如Google、Facebook登录。同时介绍JWT轻量级验证机制,确保数据安全传输。开发者可根据应用需求选择合适方案,注重安全性以保护用户数据。
28 1
|
25天前
|
监控 小程序 安全
小程序全栈开发中的WebSocket实时通信实践是一种高效的开发模式。
随着移动互联网的发展,小程序成为企业拓展业务的新渠道。WebSocket作为一种实时通信协议,可在小程序中实现如实时聊天、推送、游戏等功能。它支持客户端与服务器间的全双工长连接通信,优于传统HTTP。开发者需注意安全、性能及兼容性等问题,以优化体验并保障稳定运行。掌握WebSocket有助于提升小程序功能性与用户体验。
32 1
|
27天前
|
人工智能 前端开发 开发工具
NET在企业级应用、Web开发、移动应用、云服务及游戏领域的创新实践
.NET技术自2000年推出以来,在软件开发领域扮演着关键角色。本文从核心优势出发,探讨其统一多语言平台、强大工具集、跨平台能力及丰富生态系统的价值;随后介绍.NET在企业级应用、Web开发、移动应用、云服务及游戏领域的创新实践;最后分析性能优化、容器化、AI集成等方面的挑战与机遇,展望.NET技术的未来发展与潜力。
42 2
|
11天前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
22 0
|
11天前
|
UED 存储 自然语言处理
【语言无界·体验无疆】解锁Vaadin应用全球化秘籍:从代码到文化,让你的应用畅游世界每一个角落!
【8月更文挑战第31天】《国际化与本地化实战:构建多语言支持的Vaadin应用》详细介绍了如何使用Vaadin框架实现应用的国际化和本地化,提升用户体验和市场竞争力。文章涵盖资源文件的创建与管理、消息绑定与动态加载、日期和数字格式化及文化敏感性处理等方面,通过具体示例代码和最佳实践,帮助开发者构建适应不同语言和地区设置的Vaadin应用。通过这些步骤,您的应用将更加灵活,满足全球用户需求。
25 0
|
11天前
|
API 数据库 UED
全面解析构建高性能API的秘诀:运用Entity Framework Core与异步编程提升Web应用响应速度及并发处理能力的详细指南与实践案例
【8月更文挑战第31天】本文详细介绍了如何利用 Entity Framework Core (EF Core)的异步编程特性构建高性能 API。通过创建基于 EF Core 的 .NET Core Web API 项目,配置数据库上下文,并定义领域模型,文章展示了如何使用异步方法进行数据查询、加载相关实体及事务处理。具体代码示例涵盖了 GET、POST、PUT 和 DELETE 操作,全面展示了 EF Core 异步编程的优势,有助于提升 API 的响应速度和处理能力。
21 0
|
12天前
|
Rust 安全 Java
Rust语言在Web后端的应用:基于Actix-web构建高性能、安全可靠的服务器实践
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的无限潜力。
36 0
|
16天前
|
缓存 小程序 定位技术
深度剖析:支付宝小程序走向成功的关键要素和实践路径
【8月更文挑战第27天】随着移动互联网的发展,小程序已成为各大平台不可或缺的一部分。支付宝小程序凭借其强大的生态系统和便捷服务脱颖而出。本文将通过案例和代码分析成功的支付宝小程序的打造过程:首先注重良好的用户体验,包括简洁的界面设计与快速响应;充分利用支付宝的功能如支付和地理位置服务吸引用户;进行性能优化如合理代码结构和缓存机制提升运行效率;采取精准营销策略增加用户关注度;并持续更新优化以适应市场变化和用户需求。
31 0