【百度地图API】如何实现信息窗口轮询

原文:【百度地图API】如何实现信息窗口轮询

摘要:

  很多微博或者SNS开发者,想结合地图展示用户的微博或者状态。这时,利用信息窗口就是最好的展示方式了。

  在这里,我们使用信息窗口轮询的方式来实现这一功能。当然,你也可以及时地展示用户微博或状态。

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

为了简明,这里只列出javascript部分的地图程序。完整源代码在文章末尾。

效果图

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

一、创建地图

var map = new BMap.Map("container");    //创建地图容器var point = new BMap.Point(116.404, 39.915);    //创建一个点对象map.centerAndZoom(point, 15);       //设置地图中心点和地图级别

  

二、创建和信息窗口

在这里,我使用了2个数组,分别放点,和信息窗口。一共创建了6个。

当然,这里可以读取后台数据库里存放的经纬度和信息窗口。

我这里用了最简单的信息窗口示例,你可以选择《高级信息窗口》:http://www.cnblogs.com/milkmap/archive/2011/08/04/2127663.html

//创建6个点,对应6个信息窗口var point = [new BMap.Point(116.289502,39.913487),new BMap.Point(116.465983,39.959509),new BMap.Point(116.467278,39.888646),new BMap.Point(116.289502,39.913487),new BMap.Point(116.465983,39.959509),new BMap.Point(116.487278,41.288646)];var infoWindow = [new BMap.InfoWindow("长安静雅大酒店中餐厅"),new BMap.InfoWindow("希尔顿饭店-源豕日本料理"),new BMap.InfoWindow("华腾大厦"),new BMap.InfoWindow("长安静雅大酒店中餐厅"),new BMap.InfoWindow("希尔顿饭店-源豕日本料理"),new BMap.InfoWindow("西直门嘉茂")];

  

附:

《GPS到百度坐标》的转换,请使用工具:http://dev.baidu.com/wiki/static/map/API/examples/?v=1.2&0_5#0&5

《PHP读取数据库》可参考教程:http://www.cnblogs.com/milkmap/archive/2011/08/16/2135323.html

三、实现信息窗口轮询

注意,请大家不要使用setTimeout和for循环这样的语句,在这里是行不通的。因为现在浏览器对这种运算的计算速度都很快。我们只能看到最后一个信息窗口的效果。错误代码如下:

for(i=0;i<infoWindow.length;i++){    setTimeout(function(){        map.openInfoWindow(infoWindow[i],point[i]);    },1000);}

现在给大家介绍一个行之有效的方法——setInterval。setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。

先来看看单次循环的写法。

var i = 0;      //计数器var timer = null;   function show(){    timer = setInterval(function(){if(i > infoWindow.length){      //当计数器大于信息窗口数量时            clearInterval(timer);       //停止循环            return;        }        map.openInfoWindow(infoWindow[i],point[i]);     //打开与计数器对应的信息窗口        i++;    },1000);        //延时一秒}show();     //函数启动

  

再来看看无限循环,就是轮播的代码,其实只改了一句。

当一次循环结束后,让计数器归零,重新循环。

