1.App端地图初始化以及获取自身定位
1.1 地图初始化
<template>
<div class="page_container">
<!-- 地图容器container -->
<div id="container"></div>
</div>
</template>
这里需要给地图容器设置宽高,不然会导致地图不显示
<style lang="less" scoped>
#container {
width: 600px;
height: 400px;
}
</style>
常用的变量和函数
地图上坐标点标识
marker: ''
纬度my_lat: ''
经度my_lng: ''
getLocation>>
获取当前自身定位函数
js_get_once_location>>手机获取一次系统经纬度并返回给H5(单次定位功能)
window.NativeGetLocationCallbaclk
>>获取当前自身定位回调函数,函数返回给H5的是json字符串格式的数据,其格式为:{"longreg":xxxx,"latreg":xxxx,"code":xxx}
handleMark
>>根据上面回调函数返回的经纬度信息,添加地图标识点
handlePosition
>>地图定位,规划路线,其中AMap.Driving
为高德路线规划所需插件
handleOpenArea
>>打开手机上高德地图,并根据起点、终点经纬度,自动添入起点终点;其中,js_open_map_app为JS交互--打开三方地图APP
locationType>>参考H5交互文档https://fanneng.yuque.com/mgs44m/cumzgq/blsumr#UVcr3
//第二个入参为json字符串格式:(三种type类型,选择一种) {"locationType":"WGS-84/BD-09/GCJ-02"} //locationType: WGS-84世界标准坐标(应用场合:国际地图提供商,谷歌国际地图)、 BD-09百度坐标系(应用场合:百度地图)、 GCJ-02中国国测局(火星坐标)(应用场合:高德地图,谷歌地图,腾讯地图,阿里云地图) 此函数的返回给H5的是json字符串格式的数据, 其格式为:{"longreg":xxxx,"latreg":xxxx,"code":xxx} 其中: longreg:坐标的经度,double latreg:坐标的维度,double code:获取坐标是否成功 成功:200;失败:500, int 处理的时候注意与iOS区分,iOS三个值全为string类型。 后续有业务线需要接此功能时先联系移动端,封装一个有统一入参和出参格式的新交互方法,方便业务线调用。 H5端应先通过code判断获取坐标是否成功,成功则获取经纬度数据 //此函数有回调方法为:NativeGetLocationCallbaclk(json),H5端需要在当前类添加此方法获取到单次定位的回调字符串。 jsBridge.js_get_once_location(JSON.stringfy({"locationType":"WGS-84"})
// 注1:data里面主要定义4个变量,分别是地图对象容器map,坐标点maker,纬度my_lat,经度my_lng
const state = reactive({
map: '',
marker: '',
my_lat: '',
my_lng: '','
})
// 注2:地图初始化函数
const initMap = () => {
let AMap = window.AMap
state.map = new AMap.Map('container', {
resizeEnable: true,
})
}
// 注3:获取自身当前位置(经纬度)getLocation --获取当前自身定位函数
const getLocation = () => {
let u = navigator.userAgent
//判断是否安卓
let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1
// 判断是否IOS
let isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)
if (isAndroid) {
window?.control?.callHandler?.(
'js_get_once_location',
JSON.stringify({ locationType: 'GCJ-02' })
)
} else if (isIOS) {
window.webkit.messageHandlers.js_get_once_location.postMessage({
locationType: 'GCJ-02',
})
}
}
// 赋值state.my_lat---state.my_lng--- 获取当前自身定位回调函数
window.NativeGetLocationCallbaclk = function (json) {
const targetData = JSON.parse(json)
if (targetData.code === 200 || targetData.code === '200') {
state.my_lat = targetData.latreg
state.my_lng = targetData.longreg
// console.log(state, '位置函数回调执行')
handleMark()
} else {
commit(SET_MESSAGE_STATE, { switch: true, info: '定位失败', time: '' })
}
}
// 注4:handleMark --->根据已获取的经纬度添加定位点
const handleMark = () => {
if (state.marker) {
state.map.remove(state.marker)
}
state.map.setZoomAndCenter(14, [state.my_lng, state.my_lat])
let AMap = window.AMap
let position = new AMap.LngLat(state.my_lng, state.my_lat)
state.marker = new AMap.Marker({
position: position, // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
})
state.map.add(state.marker)
}
其他函数1---路线规划函数
handlePosition
//地图定位 规划路线
const handlePosition = () => {
let AMap = window.AMap
let map = new AMap.Map('container', {
resizeEnable: true,
zoom: 20,
})
// AMap.Driving为高德路线规划所需插件
AMap.plugin('AMap.Driving', function () {
let driving = new AMap.Driving({
// 驾车路线规划策略,AMap.DrivingPolicy.LEAST_TIME是最快捷模式
policy: AMap.DrivingPolicy.LEAST_TIME,
map: map,
})
// startLngLat起点经纬度 ---- endLngLat 经纬度
let startLngLat = [state.my_lng, state.my_lat]
let endLngLat = [state.company_longitude, state.company_latitude]
driving.search(startLngLat, endLngLat, function () {
// 未出错时,result即是对应的路线规划方案
})
})
}
其他函数2---->
handleOpenArea
点击打开手机高德地图
// 打开导航---handleOpenArea
const handleOpenArea = () => {
let u = navigator.userAgent
//判断是否安卓
let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1
// 判断是否IOS
let isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)
// js_open_map_app:调用高德地图
if (isAndroid) {
window?.control?.callHandler(
'js_open_map_app',
JSON.stringify({
latitude: state.company_latitude,
longitude: state.company_longitude,
address: state.company_address,
})
)
} else if (isIOS) {
window.webkit.messageHandlers.js_open_map_app.postMessage(
JSON.stringify({
latitude: state.company_latitude,
longitude: state.company_longitude,
address: state.company_address,
})
)
}
}
版权声明:《 关于App端和PC端部分地图函数的 》为胡光喆原创文章,转载请注明出处!
最后编辑:2022-11-11 07:11:25