数据可视化大屏百度地图手机端标注开发实战案例解析(jsAPI接口、标注分类图片、文本标签、分类筛选、自适应高度信息弹窗、PHP后端API)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 数据可视化大屏百度地图手机端标注开发实战案例解析(jsAPI接口、标注分类图片、文本标签、分类筛选、自适应高度信息弹窗、PHP后端API)

前言

百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,可在网站中构建功能丰富、交互性强的地图应用,支持PC端和移动端基于浏览器的地图应用开发,且支持HTML5特性的地图开发。百度地图JavaScript API支持HTTP和HTTPS,免费对外开放,可直接使用。


目前众多jsAPI接口中,常用的为地图标注、文本标签和信息弹窗,也是比较常见的客户需求。


一、引入外部js库

    <!--百度地图核心库-->
    <script type="text/javascript" src="//api.map.baidu.com/api?v=3.0&ak=3HGqGo***"></script>
    <!--layUI核心库-->
    <link href="static/layui/css/layui.css" type="text/css" rel="stylesheet">
    <script src="static/layui/layui.js"></script>


二、地图开发

1.二级联动菜单筛选

在手机端一般是搜索框,点击跳转到新的页面进行信息输入,然后进行筛选。本次需求是基于客户要在同一页面实现各种功能,因此,采用SPA+ajax异步加载的方式进行地图开发。

二级联动菜单,是实现对不同标注点各个分类智能筛选的。本次采用的原生select事件+lauyi样式表的联动类型。


联动菜单

    <div class="searchStatus" style="text-align: center;">
        <div class="layui-inline">
            <select name="poi_type" id="poi_type" class="layui-select">
                <option value="">经办事项</option>
                <option value="参保登记">参保登记</option>
                <option value="异地居住备案">异地居住备案</option>
                <option value="费用报销">费用报销</option>
            </select>
        </div>
        <div class="layui-inline">
            <select name="poi_type2" id="poi_type2" class="layui-select">
                <option value="">事项分类</option>
            </select>
        </div>
        <div class="layui-inline" style="width: 16%;">
            <select name="poi_area" id="poi_area" class="layui-select"></select>
        </div>
    </div>


JQ联动事件

每次筛选,需要对各个select进行判断,并传递到后端API接口,实时返回对应的地理标注数据。

   //联动搜索搜索;
    $("#poi_type").change(function () {
        var poi_type = $("#poi_type").val();
        var poi_type2 = $("#poi_type2").val();
        var poi_area = $("#poi_area").val();
        getPoiType(poi_type);
        getMapsData(poi_type, poi_area, poi_type2, 1);
    });
    $("#poi_type2").change(function () {
        var poi_type = $("#poi_type").val();
        var poi_type2 = $("#poi_type2").val();
        var poi_area = $("#poi_area").val();
        getMapsData(poi_type, poi_area, poi_type2, 1)
    });
    $("#poi_area").change(function () {
        var poi_type = $("#poi_type").val();
        var poi_type2 = $("#poi_type2").val();
        var poi_area = $("#poi_area").val();
        getMapsData(poi_type, poi_area, poi_type2, 1);
    });


联动封装函数

//经办事项二级联动菜单
function getPoiType(poi_type) {
    if (poi_type) {
        var data = filterCity(poiData, poi_type)[0].areaList;
        var memberHtml = '<option value="">事项分类</option>';
        for (var i = 0; i < data.length; i++) {
            memberHtml += '<option value="' + data[i] + '" >' + data[i] + '</option>'
        }
        $('#poi_type2').html(memberHtml);
    }
}
//经办事项过滤 2023-04-19 By Poleung;
function filterCity(arr, city) {
    return arr.filter(item => item.name == city);
}


