前端Vue基于腾讯地图Api实现的选择位置组件 返回地址名称详细地址经纬度信息

随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随意的进行组合。大大提升开发效率低,降低维护成本。

组件化对于任何一个业务场景复杂的前端应用以及经过多次迭代之后的产品来说都是必经之路。组件化要做的不仅仅是表面上看到的模块拆分解耦,其背后还有很多工作来支撑组件化的进行,例如结合业务特性的模块拆分策略、模块间的交互方式和构建系统等等 。

本文给大家介绍的一款组件是:前端Vue基于腾讯地图Api实现的选择位置组件 返回地址名称详细地址经纬度信息, 

 

 小程序体验地址(已上线):

效果图如下:

format,png

format,png

format,png

format,png

#### 使用方法

```使用方法

<!-- leftTitle:左边标题 name:输入框名字 value:输入框选择值  placeholder:占位符 @click:点击事件-->

<cc-locPicker leftTitle="收获地点" name="location" :value="mapSelData.poiname" placeholder="请选择位置"

@click="chooseAddress"></cc-locPicker>

<!-- 跳转腾讯云地图Api 页面实现 -->

<template>

<view class="map">

<!-- 腾讯地图Api  key:腾讯地图key -->

<web-view

src="https://apis.map.qq.com/tools/locpicker?search=1&type=1&key=SFABZ-WANWW-FISRY-3IGTF-HV7RE-YSFTI&referer=myapp"></web-view>

</view>

</template>

<script>

// 引入设置地址存储工具

import {

setlocation

} from './utils.js'

// #ifdef H5

window.addEventListener('message', event => {

// 接收位置信息,用户选择确认位置点后选点组件会触发该事件,回传用户的位置信息

var loc = event.data;

if (loc && loc.module == 'locationPicker') {

//防止其他应用也会向该页面post信息,需判断module是否为'locationPicker'

let location = {

poiaddress: loc.poiaddress,

poiname: loc.poiname,

latlng: loc.latlng

}

// 设置存储地址信息

setlocation(location)

uni.navigateBack();

}

}, false);

// #endif

</script>

<style></style>

```

#### HTML代码实现部分

```html

<template>

<view class="content">

<form @submit="formSubmit" @reset="formReset">

<!-- leftTitle:左边标题 name:输入框名字 value:输入框选择值  placeholder:占位符 @click:点击事件-->

<cc-locPicker leftTitle="收获地点" name="location" :value="mapSelData.poiname" placeholder="请选择位置"

@click="chooseAddress"></cc-locPicker>

<ccInputView leftTitle="详细地址" name="address" :value="mapSelData.poiaddress" placeholder="请输入详细地址">

</ccInputView>

<ccInputView leftTitle="经度信息" name="lng" :value="mapSelData.latlng.lng" placeholder="请输入精度信息">

</ccInputView>

<ccInputView leftTitle="纬度信息" name="lat" :value="mapSelData.latlng.lat" placeholder="请输入纬度信息">

</ccInputView>

<view class="uni-btn-v">

<button class="botBtn" type="primary" form-type="submit">下一步</button>

<view class="tipText"> 注意事项: 请确保您填写的收获位置准确 </view>

</view>

</form>

</view>

</template>

<script>

import ccInputView from '../../components/ccInputView.vue'

// 获取地址工具

import {

getlocation

} from './utils.js'

export default {

components: {

ccInputView

},

data() {

return {

mapSelData: {

"latlng": {}

},

}

},

/**

* 生命周期函数--监听页面显示

*/

onShow: function() {

// #ifdef H5

let locations = getlocation() //获取位置信息

if (locations) {

this.mapSelData = locations

uni.clearStorageSync();

}

// #endif

},

methods: {

formSubmit: function(e) {

console.log('form发生了submit事件,携带数据为:' + JSON.stringify(e));

var formdata = e.detail.value;

uni.showModal({

title: '温馨提示',

content: 'formsubmit事件携带数据为:' + JSON.stringify(e.detail.value)

})

},

// 选择地址

chooseAddress(e) {

let myThis = this;

uni.navigateTo({

url: './h5map'

})

},

}

}

</script>

<style>

.content {

display: flex;

flex-direction: column;

}

.uni-btn-v {

width: 100%;

height: auto;

}

.botBtn {

width: 90%;

margin-top: 36px;

}

.tipText {

width: 100%;

margin-left: 0px;

text-align: center;

color: #666666;

margin-top: 36px;

margin-bottom: 36px;

font-size: 28rpx;

}

</style>

```

 

 小程序体验地址(已上线):

阅读全文下载完整组件代码请关注微信公众号: 前端组件开发

d848d5658a07453c843277846948c608.png

