uni-app 中如何使用谷歌地图 !?

最近在做uni-app的项目,由于是海外市场,所以在APP中需要使用到谷歌地图,本文主要是记录一下如何在uni-app中正确引入并使用我们的谷歌地图。(刨除微信小程序,微信小程序中还是使用uni.openLocation)

关于此问题,UNI官方给的说法是:
在这里插入图片描述
这里我选择第一种方法。

1.在引用我们的谷歌地图之前,是需要先注册谷歌地图账号并申请密钥,由于需要翻墙,这里只附录一下链接地址,具体操作注册进入谷歌地图开发者平台之后按照文档操作即可:
Google Map DOC

选择MAP JavaScript API
在这里插入图片描述

开始撸代码:

①.使用一个独立页面承载我们的webview。
在这里插入图片描述
注意:这里的link为我们的html文件地址,可以是网络地址也可以是本地html文件。如果是本地HTML文件的话,需要注意的是文件必须放在与pages文件夹同级别的hybrid文件的html文件夹下,这一点官方文档上有所说明

②.google-map.html(用来承载我们谷歌地图代码的页面)
这里直接就不做阐述,直接上代码了。需要注意的地方就是script标签中引入谷歌地图文件的那个key一定要写对,同时,我们在测试的时候必须是墙外环境,国内是无法访问谷歌地图的。

<!DOCTYPE html>
<html>
	<head>
		<meta name="viewport"
			content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
		<title></title>
		<script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>
		<script
			src="https://maps.googleapis.com/maps/api/js?key=你的密钥&callback=initMap&libraries=&v=weekly"
			defer>
		</script>
		<script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js">
		</script>
		<style type="text/css">
			#map {
				height: 100%;
				width: 100%;
			}

			html,
			body {
				height: 100%;
				width: 100%;
				margin: 0;
				padding: 0;
			}
		</style>
	</head>
	<body>
		<div id="map"></div>
	</body>
</html>
<script>
	document.addEventListener('UniAppJSBridgeReady', function() {
		uni.postMessage({
			data: {
				action: 'message'
			}
		});
		uni.getEnv(function(res) {
			console.log('当前环境:' + JSON.stringify(res));
		});
	});
</script>
<script>
	var map = null
	function initMap() {
		var centerPoint = {
			lat: Number(GetUrlParam('lat')),
			lng: Number(GetUrlParam('log'))
		};
		var covers = GetUrlParam('covers')?JSON.parse(decodeURIComponent(GetUrlParam('covers'))):null
		if (covers) {
			//https://now.guua.com/attachs/default/location_shop.png  location_staff.png
			covers[0].iconPath = covers[0] ? 'https://now.guua.com/attachs/default/location_shop.png' : ''
			
		}
		document.title = decodeURIComponent(GetUrlParam('title'))
		
		//新建map
		map = new google.maps.Map(document.getElementById("map"), {
			zoom: 16,
			center: centerPoint,
		});
		if (covers && covers[0]) {
			//标记点
			const shopMarker = new google.maps.Marker({
				position: {
					lat: Number(covers[0].lat),
					lng: Number(covers[0].lng),
				},
				map,
				icon:{
					url: covers[0].iconPath || '',
					scaledSize: new google.maps.Size(50, 50), 
					origin: new google.maps.Point(0,0),
					anchor: new google.maps.Point(0, 0) 
				}
			});
		}
	}

	// 处理URL参数
	function GetUrlParam(paraName) {
		var url = window.location.href;
		var arrObj = url.split("?");
		if (arrObj.length > 1) {
			var arrPara = arrObj[1].split("&");
			var arr;
			for (var i = 0; i < arrPara.length; i++) {
				arr = arrPara[i].split("=");
				if (arr != null && arr[0] == paraName) {
					return arr[1];
				}
			}
			return "";
		} else {
			return "";
		}
	}
</script>