php后端API接口

    public function getMakers()
    {
        //获取数据;
        @$poi_type = get_param("poi_type");
        @$poi_type2 = get_param("poi_type2");
        @$poi_area = get_param("poi_area");
        @$keywords = get_param("keywords");
        $sql = "select poi_id,poi_sn,poi_name,poi_alias,poi_area,poi_address,poi_lon,poi_lat,poi_type,poi_hours,poi_phone,poi_order,poi_item from " . $db->table('poi') . " WHERE 1 ";
        if ($keywords != "") {
            $sql .= " AND poi_name like '%" . $keywords . "%'";
        }
        if ($poi_type != "") {
            $sql .= " AND poi_type = '" . $poi_type . "'";
        }
        if ($poi_type2 != "") {
            $sql .= " AND poi_type2 like '%" . $poi_type2 . "%'";
        }
        if ($poi_area != "") {
            $sql .= " AND poi_area = '" . $poi_area . "'";
        }
        $sql .= " ORDER BY poi_id DESC";
        $row = $db->queryall($sql);
        $res['code'] = 0;
        $res["data"] = $row;
        die(json_encode_lockdata($res));
    }


菜单JSON数据

var poiData = [
    {name:'参保登记', areaList:['单位参保登记', '城乡居民参保登记', '职工参保登记', '转移接续办理', '个人账户支取清算', '参保信息查询']},
    {name:'异地居住备案', areaList:['异地人员备案', '参保账户共济备案']},
    {name:'费用报销', areaList:['住院费用报销', '门诊费用报销', '未就业配偶医疗待遇核准支付', '生育津贴支付']},
]


2.构建地图

构建地图容器

<!--地图渲染区-->
    <div id="map"></div>


封装百度地图

将map定义为全局函数,进行封装,便于参数的传递。整体封装的意味着,每次传递参数时,都要重新加载地图页面。

 // 百度地图API功能;
var map;
function intMap(markerArr, type) {
    map = new BMap.Map("map", {enableMapClick: false});
    map.centerAndZoom(new window.BMap.Point(markerArr[0].poi_lon, markerArr[0].poi_lat), 13);
    map.enableScrollWheelZoom();
    //添加缩放控件
    var ctrlNav = new window.BMap.NavigationControl({
        anchor: BMAP_ANCHOR_BOTTOM_RIGHT,
        type: BMAP_NAVIGATION_CONTROL_LARGE
    });
    map.addControl(ctrlNav);
    //数据标注;
    getMaker(markerArr, type);
    //绘制标注;
    function getMaker(markerArr, type) {
        var allponits = [];
        for (var i = 0; i < markerArr.length; i++) {
            var p0 = markerArr[i].poi_lon;
            var p1 = markerArr[i].poi_lat;
            var cat = getType(markerArr[i].poi_type);
            var txt = markerArr[i].poi_name;
            var pos = new window.BMap.Point(p0, p1)
            var maker = addMarker(pos, cat, txt);
            addInfoWindow(maker, markerArr[i]);
            if (type == 1) {
                //文本标签;
                addLabel(pos, txt, cat);
            }
            //设置最佳视野POI;
            allponits.push(pos);
        }
        map.setViewport(allponits);
    }
}


定义图标类型

可以将标注图标按照类别进行判断,然后加载对应的图标图片。

//定义图标类型;
function addMarker(point, cat, txt) {
    var imgUrl = 'static/rooted/images/icon' + cat + '.png';
    var myIcon = new BMap.Icon(imgUrl, new BMap.Size(20, 25));
    if (txt == "慈溪医保办事服务大厅") {
        imgUrl = 'static/rooted/images/chs.png';
        myIcon = new BMap.Icon(imgUrl, new BMap.Size(30, 30));
    }
    var marker = new BMap.Marker(point, {icon: myIcon});
    map.addOverlay(marker);
    return marker;
}


自适应高度信息弹窗

