百度地图API开发:停车场分布标注和检索静态版

简介: 百度地图API开发:停车场分布标注和检索静态版




项目描述

  • 基于百度地图jsAPI接口开发;
  • 实现标注和弹窗功能;
  • 实现标注的检索功能(名称和地址);
  • 静态HTML页面;
  • 卫星地图和行政地图的切换;


外部资源调用

    <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
    <script type="text/javascript"
            src="http://api.map.baidu.com/api?v=2.0&ak=3HGqGo1RHf8zsLZCMj3F***"></script>
    <script type="text/javascript" src="js/functions.js"></script>
    <script type="text/javascript" src="js/poidata.js"></script>
    <!--layui封装库-->
    <script src="js/layui/layui.js" charset="utf-8"></script>
    <link rel="stylesheet" href="js/layui/css/layui.css">
    <!--核心样式表-->
    <link rel="stylesheet" href="css/common.css">


核心代码

构建容器

<div class="headNav">
    <div class="title">停车场分布图</div>
    <div class="searchBox">
        <div class="layui-input-inline"><input type="text" placeholder="停车场名称" class="layui-input" id="name"></div>
        <div class="layui-input-inline"><input type="text" placeholder="停车场地址" class="layui-input" id="address"></div>
        <div class="layui-input-inline"><button id="search" class="layui-btn layui-btn-normal" style="margin-bottom: 3px;">搜索</button></div>
        <div class="layui-input-inline"><button id="reload" class="layui-btn layui-btn-normal" style="margin-bottom: 3px;">重载</button></div>
    </div>
</div>
</div>
<div id="container"></div>

调用地图

  /*初始化地图*/
    intMap(data);
    /*搜索功能*/
    $(function () {
        //重载页面;
        $("#reload").click(function () {
            window.location.href = window.location.href;
        })
        $("#search").click(function () {
            var name = $("#name").val();
            var address = $("#address").val();
            if (name == "" && address == "") {
                layer.msg("停车场名称或地址不能为空", {icon: 2, time: 1000});
                return false;
            } else {
                var newData = filterData(data, name, address);
                if (newData == "") {
                    layer.msg("没有搜索对应的数据", {icon: 2, time: 1000});
                } else {
                    intMap(newData);
                }
            }
        })
    })
    // 百度地图API功能
    var map;
    function intMap(markerArr) {
        map = new BMap.Map("container", {enableMapClick: false, minZoom: 2, maxZoom: 17})
        map.centerAndZoom(new window.BMap.Point(markerArr[0].lng, markerArr[0].lat), 14);
        map.enableScrollWheelZoom();
        //地图类型控件
        map.addControl(new BMap.MapTypeControl({mapTypes: [BMAP_NORMAL_MAP, BMAP_SATELLITE_MAP, BMAP_HYBRID_MAP]}));
        map.setMapType(BMAP_NORMAL_MAP);
        //添加缩放控件
        var ctrlNav = new window.BMap.NavigationControl({
            anchor: BMAP_ANCHOR_TOP_LEFT,
            type: BMAP_NAVIGATION_CONTROL_LARGE
        });
        map.addControl(ctrlNav);
        //绘制标注;
        var allponits = [];
        for (var i = 0; i < markerArr.length; i++) {
            var p0 = markerArr[i].lng;
            var p1 = markerArr[i].lat;
            var txt = markerArr[i].name;
            var cat = 0;
            var pos = new window.BMap.Point(p0, p1);
            //添加标注;
            var maker = addMarker(pos, cat);
            addInfoWindow(maker, markerArr[i]);
            //文本标签;
            addLabel(pos, txt);
            //设置最佳视野POI;
            allponits.push(pos);
        }
        //map.setViewport(allponits);
    }


封装函数

筛选条件

//筛选条件封装函数-精确匹配;
function filterData(data, name, address) {
    var filters = [
        o => o.name.includes(name),
        o => o.address.includes(address)
    ];
    var result = data.filter(o => filters.every(fn => fn(o)));
    return result;
}

文本标签

//文本标签;
function addLabel(point, txt) {
    var opts = {
        position: point,
        offset: new BMap.Size(0, 20)    //设置文本偏移量
    }
    var label = new BMap.Label(txt, opts);  // 创建文本标注对象
    label.setStyle({
        color: "#fff",
        fontSize: "10px",
        height: "24px",
        lineHeight: "20px",
        padding: "2px 5px",
        border: "1px solid rgba(230, 0, 0, 0.7)",
        background: "rgba(230, 0, 0, 0.7)",
        fontWeight: "bold",
        transform: 'translateX(-50%)',
        fontFamily: "微软雅黑"
    });
    map.addOverlay(label);
}

定义图标类型

