我们经常会需要在页面中引用地图,以直观地标识某个位置的所在地。我们当然也可以用一张地图的截图,但引用地图则可让用户不必离开页面,就能详细地查看更多地图信息。
对比了 Google 地图、百度地图、高德地图、腾讯地图,发觉腾讯地图最精准,但引用百度地图则较方便,所以我以在页面中插入百度地图为例进行测试。
1、注册百度帐号,登录百度地图开放平台:http://lbsyun.baidu.com/,拉到页面底部,点击“申请密钥”按钮;
2、创建应用:应用名称随便填,自己搞得清楚就行,应用类型选择“浏览器端”,应用服务默认全选,Referer白名单按格式填写你的网站域名,完成后“提交”;
3、获得访问应用(AK),返回应用列表,可看到刚才创建的应用,已经分配了一个 API Key ,记下他,后面要用到。
1、打开百度地图生成器:http://api.map.baidu.com/lbsapi/createmap/,按步骤创建地图;
1)定位中心点,即我们要定位的位置,比如说我们“红菲舞蹈”舞馆的地址,已有标识的当然最好,没有标识的,选一个最接近的地址。地图级别可填写数字,最高19级,也可通过地图上的 +、- 号来调整。
2)设置地图,可以按照自己的喜好修改地图的外观,地图的宽和高、地图上显示的按钮(缩放、缩略图、比例尺)、鼠标和键盘对地图的操作等,一般默认即可。
3)添加标注,可以添加自己想要标注的位置和信息。
第一个是点标记,用于标记我们相对更准确的位置,可以加入名称和备注,用于展示个性化信息。第二个是线标记,可用于标记行走路线的指引。第三个是文字标记,可用于在地图标记说明性文字。
2、点击黄色的“获取代码”按钮,生成百度地图引用代码,内容如下:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="keywords" content="百度地图,百度地图API,百度地图自定义工具,百度地图所见即所得工具" /> <meta name="description" content="百度地图API自定义地图,帮助用户在可视化操作下生成百度地图" /> <title>百度地图API自定义地图</title> <!--引用百度地图API--> <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密匙"></script> </head> <body> <!--百度地图容器--> <div style="width:700px;height:550px;border:#ccc solid 1px;font-size:12px" id="map"></div> <p style="color:red;font-weight:600">地图生成工具基于百度地图JS api v2.0版本开发,使用请申请密匙。 <a href="http://developer.baidu.com/map/index.php?title=jspopular/guide/introduction" style="color:#2f83c7" target="_blank">了解如何申请密匙</a> <a href="http://lbsyun.baidu.com/apiconsole/key?application=key" style="color:#2f83c7" target="_blank">申请密匙</a> </p> </body> <script type="text/javascript"> //创建和初始化地图函数: function initMap(){ createMap();//创建地图 setMapEvent();//设置地图事件 addMapControl();//向地图添加控件 addMapOverlay();//向地图添加覆盖物 } function createMap(){ map = new BMap.Map("map"); map.centerAndZoom(new BMap.Point(119.180372,29.035123),19); } function setMapEvent(){ map.enableScrollWheelZoom(); map.enableKeyboard(); map.enableDragging(); map.enableDoubleClickZoom() } function addClickHandler(target,window){ target.addEventListener("click",function(){ target.openInfoWindow(window); }); } function addMapOverlay(){ var markers = [ {content:"联系电话:13587031535",title:"红菲舞蹈",imageOffset: {width:0,height:3},position:{lat:29.035111,lng:119.180273}} ]; for(var index = 0; index < markers.length; index++ ){ var point = new BMap.Point(markers[index].position.lng,markers[index].position.lat); var marker = new BMap.Marker(point,{icon:new BMap.Icon("http://api.map.baidu.com/lbsapi/createmap/images/icon.png",new BMap.Size(20,25),{ imageOffset: new BMap.Size(markers[index].imageOffset.width,markers[index].imageOffset.height) })}); var label = new BMap.Label(markers[index].title,{offset: new BMap.Size(25,5)}); var opts = { width: 200, title: markers[index].title, enableMessage: false }; var infoWindow = new BMap.InfoWindow(markers[index].content,opts); marker.setLabel(label); addClickHandler(marker,infoWindow); map.addOverlay(marker); }; var plOpts = [ ]; var plPath = [ ]; for(var index = 0; index < plOpts.length; index++){ var polyline = new BMap.Polyline(plPath[index],plOpts[index]); map.addOverlay(polyline); } } //向地图添加控件 function addMapControl(){ var scaleControl = new BMap.ScaleControl({anchor:BMAP_ANCHOR_BOTTOM_LEFT}); scaleControl.setUnit(BMAP_UNIT_IMPERIAL); map.addControl(scaleControl); var navControl = new BMap.NavigationControl({anchor:BMAP_ANCHOR_TOP_LEFT,type:BMAP_NAVIGATION_CONTROL_LARGE}); map.addControl(navControl); var overviewControl = new BMap.OverviewMapControl({anchor:BMAP_ANCHOR_BOTTOM_RIGHT,isOpen:true}); map.addControl(overviewControl); } var map; initMap(); </script> </html>
百度地图生成工具基于百度地图 Javascript API v2.0版本开发,为了正常使用百度地图API服务,代码中需要加入你的密匙,即前面申请的 API Key ,修改处:
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密匙"></script>
把上一步生成的代码保存为一个 HTML 文件,如 baidumap.html,我们把它上传到网站的根目录下,在浏览器中打开,就可以看到自己定义的百度地图了。
打开你想要插入百度地图的页面,更改区块格式为“自定义HTML”,输入以下代码:
<iframe src="baidumap.html" width="700px" height="550px" frameborder="0" scrolling="no"></iframe>
这样我们就轻松地用一个 iframe 标签将百度地图嵌入到网页中了,当然地图的宽高、在网页中显示的位置可自己写CSS调整,也可简单地像我只调整宽和高。
在 baidumap.html 文件中将 width:700px 修改为 width:100%,如下:
<!--百度地图容器--> <div style="width:100%;height:500px;border:#ccc solid 1px;font-size:12px" id="map"></div>
在页面的引用中,也作相应调整,我加大了 height 的值,使其上下有些间距,如下:
<iframe src="baidumap.html" width="100%" height="520" frameborder="0" scrolling="no"></iframe>
这里的高度不需要加px,这样的方式不管任何 WordPress 版本都可以放入,也不会因为升级而产生不可用的情况。效果可见我的范例:https://ladingwu.xin/aboutus
经过上面的改造后,在 Google Chrome 中浏览时,却提示“加载不安全脚本”,不能显示地图上的控件,网站的小绿锁标识也不显示。这是由于 JavaScript API 没有启用 https 服务,其实我们只需将 api 的网址 http 改为 https,再加一个特殊字段 (s=1)即可,即修改为如下:
<!--引用百度地图API--> <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=您的密匙&s=1"></script>
另外要注意一点的是,网上许多教程都是通过百度地图API站点:http://api.map.baidu.com/lbsapi/creatmap/,进行创建地图,这已经过时了,它的 Javascript API 版本是 v1.1,且多有错误,请大家一定要用百度地图生成器:http://api.map.baidu.com/lbsapi/createmap/ 。
之前网站改了HTTPS之后就发现网站上的百度地图不支持https,于是就直接弄好定位之后截图,在网站上放一张图凑合用了 😥 。今天看了你的文章才发现百度地图原来支持HTTPS的,不行我得改成代码形式的了,感谢分享~
遇到问题,解决它!这才符合我们“生命不止、折腾不息”的精神嘛,哈哈。
不错,不过这个是不是太麻烦了点,我记得直接有个百度地图的插件,然后只需要填写响应的坐标值就可以了,具体忘记了。
是有点麻烦,折腾了一个下午。关键是要注册百度帐号,申请密钥,让有些人望而却步。
注册百度账号是必须的,那个插件也是需要注册百度账号。所以还是很不错的,这个教程,很详细。