【百度地图API】如何使用suggestion--下拉列表方式的搜索建议

原文:【百度地图API】如何使用suggestion--下拉列表方式的搜索建议

摘要:

  百度地图上有一个很强大的搜索建议功能,以下拉列表的方式展示出来。比如,输入“百度”,下拉列表中就会出现“北京市海淀区百度在线网络技术(北京)有限公司”。这个如何实现呢?让我们一步一步来学习。

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

 

 

一、suggestion 功能示意图

 

 

二、suggestion的类参考

更多类参考,请点击这里:http://dev.baidu.com/wiki/map/index.php?title=Class:%E6%9C%8D%E5%8A%A1%E7%B1%BB/Autocomplete

 

 

三、实现HTML的结构

 

写三个框,分别是suggestion的下拉列表、地图容器,和最终信息显示框。

<div style="margin:50px">请输入:<input type="text" id="suggestId" size="30" value="百度" style="width:300px;" /></div><div id="searchResultPanel" style="border:1px solid #C0C0C0;width:300px;height:600px;position:absolute;left: 650px;top:20px;"></div><div id="container"></div>

四、suggestion的使用

首先,创建一个自动完成的对象。

其中,suggestId就是输入框的id,通过它,能获取到用户输入了什么。

onSearchComplete是搜索到结果后的回调函数,可以不用设置。