//添加信息窗口
function addInfoWindow(marker, pos) {
    var title = '<div class="popTitle" style="background:transparent !important;">' + pos.poi_name + '  <a href="?m=Index&a=lists&act=show&poi_id=' + pos.poi_id + '" target="_blank" style="font-size: 12px;color: #0073ff;"> 详情>> </span></a></div>';
    var html = [];
    html.push('<div>');
    html.push('<div class="infoItems" style="background:transparent !important;"><span>经办事项:</span><span>' + pos.poi_type + '</span></div>')
    html.push('<div class="infoItems" style="background:transparent !important;"><span>所在区域:</span><span>' + pos.poi_area + '</span></div>')
    html.push('<div class="infoItems" style="background:transparent !important;"><span>经办地址:</span><span>' + pos.poi_address + '</span></div>')
    html.push('<div class="infoItems" style="background:transparent !important;"><span>办公时间:</span><span>' + pos.poi_hours + '</span></div>')
    html.push('<div class="infoItems" style="background:transparent !important;"><span>咨询电话:</span><span>' + pos.poi_phone + '</span></div>')
    html.push('<div class="infoItems" style="background:transparent !important;"><span>事项范围:</span><span>' + pos.poi_item + '</span></div>')
    html.push('<div class="infoItems" style="float: right;">  <a href="' + pos.poi_order + '" target="_blank"><span class="layui-icon layui-icon-survey"> 立即预约</span></a> <a href="//api.map.baidu.com/geocoder?location=' + pos.poi_lat + ',' + pos.poi_lon + '&coord_type=bd09ll&output=html&src=lockdatav" target="_blank"><span class="layui-icon layui-icon-find-fill"> 导航到这里</span></a></div>')
    html.push('</div>');
    var opts = {
        width: 300, // 信息窗口宽度
        height: 0, //自适应
        title: '<h4>' + title + '</h4>', // 信息窗口标题
        enableMessage: true, //设置允许信息窗发送短息
    }
    var infoWindow = new BMap.InfoWindow(html.join(""), opts);
    var openInfoWinFun = function () {
        marker.openInfoWindow(infoWindow);
    };
    marker.addEventListener("click", openInfoWinFun);
    return openInfoWinFun;
}



@漏刻有时

相关文章
|
1月前
|
数据采集 自然语言处理 搜索推荐
基于qwen2.5的长文本解析、数据预测与趋势分析、代码生成能力赋能esg报告分析
Qwen2.5是一款强大的生成式预训练语言模型,擅长自然语言理解和生成,支持长文本解析、数据预测、代码生成等复杂任务。Qwen-Long作为其变体,专为长上下文场景优化,适用于大型文档处理、知识图谱构建等。Qwen2.5在ESG报告解析、多Agent协作、数学模型生成等方面表现出色,提供灵活且高效的解决方案。
158 49
|
16天前
|
机器学习/深度学习 人工智能 自然语言处理
秒级响应 + 99.9%准确率:法律行业文本比对技术解析
本工具基于先进AI技术,采用自然语言处理和语义匹配算法,支持PDF、Word等格式,实现法律文本的智能化比对。具备高精度语义匹配、多格式兼容、高性能架构及智能化标注与可视化等特点,有效解决文本复杂性和法规更新难题,提升法律行业工作效率。
|
19天前
|
前端开发 UED
React 文本区域组件 Textarea:深入解析与优化
本文介绍了 React 中 Textarea 组件的基础用法、常见问题及优化方法,包括状态绑定、初始值设置、样式自定义、性能优化和跨浏览器兼容性处理,并提供了代码案例。
48 8
|
25天前
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
25天前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
1月前
|
监控 持续交付 数据库
构建高效的后端服务:微服务架构的深度解析
在现代软件开发中,微服务架构已成为提升系统可扩展性、灵活性和维护性的关键。本文深入探讨了微服务架构的核心概念、设计原则和最佳实践,通过案例分析展示了如何在实际项目中有效地实施微服务策略,以及面临的挑战和解决方案。文章旨在为开发者提供一套完整的指导框架,帮助他们构建出更加高效、稳定的后端服务。
|
1月前
|
JSON BI API
商城上货API接口的实战案例
在商城上货过程中,API接口扮演着至关重要的角色。以下是对商城上货API接口的实战分析,涵盖其主要功能、类型、安全性以及实战案例等方面。
|
1月前
|
XML 数据可视化 API
商品详情数据实战案例,API接口系列
淘宝商品详情数据在电商领域具有广泛的应用价值,而淘宝商品详情API接口则为开发者提供了获取这些数据的重要途径。通过合理利用这些接口和数据,可以提升业务效率、优化用户体验,为电商行业的发展注入新的活力。
|
1月前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
53 1
|
1月前
|
XML JavaScript 前端开发
如何解析一个 HTML 文本
【10月更文挑战第23天】在实际应用中,根据具体的需求和场景,我们可以灵活选择解析方法,并结合其他相关技术来实现高效、准确的 HTML 解析。随着网页技术的不断发展,解析 HTML 文本的方法也在不断更新和完善,

热门文章

最新文章

推荐镜像

更多