当前位置: 首页 > news >正文

微信小程序 | 基于高德地图+ChatGPT实现旅游规划小程序

在这里插入图片描述


🎈🎈效果预览🎈🎈

❤ 路劲规划

在这里插入图片描述

❤ 功能总览

在这里插入图片描述

❤ ChatGPT交互

在这里插入图片描述


一、需求背景

五一假期即即将到来,在大家都阳过之后,截止到目前这应该是最安全的一个假期。所以出去旅游想必是大多数人的选择。

然后,就在我们做出外出游玩的决定后,制作旅游攻略就成了我们的心头大事!我是谁?我要去哪里?我要怎么去?

体验过ChatGPT的小伙伴都知道,他有一个旅游攻略规划的能力还是很给力的!基于此,我们这次动手做一个结合高德地图+ChatGPT``旅游攻略规划小程序


二、项目原理及架构

2.1 实现原理

(1)通过咨询ChatGPT生成包含具体地址的旅游攻略

请添加图片描述

(2)咨询ChatGPT生成相应地方的经纬度信息

请添加图片描述

(3)指定ChatGPT生成特定类型的攻略

请添加图片描述


2.2 技术架构

在这里插入图片描述


2.3 技术栈

模块语言及框架涉及的技术要点
小程序前端基于VUE 2.0语法+Uni-app跨平台开发框架Http接口通信、Flex布局方式、uView样式库的使用、JSON数据解析、定时器的使用
小程序接口服务端Python + Flask WEB框架rest接口的开发、 ChatGPT API接口的数据对接 、 前后端websocket实时通信

2.4 数据交互原理

选择操作模式
数据交互
构造问题数据发送
通过API接口返回回答数据
用户
小程序
小程序后端服务
ChatGPT

三、项目功能的实现

3.1 ChatGPT API的接入

要接入ChatGPT API,需要按照以下步骤进行操作:

  1. 注册一个账号并登录到OpenAI的官网:https://openai.com/
  2. 在Dashboard页面上,创建一个API密钥。在“API Keys”选项卡下,点击“Generate New Key”按钮。将生成的密钥保存好,以备后续使用。
  3. 选择所需的API服务,例如“Completion” API,以使用OpenAI的文本生成功能。

在这里插入图片描述
使用Python调用ChatGPT API实现代码如下:

  • 方法一:使用request
import requests
import json# 构建API请求
url = "https://api.openai.com/v1/engines/davinci-codex/completions"
headers = {"Content-Type": "application/json","Authorization": "Bearer YOUR_API_KEY"}
data = {"prompt": "Hello, my name is","max_tokens": 5
}# 发送API请求
response = requests.post(url, headers=headers, data=json.dumps(data))# 解析API响应
response_data = json.loads(response.text)
generated_text = response_data["choices"][0]["text"]print(generated_text)
  • 方式二:使用openAI库
from flask import Flask, request
import openaiapp = Flask(__name__)openai.api_key = "YOUR_API_KEY_HERE"@app.route("/")
def home():return "Hello, World!"@app.route("/chat", methods=["POST"])
def chat():data = request.jsonresponse = openai.Completion.create(engine="davinci",prompt=data["message"],max_tokens=60)return response.choices[0].textif __name__ == "__main__":app.run()

3.2 小程序端设计与实现

首页地图菜单栏
在这里插入图片描述在这里插入图片描述
ChatGPT景点搜索ChatGPT景点推荐
在这里插入图片描述在这里插入图片描述
路线标记
在这里插入图片描述

3.3 高德地图服务接入

高德地图开放平台

在这里插入图片描述

在这里插入图片描述

开通WEB rest 接口服务

在这里插入图片描述

在开通了高德地图的API权限之后,即可获取到相应的AppID。只需要将APPID填入到项目中的manifest.json文件中,即可开启高德地图的路径导航功能的使用!

  • 具体步骤如下:

