JQuery+HTML+JavaScript:实现地图位置选取和地址模糊查询
创始人
2024-12-18 19:36:19
0

本文详细讲解了如何使用 JQuery+HTML+JavaScript 实现移动端页面中的地图位置选取功能。本文逐步展示了如何构建基本的地图页面,如何通过点击地图获取经纬度和地理信息,以及如何实现模糊查询地址并在地图上标注。最后,提供了完整的代码示例,并总结了基于地图API进行地图位置选点的开发过程,帮助开发者快速上手并应用到实际项目中。


一、百度地图API介绍

百度地图API为开发者提供了强大的地理信息服务,可以轻松实现地图显示、位置选取、路线规划等功能。这里主要介绍2.0版本和3.0版本的功能示例,以及路书的介绍。

2.0 API

2.0版本的API功能相对较少,主要用于简单的地图展示和位置标注,以下是一个基本的示例:

var map = new BMap.Map("container"); var point = new BMap.Point(116.404, 39.915); map.centerAndZoom(point, 15); 

3.0 API

3.0版本增加了更多的功能和优化,提升了地图加载速度和交互体验,以下是一个展示地图和标注的示例:

var map = new BMap.Map("container"); var point = new BMap.Point(116.404, 39.915); map.centerAndZoom(point, 15); var marker = new BMap.Marker(point); map.addOverlay(marker); 

百度路书

路书是百度地图API提供的一种记录和展示路线的功能,可以用来展示旅游路线、出行规划等,以下是一个基本示例:

var driving = new BMap.DrivingRoute(map, {   renderOptions: { map: map, autoViewport: true } }); driving.search("起点", "终点"); 

本文将采用百度地图3.0 API来实现地图位置选点的功能,包括地图展示、点击地图选点、地理信息转经纬度、位置的模糊查询等。


二、初始化地图页面

首先,创建一个基本的HTML页面,并引入百度地图API:

     点击地图获取地址和经纬度              

实现效果:

在这里插入图片描述


三、增加地理信息模态框

在页面上方添加一个表单,用于显示和输入经纬度和地理信息:

将这段表单代码加入到 main-div 里。

同时,我们需要将地图向下移动240px,给模态框留出空间,字体修改为40px,适应手机端页面。

修改及新增的CSS如下(没有修改的样式继续保留):

   

实现效果如图:

在这里插入图片描述

目前我们的表单还只是一个静态的,下面我们来实现给表单的动态赋值。


四、实现地图点击事件

下面,我们为地图添加点击事件,获取点击位置的经纬度,并通过 Geocoder 获取地理信息,将获取的经纬度填充到上方表单。

JavaScript 里添加如下代码:

map.addEventListener("click", function(e) {   document.getElementById('lng').value = e.point.lng;   document.getElementById('lat').value = e.point.lat;   var geoc = new BMap.Geocoder();   geoc.getLocation(e.point, function(rs) {     var addComp = rs.addressComponents;     document.getElementById('address').value = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber;   }); }); 

实现效果如图:

在这里插入图片描述

点击地图上位置时,会触发点击事件,自动为上方表单动态赋值经纬度。

接着,我们优化代码,打开页面时自动定位到我们的位置,并实现点击事件时经纬度、地址的填充。

JavaScript 内容全部替换为:

  var map = new BMap.Map("allmap");   var geoc = new BMap.Geocoder();  //地址解析对象   var markersArray = [];   var geolocation = new BMap.Geolocation();   var point = new BMap.Point(116.331398, 39.897445);   map.centerAndZoom(point, 32); // 中心点      geolocation.getCurrentPosition(function (r) {     if (this.getStatus() == BMAP_STATUS_SUCCESS) {       var mk = new BMap.Marker(r.point);       map.addOverlay(mk);       map.panTo(r.point);       map.enableScrollWheelZoom(true);     }     else {       alert('failed' + this.getStatus());     }   }, { enableHighAccuracy: true })      map.addEventListener("click", showInfo);      //清除标识   function clearOverlays() {     if (markersArray) {       for (i in markersArray) {         map.removeOverlay(markersArray[i])       }     }   }      //地图上标注   function addMarker(point) {     var marker = new BMap.Marker(point);     markersArray.push(marker);     clearOverlays();     map.addOverlay(marker);   }      //点击地图事件处理   function showInfo(e) {     document.getElementById('lng').value = e.point.lng;     document.getElementById('lat').value = e.point.lat;     geoc.getLocation(e.point, function (rs) {       var addComp = rs.addressComponents;       var address = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber;       document.getElementById('sever_add').value = address;     });     map.clearOverlays();     addMarker(e.point);   } 

实现效果如下:

在这里插入图片描述

至此,地图选取位置获得经纬度和地址信息的功能已经完成。

下面,我们来实现输入模糊地址来反向定位地图中的坐标,并获得精确的位置经纬度。


五、输入模糊地址定位地图坐标

通过Autocomplete实现地址模糊查询,并在选定地址后在地图上标注位置。

首先,我们给地址输入框的输入进行校验,增加JavaScript代码:

function validate() {     var sever_add = document.getElementsByName('sever_add')[0].value;     if (isNull(sever_add)) {       alert('请选择地址');       return false;     }     return true;   }   //判断是否是空   function isNull(a) {     return (a == '' || typeof (a) == 'undefined' || a == null) ? true : false;   } } 