//定义图标类型;
function addMarker(point, cat) {
    var imgUrl = 'images/icon' + cat + '.png';
    var myIcon = new BMap.Icon(imgUrl, new BMap.Size(32, 41));
    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;font-weight: bold;">' + pos.name + '</div>';
    var html = [];
    html.push('<div>');
    html.push('<div class="infoItems" style="background:transparent !important;"><span>地址:</span><span>' + pos.address + '</span></div>')
    html.push('<div class="infoItems" style="background:transparent !important;"><span>地上车位数量:</span><span>' + pos.parking_up + '</span></div>')
    html.push('<div class="infoItems" style="background:transparent !important;"><span>地下车位数量:</span><span>' + pos.parking_down + '</span></div>')
    html.push('<div class="infoItems" style="background:transparent !important;"><span>面向对象:</span><span>' + pos.parking_obj + '</span></div>')
    html.push('<div class="infoItems" style="background:transparent !important;"><span>收费模式:</span><span>' + pos.parking_mode + '</span></div>')
    html.push('<div class="infoItems" style="background:transparent !important;"><span>联系电话:</span><span>' + pos.parking_tel + '</span></div>')
    html.push('<div class="infoItems" style="background:transparent !important;"><span>备注信息:</span><span>' + pos.parking_other + '</span></div>')
    html.push('</div>');
    var opts = {
        width: 310, // 信息窗口宽度
        height: 200, // 信息窗口高度
        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;
}


@lockdata.cn

相关文章
|
22天前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
2月前
|
数据可视化 测试技术 API
从接口性能到稳定性:这些API调试工具,让你的开发过程事半功倍
在软件开发中,接口调试与测试对接口性能、稳定性、准确性及团队协作至关重要。随着开发节奏加快,传统方式已难满足需求,专业API工具成为首选。本文介绍了Apifox、Postman、YApi、SoapUI、JMeter、Swagger等主流工具,对比其功能与适用场景,并推荐Apifox作为集成度高、支持中文、可视化强的一体化解决方案,助力提升API开发与测试效率。
|
2月前
|
人工智能 自然语言处理 机器人
使用 API 编程开发扣子应用
扣子(Coze)应用支持通过 API 编程,将 AI 聊天、内容生成、工作流自动化等功能集成至自有系统。主要 API 包括 Bot API(用于消息交互与会话管理)及插件与知识库 API(扩展功能与数据管理)。开发流程包括创建应用、获取密钥、调用 API 并处理响应,支持 Python 等语言。建议加强错误处理、密钥安全与会话管理,提升集成灵活性与应用扩展性。
768 0
|
28天前
|
API 开发者 数据采集
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
2025反向海淘新机遇:依托代购系统,聚焦小众垂直品类,结合Pandabay数据选品,降本增效。系统实现智能翻译、支付风控、物流优化,助力中式养生茶等品类利润翻倍,新手也能快速入局全球市场。
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
|
20天前
|
缓存 数据可视化 定位技术
快递鸟快递API技术指南:获取物流轨迹信息与轨迹地图的解决方案
在当今电商竞争激烈的环境中,物流体验已成为提升用户满意度的关键因素。研究表明,超过 75% 的消费者会因物流信息不透明而放弃下单。
345 1
|
2月前
|
数据采集 缓存 API
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
本文详解小红书笔记详情API的开发对接、实战场景与收益模式,涵盖注册避坑、签名生成、数据解析全流程,并分享品牌营销、内容创作、SAAS工具等落地应用,助力开发者高效掘金“种草经济”。
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
|
23天前
|
存储 缓存 算法
淘宝买家秀 API 深度开发:多模态内容解析与合规推荐技术拆解
本文详解淘宝买家秀接口(taobao.reviews.get)的合规调用、数据标准化与智能推荐全链路方案。涵盖权限申请、多模态数据清洗、情感分析、混合推荐模型及缓存优化,助力开发者提升审核效率60%、商品转化率增长28%,实现UGC数据高效变现。
|
26天前
|
存储 缓存 算法
亚马逊 SP-API 深度开发:关键字搜索接口的购物意图挖掘与合规竞品分析
本文深度解析亚马逊SP-API关键字搜索接口的合规调用与商业应用,涵盖意图识别、竞品分析、性能优化全链路。通过COSMO算法解析用户购物意图,结合合规技术方案提升关键词转化率,助力卖家实现数据驱动决策,安全高效优化运营。
|
3月前
|
测试技术 API 开发工具
API文档该怎么写,开发效率能翻几倍?
API文档是提升开发效率与协作的关键因素,本文探讨了API文档的核心要素、常见类型及编写规范,并介绍了如何借助现代化工具如Apifox实现高效管理与维护,助力团队打造高质量的API文档体系。
|
3月前
|
算法 前端开发 API
京东比价项目开发实录:京东API接口(2025)
本文分享了作者在电商开发中对接京东商品详情API的实战经验,涵盖了申请权限、签名算法、限流控制、数据解析等常见问题,并提供了亲测有效的Python代码示例,帮助开发者避坑。