var ac = new BMap.Autocomplete(    //建立一个自动完成的对象    {"input" : "suggestId"    ,"location" : map});

 

 

根据类参考,suggestion有如下事件。分别可以控制,鼠标在下拉列表上的选择(类似onfouce),和点击确定下拉列表的选项。

 

我们设置当鼠标在下拉列表上,和点击下拉列表后,都会在右边的信息展示框,展示结果数据。

ac.addEventListener("onhighlight", function(e) {  //鼠标放在下拉列表上的事件    var str = "";var _value = e.fromitem.value;var value = "";if (e.fromitem.index > -1) {        value = _value.province +  _value.city +  _value.district +  _value.street +  _value.business;    }        str = "FromItem<br />index = " + e.fromitem.index + "<br />value = " + value;

value = "";if (e.toitem.index > -1) {        _value = e.toitem.value;        value = _value.province +  _value.city +  _value.district +  _value.street +  _value.business;    }        str += "<br />ToItem<br />index = " + e.toitem.index + "<br />value = " + value;    G("searchResultPanel").innerHTML = str;});

ac.addEventListener("onconfirm", function(e) {    //鼠标点击下拉列表后的事件    var _value = e.item.value;var myValue = _value.province +  _value.city +  _value.district +  _value.street +  _value.business    G("searchResultPanel").innerHTML =  "onconfirm<br />index = " + e.item.index + "<br />myValue = " + myValue;

});

 

五、通过地址解析设置中心点

由于suggestion返回的是地址数据,并没有point经纬度的信息。我们需要自己在回调函数,或者其他地方通过地址解析来打点。

function setPlace(){// 创建地址解析器实例var myGeo = new BMap.Geocoder();// 将地址解析结果显示在地图上,并调整地图视野myGeo.getPoint(myValue, function(point){if (point) {    map.centerAndZoom(point, 16);    map.addOverlay(new BMap.Marker(point));  }}, "北京");}

 

 

加上地址解析之后,能通过获得的地址位置的描述,得到百度经纬度point。随后,添加一个marker覆盖物,即可完成打点工作。最后再把地图中心点设置为point。

 

 

六、备注

这个教程是一个最简单的示例,方便大家学习和上手。

由于没有设置城市,该示例只适用于北京市内。详细的城市设定,请看类参考:

 

 

七、全部源代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content="initial-scale=1.0, user-scalable=no" /><title>自动提示</title><script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script><style type="text/css">body{font-size:13px;margin:0px}#container{width:600px;height:400px}.label{margin-left:20px;font-weight:bold;font-size:14px}</style></head><body><div style="margin:50px">请输入:<input type="text" id="suggestId" size="30" value="百度" style="width:300px;" /></div><div id="searchResultPanel" style="border:1px solid #C0C0C0;width:300px;height:600px;position:absolute;left: 650px;top:20px;"></div><div id="container"></div><script type="text/javascript">function G(id) {return document.getElementById(id);}

var map = new BMap.Map("container");var point = new BMap.Point(116.3964,39.9093);map.centerAndZoom(point,13);map.enableScrollWheelZoom();

var ac = new BMap.Autocomplete(    //建立一个自动完成的对象    {"input" : "suggestId"    ,"location" : map});

ac.addEventListener("onhighlight", function(e) {  //鼠标放在下拉列表上的事件var str = "";var _value = e.fromitem.value;var value = "";if (e.fromitem.index > -1) {        value = _value.province +  _value.city +  _value.district +  _value.street +  _value.business;    }        str = "FromItem<br />index = " + e.fromitem.index + "<br />value = " + value;

value = "";if (e.toitem.index > -1) {        _value = e.toitem.value;        value = _value.province +  _value.city +  _value.district +  _value.street +  _value.business;    }        str += "<br />ToItem<br />index = " + e.toitem.index + "<br />value = " + value;    G("searchResultPanel").innerHTML = str;});

var myValue;ac.addEventListener("onconfirm", function(e) {    //鼠标点击下拉列表后的事件var _value = e.item.value;    myValue = _value.province +  _value.city +  _value.district +  _value.street +  _value.business;    G("searchResultPanel").innerHTML ="onconfirm<br />index = " + e.item.index + "<br />myValue = " + myValue;

setPlace();});

function setPlace(){// 创建地址解析器实例var myGeo = new BMap.Geocoder();// 将地址解析结果显示在地图上,并调整地图视野myGeo.getPoint(myValue, function(point){if (point) {    map.centerAndZoom(point, 16);    map.addOverlay(new BMap.Marker(point));  }}, "北京");}</script></body></html>
时间: 2024-11-10 21:28:42

【百度地图API】如何使用suggestion--下拉列表方式的搜索建议的相关文章

【百度地图API】如何制作公交线路的搜索?如331路

原文:[百度地图API]如何制作公交线路的搜索?如331路 摘要: 从A点到B点的公交导航大家都知道怎么做了,那么单独查询331路公交车的公交路线,如何制作呢?我们一起来学习一下~ ----------------------------------------------------------------------------------------------------------------- 一.创建地图和网页样式 两句话建立地图: var map = new BMap.Map("

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

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

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

原文:[百度地图API]建立全国银行位置查询系统(四)--如何利用百度地图的数据生成自己的标注 摘要: 上一章留个悬念,"如果自己没有地理坐标的数据库,应该怎样制作银行的分布地图呢?" 答案就是,利用百度地图上的数据. ---------------------------------------------------------------------------------------------- 我们不用花大把时间写代码去跑数据,只需要利用百度地图API提供的免费接口,就可以

【百度地图API】如何制作班级地理通讯录?LBS通讯录

原文:[百度地图API]如何制作班级地理通讯录?LBS通讯录 摘要:班级通讯录必备的功能,比如人员列表,人员地理位置标注,展示复杂信息窗口,公交和驾车等.一般班级人员都不会超过300个,因为可以高效地把全部人员的地理位置都显示在地图上. --------------------------------------------------------------------------- 预备知识1.为啥marker数量不能超过300个? 答:由于浏览器能支持的dom元素有限,所以建议不超过该数量

【百度地图API】——如何用label制作简易的房产标签

原文:[百度地图API]--如何用label制作简易的房产标签 摘要: 最近,API爱好者们纷纷说,自定义marker太复杂了!不仅定义复杂,连所有的dom事件都要自己重新定义.有没有快速简易创建房产标签的方法呢? 答案当然是有的啦~ 我们可以利用label嘛! ------------------------------------------------------------------------------- 一.创建地图 这是老生常谈的三句话,初始化地图的js. var map =

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

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

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

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

Android 百度地图API 定位 导航 代码

前几天百度举办了百度世界大会,可惜没去参加,之前参加了百度的开发者大会,在会上也了解了百度的产品,百度现在朝着平台化的方向在发展,感觉很不错,也试用了百度的产品,现在就用着百度的网盘,今天看了下百度地图的开放API,然后做了个Demo,这里分享出来.如果应用主要针对国内市场的话,用百度地图还是一个比较不错的选择.另外,百度还有一个PCS(Personal cloud storage)个人云存储,我比较感兴趣,之后也会继续研究,然后做个Demo分享给大家.今天就先看看这个利用百度地图定位并实现目的

【百度地图API】百度API卫星图使用方法和卫星图对比工具

原文:[百度地图API]百度API卫星图使用方法和卫星图对比工具 百度地图API推出卫星图接口也有一个月啦~   本文除了介绍如何使用百度地图API来操作卫星图外,还顺带制作了个卫星图对比工具.   一.百度地图API卫星图 调用百度卫星图有两种方式,一是地图类型控件,一是地图底图设置.下面分别介绍这两种方法:   1.利用控件 使用控件有一大优势,就是地图类型控件上,有百度全部的地图类型,比如二维.三维.卫星等. 而且,只需要一句话,就能简单加上这个控件. map.addControl(new