在这里插入图片描述

  • 具体代码:
 "h5" : {"sdkConfigs" : {// 使用地图或位置相关功能必须填写其一"maps" : {"qqmap" : {// 腾讯地图秘钥 https://lbs.qq.com/dev/console/key/manage"key" : ""},"google" : {// 谷歌地图秘钥(HBuilderX 3.2.10+)https://developers.google.com/maps/documentation/javascript/get-api-key"key" : ""},"amap" : {// 高德地图秘钥(HBuilderX 3.6.0+)https://console.amap.com/dev/key/app"key" : "",// 高德地图安全密钥(HBuilderX 3.6.0+)https://console.amap.com/dev/key/app"securityJsCode" : "",// 高德地图安全密钥代理服务器地址(HBuilderX 3.6.0+)https://lbs.amap.com/api/jsapi-v2/guide/abc/prepare"serviceHost" : ""}}}}
}

3.4 地图与ChatGPT数据联动功能实现

生成目标地址的经纬度数据
返回路径数组
ChatGPT接口
小程序高德地图组件
地图标记

核心原理:

  • 先通过ChatGPT生成经纬度信息以及每一天的游玩地址
  • 注册获取高德API调用权限
  • 调用高德API中路径规划导航的接口
  • 通过接口返回路径数组
  • 将路径数据传递给前端地图组件进行渲染

function Route(){this.key = "放置你的高德地图API key";this.url = 'https://restapi.amap.com/v3/direction/driving';this.type = "driving";
}Route.prototype.setKey= function(key){this.key=key;
}
Route.prototype.setUrl = function(url){this.url=url;
}
Route.prototype.setType = function(type){this.type = type;
}Route.prototype.initParam = function(param){Object.assign(this,{...param});
}Route.prototype.drawRoute = function(map,origin,destination,line={arrowLine: true,'points':[],color:'#f00',width:10}){const {url,key,type="driving"} = this;const {markers=[],polyline=[]} = map;markers.push(origin);markers.push(destination);this.requestRoute(origin,destination).then(res=>{console.log('===res---',res)line.points || (line.points= []);res.data.route.paths.map(item=>{item.steps.map(path=>{path.tmcs.map(tmcs=>{tmcs.polyline.split(";").map(loacl=>{const longitude = loacl.split(",")[0];const latitude = loacl.split(",")[1];line.points.push({latitude: latitude, longitude: longitude});})});})});polyline.push(line);Object.assign(map,{latitude: origin.latitude,longitude: origin.longitude,// todo 通过距离 计算 scale 的值//scale: 15markers,polyline});});
}Route.prototype.initMap = function(object){console.log(object);Object.assign(object,{latitude: 39.90909,longitude: 116.434307,markers: [],polyline: [],scale: 8});
}Route.prototype.requestRoute = function(origin,destination){const {url,key} = this;return new Promise((resolve,reject)=>{uni.request({url: url,method: 'GET',data: {"origin": origin.longitude+","+origin.latitude,"destination": destination.longitude+","+destination.latitude,"key":key},success: res => {resolve(res);},fail: (err) => {reject(err);}});})
}export default new Route();

四、推荐阅读

🥇入门和进阶小程序开发,不可错误的精彩内容🥇 :

  • 《小程序开发必备功能的吐血整理【个人中心界面样式大全】》
  • 《微信小程序 | 借ChatGPT之手重构社交聊天小程序》
  • 《微信小程序 | 人脸识别的最终解决方案》
  • 《微信小程序 |基于百度AI从零实现人脸识别小程序》
  • 《吐血整理的几十款小程序登陆界面【附完整代码】》

相关文章:

微信小程序 | 基于高德地图+ChatGPT实现旅游规划小程序

🎈🎈效果预览🎈🎈 ❤ 路劲规划 ❤ 功能总览 ❤ ChatGPT交互 一、需求背景 五一假期即即将到来,在大家都阳过之后,截止到目前这应该是最安全的一个假期。所以出去旅游想必是大多数人的选择。 然后&#x…...

Excel技能之实用技巧,高手私藏

今天来讲一下Excel技巧,工作常用,高手私藏。能帮到你是我最大的荣幸。 与其加班熬夜赶进度,不如下班学习提效率。能力有成长,效率提上去,自然不用加班。 消化吸收,工作中立马使用,感觉真不错。…...

黑马程序员Java零基础视频教程笔记-运算符

文章目录 一、算数运算符详解和综合练习二、隐式转换和强制转换三、字符串和字符的加操作四、自增自减运算符五、赋值运算符和关系运算符六、四种逻辑运算符七、短路逻辑运算符八、三元运算符 一、算数运算符详解和综合练习 1. 运算符和表达式 ① 运算符:对字面量…...

Microsoft Data Loss Prevention(DLP)部署方案

目录 一、前言 二、部署流程 步骤一:确定数据需求 步骤二:规划信息保护策略...

win系统使用frp端口映射实现内网穿透,配置“任务计划程序”提高稳定性

Github下载最新版frp: https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_windows_amd64.zip 解压把frpc.exe和frpc.ini放到D:\program\frp目录下,修改frpc.ini内容如下: [common] server_addr 服务器域名或IP,假设…...

python工具方法 39 大图裁剪为小图|小图还原成大图(含生成大图伪标签)

在进行遥感影像的处理中,通常都是几万x几万的大型影像,这给数据标注(图像尺寸过大使标注软件不能正常打开或过大给标注带来困难)、训练模型(只能使用小图)、测试图片(在小图上预测需要还原成大图)、生成伪标签(需要大图的伪标签,而不是小图的)都带来了困难。针对此进…...

MUSIC算法仿真

MUSIC算法原理及仿真 DOA波达方向估计MUSIC算法概述MUSIC算法原理MUSIC算法MATLB仿真 DOA波达方向估计 DOA(Direction Of Arrival)波达方向是指通过阵列信号处理来估计来波的方向,这里的信源可能是多个,角度也有多个。DOA技术主要…...

redis 数据类型详解 以及 redis适用场景场合

1. MySqlMemcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇…...

python基于轻量级YOLOv5的生猪检测+状态识别分析系统

在我之前的一篇文章中有过生猪检测盒状态识别相关的项目实践,如下: 《Python基于yolov4实现生猪检测及状态识》 感兴趣的话可以自行移步阅读,这里主要是基于同样的技术思想,将原始体积较大的yolov4模型做无缝替换,使…...

阅读笔记 First Order Motion Model for Image Animation

文章解决的是图片动画的问题。假设有源图片和驱动视频,并且其中的物体是同一类的,文章的方法让源图片中的物体按照驱动视频中物体的动作而动。 文章的方法只需要一个同类物体的视频集,不需要而外的标注。 方法 该方法基于self-supervised策…...

【计算机图形学】课堂习题汇总

在直线的光栅化算法中,如果不考虑最大位移方向则可能得到怎样的直线? A:斜率为1的线 B:总是垂直的 C:离散的点,无法构成直线 D:总是水平的 在直线的改进的Bresenham算法中,每当误…...

国外导师对博士后申请简历的几点建议

正所谓“工欲善其事,必先利其器”,想要申请国外的博士后职位,就要准备好相应的申请文书材料。如果说Cover Letter是职位的窍门砖,那么申请者的简历就是争取职位的决定性筹码。 相信大家已经看过许多简历的模版了,但是…...

【五一创作】Scratch资料袋

Scratch软件是免费的、免费的、免费的。任何需要花钱才能下载Scratch软件的全是骗子。 1、什么是Scratch Scratch是麻省理工学院的“终身幼儿园团队”开发的一种图形化编程工具。是面向青少年的一款模块化,积木化、可视化的编程语言。 什么是模块化、积木化&…...

数据库基础篇 《17.触发器》

数据库基础篇 《17.触发器》 在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如商品信息和库存信息分别存放在 2 个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的完整性&#…...

03 - 大学生如何使用GPT

大学生如何使用GPT提高学习效率 一、引言 在当今的高速发展的信息时代,大学生面临着越来越多的学习挑战。作为一种先进的人工智能技术,GPT为大学生提供了一种强大的学习工具。本文将介绍大学生在不同场景中如何使用GPT来提高学习效率,并给出…...

【P1】Jmeter 准备工作

文章目录 一、Jmeter 介绍1.1、Jmeter 有什么样功能1.2、Jmeter 与 LoadRunner 比较1.3、常用性能测试工具1.4、性能测试工具如何选型1.5、学习 Jmeter 对 Java 编程的要求 二、Jmeter 软件安装2.1、官网介绍2.2、JDK 安装及环境配置2.3、Jmeter 三种模式2.4、主要配置介绍2.4.…...

字节的面试,你能扛住几道?

C , Python 哪一个更快? 读者答:这个我不知道从哪方面说,就是 C 的话,它其实能够提供开发者非常多的权限,就是说它能涉及到一些操作系统级别的一些操作,速度应该挺快。然后 Python 实现功能还…...

NOPI用法之自定义单元格背景色(3)

NPOI针对office2003使用HSSFWorkbook,对于offce2007及以上使用XSSFWorkbook;今天我以HSSFWorkbook自定义颜色为例说明,Office2007的未研究呢 在NPOI中默认的颜色类是HSSFColor,它内置的颜色有几十种供我们选择,如果不…...

数据分析中常见标准的参考文献

做数据分析过程中,有些分析法方法的标准随便一搜就能找到,不管是口口相传还是默认,大家都按那样的标准做了。日常分析不细究出处还可以,但是正式的学术论文你需要为你写下的每一句话负责,每一个判断标准都应该有参考文…...

辨析 变更请求、批准的变更请求、实施批准的变更请求

变更请求、批准的变更请求、实施批准的变更请求辨析 辨析各种变更请求,不服来辨。 变更请求 定义:对正规受控的文件或计划(范围、进度、成本、政策、过程、计划或程序)等的变更,以反映修改或增加的意见或内容 根据变更请求的工作内容可将变…...

XML Group端口详解

在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

ES6从入门到精通:前言

ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

HTML 列表、表格、表单

1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...