本文详解如何在网页中通过JavaScript调用百度地图API,展示地图初始化与标记添加方法。重点介绍利用BMap.LocalSearch实现本地搜索功能,并结合Knockout.js的textInput绑定与subscribe属性,构建输入框内容变化时实时查询地址并更新结果的交互逻辑。
百度地图JavaScript集成基础
在Web开发中,通过JavaScript调用百度地图是常见需求,旨在将地理位置服务嵌入前端页面。
具体的实现代码结构如下所示,包含HTML基础框架及地图容器定义。
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Hello, World</title>
<style type="text/css">
html
{
height: 100%;
}
body
{
height: 50%;
margin: 0px;
padding: 0px;
}
#container
{
width:600px;
height: 500px;
}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.3"></script>
</head>
<body onload="loand()">
<div id="container">
</div>
<input id="lng" type="hidden" runat="server" />
<input id="lat" type="hidden" runat="server" />
<input id="Button1" type="button" value="标记图标" runat="server" onclick="getbiaoji()" />
<script type="text/javascript">
function getbiaoji() {
var lng = document.getElementByIdx_x("lng").value;
var lat = document.getElementByIdx_x("lat").value;
var map = new BMap.Map("container");
var point = new BMap.Point(lng, lat);
var marker = new BMap.Marker(point);
var opts = {
width: 250, // 信息窗口宽度
height: 100, // 信息窗口高度
title: "经销商地址" // 信息窗口标题
}
var infoWindow = new BMap.InfoWindow("移动拖拽 标记经销商地址:" + lng + lat, opts); // 创建信息窗口对象
marker.enableDragging(); //启用拖拽
map.addControl(new BMap.NavigationControl()); //左上角控件
map.enableScrollWheelZoom(); //滚动放大
map.enableKeyboard(); //键盘放大
map.centerAndZoom(point, 13); //绘制地图
map.addOverlay(marker); //标记地图
map.openInfoWindow(infoWindow, map.getCenter());
}
function loand() {
var map = new BMap.Map("container");
var point = new BMap.Point(104.083, 30.686); //默认中心点
var marker = new BMap.Marker(point);
var opts = {
width: 250, // 信息窗口宽度
height: 100, // 信息窗口高度
title: "经销商地址" // 信息窗口标题
}
var infoWindow = new BMap.InfoWindow("移动拖拽 标记经销商地址", opts); // 创建信息窗口对象
marker.enableDragging(); //启用拖拽
marker.addEventListener("dragend", function (e) {
point = new BMap.Point(e.point.lng, e.point.lat); //标记坐标(拖拽以后的坐标)
marker = new BMap.Marker(point);
document.getElementByIdx_x("lng").value = e.point.lng;
document.getElementByIdx_x("lat").value = e.point.lat;
infoWindow = new BMap.InfoWindow("当前位置<br />经度:" + e.point.lng + "<br />纬度:" + e.point.lat, opts);
map.openInfoWindow(infoWindow, point);
})
map.addControl(new BMap.NavigationControl()); //左上角控件
map.enableScrollWheelZoom(); //滚动放大
map.enableKeyboard(); //键盘放大
map.centerAndZoom(point, 13); //绘制地图
map.addOverlay(marker); //标记地图
map.openInfoWindow(infoWindow, map.getCenter()); // 打开信息窗口
}
</script>
</body>
</html>
百度地图搜索功能实现
接下来,我们将探讨如何在已加载的地图基础上,进一步调用百度地图的搜索服务接口。
首先需要在页面中引入百度地图JavaScript API脚本,确保指定正确的版本号及密钥(AK)。
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=xxxxxxxxxxxx"></script>
地址解析器配置
为了执行地理搜索,必须实例化一个地址解析器对象,并配置相关的查询参数与回调函数。
var localSearch = null;
//查询参数
var options = {
//智能搜索
onSearchComplete: function (results) {
//查询结果状态码
if (localSearch.getStatus() == BMAP_STATUS_SUCCESS) {
var s = convertMapSearch(results); //对结果进行处理
model.locationAddress(s); //将结果数据赋予knockout对象数组(可用其他数组对象代替)
}
}
};
localSearch = new BMap.LocalSearch("城市", options);
Knockout.js实时交互实现
利用Knockout.js框架的textInput数据绑定特性以及对象的subscribe订阅机制,可以实现当用户输入内容发生变化时,自动触发地址查询逻辑,从而达成实时搜索的效果。
//绑定
<input id="txtAddress" type="text" placeholder="请输入用餐地址" data-bind="textInput: addressInput" />
//subscribe属性 在输入变化的时候执行地址查询
sf.addressInput.subscribe(function (val) {
var addr = $.trim(val);
if (addr == "") {
return;
}
localSearch.search(addr);
});
以上即为利用JavaScript调用百度地图及其搜索功能的完整流程与核心代码示例。如需了解更多关于百度地图的高级应用,建议持续关注本站后续更新的技术文章。