js百度地图的运用(地址(逆)解析)
需求:输入(搜索框)地址在地图上找到对应的(地图)地址,点击(地图)地址显示对应(搜索框)地址,在(地图)地址范围100米内覆盖一个圆,在该圆内点击,(搜索框)地址不变,GPS变,在该圆外点击,则(搜索框)地址变,GPS变。
解决方案:百度地图开放平台
代码:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
body, html{width: 100%;height: 100%;margin:0;font-family:"微软雅黑";font-size:14px;}
#allmap{width:100%;height:500px;}.BMap_cpyCtrl.BMap_noprint.anchorBL{display: none;}.anchorBL{display: none;}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的ak"></script>
<script type="text/javascript" src="http://api.map.baidu.com/library/GeoUtils/1.2/src/GeoUtils_min.js"></script>
<title>逆地址解析</title>
</head>
<body>
<div id="allmap"></div>
<h5>点击地图展示详细地址</h5>
<p id="address">详细地址</p>
<p id="ip">ip地址</p>
<p id="result">区域范围</p>
<input type="text" id="input">
<button id="button">查询地址</button>
</body>
</html>
<script type="text/javascript">
// 百度地图API功能
var map = new BMap.Map("allmap");
var point = new BMap.Point(116.331398,39.897445);
map.centerAndZoom(point,12);
var geoc = new BMap.Geocoder();
var tempCircle;
// ip自动定位当前城市
function myFun(result){
var cityName = result.name;
map.setCenter(cityName);
}
var myCity = new BMap.LocalCity();
myCity.get(myFun);
// 监听点击地图获取地址信息
map.addEventListener("click", function(e){
var pt = e.point;
geoc.getLocation(pt, function(rs){
var addComp = rs.addressComponents;
var point = rs.point;
map.clearOverlays();
map.addOverlay(new BMap.Marker(point));
var circle = new BMap.Circle(point,100,{strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});
map.addOverlay(circle); //创建圆
document.getElementById("ip").innerHTML=JSON.stringify(rs.point)
if(InOrOutPolygon(point,tempCircle)){
document.getElementById("input").value = rs.address
document.getElementById("address").innerHTML=rs.address
}
tempCircle=circle;
});
});
// 搜索按钮
document.getElementById("button").onclick=function(){
search()
}
// 监听搜索框回车事件
document.getElementById("input").onkeydown=function(event) {
if (event.keyCode == "13") {
//回车执行查询
search()
}
}
// 地址查询
function search(){
var address=document.getElementById("input").value
var myGeo = new BMap.Geocoder();
// 将地址解析结果显示在地图上,并调整地图视野
myGeo.getPoint(address, function(point){
if (point) {
map.clearOverlays();
map.centerAndZoom(point, 12);
map.addOverlay(new BMap.Marker(point));
var _this=new BMap.Circle(point,100,{strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});
map.addOverlay(_this); //创建圆
}else{
alert("您选择地址没有解析到结果!");
}
}, "杭州市");
}
// 允许地址放大缩小
map.enableScrollWheelZoom(true);
// 判断是否在圆形内
function InOrOutPolygon(pt, circle){
console.log(pt)
console.log(circle)
// var pt = new BMap.Point(lng, lat);
var result = BMapLib.GeoUtils.isPointInCircle(pt, circle);
tempCircle=circle;
console.log(result)
if (result == true) {
document.getElementById("result").innerHTML = "在区域范围内";
return false;
} else {
document.getElementById("result").innerHTML = "在区域范围外";
return true;
}
}
</script>