首页 > 其他分享 >uniapp h5端地图导航功能

uniapp h5端地图导航功能

时间:2024-09-27 14:50:57浏览次数:10  
标签:uniapp name h5 window location lat position hidden 导航

<template>
<view class="container">
<view class="content">
<map :scale="14" :show-location="true" :show-compass="true" class="map-content"
:latitude="position.latitude" :longitude="position.longitude" :markers="markers" @markertap="handleOpen"
@callouttap="handleOpen" />
<view class="map-btn" @click="handleOpen">开始导航</view>
</view>
</view>
</template>

<script>
export default {
data() {
return {
countryName:'',//地址名
position: {
latitude: '',
longitude: '',
name: '',
address: ''
},
}
},
components: {},
props: {},
computed: {
markers() {
const {
longitude,
latitude
} = this.position;
return [{
id: 0,
latitude, //纬度
longitude, //经度
iconPath: '../../static/img/index/map.png', //显示的图标
rotate: 0, // 旋转度数
width: 28, //宽
height: 40, //高
title: '标记位置', //标注点名
alpha: 0.5, //透明度
callout: {
//自定义标记点上方的气泡窗口 点击有效
content: this.position.name, //文本
padding: 10,
color: '#3D3D3D', //文字颜色
fontSize: "36rpx", //文本大小
borderRadius: 10, //边框圆角
bgColor: '#fff', //背景颜色
display: 'ALWAYS', //常显
}
}];
}
},

/**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
console.log(options)
//此处暂时写死,方便使用,按逻辑是从地址栏里获取到的地址名称
options.countryName = '天安门广场'

this.countryName = options.countryName || ''
this.position.name = this.countryName
this.convert()//根据地址名称获取坐标
},

/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function() {},

/**
* 生命周期函数--监听页面显示
*/
onShow: function() {

},

/**
* 生命周期函数--监听页面隐藏
*/
onHide: function() {},

/**
* 生命周期函数--监听页面卸载
*/
onUnload: function() {},

/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function() {},

/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function() {},
methods: {
// 根据地址名称获取坐标
//(!!convert() 此方法是为了后台没有返回经纬度坐标时,前台通过地址名称自己获取坐标!!)
convert() {
// 新建一个正逆地址解析类
//!!!!!UniApp调用腾讯地图TMap的方法在下一篇有详细讲解!!!!!!
let geocoder = new TMap.service.Geocoder();
// 将给定的地址转换为坐标位置
geocoder.getLocation({
address: this.countryName
}).then((result) => {
this.position.longitude = result.result.location.lng
this.position.latitude = result.result.location.lat
});
},
// 选择地图
handleOpen() {
let that = this
uni.showActionSheet({
itemList: ['高德地图', '百度地图', '腾讯地图'],
success: function(res) {
that.guide(res.tapIndex)
},
fail: function(res) {
console.log(res.errMsg);
}
});
},
guide(signMap) {
uni.showLoading({
title: '跳转中'
});
let {
position
} = this;
if (position.name && position.name != '') {
//地点位置position.name 地点经纬度lng lat
var lng = position.longitude;
var lat = position.latitude;
if (signMap == 0) {
// 高德地图
uni.getSystemInfo({
success: (res) => {
if (res.platform === "android") {
window.location.href =
"androidamap://viewMap?sourceApplication=appname&poiname=" + position
.name + "&lat=" + lat + "&lon=" + lng + "&dev=0";
//判断是否跳转
setTimeout(function() {
let hidden = window.document.hidden || window.document
.mozHidden || window.document.msHidden || window.document
.webkitHidden
if (typeof hidden == "undefined" || hidden == false) {
//调用高德地图
window.location.href =
"https://uri.amap.com/marker?position=" + lng + "," +
lat + "&name=" + position.name;
}
}, 2000);
} else {
window.location.href =
"iosamap://viewMap?sourceApplication=appname&poiname=" + position
.name + "&lat=" + lat + "&lon=" + lng + "&dev=0";
//判断是否跳转
setTimeout(function() {
let hidden = window.document.hidden || window.document
.mozHidden || window.document.msHidden || window.document
.webkitHidden
if (typeof hidden == "undefined" || hidden == false) {
//调用高德地图
window.location.href =
"https://uri.amap.com/marker?position=" + lng + "," +
lat + "&name=" + position.name;
}
}, 2000);
}
}
})
} else if (signMap == 1) {
// 百度地图
uni.getSystemInfo({
success: (res) => {
if (res.platform === "android") {
let d = new Date();
let t0 = d.getTime();
window.location.href =
"androidamap://viewMap?sourceApplication=appname&poiname=" + position
.name + "&lat=" + lat + "&lon=" + lng + "&dev=0";
//由于打开需要1~2秒,利用这个时间差来处理--打开app后,返回h5页面会出现页面变成app下载页面,影响用户体验
var delay = setInterval(function() {
var d = new Date();
var t1 = d.getTime();
if (t1 - t0 < 3000 && t1 - t0 > 2000) {
window.location.href =
"http://api.map.baidu.com/marker?location=" + lat +
"," + lng + "&title=" + position.name +
"&content=地点&output=html&src=webapp.baidu.openAPIdemo";
}
if (t1 - t0 >= 3000) {
clearInterval(delay);
}
}, 1000);
} else {
let d = new Date();
let t0 = d.getTime();
window.location.href =
"iosamap://viewMap?sourceApplication=appname&poiname=" + position
.name + "&lat=" + lat + "&lon=" + lng + "&dev=0";
//由于打开需要1~2秒,利用这个时间差来处理--打开app后,返回h5页面会出现页面变成app下载页面,影响用户体验
let delay = setInterval(function() {
var d = new Date();
var t1 = d.getTime();
if (t1 - t0 < 3000 && t1 - t0 > 2000) {
window.location.href =
"http://api.map.baidu.com/marker?location=" + lat +
"," + lng + "&title=" + position.name +
"&content=地点&output=html&src=webapp.baidu.openAPIdemo";
}
if (t1 - t0 >= 3000) {
clearInterval(delay);
}
}, 1000);
}
}
})
} else {
// 腾讯地图
uni.getSystemInfo({
success: (res) => {
if (res.platform === "android") {
window.location.href =
"androidamap://viewMap?sourceApplication=appname&poiname=" + position
.name + "&lat=" + lat + "&lon=" + lng + "&dev=0";
//判断是否跳转
setTimeout(function() {
let hidden = window.document.hidden || window.document
.mozHidden || window.document.msHidden || window.document
.webkitHidden
if (typeof hidden == "undefined" || hidden == false) {
//调用腾讯地图
window.location.href =
`https://apis.map.qq.com/uri/v1/marker?marker=coord:(${lat},${lng})&addr:${position.name}`
}
}, 2000);
} else {
window.location.href =
"iosamap://viewMap?sourceApplication=appname&poiname=" + position
.name + "&lat=" + lat + "&lon=" + lng + "&dev=0";
//判断是否跳转
setTimeout(function() {
let hidden = window.document.hidden || window.document
.mozHidden || window.document.msHidden || window.document
.webkitHidden
if (typeof hidden == "undefined" || hidden == false) {
//调用高德地图
window.location.href =
`https://apis.map.qq.com/uri/v1/marker?marker=coord:(${lat},${lng})&addr:${position.name}`
}
}, 2000);
}
}
})
}
} else {
uni.showToast({
title: '暂不知道该地点位置',
icon: 'none',
duration: 2000,
});
}
setTimeout(function() {
uni.hideLoading();
}, 2000);
},

}
}
</script>

