地图本地查询

百度地图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类参考”文档。

posted @ 2012-10-22 10:23  elar  阅读(9020)  评论(0编辑  收藏  举报