手机端H5地图调起开发实战案例解析(百度高德腾讯地图调起、底部弹出层、提示安装地图导航APP)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 手机端H5地图调起开发实战案例解析(百度高德腾讯地图调起、底部弹出层、提示安装地图导航APP)

地图调起功能,是地图URI API是为开发者提供直接调起地图产品(手机客户端)以满足特定业务场景下应用需求的程序接口,开发者只需按照接口规范构造一条标准的URI,便可在PC和移动端浏览器或移动开发应用中调起地图产品,进行地图展示和检索、线路查询、导航等功能,无需进行复杂的地图功能开发。


1.导航菜单配置

构建导航菜单容器

配置百度、高德和腾讯地图的容器,当唤起时,传递HTML内容至对应ID。

    <!--导航菜单-->
    <div class="navi">
        <p id="baidu"></p>
        <p id="gaode"></p>
        <p id="tengxun"></p>
        <p id="cancel">取消</p>
    </div>


设置取消事件

当单击取消时,隐藏底部弹出菜单。

    //导航菜单;
    $("#cancel").click(function () {
        $(".navi").css("display", "none")
    });


调起菜单样式表

默认为隐藏状态display: none;,调起时显示。

/*导航*/
.navi {
    position: absolute;
    bottom: 0px;
    left: 0;
    right: 0;
    margin: auto 0;
    width: 100%;
    height: 200px;
    background-color: #FFF;
    border-radius: 10px 10px 0 0;
    z-index: 99999;
    display: none;/*默认隐藏*/
}
.navi > p {
    height: 50px;
    line-height: 50px;
    text-align: center;
    border-bottom: 1px solid rgba(139, 145, 160, 0.1);
}
.navi > p:nth-child(4) {
    border-top: 1px solid rgba(139, 145, 160, 0.1);
}


2.地图调起事件

导航到这里

当用户单击导航到这里时,调用getNav(lng, lat, title, address)函数,传递当前POI点位的经纬度坐标、名称和地址,便于不同地图之间的函数使用

html.push('<div class="infoItems" style="float: right;">  <a href="' + pos.poi_order + '" tar


获取导航坐标

系统默认百度坐标系bd09格式,而高德和腾讯使用的是火星系坐标,为了能快速准确的使用同一个坐标实现不同地图APP的使用,需要对坐标进行格式转换。具体参加:《GIS数据格式坐标转换(地球坐标WGS84、GCJ-02、火星坐标、百度坐标BD-09、国家大地坐标系CGCS2000)》


百度地图调起格式:http://api.map.baidu.com/geocoder?location=39.990912172420714,116.32715863448607&coord_type=gcj02&output=html&src=webapp.baidu.openAPIdemo(官方文档:https://lbsyun.baidu.com/index.php?title=uri

高德地图调起格式:https://uri.amap.com/marker?position=116.473195,39.993253

(官方文档:https://lbs.amap.com/api/uri-api/guide/mobile-web/point/

腾讯地图调起格式:https://apis.map.qq.com/uri/v1/marker?marker=coord:39.892326,116.342763;title:超好吃冰激凌;addr:手帕口桥北铁路道口&referer=myapp(官方文档:https://lbs.qq.com/webApi/uriV1/uriGuide/uriWebMarker

具体封装方法如下:

//获取导航坐标
function getNav(lng, lat, title, address) {
    var lnglat = bd09togcj02(lng, lat);
    //console.log(lnglat);
    //显示导航栏
    $(".navi").css("display", "block");
    //百度导航
    $("#baidu").html('<a href="//api.map.baidu.com/geocoder?location=' + lat + ',' + lng + '&coord_type=bd09ll&output=html&src=lockdatav">百度导航</a>');
    //高德导航
    $("#gaode").html('<a href="//uri.amap.com/marker?position=' + lnglat[0] + ',' + lnglat[1] + '&name=' + address + '">高德导航</a>');
    //腾讯导航
    $("#tengxun").html('<a href="https://apis.map.qq.com/uri/v1/marker?marker=coord:' + lnglat[1] + ',' + lnglat[0] + ';title:' + title + ';addr:' + address + '&referer=myapp">腾讯导航</a>');
}


百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换

//定义一些常量
//var x_PI = 3.14159265358979324 * 3000.0 / 180.0;
//var PI = 3.1415926535897932384626;
var x_PI = parseFloat(3.14159265358979323846264338327950288419716939937510582097494459 * parseFloat(3000.0) / parseFloat(180.0));
var PI = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280;
var aa = parseFloat(6378245.0);
var ee = 0.00669342162296594323;
/**
 * 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换
 * 即 百度 转 谷歌、高德
 * @param bd_lon
 * @param bd_lat
 * @returns {*[]}
 */
var bd09togcj02 = function bd09togcj02(bd_lon, bd_lat) {
    var bd_lon = +bd_lon;
    var bd_lat = +bd_lat;
    var x = bd_lon - 0.0065;
    var y = bd_lat - 0.006;
    var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_PI);
    var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_PI);
    var gg_lng = z * Math.cos(theta);
    var gg_lat = z * Math.sin(theta);
    return [gg_lng, gg_lat]
};