<style>
.container {}

/* 内容 */
.content {}

.map-content {
width: 100%;
height: calc(100vh - 80rpx);
}

.map-btn {
width: 710rpx;
height: 88rpx;
line-height: 88rpx;
border-radius: 60rpx;
background: #CE3B34;
color: #fff;
text-align: center;
position: fixed;
bottom: 24rpx;
left: 20rpx;
font-size: 32rpx;
}
</style>

 

标签:uniapp,name,h5,window,location,lat,position,hidden,导航
From: https://www.cnblogs.com/liziqian001/p/18435723

相关文章

  • [微信小程序原创项目]基于Springboot+Vue+Uniapp的通用商城小程序、商城管理系统
    项目提供:完整源码+数据库sql文件+数据库表Excel文件关注我的B站:程序员阿水呀,带小白学习更多干货教程!1、项目功能描述本项目为双角色,用户和管理员,用户使用小程序前台,管理员使用web后台。1.1注册注册功能:填写用户名、密码进行注册。仅开放小程序端即用户端进行注册。......
  • uniapp [全端兼容] - 详细实现拍照或相册选取图片后插入水印功能,手机拍照或相册上传图
    前言网上的教程乱七八糟且兼容性太差,本文提供优质示例。在uni-app全平台兼容(H5网页网站、支付宝/微信小程序、安卓App、苹果App、nvue)开发中,详解手机从相册选取上传图像后加入水印功能,手机拍摄照相后也可以加入水印,Uniapp给图片添加水印,获取上传或拍摄的图片信息后,为......
  • 【25届毕设选题推荐】基于uniapp的简易旅行旅游系统(源码+部署+LW文档)
    前言:我是天码编程,从事计算机开发行业数年,专注Java程序设计开发、源码分享、技术指导和毕业设计,欢迎各位前来交流讨论......
  • gps卫星转发器 导航信号转发器 北斗转发器
    在现代社会的工作中,我们都会使用到卫星信号。但存在一个现象,那就是卫星信号不能够穿透建筑物,生产车间、实验室等室内环境下的测试工作就会遇到困难。SYN2309型GNSS信号转发器是由西安同步电子科技有限公司精心设计、自行研发生产的一款增益可调的GNSS全频段卫星信号转发系统,主要功......
  • uniapp [全端兼容] - 详细实现日历“平铺方式“直接在页面上显示出来,而并非嵌套在弹出
    前言如果您需要“纯弹框式”日历,请访问这篇文章。在uni-app全平台兼容(H5网页网站、支付宝/微信小程序、安卓App、苹果App、nvue)开发中,详解实现让日历以平铺、全屏的形式直接放到页面上,而并非常见的弹框及弹出式窗口才能打开日历进行选择,uniApp不套在弹框里的日历插......
  • Taro——H5项目如何修改静态文件入口
    前言这里我们来说下如何修改Taro静态文件的入口,一般情况下是不需要修改的,但是如果你是在当前项目下部署的二级站点,那你就需要调整了。内容这里我们说两种情况,一种是在静态资源引入的时候加入前缀,另一种是真正的将静态资源输出到指定的目录下。静态资源前缀这里的静态文件入口......
  • PbootCMS默认面包屑导航样式修改及自定义的设置方法
    在使用PBootCMS建站时,如果需要对系统默认的面包屑标签进行样式修改,可以通过调整相应的参数来实现。以下是具体的步骤和示例代码:修改面包屑标签的样式自定义分隔符修改首页文本添加首页图标添加分割图标示例代码假设你需要修改面包屑标签的分隔符、首页文本以及图标,可以按......
  • 智慧养老导航:开启便捷养老新篇章
    我国人口老龄化加剧,养老问题成为社会关注的焦点。如何让老年人度过一个幸福、安康的晚年,成为政府、企业和社会共同探讨的课题。在这样的背景下,智慧养老应运而生,为我国养老事业注入了新的活力。而智慧养老导航作为融合各类智慧养老产品的平台,为老年人提供了便捷、贴心的养老服务,开......
  • uniapp 常用高度状态栏,导航栏,tab栏,底部安全高度
    实际效果//入参是否转换为rpxgetPosConfig(toRpx=true){ constsystemInfo=uni.getSystemInfoSync(); //#ifdefMP constmenuButtonInfo=uni.getMenuButtonBoundingClientRect(); //#endif constposConfig={ statu......
  • vue 使用LivePlayer H5播放器播放m3u8格式视频
    一、官方网址 https://www.liveqing.com/docs/manuals/LivePlayer.html#%E5%9C%A8-vue-%E4%B8%AD%E4%BD%BF%E7%94%A8二、安装依赖npminstall@liveqing/liveplayer三、复制依赖文件在node_modules下找到这三个文件将他们复制到public文件夹下四、在index.html中引入liveplayer-li......