百度地图API中有一个服务,称为LocalSearch,顾名思义就是本地搜索。
构造函数
LocalSearch(location:Map|Point|String[, opts:LocalSearchOptions])
描述
创建一个搜索类实例,其中location 表示检索区域,其类型可为地图实例、坐标点或城市名称的字符串。当参数为地图实例时,检索位置由当前地图中心点确定,且搜索结果的标注将自动加载到地图上,并支持调整地图视野层级;当参数为坐标时,检索位置由该点所在位置确定;当参数为城市名称时,检索会在该城市内进行。
要确定“本地”为何地有两种方式:
1、直接写城市名,如“西安市”
2、提供一个经纬度信息,如“108.977055, 34.217914”,是大唐芙蓉园的坐标。
提供经纬度又分成两种,一种是将map对象作为参数传给LocalSerch的构造函数,另一种是将point对象作为参数传给LocalSerch的构造函数。这两者之间有什么区别呢?
如果使用的是map对象作为参数,那么一会儿显示的搜索结果将以这个map为中心。
如果使用point对象为参数,那么显示的结果将以这个点为中心。
如下面这段代码:
<script type="text/javascript"> var map = new BMap.Map("position"); var point = new BMap.Point(108.977055, 34.217914); map.centerAndZoom(point, 17); var dtxs = new BMap.Point(108.915189,34.25151); var local = new BMap.LocalSearch( map,{renderOptions:{map: map}} ); local.search("超市"); </script>
显示结果为:
可以看到其实没什么区别。
这是什么原因呢?
猜测可能的原因有两个:1、默认将搜索范围划为全市搜索了;2、是因为搜索的内容太大,没有足够的约束条件来对两个搜索结果进行差异化。
尝试将关键字分别改为“小肥羊火锅”、“小肥羊火锅 西工大”、“小肥羊火锅 西交大”,查看不同的效果:
local.search("小肥羊火锅");//“小肥羊火锅 西工大”、“小肥羊火锅 西交大”
地图分别显示为:
可以看到,如果不增加约束条件的话,会默认显示全市的“小肥羊火锅店”,如果增加了约束,地图中心会移动到搜索的结果所在的位置。如果搜索的结果为空(如“小肥羊火锅 西交大”)那么将会显示默认的地图,不做任何其他标注。
搜索一定范围内的目标
local.searchNearby("餐馆",point,100);
三个参数分别为:搜索关键字(可以为数组)、中心地点、半径。
PS:如果中心地点不是用point,而是用一个string,比如“大唐芙蓉园”之类的,那么最后一个参数“半径”将会失效。
以下是同一个地点,但搜索半径不同时呈现的效果:
该类的其他方法可以参考“百度地图javascript API类参考”文档。