关于百度地图API问题:怎样批量将地址准换成坐标?
什么时候会调用localSearch.setSearchCompleteCallback函数?如果转换不成功怎么判断?如果批量转换的话,怎样才能识别那个坐标是那个地址的?
var map = new BMap.Map("container");
var localSearch = new BMap.LocalSearch(map);
var keyword="深圳市世界之窗";
localSearch.setSearchCompleteCallback(function (searchResult) {
var poi = searchResult.getPoi(0);
if(poi==""||poi==null)
{alert(123);return;}
document.getElementById("result").innerHTML += poi.point.lng + "," + poi.point.lat+ "</br>";
});
localSearch.search(keyword);
给你个例子吧,其实就是官网的例子。
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf8" /> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <title>批量地址</title> <style type="text/css"> body, html{width: 100%;height: 100%;margin:0;font-family:"微软雅黑";} #l-map{height:300px;width:100%;} #r-result{width:100%; font-size:14px;line-height:20px;} </style> <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=LXtbxUBZfNBXjuwrAljAiHIo"></script> </head> <body> <div id="l-map"></div> <div id="r-result"> <input type="button" value="批量地址解析" onclick="bdGEO()" /> <div id="result"></div> </div> </body> </html> <script type="text/javascript"> // 百度地图API功能 var map = new BMap.Map("l-map"); map.centerAndZoom(new BMap.Point(117.269945,31.86713), 13); map.enableScrollWheelZoom(true); var index = 0; var myGeo = new BMap.Geocoder(); var adds = [ "包河区金寨路1号(金寨路与望江西路交叉口)", "庐阳区凤台路209号(凤台路与蒙城北路交叉口)", "蜀山区金寨路217号(近安医附院公交车站)", "蜀山区梅山路10号(近安徽饭店) ", "蜀山区 长丰南路159号铜锣湾广场312室", "合肥市寿春路93号钱柜星乐町KTV(逍遥津公园对面)", "庐阳区长江中路177号", "新站区胜利路89" ]; function bdGEO(){ var add = adds[index]; geocodeSearch(add); index++; } function geocodeSearch(add){ if(index < adds.length){ setTimeout(window.bdGEO,400); } myGeo.getPoint(add, function(point){ if (point) { document.getElementById("result").innerHTML += index + "、" + add + ":" + point.lng + "," + point.lat + "</br>"; var address = new BMap.Point(point.lng, point.lat); addMarker(address,new BMap.Label(index+":"+add,{offset:new BMap.Size(20,-10)})); } }, "合肥市"); } // 编写自定义函数,创建标注 function addMarker(point,label){ var marker = new BMap.Marker(point); map.addOverlay(marker); marker.setLabel(label); } </script>
这个Demo我试过了,虽然地址都可以解析成坐标,但是有时候会偏差比较严重(与百度地图拾取系统比较)
@banyan.rong: 坐标偏移 是需要自己用偏移工具纠偏的 不可能获得的就是准确的 这个的自己实现
@GisClub: 那有没有免费的偏移工具?
@banyan.rong: 我好久没有干这个 现在手里也没什么存货了,你上网上搜搜吧,我记得有人得出了百度偏移算法,你找找。
@GisClub: 好的,非常感谢
@GisClub,根据城市获取中心点,怎么弄的?根据官网的代码本机运行获取不到,多谢!
<script type="text/javascript">
// 百度地图API功能
var map = new BMap.Map("allmap");
var point = new BMap.Point(116.331398, 39.897445);
map.centerAndZoom(point, 11);
function myFun(result) {
var cityName = result.name;
map.setCenter(cityName);
alert("当前定位城市:" + cityName);
map.centerAndZoom('上海市', 11);
}
var myCity = new BMap.LocalCity();
myCity.get(myFun);
</script>