AppWizard已为您创建了此test_map应用程序。这个应用程序 不仅展示了使用Microsoft Foundation类的基础 但这也是编写应用程序的起点。 此文件包含在每个文件中可以找到的内容的摘要。 组成您的test_map应用程序。 test_map.dsp     该文件(项目文件)包含项目级别的信息,以及     用于构建单个项目或子项目。其他用户可以共享     项目(.dsp)文件,但它们应在本地导出makefile。 test_map.h     这是应用程序的主头文件。它包括其他     项目特定的标头(包括Resource.h),并声明     CTest_mapApp应用程序类。 test_map.cpp     这是包含应用程序的主要应用程序源文件     CTest_mapApp类。 test_map.rc     这是所有Microsoft Windows资源的清单,     程序用途。它包括存储的图标,位图和光标     在RES子目录中。该文件可以在Microsoft中直接编辑 Visual C ++。 test_map.clw     该文件包含ClassWizard用于编辑现有信息的信息     类或添加新类。 ClassWizard也使用此文件来存储     创建和编辑消息映射和对话框数据所需的信息     映射并创建原型成员函数。 res \ test_map.ico     这是一个图标文件,用作应用程序的图标。这个     图标包含在主要资源文件test_map.rc中。 res \ test_map.rc2     该文件包含未被Microsoft编辑的资源 Visual C ++。您应该放置所有不可编辑的资源 该文件中的资源编辑器。
### 如何在uni-appApp端项目中引入和配置谷歌地图API #### 创建并获取Google Maps API密钥 为了能够在应用程序中使用谷歌地图服务,开发者需要先注册一个Google Cloud账号,并创建一个新的项目。接着,在该平台上启用Maps JavaScript API以及其他可能需要用到的服务(比如Geocoding API)。最后一步是从控制台生成一个API Key用于后续的地图加载。 #### 安装必要的插件或模块 对于uni-app来说,虽然官方并没有直接提供针对原生Android/iOS平台上的google maps的支持[^2],但是可以通过第三方库或者自定义webview的方式来实现这一功能。一种常见的做法是利用`dcloud/uni-map-plugin-google`这类由社区维护的地图插件来进行集成: ```bash npm install dcloud/uni-map-plugin-google --save ``` #### 修改manifest文件以适应不同操作系统的要求 由于涉及到调用外部资源和服务,因此还需要调整项目的`manifest.json`配置文件中的权限设置部分,确保应用拥有访问网络以及定位设备位置的权利。另外需要注意的是,在iOS环境下还需额外声明NSLocationWhenInUseUsageDescription键值对来描述为何请求地理位置信息;而在安卓方面则要记得添加meta-data标签指定所使用的api key: ```json { "permissions": { ... "android.permission.ACCESS_FINE_LOCATION": {}, "android.permission.INTERNET": {} }, "ios": { "info.plist": { "NSLocationWhenInUseUsageDescription": "我们需要您的位置以便为您提供更精准的地图服务" } }, "android": { "application": { "metaData": [ {"name": "com.google.android.geo.API_KEY", "value": "$your_google_maps_api_key"} ] } } } ``` #### 编写页面逻辑展示地图控件 当完成了上述准备工作之后就可以着手编写具体的业务代码了。这里给出一段简单的示例用来说明如何在一个vue单文件组件内嵌入google map实例: ```html <template> <div id="map"></div> </template> <script> import { load } from 'dcloud/uni-map-plugin-google'; export default { mounted() { const initMap = async () => { try { await load(); new google.maps.Map(document.getElementById('map'), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); } catch (error) { console.error(error); } }; initMap(); } }; </script> <style scoped> #map { height: 100vh; width: 100vw; } </style> ``` 此段代码首先导入了之前提到过的辅助函数load(),它负责按需加载所需的sdk; 接着是在生命周期钩子mounted里边执行异步操作完成地图对象初始化工作,并传入初始中心坐标参数与缩放级别等属性值给构造器方法new google.maps.Map(). 此外还设置了样式让容器占据整个视窗空间从而达到全屏显示的效果.
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值