【百度地图API】当地址解析失败时,如何调用search方法查找地址

原文:【百度地图API】当地址解析失败时,如何调用search方法查找地址

有个朋友问我,当地址解析失败时,应该如何处理呢?比如,他想搜索“南宁市青秀区”。

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

首先,我们需要弄明白,地址解析的原理

使用Geocoder进行地址解析,比如“北京市海淀区上地10街”,当系统匹配到这个地址时,getPoint就会返回一个坐标点。
这里需要用到回调函数。
var myGeo = new BMap.Geocoder();// 将地址解析结果显示在地图上,并调整地图视野
myGeo.getPoint("北京市海淀区上地10街", function(point){
if (point) {
map.centerAndZoom(point, 16);
map.addOverlay(new BMap.Marker(point));
}}, "北京市");

当系统无法匹配“北京市海淀区上地10街”的时候,会返回“北京市海淀区”的几何中心点。
如果还是无法匹配,会返回“北京市”的几何中心点。

如果你只是想返回“北京市”的坐标,或者说想要模糊查询,建议不要使用地址解析。
而是使用LocalSearch类的search方法。例子详见:
http://www.cnblogs.com/milkmap/archive/2010/12/22/1914106.html

当地址解析失败时,你可以调用localsearch函数。这个方法被称之为模糊查询

在以下的例子里,为了方便快捷,我取了第一个查询结果。

这样,当地址解析“南宁市青秀区”失败时,会自动search这个地址,并打点在地图上。

完整源代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>地址解析失败时搜索</title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script>
</head>

<body>
<div id="divMap" style="width:400px;height:400px;border:solid 1px gray"></div>
<script type="text/javascript">
var map = new BMap.Map("divMap");
map.centerAndZoom(new BMap.Point(108.532769,22.825487), 12); //这里是定义到了南宁市
var gc = new BMap.Geocoder();
gc.getPoint("南宁市青秀区", function(pt){
if(pt){
map.addOverlay(new BMap.Marker(pt)); //如果地址解析成功,则添加红色marker
}else{
var ls = new BMap.LocalSearch("南宁市");
ls.search("南宁市青秀区");
ls.setSearchCompleteCallback(function(rs){
if (ls.getStatus() == BMAP_STATUS_SUCCESS){
var poi = rs.getPoi(0); //取第1个查询结果
if(poi){
var pt2 = poi.point;
map.addOverlay(new BMap.Marker(pt2)); //如果查询到,则添加红色marker
}
}else{
alert("fail");
}
});
}
}, "南宁市");
</script>
</body>
</html>

时间: 2024-07-30 10:10:37

【百度地图API】当地址解析失败时,如何调用search方法查找地址的相关文章

调用百度地图API添加点聚合时,marker标注的label标签刷新丢失问题

最近在使用百度地图API的点聚合时遇到一个问题 当将自定义的Marker(含有Label)通过MarkerClusterer 管理的时候,当地图发生任何移动.缩放 的时候,Marker 的Label 就会自动消失. 这个问题主要是由于百度的点聚合API<script type="text/javascript" src="http://api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_mi

百度地图API实现批量地址解析

1.前言 写这篇文章的原因是最近做一个GIS项目在网上爬取了一些数据,无奈只有地址的文字信息没有坐标信息,如何把信息显现在地图上呢?很纠结啊,查看了一下百度地图API惊奇的发现百度提供了地址解析的API,然后查看了他的Demo后豁然开朗,所以动手将自己的文字信息数据进行解析坐标信息.下面开始讲解. 2.方案 (1)自己数据库中的数据 (2)百度地图API Demo <!DOCTYPE html> <html> <head> <meta http-equiv=&qu

百度地图API使用介绍

百度地图API 开始学习百度地图API最简单的方式是看一个简单的示例.以下代码创建了一个520x340大小的地图区域并以天安门作为地图的中心: 1. <html> 2. <head> 3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4. <title>Hello, World</title> 5. <sc

百度地图API详解之地图标注(一)

博客原文地址:http://www.jiazhengblog.com/blog/2011/09/15/400/ 本文将向大家介绍百度地图API的标注(Marker)的使用方法和一些实现细节. 标注概述 标注(Marker)是用来表示一个点位置的可见元素,每个标注自身都包含地理信息.比如你在西单商场位置添加了一个标注,不论地图移动.缩放,标注都会跟随一起移动,保证其始终指向正确的地理位置. 从上面的图可以看出,不论地图如何变化标注始终指向"西单商场"的位置. 如何知道某个点的坐标? 上例

百度地图api基本用法

首先 ,如果想调用百度地图api,你需要获取一个百度地图api的密钥. 申请密钥很简单,在百度地图api的首页就有相关链接,填写相关信息百度就会给你一个密钥了. 接下来,就是引入百度地图的api 关键代码如下: <script type="text/javascript" src="http://api.map.baidu.com/api?ak=yourkey&v=2.0&services=false"></script> 接

百度地图API之覆盖物和事件

前言 之前已经介绍了如何添加地图上一些控件,添加一些控件后就会实现一些常用的功能.具体请参考http://blog.csdn.net/u010989191/article/details/51326397.下面主要介绍如何添加覆盖物及给地图.地标等添加响应事件. 覆盖物相关API介绍 地图覆盖物概述 所有叠加或覆盖到地图的内容,我们统称为地图覆盖物.如标注.矢量图形元素(包括:折线和多边形和圆).信息窗口等.覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动. 地图API提供了如下

百度地图API简单应用——1.根据地址查询经纬度

这几天比较空闲,就接触了下百度地图的API(开发者中心链接地址:http://developer.baidu.com),发现调用还是挺方便的.只要简单几步注册下,就可以获得一个Key,就能直接调用(PS:好像1.3版本前的无需注册获取key,就能直接调用api). 想着能结合到自己的项目中去,那也挺不错的.看了园子中的几篇文章,感觉甚好,想自己也动手试试.在调用百度地图API的时候,经纬度的获取必然是关键,那么怎么样获取到经纬度的值呢?这是一个最首要解决的问题.通过查询资料,看了几个例子,得知了

百度地图API 根据地址查询经纬度

html页面.引用上API: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>根据地址查询经纬度</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="text/javascrip

百度地图API多个点聚合时,标注添加的标签label地图刷新就丢失的问题解决

当将自定义的Marker(含有Label)通过MarkerClusterer 管理的时候,当地图发生任何移动.缩放 的时候,Marker 的Label 就会自动消失. 这个问题主要是由于百度的点聚合API<script type="text/javascript" src="http://api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js"></scrip