接着,增加输入后的下列框事件和下拉框点击事件:

   var ac = new BMap.Autocomplete(    //建立一个自动完成的对象     {       "input": "sever_add"       , "location": map     });    ac.addEventListener("onhighlight", function (e) {  //鼠标放在下拉列表上的事件     var str = "";     var _value = e.fromitem.value;     var value = "";     if (e.fromitem.index > -1) {       value = _value.province + _value.city + _value.district + _value.street + _value.business;     }     str = "FromItem
index = " + e.fromitem.index + "
value = " + value; value = ""; if (e.toitem.index > -1) { _value = e.toitem.value; value = _value.province + _value.city + _value.district + _value.street + _value.business; } str += "
ToItem
index = " + e.toitem.index + "
value = " + value; }); var myValue; ac.addEventListener("onconfirm", function (e) { //鼠标点击下拉列表后的事件 var _value = e.item.value; myValue = _value.province + _value.city + _value.district + _value.street + _value.business; setPlace(); }); function setPlace() { map.clearOverlays(); //清除地图上所有覆盖物 function myFun() { var pp = local.getResults().getPoi(0).point; //获取第一个智能搜索的结果 map.centerAndZoom(pp, 32); map.addOverlay(new BMap.Marker(pp)); //添加标注 document.getElementById('lng').value = pp.lng; document.getElementById('lat').value = pp.lat; } var local = new BMap.LocalSearch(map, { //智能搜索 onSearchComplete: myFun }); local.search(myValue); }

实现效果如下:

输入 “云龙湖”,会显示模糊查询到的地点。
在这里插入图片描述

选择地点,地图自动跳转到目标地点为中心的界面,显示目标点标注,并返回经纬度、详细地址给上方表单。

在这里插入图片描述

至此,输入模糊地址定位地图坐标的功能已经实现。


六、页面全部源码

下面是本文页面的全部代码,为了方便测试,已经把 JavaScriptCSSHtml 写在一个页面内。

完整的源码如下:

      点击地图获取地址和经纬度map,address,lng,lat                  

七、可视化地图上位置选取功能总结

通过百度地图API,我们可以方便地实现地图位置选点的功能,提升用户体验。在本文中,我们介绍了如何构建基本的地图页面,如何实现点击地图获取经纬度和地理信息,以及通过模糊查询来标注地图位置。希望这篇教程能够帮助你快速上手百度地图API,并应用到实际项目中。

当然,地图的API还有很多,下面整理了一份目前市面上常用地图API对比,希望对你有所帮助。

地图API提供商主要功能优点缺点
百度地图API百度地图展示、位置选取、路线规划、地理编码、逆地理编码、POI搜索覆盖中国范围广,中文支持好,提供详细的中国本地数据国际覆盖范围有限
谷歌地图APIGoogle地图展示、位置选取、路线规划、地理编码、逆地理编码、街景服务国际覆盖范围广,数据更新及时,街景服务优秀国内使用受限
高德地图API阿里巴巴地图展示、位置选取、路线规划、地理编码、逆地理编码、POI搜索中国本地数据详细,支持多种出行方式国际覆盖范围有限
腾讯地图API腾讯地图展示、位置选取、路线规划、地理编码、逆地理编码、POI搜索提供丰富的中国本地数据,接口简单易用国际覆盖范围有限
OpenStreetMap APIOpenStreetMap地图展示、位置选取、路线规划、地理编码、逆地理编码免费且开源,数据覆盖全球,社区支持强数据精度和更新频率可能不及商业地图API

这些API各有特点,开发者可以根据项目需求选择合适的地图API。百度地图、高德地图和腾讯地图在中国本地服务方面具有优势,而谷歌地图和OpenStreetMap在国际覆盖范围方面表现较好。

相关内容

热门资讯

实测交流!好友赣南斗牛外 挂(... 实测交流!好友赣南斗牛外 挂(辅助挂)外挂透明挂辅助app(2021已更新)(哔哩哔哩)1、好友赣南...
wepoke作弊器!nzt德州... wepoke作弊器!nzt德州果真真的有挂,微扑克ai辅助器苹果版规律1、进入到微扑克ai辅助器苹果...
玩家交流!中至都昌讨赏有挂吗(... 玩家交流!中至都昌讨赏有挂吗(辅助挂)竟然真的是有挂(2024已更新)(哔哩哔哩)1)中至都昌讨赏有...
二分钟介绍!天天斗地主修改器,... 二分钟介绍!天天斗地主修改器,星悦云南麻将有没有假(果然有挂);1、完成星悦云南麻将有没有假的残局,...
二分钟发现!多乐第三方辅助器,... 二分钟发现!多乐第三方辅助器,同城上饶棋牌确实有挂,存在挂教程(有挂机密);1、游戏颠覆性的策略玩法...
重大通报!宁波竞技馆有挂吗(透... 重大通报!宁波竞技馆有挂吗(透视辅助)外挂透视辅助app(2021已更新)(哔哩哔哩)1、打开软件启...
wepoke辅助技巧!poke... wepoke辅助技巧!pokenow其实是真的有挂,德州ai辅助神器黑科技1、超多福利:超高返利,海...
分享开挂内幕!天天开心王国十三... 分享开挂内幕!天天开心王国十三水有没有外 挂(辅助挂)一贯真的是有挂(2020已更新)(哔哩哔哩)1...
五分钟方法!全民牛牛怎么提升胜... 五分钟方法!全民牛牛怎么提升胜率,白金岛辅助工具(一直有挂)1、全民牛牛怎么提升胜率机器人多个强度级...
玩家必看教程!!钱塘十三水输赢... 玩家必看教程!!钱塘十三水输赢概率(透明挂)外挂透明挂辅助软件(2020已更新)(哔哩哔哩)钱塘十三...