常见问题

数据情况

百度地图API所覆盖的数据情况,请查看。

JavaScirpt产品问题

自v1.5必须要申请key吗?使用之前的版本还需要申请key吗?

自V1.5起必须申请key,否则JS API文件无法加载成功。V1.5之前版本无须申请key,可正常使用,但没法使用v1.5新增功能。

使用用户数据图层服务,数据必须要存到LBS.云吗?百度会收录用户存储的数据吗?

若您需要展示和检索海量用户数据,必须先存入LBS.云。方法请参看开发指南—用户数据图层。百度不会收录用户存储的数据。

比例尺的一像素对应几米?

Math.pow(2, (18 - zoom)); //把地图级别带进去,就能得出各个级别下1px对应多少米

如何搜索百度地图的数据?

百度地图API提供localsearch类,其中search、searchInBounds、searchNearby方法均为搜索函数。利用此类方法可以搜索到百度地图数据库中所有POI信息。

如何搜索用户自己数据库里的数据?

用户需要自己实现该类搜索逻辑。

后端搜索案例: http://www.cnblogs.com/milkmap/archive/2011/08/16/2135323.html

如何解决标注数量庞大时,地图反映慢的问题?

标注数据量请控制在150个以内,以保持各个浏览器都能高性能地展示地图;标注数量在260以内,可以使用自定义覆盖物实现;标注数量大于300个,建议尝试marker聚合,或者数据抽希。

Marker聚合:http://tieba.baidu.com/f?kz=1031097376

数据抽希:比如有10个marker,选择其中6个做为显示点。

我们建议您不要一次在地图上添加过多的marker,而是先把point存储在数据库里,当需要显示某个marker是,再addOverlay。

如果地址解析失败了怎么办?

地址解析失败有如下三种可能:

A、用户未区分地址解析和智能搜索的概念

地址解析,即Geocoder类,是根据一个地址得到对应的经纬度point。注:地址需要详细到街道,例如“北京市海淀区中关村南大街”。

智能搜索,即localsearch类,可以根据任意关键词查询到对应的POI信息。关键词可以是“上海市麦当劳”“重庆市解放碑”,当没有城市信息时,默认在当前城市进行搜索。Localsearch类会根据关键词的内容,智能地搜索POI的title和content信息。比如,搜索“家乐福”时,也能搜索到家乐福附近的面馆,停车场等信息。

更多详细对比请点击:http://www.cnblogs.com/milkmap/archive/2012/01/29/2331332.html

注:百度地图(map.baidu.com)的输入框,采取了先地址解析,如果失败就智能搜索的策略。并且对输入关键词做了切词的处理,能定位城市。所以,用户需要结合API的各个接口来编写地址搜索框的代码。

B、用户输入的地址不符合地址解析的规则

地址解析的规范为:省+城市+区县+街道 (可以不用门牌号)。例如,北京市北京市海淀区中关村南大街27号。如果输入“南京路工行”,则无法解析。

C、百度地图数据库里无该地址或用户输入的地址错误

如何更换marker的图标?

第一、只需改变icon的路径即可,类似银行标注。

第二、图片加上文字的图标,并且鼠标滑过时有动画,类似房产标注。

第三、可以利用label来模拟自定义覆盖物。示例: http://www.cnblogs.com/milkmap/archive/2011/08/24/2151073.html

如何清除地图上的覆盖物?

清除地图上所有的标记,用map.clearOverlays();

清除单个标注iMarker,用map.removeOverlay(iMarker);

显示和隐藏自定义覆盖物,可以继承overlay的hide();或者show()方法。

我采集到的GPS数据转换成百度坐标系后,偏差非常大。如何怎么解决?

有以下四种可能:

A、原始坐标可能不是GPS(即wgs84)的

解决方案:请确保采集到的数据时WGS84的标准。

B、原始坐标准确度不够

解决方案:请确保采集GPS数据时,搜到至少4颗以上的卫星。并且GPS数据准不准,还取决于周围建筑物的高度,越高越不准,因为有遮挡。

C、度分秒的概念混淆

比如,在google earth上采集到的是39°31'20.51,那么应该这样换算,31分就是31/60度,20.51秒就是20.51/3600度,结果就是39 + 31/60 + 20.51/3600 度。

D、经纬度顺序写反了

百度坐标是先经度,再纬度,即Point(lng, lat)。谷歌坐标的顺序恰好相反,是(lat, lng)。

如何通过经纬度查询到已加上的标注(Marker)?

Marker 是通过map.AddOverlay()加上的,所以也用map可以得到加上的所有Marker:

var mkrs = map.getOverlays();

for (var i=1; i < mkrs.length;i++) {

...

}

要注意的是,假如用BMapLib.MarkerTool加上3个Marker后,map中含有的marker数量为4,第一个(mkrs[0])应该是MarkerTool。所以遍历Marker要从1到length。

如何实现百度地图全屏按钮?

百度地图的全屏按钮是代码逻辑,不属于API范畴。你只需要在全屏时,改变地图容器的宽度和高度,缩小列表栏的宽度和高度即可。同时可以利用CSS将浏览器的滚动条去掉。

更多百度地图API问题

更多百度地图API使用须知、数据情况、坐标体系、反馈通道等问题详见百度地图API常见问题