最近在做uni-app的项目,由于是海外市场,所以在APP中需要使用到谷歌地图,本文主要是记录一下如何在uni-app中正确引入并使用我们的谷歌地图。(刨除微信小程序,微信小程序中还是使用uni.openLocation)
关于此问题,UNI官方给的说法是:
这里我选择第一种方法。
1.在引用我们的谷歌地图之前,是需要先注册谷歌地图账号并申请密钥,由于需要翻墙,这里只附录一下链接地址,具体操作注册进入谷歌地图开发者平台之后按照文档操作即可:
Google Map DOC
开始撸代码:
①.使用一个独立页面承载我们的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>