var ind = 0;var timer = null;function show(){    timer = setInterval(function(){if(ind == infoWindow.length){            ind = 0;        //当轮播到最后一个信息窗口时,把计数器至为0        }        map.openInfoWindow(infoWindow[ind],point[ind]);        ind++;    },2000);}show();

  

四、完整源代码

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=uft-8" /><title>信息窗口轮询</title><script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script></head><body><div style="width:520px;height:340px;border:1px solid gray" id="container"></div></body></html><script type="text/javascript">var map = new BMap.Map("container");var point = new BMap.Point(116.404, 39.915);map.centerAndZoom(point, 15);var i = 0;

//创建6个点,对应6个信息窗口var point = [new BMap.Point(116.289502,39.913487),new BMap.Point(116.465983,39.959509),new BMap.Point(116.467278,39.888646),new BMap.Point(116.289502,39.913487),new BMap.Point(116.465983,39.959509),new BMap.Point(116.487278,41.288646)];var infoWindow = [new BMap.InfoWindow("长安静雅大酒店中餐厅"),new BMap.InfoWindow("希尔顿饭店-源豕日本料理"),new BMap.InfoWindow("华腾大厦"),new BMap.InfoWindow("三元里屯"),new BMap.InfoWindow("丽江西里"),new BMap.InfoWindow("西直门嘉茂")];

var ind = 0;var timer = null;function show(){    timer = setInterval(function(){if(ind == infoWindow.length){            ind = 0;        //当轮播到最后一个信息窗口时,把计数器至为0        }        map.openInfoWindow(infoWindow[ind],point[ind]);        ind++;    },2000);}show();

</script>

  

时间: 2024-10-24 05:22:49

【百度地图API】如何实现信息窗口轮询的相关文章

百度地图api 给多个点添加信息窗口 页面无显示

问题描述 百度地图api 给多个点添加信息窗口 页面无显示 <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport&qu

百度地图API的使用

好奇怪,习惯性使用有道云笔记记录心得与知识后就很少用博客园来记录了. 但是后来想想,有些东西还是要整理记录下来的好,多个备份也好.   -------------------------------------------- 下面正题,最近公司项目用百度地图API较多.后面还有使用高德地图API,后续整理记录上.   1.初始化地图,并设置地图中心点 var map = new BMap.Map("allmap"); // 创建Map实例 map.centerAndZoom(new B

【百度地图API】如何在地图上添加标注?——另有:坐标拾取工具+打车费用接口介绍

原文:[百度地图API]如何在地图上添加标注?--另有:坐标拾取工具+打车费用接口介绍 摘要: 在这篇文章中,你将学会,如何利用百度地图API进行标注.如何使用API新增的打车费用接口. ------------------------------------------------------------------------------------------------------- 哇,好久没有上来了.主要是因为最近工作繁忙,加上休息时间被各种排练.社团活动占满,导致木有更新此博客.

百度地图API详解之事件机制,function“闭包”解决for循环和监听器冲突的问题:

原文:百度地图API详解之事件机制,function"闭包"解决for循环和监听器冲突的问题:  百度地图API详解之事件机制 2011年07月26日 星期二 下午 04:06 和DOM编程里的事件模型一样,百度地图API也提供了类似的事件机制.本文介绍了事件监听的添加和移除方法,this指针和事件参数的使用以及绑定事件监听函数中涉及的闭包问题,最后分享了一个用来增强地图API事件机制的开源项目. 事件添加和移除 我们最简单的事件开始,下面的代码示例给map对象添加了click事件的监

【百度地图API】小学生找哥哥——小学生没钱打车,所以此为公交查询功能

原文:[百度地图API]小学生找哥哥--小学生没钱打车,所以此为公交查询功能 任务描述: 有位在魏公村附近上小学的小朋友,要去北京邮电大学找哥哥.他身上钱很少,只够坐公交的.所以,百度地图API快帮帮他吧! 如何实现: 把地图中心定在魏公村,在视野范围内搜索小学. 搜索完毕后,点击出现的红色标注,在输入框中输入北京邮电大学,然后查询,即可得到公交路线图. 图示: 运行代码,点击这里. 点击公交按钮需要做的查询工作. 在这里,请大家一定注意,所有公交查询,只创建一次对象.不然会有很大的内存消耗哦~

【百度地图API】关于如何进行城市切换的三种方式

原文:[百度地图API]关于如何进行城市切换的三种方式 摘要:本文介绍了三种切换城市的方式:查询城市.城市列表和显示城市轮廓. --------------------------------------------------------------------- 很多API爱好者问到我,如何像百度地图那样,实现各个城市之间的切换呢? 在这里,公布以下三种方式. 第一种,是查询城市的方法.使用API接口的LocalSearch方法.我之前写过完整的文章,请查看: http://www.cnbl

大神们!!百度地图api中标签信息的抓取啊。前js后C#。

问题描述 大神们!!百度地图api中标签信息的抓取啊.前js后C#. 是这样的,一个地图api的调用,我需要获取到百度地图api上的搜索出来的信息,可是获取不到啊啊啊... 解决方案 js版的百度地图还是其他版本的? js版本的,C#是运行于服务器端的,无法直接获取客户端的数据.js搜索后你自己即那个解码后的信息用ajax回发到服务器进行获取

Android中使用百度地图API:ItemizedOverlay

Overlay简介 Overlay通常被译为"图层"或"覆盖物".那么对于地图而言,什么称之为覆盖物?"所 有叠加或覆盖到地图之上的内容,都被称之为地图覆盖物,如标注.矢量图形元素(包括:折线和多边形和圆) .定位图标等.覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动." 为了让大家 能够对Overlay有更进一步的认识,我们再通过下面的图形来直观的认识它. 图中标记的那些红色的图标 A,B,...,J正是Overlay的其中一

Android中使用百度地图API:公交换乘方案搜索

这是我写的第3篇介绍调用百度地图API搜索服务的文章,所以对搜索前要做的其它工作不再介绍,再加上 代码中的注释也对相关的操作.方法做了尽可能详细的说明,所以直接看示例吧. 1)布局文件 res/layout/main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro