百度地图在web中的使用(js)

背景:在公司做一个地理位置的自定义字段,需要用到地图来获取经纬度和地址,在这选择了百度地图

准备工作

使用过程

  1. 引入js文件
<script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=生成的key"></script>
  1. 创建一个div容器用来显示地图:
<div id="map"></div>
  1. 实例化地图:
//百度地图API功能
var map = new BMap.Map("map"); //创建Map实例
  1. 使用百度地图:
map.centerAndZoom(new BMap.Point(116.403963, 39.915119), 12);  // 初始化地图,设置中心点坐标和地图级别,北京-天安门
//添加地图类型控件
map.addControl(new BMap.MapTypeControl({
mapTypes:[
BMAP_NORMAL_MAP,
BMAP_HYBRID_MAP
]}));
map.setCurrentCity("北京"); // 设置地图显示的城市 此项是必须设置的
map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
  1. 百度地图获取当前位置:(基于浏览器获取)
	var geolocation = new BMap.Geolocation();          //实例化
geolocation.getCurrentPosition(function(r){ //获取当前位置方法
if(this.getStatus() == BMAP_STATUS_SUCCESS){
var mk = new BMap.Marker(r.point); //r就是获取到的信息
map.addOverlay(mk); //创建标注
map.panTo(r.point); //标注移到这个地点
alert('您的位置:'+r.point.lng+','+r.point.lat);
}
else {
alert('failed'+this.getStatus());
}
},{enableHighAccuracy: true})
  1. 百度地图里的智能搜索:
    //内部自定义函数,根据ID获取对象
function G(id) {
return document.getElementById(id);
}
/*----------begin------*/
var ac = new BMap.Autocomplete( //建立一个自动完成的对象
{"input" : "suggestId"
,"location" : map
}
);
var myValue; //搜索内容
//鼠标点击下拉列表后的事件
ac.addEventListener("onconfirm", function(e) { //确定事件,得到搜索的地址信息
var _value = e.item.value;
myValue = _value.province + _value.city + _value.district + _value.street + _value.business;
G("searchResultPanel").innerHTML ="onconfirm<br />index = " + e.item.index + "<br />myValue = " + myValue;
setPlace();
});
//搜索地址
function setPlace(){
//搜索后点击时先清空原搜搜记录
$('#searchAddress').empty(); //之前的搜索结果清空
var local = new BMap.LocalSearch(map, { //智能搜索
onSearchComplete: myFun
});
local.search(myValue);
function myFun(){
var sp = local.getResults().getPoi(0); //获取第一个智能搜索的结果
if(sp){
var pp = sp.point;
lastSearch.lng = pp.lng;
lastSearch.lat = pp.lat; //得到搜索位置的经纬度
//搜索显示结果列表
showSearchPlace(lastSearch.lng,lastSearch.lat,local.getResults().keyword);
}else{
showSearchPlace(0, 0, '该地址百度地图解析失败')
}
}
}
  1. 百度地图根据经纬度获取当前地址:
    /**
* 根据经纬度获取地址
* @param lng
* @param lat
*/
function getAddressBylnglat(lng, lat){
point = new BMap.Point(lng, lat); //实例化
var marker = new BMap.Marker(point);// 创建标注
map.clearOverlays(); //添加新的标注前先清除其他的标注
map.addOverlay(marker); // 将标注添加到地图中
var getData = new BMap.Geocoder(); //根据经纬度获取地址
getData.getLocation(point, function(rs){
var pointAddress = rs.addressComponents;
var address = pointAddress.province+pointAddress.city+pointAddress.district+pointAddress.street+pointAddress.streetNumber;
addTextToPoint(marker, address);//增加文字信息
marker.enableDragging(); //标注可拖拽
// 开启事件监听
marker.addEventListener("dragend", function (e) {
var x = e.point.lng; //经度
var y = e.point.lat; //纬度
//根据经纬度获取地址信息
getAddressBylnglat(x, y);
});;
//修改地图底部的地址信息
//$('#suggestId').val('');
clearAddress(); //自定义方法,清除掉之前的记录
showSearchPlace(lng, lat, address) //自定义方法,把查询到的地址和经纬度显示在页面上
});
}
  1. 百度地图根据经纬度和地址信息在地图中创建标注同时文字信息:
    /**
* 在地图上根据查询的地址创建标注
* @param
*/
function makePoint(lng, lat, address){
var point = new BMap.Point(lng, lat);
map.centerAndZoom(point, 15); //地址显示级别
var marker = new BMap.Marker(point);// 创建标注
map.clearOverlays(); //添加新的标注前先清除其他的标注
map.addOverlay(marker); // 将标注添加到地图中
addTextToPoint(marker, address); //增加文字信息
marker.enableDragging(); //标注可拖拽
// 开启事件监听
marker.addEventListener("dragend", function (e) {
var x = e.point.lng; //经度
var y = e.point.lat; //纬度
//根据经纬度获取地址信息
getAddressBylnglat(x, y);
});
}
//标注上增加文字信息
function addTextToPoint(marker, address){
var label = new BMap.Label(address,{offset:new BMap.Size(20,-10)});
marker.setLabel(label);
}