3.地图调起效果

@漏刻有时

相关文章
|
2月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
23天前
|
JavaScript 小程序 开发者
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
uni-app开发实战:利用Vue混入(mixin)实现微信小程序全局分享功能,一键发送给朋友、分享到朋友圈、复制链接
246 0
|
1月前
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
183 0
|
3月前
|
消息中间件 Java
【实战揭秘】如何运用Java发布-订阅模式,打造高效响应式天气预报App?
【8月更文挑战第30天】发布-订阅模式是一种消息通信模型,发送者将消息发布到公共队列,接收者自行订阅并处理。此模式降低了对象间的耦合度,使系统更灵活、可扩展。例如,在天气预报应用中,`WeatherEventPublisher` 类作为发布者收集天气数据并通知订阅者(如 `TemperatureDisplay` 和 `HumidityDisplay`),实现组件间的解耦和动态更新。这种方式适用于事件驱动的应用,提高了系统的扩展性和可维护性。
65 2
|
3月前
|
XML Android开发 UED
"掌握安卓开发新境界:深度解析AndroidManifest.xml中的Intent-filter配置,让你的App轻松响应scheme_url,开启无限交互可能!"
【8月更文挑战第2天】在安卓开发中,scheme_url 通过在`AndroidManifest.xml`中配置`Intent-filter`,使应用能响应特定URL启动或执行操作。基本配置下,应用可通过定义特定URL模式的`Intent-filter`响应相应链接。
109 12
|
4月前
|
监控 Android开发 开发者
Android经典面试题之实战经验分享:如何简单实现App的前后台监听判断
本文介绍在Android中判断应用前后台状态的两种方法:`ActivityLifecycleCallbacks`和`ProcessLifecycleOwner`。前者提供精细控制,适用于需针对每个Activity处理的场景;后者简化前后台检测,适用于多数应用。两者各有优劣:`ActivityLifecycleCallbacks`更精确但复杂度高;`ProcessLifecycleOwner`更简便但可能在极端场景下略有差异。根据应用需求选择合适方法。
39 2
|
3月前
|
JSON 数据格式 索引
【Azure Developer】Azure Logic App 示例: 解析 Request Body 的 JSON 的表达式? triggerBody()?
【Azure Developer】Azure Logic App 示例: 解析 Request Body 的 JSON 的表达式? triggerBody()?
|
3月前
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
|
3月前
|
网络协议 NoSQL 网络安全
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
|
3月前
|
域名解析 网络协议 数据中心
【应用服务 App Service】当遇见某些域名在Azure App Service中无法解析的错误,可以通过设置指定DNS解析服务器来解决
【应用服务 App Service】当遇见某些域名在Azure App Service中无法解析的错误,可以通过设置指定DNS解析服务器来解决

推荐镜像

更多
下一篇
无影云桌面