uniapp app端使用谷歌地图选点定位

2023-10-17 17:45

本文主要是介绍uniapp app端使用谷歌地图选点定位,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

国内需要vpn 和申请谷歌地图的Maps JavaScript API 类型的 key,指引链接这里不详细介绍

一 、我们得通过webview 跳转谷歌地图 ,需要创建一个webview页面,里面跳转承载谷歌地图的html页面,如果是放在本地的话 html文件须遵守规范 放在 “项目根目录下->hybrid->html->google-map.html” 或static目录下
image.png

//跳转谷歌地图前页面,比如选择地址 
<template><view @click="onSkip('/pages/mapWeb')">即将前往选择地址</view>
</template>
<script>export default {data() {return {}},onLoad(e) {//接收webview传值,能拿到经纬度 详细地址等信息uni.$on('googleMsg', (data) => {console.log('接收到值,继续业务处理', data)});},methods: {//跳转webviewonSkip(url) {uni.navigateTo({url: url})},}}
</script>
//webview 页面  ,如果谷歌地图不是放本地 src 放线上路径即可
<template><view><web-view style="width: 100vw;height: 100vh;" src="../hybrid/html/google-map.html"@message="postMessageFun"></web-view></view>
</template><script>export default {data() {return {	}},methods: {
//监听html返回的数据postMessageFun(e) {console.log(e.detail.data[0], "77777")uni.$emit("googleMsg", e.detail.data[0])}}}
</script>
//google-map.html 页面
<!DOCTYPE html>
<html style="width: 100vw;height: 100vh;"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script src="https://maps.googleapis.com/maps/api/js?key=你的谷歌地图key&sensor=false"></script>//引入uniapp webview才能接收到数据 监听到事件<script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script><script>function onBack(data) {var timer = setInterval(function() {if (window.uni) {clearInterval(timer);uni.postMessage({data: data}),console.log("谷歌地图返回:",data)uni.navigateBack()}}, 10)}// 谷歌地址解析function reverseGeocode(lat, lng) {var geocoder = new google.maps.Geocoder();var latlng = new google.maps.LatLng(lat, lng);// 调用地理编码服务的geocode方法geocoder.geocode({'location': latlng}, (results, status) => {if (status === 'OK') {if (results[0]) {const obj = {address: results[0].formatted_address,lat: lat,lng: lng}console.log(results)// console.log('地址:', obj);onBack(obj)} else {console.log('未找到地址');}} else {console.log('逆地理编码失败:' + status);}});}function get() {function success(position) {console.log(position)var latitude = position.coords.latitude;var longitude = position.coords.longitude;var yourmap = {center: new google.maps.LatLng(latitude, longitude),zoom: 11,mapTypeId: google.maps.MapTypeId.ROADMAP};var map = new google.maps.Map(document.getElementById("googleMap"), yourmap);var marker = new google.maps.Marker({position: new google.maps.LatLng(latitude, longitude),});marker.setMap(map);var infowindow = new google.maps.InfoWindow({content: "当前位置!"});infowindow.open(map, marker);google.maps.event.addListener(map, 'click', function(e) {reverseGeocode(e.latLng.lat(), e.latLng.lng())})};function addMarker(longitude, latitude) {const marker = {id: this.markers.length + 1,longitude,latitude,iconPath: '/static/marker.png',width: 20,height: 20};this.markers.push(marker);this.mapContext.addMarkers({markers: this.markers,clear: true});}function error(e) {alert('地理位置不可用fa',e);};if ("geolocation" in navigator) {navigator.geolocation.getCurrentPosition(success, error);} else {alert('地理位置不可用ter');}};google.maps.event.addDomListener(window, 'load', initialize);</script></head><body><div id="googleMap" style="width:100vw;height:100vh;"></div></body>
</html>
//本段代码来源于网络 仅作自己记录方便后期查询,和给正在踩坑的友友们一个借鉴 侵删

以上就是所有获取谷歌选点定位的流程
以下是当用户输入地址 ,实现地址解析的方法

	// 解析地址
//用户输入时可以动态调用这个函数 也可以当用户输入完成,根据自己的业务逻辑调整getGoogleLocation(address) {if (!address) returnconst apiKey = '你的谷歌地图key';const url =`https://maps.googleapis.com/maps/api/geocode/json?address=${encodeURIComponent(address)}&key=${apiKey}`;uni.request({url: url,method: 'GET',success: (res) => {console.log("res:", res)// 解析API响应const results = res.data.results;if (results.length > 0) {// 获取解析后的位置信息const location = results[0].geometry.location;const latitude = location.lat;const longitude = location.lng;this.userInfo.newAddress = addressthis.userInfo.longitude = longitudethis.userInfo.latitude = latitudethis.userInfo.address = address// 在这里可以使用解析后的位置信息进行后续操作console.log("Latitude:", latitude);console.log("Longitude:", longitude);} else {uni.showToast({title: '未查询到该地址,请重试',icon: 'none'})console.log("No results found.");}},fail: (err) => {console.log("Error:", err);}});},

奇葩需求: app内嵌套h5的另一套代码系统里面也需要使用谷歌地图,这怎么办呢 h5接收不到webview返回的值;原理都大差不差就得用原生js的方法来实现,下面纸列出了有变动的代码 其他的都和上面一样

//跳转谷歌地图前页面 
mounted(){const key = 'LocationAddress';const data = localStorage.getItem(key);localStorage.removeItem(key);if (typeof data !== "string") return;const x = JSON.parse(data);console.log('===x拿到返回的数据 处理业务逻辑啦', x);
}
/webview 页面 
<template><view><iframe id="iframe" src="../../../static/html/google-map.html"></iframe></view>
</template><script>var iframe = document.getElementById('iframe');window.addEventListener('message', (e) => {console.log(e, 'eeeeee')}, false);
</script>
//google-map.html 页面 的返回函数改成这样function onBack(data) {localStorage.setItem('LocationAddress', JSON.stringify(data));history.back();}

这篇关于uniapp app端使用谷歌地图选点定位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/226960

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定