百度地图在web中的使用(一)的更多相关文章

  1. 【详细教程】论android studio中如何申请百度地图新版Key中SHA1值

    一.写在前面 现在越来越多的API接口要求都要求提供我们的项目SHA1值,开发版目前还要求不高,但是发布版是必定要求的.而目前定位在各大APP中也较为常见,当下主流的百度地图和高德地图都在申请的时候会 ...

  2. 百度地图和高德地图结合在web中的使用(二)

    百度地图在web中的使用(二) 背景:在做一个关于地理位置字段时,初始位置使用百度地图获取时失败,获取的位置信息不准确,奈何产品说友商好使的啊,F12看后是采用的高德,所以在这采用高德地图获取初始位置 ...

  3. 在Fragment中实现百度地图,定位到当前位置(基于SDKv2.1.0)

    使用最新版本的百度地图需要注意的几个地方: 1.libs文件夹下要有android-support-v4.jar.baidumapapi_v2_1_0.jar.locSDK_3.1.jar三个jar包 ...

  4. 【重点突破】—— 百度地图在React单页面应用中的使用

    前言:百度地图是网页中使用地图的常用第三方工具,这里结合React项目中学到的应用场景总结一些使用要点. 一.在网页中嵌入百度地图 搜百度地图开放平台,注册百度开发者账号 控制台:查看应用.创建应用( ...

  5. JavaScript调用百度地图

    在网站开发过程中,经常会调用到地图,百度地图提供Web开发.Android开发.iOS开发API及SDK,百度地图JavaScript API可帮助您在网站中构建功能丰富.交互性强的地图应用,本篇博客 ...

  6. 基于 Golang 完整获取百度地图POI数据的方案

    百度地图为web开发者提供了基于HTTP/HTTPS协议的丰富接口,其中包括地点检索服务,web开发者通过此接口可以检索区域内的POI数据.百度地图处于数据保护对接口做了限制,每次访问服务,最多只能检 ...

  7. 实现百度地图导航Demo的语音播报功能

    上文中实现了在本地导入百度地图导航Demo,那么在此基础上如何实现导航的语音播报呢? 一.为该应用申请语音播报(也叫注册) http://developer.baidu.com/map/index.p ...

  8. Android之旅十八 百度地图环境搭建

    在android中使用百度地图,我们能够先看看百度地图对应的SDK信息:http://developer.baidu.com/map/index.php? title=androidsdk,它里面基本 ...

  9. 【百度地图API1.1】修改文本标注的样式

    原文:[百度地图API1.1]修改文本标注的样式 百度地图API1.0中文本标注的样式写法为: label.getDom().style.borderColor = "#808080&quo ...

随机推荐

  1. JS判断滚动条到底部,页面是否有滚动条

    要判断页面滚动条是否到底,需要了解三个属性: scrollHeight:获取元素内容高度的度量,包括由于溢出导致的视图中不可见内容,说直白点,算上了滚动条不可见的那部分高度. clientHeight ...

  2. 【转载】 Sqlserver查看数据库死锁的SQL语句

    在Sqlsever数据库中,有时候操作数据库过程中会进行锁表操作,在锁表操作的过程中,有时候会出现死锁的情况出现,这时候可以使用SQL语句来查询数据库死锁情况,主要通过系统数据库Master数据库来查 ...

  3. 在Azure虚拟机上部署FileZilla FTP服务器

    1.开始之前准备的软件 ①一台Azure虚拟机 ②FileZilla服务端安装包 我这边是windows的所以 给个链接 https://filezilla-project.org/download. ...

  4. @Html.Partial 和 @Html.RenderPartial 异同

    相同点:这两个的性质都是一样, 作用都是将View给镶入进来 不同点: Partial 回传的一个Object (MvcHtmlString), 回传一个String 把一堆Html给回传出来, 然后 ...

  5. [Linux] Nginx响应压缩gzip

    压缩和解压缩 .本节介绍如何配置响应的压缩或解压缩以及发送压缩文件. gzip on; .NGINX仅使用MIME类型text / html压缩响应 gzip_types text/plain app ...

  6. $_POST和$GLOBALS['HTTP_RAW_POST_DATA'] 的区别

    HTTP 协议是建立在 TCP/IP 协议之上的应用层规范,它把 HTTP 请求分为三个部分:请求行.请求头.消息主体.协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协 ...

  7. 12. ReadWriteLock 读写锁

    package com.gf.demo11; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent. ...

  8. Hibernate入门(八)级联保存或更新(含问题在末尾,求大佬指点..)

    级联保存或更新CASCADE 级联保存或更新: 作用就是:保存一方的数据的时候,会把关联的对象也同时保存. 级联保存或更新的配置: 属性名:cascade 属性值: 1.none:所有情况下均不进行关 ...

  9. Android Studio 学习(三) 广播

    动态注册监听网络变化 创建intentFilter 并addAction 代表了监听哪个广播 然后使用registerReceiver()方法 将intentFilter 与 自己创建的监听器 传进去 ...

  10. BZOJ3687: 简单题(dp+bitset)

    Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1138  Solved: 556[Submit][Status][Discuss] Descripti ...