zoukankan      html  css  js  c++  java
  • 【百度地图API】建立全国银行位置查询系统(四)——如何利用百度地图的数据生成自己的标注

    摘要:

      上一章留个悬念,"如果自己没有地理坐标的数据库,应该怎样制作银行的分布地图呢?"

      答案就是,利用百度地图上的数据。

    ----------------------------------------------------------------------------------------------

    我们不用花大把时间写代码去跑数据,只需要利用百度地图API提供的免费接口,就可以快速完成这一功能。

    查看示例,请点击这里

    -----------------------------------------------------------------------------------------------

    一、建立不同的查询按钮

      还是以招商银行,中国银行和建设银行三个为例,建立三个不同的查询按钮。我想用最直观的展现方式来教学,所以使用了三个按钮。当然,你也可以建立一个下拉列表,或者一个输入框来传参数。html代码如下:

    <input type="button" onclick="milk_zs();" value="招商银行" />
    <input type="button" onclick="milk_zg();" value="中国银行" />
    <input type="button" onclick="milk_js();" value="建设银行" />

      针对这三个按钮,写三个不同的查询。

    function milk_zs(){
    local.search(
    '招商银行');
    }
    function milk_zg(){
    local.search(
    '中国银行');
    }
    function milk_js(){
    local.search(
    '建设银行');
    }

      如何定义三个不同的标注,在上一章已经讲过了,我这里就不重复了。下面进入重点部分!!

    二、利用百度地图数据库

      由于我们要将从百度地图查询出来的数据,显示成自己定义的标注,那么就需要使用到回调函数。经过查询,LocalSearch的回调函数是searchComplete。用法如下:

    var local = new BMap.LocalSearch(map,{onSearchComplete: searchComplete}); //构造一个查询

      接下来,我们要将在回调函数里进行操作。遍历所有查询到的坐标点,读一个获取的点,就自己添加一个自定义标注。读点,使用的是getCurrentNumPois接口。

    //查询完毕的回调函数
    var searchComplete = function (results){
    if (local.getStatus() != BMAP_STATUS_SUCCESS){
    return ;
    }
    for(var cnt = 0; cnt < results.getCurrentNumPois(); cnt++){
    var point = results.getPoi(cnt);
    addMarker(results,point, cnt);
    }
    }

      为了让代码看上去更加清晰,我把添加自定义标注的代码提取出来,单独写成一个函数addMarker。在这里,需要针对不同的查询,显示不同的标注图案。所以,需要判断一下关键词。

    var myIcon = "";
    if(results.keyword == "招商银行"){
    myIcon
    = zsIcon;
    }
    else if(results.keyword == "中国银行"){
    myIcon
    = zgIcon;
    }
    else if(results.keyword == "建设银行"){
    myIcon
    = jsIcon;
    }
    else{
    myIcon
    = zsIcon;
    }
    var marker = new BMap.Marker(point.point, {icon: myIcon});
    map.addOverlay(marker);

    三、细节完善

      为了便于观察结果和更好的用户体验,需要在第二次查询时,清除上一次查询的结果。

    map.clearOverlays(); //清除地图上覆盖物

      点击marker需要弹出infowindow,这里要设置一下。以前写过这个点,这里就不多说了。

    -------------------------

    运行代码,请点击这里

    最后,贴出全部源代码,供大家下载。

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>三家银行搜索</title>
    <script type="text/javascript" src="http://api.map.baidu.com/api?key=46ce9d0614bf7aefe0ba562f8cf87194&v=1.1&services=true">
    </script>
    </head>
    <body>
    <div style="520px;height:340px;border:1px solid gray" id="container"></div>
    <input type="button" onclick="milk_zs();" value="招商银行" />
    <input type="button" onclick="milk_zg();" value="中国银行" />
    <input type="button" onclick="milk_js();" value="建设银行" />
    </body>
    </html>
    <script type="text/javascript">
    //查询完毕添加自定义标注
    function addMarker(results,point, index){
    // 创建招商银行的标注图标
    var zsIcon = new BMap.Icon("http://ui-love.com/baidumap/bank/marker.gif", //图片地址
    new BMap.Size(40, 64), // 标注显示大小
    {
    offset:
    new BMap.Size(20, 64), // 标注底部小尖尖的偏移量
    imageOffset: new BMap.Size(0, 0) // 这里相当于CSS sprites
    });
    // 创建中国银行的标注图标
    var zgIcon = new BMap.Icon("http://ui-love.com/baidumap/bank/marker.gif", //图片地址
    new BMap.Size(40, 64), // 标注显示大小
    {
    offset:
    new BMap.Size(20, 64), // 标注底部小尖尖的偏移量
    imageOffset: new BMap.Size(0, -64) // 这里相当于CSS sprites
    });
    // 创建建设银行的标注图标
    var jsIcon = new BMap.Icon("http://ui-love.com/baidumap/bank/marker.gif", //图片地址
    new BMap.Size(40, 64), // 标注显示大小
    {
    offset:
    new BMap.Size(20, 64), // 标注底部小尖尖的偏移量
    imageOffset: new BMap.Size(0, -128) // 这里相当于CSS sprites
    });
    var myIcon = "";
    if(results.keyword == "招商银行"){
    myIcon
    = zsIcon;
    }
    else if(results.keyword == "中国银行"){
    myIcon
    = zgIcon;
    }
    else if(results.keyword == "建设银行"){
    myIcon
    = jsIcon;
    }
    else{
    myIcon
    = zsIcon;
    }
    var marker = new BMap.Marker(point.point, {icon: myIcon});

    var infoWindow = new BMap.InfoWindow(point.title); // 创建信息窗口对象
    marker.addEventListener("click",
    function(){
    marker.openInfoWindow(infoWindow);
    }
    );
    map.addOverlay(marker);
    }

    //查询完毕的回调函数
    var searchComplete = function (results){
    if (local.getStatus() != BMAP_STATUS_SUCCESS){
    return ;
    }
    for(var cnt = 0; cnt < results.getCurrentNumPois(); cnt++){
    var point = results.getPoi(cnt);
    addMarker(results,point, cnt);
    }
    }

    var map = new BMap.Map("container"); //创建地图容器
    map.centerAndZoom(new BMap.Point(116.404, 39.915), 11); //初始化地图
    var local = new BMap.LocalSearch(map,{onSearchComplete: searchComplete}); //构造一个查询

    //定义三个不同的查询
    function milk_zs(){
    map.clearOverlays();
    local.search(
    '招商银行');
    }
    function milk_zg(){
    map.clearOverlays();
    local.search(
    '中国银行');
    }
    function milk_js(){
    map.clearOverlays();
    local.search(
    '建设银行');
    }
    </script>
  • 相关阅读:
    Spring入门-对异常的处理
    Spring入门-Interceptor基本使用
    Spring入门-浏览器中文乱码问题
    Spring入门-使用SpringMVC完成一个登陆页面
    Spring入门-获取页面参数&向页面传值&重定向
    【Linux】【NodeJs】Centos7安装node-v10.16.3环境
    【Linux】【Go】Centos7安装go1.13环境
    【Linux】【Fabric】Centos7搭建Fabric运行环境
    【Linux】【ELK】利用elasticproxy对elasticsearch进行二次排序
    【Linux】【ELK】搭建Elasticsearch+Logstash+Kibana+Filebeat日志收集系统
  • 原文地址:https://www.cnblogs.com/milkmap/p/2013976.html
Copyright © 2011-2022 走看看