<think>好的,用户问的是关于基于SSM和Vue的公交信息在线查询小程序的数据流图设计。首先,我需要回忆一下SSM和Vue分别是什么。SSM通常指的是Spring、Spring MVC和MyBatis,用于后端开发,而Vue前端框架,所以整个系统应该是前后端分离的结构。 用户需要的是数据流图,可能需要展示数据在各个组件之间的流动。数据流图通常包括外部实体、处理过程、数据存储和数据流箭头。我得先确定系统的主要模块,比如前端的小程序、后端服务、数据库,还有可能涉及第三方接口,比如地图服务。 接下来,应该考虑用户的操作流程。比如用户发起查询请求,前端通过API调用后端,后端处理请求,查询数据库,可能还需要调用外部API获取实时数据,然后返回前端。数据在这个过程中如何流动,每个环节的数据格式是什么,比如JSON。 还需要考虑各个组件之间的数据交互。前端Vue,可能通过Axios发送HTTP请求,后端SSM框架中,Spring MVC负责接收请求,Spring管理业务逻辑,MyBatis处理数据库操作。数据库存储公交线路、站点、实时位置信息。 另外,安全性方面,可能需要用户认证,比如登录状态,这部分数据流也需要考虑进去。还有缓存机制,比如Redis,用来提高查询性能,减少数据库压力。 然后要组织这些信息,绘制成数据流图的层次。可能需要分层,比如顶层设计展示整体系统与外部实体的交互,中层展示前后端的数据处理流程,底层可能详细描述数据库和第三方服务的交互。 需要注意用户可能不太清楚技术细节,所以解释时要简明,用中文,避免术语过多,但又要准确。同时检查是否符合之前的系统指令,比如数学公式的格式,不过这个问题可能用不到数学公式,但需要确保LaTeX的正确使用,如果有的话。 最后,确保结构清晰,分步骤说明数据流,从用户发起请求到响应返回的整个过程,帮助用户理解各个组件如何协作,数据如何传输和处理。可能还需要提到非功能需求,比如性能优化、数据一致性等,但用户主要问的是数据流图,所以重点在流程上。</think>基于SSM(Spring+Spring MVC+MyBatis)+Vue的公交信息在线查询小程序数据流图设计可分为以下核心流程: 一、系统分层架构 $$ \begin{array}{ccc} \text{用户界面层(Vue)} & \leftrightarrow & \text{后端服务层(SSM)} \\ & & \downarrow \\ & & \text{数据存储层(MySQL)} \\ & & \uparrow \\ & & \text{第三方接口(地图API)} \end{array} $$ 二、核心数据流动过程 1. 用户查询请求流 - 前端:用户输入查询条件(如线路号/起点终点) → Vue组件收集参数 → Axios发起API请求 - 网络传输:封装为JSON格式通过HTTP/HTTPS传输 - 后端:Spring MVC接收请求 → 业务逻辑层处理 → MyBatis执行SQL查询 2. 数据返回- 数据库:执行SELECT操作获取线路详情、站点信息、实时位置数据 - 后端处理:聚合第三方地图API的坐标数据 → 封装标准化JSON响应 - 前端渲染:Vue解析数据 → 地图组件标绘路线 → 列表展示时刻表 3. 数据更新流(管理员端) - 数据库操作:INSERT/UPDATE公交调度信息 → 触发缓存更新(Redis) - 实时推送:WebSocket主动推送线路变更通知 三、关键数据存储结构 1. 线路表(route_info) $$ \begin{cases} route\_id & \text{主键} \\ route\_name & \text{线路名称} \\ stations\_json & \text{站点序列} \\ first\_last\_bus & \text{首末班时间} \end{cases} $$ 2. 实时数据表(realtime_data) $$ \begin{cases} vehicle\_id & \text{车辆编号} \\ gps\_coordinates & \text{经纬度坐标} \\ update\_time & \text{最后更新时间} \end{cases} $$ 四、第三方数据交互 1. 地图API调用过程: ```mermaid graph LR A[前端地图组件] -->|请求地理编码| B[腾讯/高德API] B -->|返回坐标数据| A C[后端服务] -->|批量获取POI| B ``` 五、安全控制流 - 用户认证:JWT令牌验证流程 $$ \text{登录请求} \rightarrow \text{签发token} \rightarrow \text{后续请求携带Authorization头} $$ - 数据过滤:XSS防护过滤器对输入参数进行正则匹配 $$ \forall input \in [a-zA-Z0-9\u4e00-\u9fa5]^* $$ 六、性能优化流 1. 缓存机制: $$ \text{热点查询} \rightarrow \text{Redis缓存} \rightarrow \text{定时失效}(TTL=5min) $$ 2. 异步处理: - 日志记录异步写入队列 - 大数据量导出任务走定时任务调度 该数据流设计通过前后端分离架构实现高内聚低耦合,采用RESTful API规范保证数据通道标准化,结合缓存和异步机制提升系统响应速度,满足公交查询场景的实时性要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端组件开发

你的钟意将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值