当前位置:网站首页>百度地图数据可视化
百度地图数据可视化
2022-07-23 18:37:00 【大杯美式不加糖】
如何使用百度地图
前往官方文档进行一系列注册,主要是为了获取服务密钥:

新建HTML文件,进行示例代码编写:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style> html {
height: 100%; } body {
height: 100%; margin: 0px; padding: 0px; } #container {
width: 400px; height: 400px; } .anchorBL, .BMap_cpyCtrl {
display: none; /*隐藏百度地图的官网水印*/ } </style>
</head>
<body>
<!--创建地图容器元素-->
<div id="container"></div>
</body>
<!--引用百度地图API文件-->
<script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=xnPUlI2jyZC0Rx61fa9OP9qzCTY3WTpH"></script>
<script> // 创建地图实例 var map = new BMapGL.Map("container"); // 设置中心点坐标 var point = new BMapGL.Point(116.404, 39.915); // 地图初始化,同时设置地图展示级别 map.centerAndZoom(point, 15); </script>
</html>
如图,就快速创建了一张以天安门为中心的地图:

异步加载
使用 window.onload 以及百度地图的callback参数来实现,以减少首屏加载时间:
<body>
<div id="container"></div>
</body>
<!-- <script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=xnPUlI2jyZC0Rx61fa9OP9qzCTY3WTpH"></script> -->
<script> function init() {
var map = new BMapGL.Map("container"); var point = new BMapGL.Point(116.404, 39.915); map.centerAndZoom(point, 15); } window.onload = function() {
var script = document.createElement('script'); // src 最后加一个callback参数,指定为init方法 script.src = 'https://api.map.baidu.com/api?v=1.0&type=webgl&ak=xnPUlI2jyZC0Rx61fa9OP9qzCTY3WTpH&callback=init'; document.body.appendChild(script); } </script>
</html>
3D地图
可以使用 heading 和 tilt 属性控制地图的旋转角度和俯角
<script> function init() {
var map = new BMapGL.Map("container"); var point = new BMapGL.Point(116.404, 39.915); map.centerAndZoom(point, 15); map.setHeading(30); map.setTilt(75); } window.onload = function() {
var script = document.createElement('script'); script.src = 'https://api.map.baidu.com/api?v=1.0&type=webgl&ak=xnPUlI2jyZC0Rx61fa9OP9qzCTY3WTpH&callback=init' document.body.appendChild(script) } </script>

3D地球
通过setMapType(BMAP_EARTH_MAP)来开启地球视图:
<script> function init() {
var map = new BMapGL.Map("container"); var point = new BMapGL.Point(116.404, 39.915); map.centerAndZoom(point, 15); map.setHeading(0); map.setTilt(0); map.setMapType(BMAP_EARTH_MAP); } window.onload = function() {
var script = document.createElement('script'); script.src = 'https://api.map.baidu.com/api?v=1.0&type=webgl&ak=xnPUlI2jyZC0Rx61fa9OP9qzCTY3WTpH&callback=init' document.body.appendChild(script) } </script>
这个setMapType方法中的常量有两个,一个是 BMAP_NORMAL_MAP ,即普通街道视图。一个就是 BMAP_EARTH_MAP,即地球卫星视图。

百度地图控件
放大缩小控件
通过以下代码来引入:
<script> function init() {
var map = new BMapGL.Map("container"); var point = new BMapGL.Point(116.404, 39.915); map.centerAndZoom(point, 15); map.setMapType(BMAP_NORMAL_MAP); let zoomCtrl = new BMapGL.ZoomControl(); map.addControl(zoomCtrl); } window.onload = function() {
var script = document.createElement('script'); script.src = 'https://api.map.baidu.com/api?v=1.0&type=webgl&ak=xnPUlI2jyZC0Rx61fa9OP9qzCTY3WTpH&callback=init' document.body.appendChild(script) } </script>

调整放大缩小组件的位置
通过往 ZoomControl 中传入 offset 参数来实现:
let zoomCtrl = new BMapGL.ZoomControl({
anchor: BMAP_ANCHOR_BOTTOM_LEFT, // 表示控件定位于地图的左下角
offset: new BMapGL.Size(0, 0) // 控件位置偏移
});

调整最大与最小缩放比例
const map = new BMapGL.Map('container');
map.setMinZoom(8); // 3.0版本不可用
map.setMaxZoom(12); // 3.0版本不可用
// or
const map = new BMapGL.Map('container', {
minZoom: 8,
maxZoom: 12,
mapType: BMAP_NORMAL_MAP
});
比例尺控件
var scaleCtrl = new BMapGL.ScaleControl({
anchor: BMAP_ANCHOR_TOP_LEFT // 不加这个默认参数的话比例尺会显示不出来
});
map.addControl(scaleCtrl);

自定义样式
可以到百度地图 个性化地图 去配置自己想要的颜色样式:

可以使用模板,也可以自己进行自定义,然后点击发布样式:

点击发布后会获得一个样式ID,将其复制下来:

接下来就可以在JavaScript API中应用地图样式了(注意:发布的styleID需要与ak为同一个用户):
map.setMapStyleV2({
styleId: 'XXXXXXXXXXXXXXXXXXX'
});
还有一种是通过编写样式 JSON 文件的方式,由于数据量比较大且不直观,推荐还是使用样式ID的方式:

百度地图绘图
绘制图标
Marker是一个用来往地图上添加点标记的类。使用它将任何你希望用户看到的兴趣点标注在地图上。
API提供了默认图标样式,您也可以通过Icon类来指定自定义图标。Marker的构造函数的参数为Point和MarkerOptions(可选)。
注意:当您使用自定义图标时,标注的地理坐标点将位于标注所用图标的中心位置,您可通过Icon的offset属性修改标定位置。
定义标注图标 通过Icon类可实现自定义标注的图标,下面示例通过参数MarkerOptions的icon属性进行设置:
<script>
var map = new BMapGL.Map("container");
var point = new BMapGL.Point(116.404, 39.915);
var myIcon = new BMapGL.Icon('./images/location.png', new BMapGL.Size(60, 60), {
});
// 创建标注对象并添加到地图
var marker = new BMapGL.Marker(point, {
icon: myIcon});
map.addOverlay(marker);
</script>

绘制线段
折线覆盖物可以分别设置描边粗细、颜色、填充颜色等属性:
var polyline = new BMapGL.Polyline([
new BMapGL.Point(116.399, 39.910),
new BMapGL.Point(116.405, 39.920),
new BMapGL.Point(116.425, 39.900)
]);
map.addOverlay(polyline);

像前面的图标绘制也是有很多属性可以配置的,详情的可以查看官方API文档
绘制多边形
var polygon = new BMapGL.Polygon([
new BMapGL.Point(116.387112, 39.920977),
new BMapGL.Point(116.385243, 39.913063),
new BMapGL.Point(116.394226, 39.917988)
], {
strokeColor: "blue",
strokeWeight: 2,
strokeOpacity: 0.5,
fillColor: 'pink'
});
map.addOverlay(polygon);

文本标注
API提供了默认的标注样式,也可以通过setStyle来指定自定义样式:
var content = "这是一段文本标注";
var label = new BMapGL.Label(content, {
// 创建文本标注
position: point, // 设置标注的地理位置
offset: new BMapGL.Size(10, 20) // 设置标注的偏移量
});
map.addOverlay(label); // 将标注添加到地图中
label.setStyle({
// 设置label的样式
color: '#000',
fontSize: '30px',
border: '2px solid #1E90FF'
});

信息窗口
信息窗口也是一种特殊的覆盖物,它可以展示更为丰富的文字和多媒体信息。注意:同一时刻只能有一个信息窗口在地图上打开
var opts = {
width: 250, // 信息窗口宽度
height: 100, // 信息窗口高度
title: "Hello" // 信息窗口标题
}
var infoWindow = new BMapGL.InfoWindow("World", opts); // 创建信息窗口对象
map.openInfoWindow(infoWindow, map.getCenter()); // 打开信息窗口

常用的是配合marker进行点击展开窗口的功能:
// 创建标注对象并添加到地图
var marker = new BMapGL.Marker(point, {
icon: myIcon});
map.addOverlay(marker);
var opts = {
width: 250, // 信息窗口宽度
height: 100, // 信息窗口高度
title: "Hello" // 信息窗口标题
}
var infoWindow = new BMapGL.InfoWindow("World", opts); // 创建信息窗口对象
marker.addEventListener('click', function() {
map.openInfoWindow(infoWindow, map.getCenter()); // 打开信息窗口
});

其中InfoWindow的第一个参数可以以字符串的形式直接传入HTML:
var opts = {
width: 250, // 信息窗口宽度
height: 100, // 信息窗口高度
title: "Hello" // 信息窗口标题
}
var content = '<div style="color:pink;">World</div>'; // 传入HTML
var infoWindow = new BMapGL.InfoWindow(content, opts);
marker.addEventListener('click', function() {
map.openInfoWindow(infoWindow, map.getCenter());
});

百度地图 viewAnimation 动画
通过 new BMapGL.ViewAnimation(keyFrames, opts) 去定义一个动画,其中 keyFrames 是一个数组,定义了关键帧,关键帧以一个对象数组的形式定义,每一个关键帧作为该数组的一个对象成员,以对象字面量的形式传入。
而 opts 设置了动画属性,动画属性以一个对象的形式定义,每一种属性对应该对象的一个属性。
然后通过 startViewAnimation 方法去开始动画。
可以参照官方文档中动画的示例,这里就不放代码了,总之动画效果还是挺不错的,比用定时来完成动画的效果很好很多。
百度地图 TrackAnimation 动画
不同于前面的 viewAnimation 动画,TrackAnimation 动画是轨迹动画,而前面的动画是一个类似 CSS 的 keyFrames 动画。
同样的参照官方文档中 TrackAnimation 动画的示例就可以了
需要注意的是官方文档中v1.0的 API 并没有 TrackAnimation 相关的,使用该动画需要额外引入开源库BMapGLLib.TrackAnimation,这点文档示例中也有提到。
百度地图可视化(散点图、飞线图等等)
这里使用的是 MapVGL,MapVGL 是一款基于 WebGL 的地理信息可视化库,可以用来展示大量基于3D的地理信息点线面数据。设计初衷主要是为了解决大数据量的三维地理数据展示问题及一些炫酷的三维效果。
更多效果可以参见官方文档
边栏推荐
- Socat uses "suggestions collection"
- Cannot read properties of null (reading ‘pickAlgorithm‘)
- idea 选中代码生成方法
- Mysql主从复制
- Educational codeforces round 132 (rated for Div. 2) [competition record]
- PostgreSQL sequence cache 参数导致的数值序列不连续 有间隔 gap
- Search 2D matrix
- According to the e-commerce written on the resume, how does redis realize inventory deduction and prevent oversold?
- BoundsChecker用法「建议收藏」
- 四旋翼飞行器1——结构和控制原理
猜你喜欢

Redux summation case explanation version tutorial

【面试:并发篇22多线程:ReentrantLock】

基于自学习的机器人决策系统(达闼科技赵开勇)

Principe de l'énergie et méthode variationnelle note 19: principe de l'énergie résiduelle minimale + principe du travail possible

Leetcode 219. 存在重复元素 II(可以,已解决)

Powercli add esxi host to vCenter

Type-C Bluetooth speaker single C-Port rechargeable OTG solution

为啥一问 JVM 就 懵B ?

3D point cloud course (VII) -- feature point description

梅科尔工作室-华为14天鸿蒙设备开发实战笔记四
随机推荐
Energy principle and variational method note 17: generalized variational principle (identification factor method)
安全停止nodeos
web安全入门-ssh测试与防御
How should testing cope with the new development mode?
Cannot read properties of null (reading ‘pickAlgorithm‘)
Leetcode 151. 颠倒字符串中的单词
Brief analysis of compiling principle of.Net CLR R2R
R language uses dwilcox function to generate Wilcoxon rank sum statistical distribution density function data, and uses plot function to visualize Wilcoxon rank sum statistical distribution density fu
2、 MFC windows and messages
What is weak network testing? Why should weak network test be carried out? How to conduct weak network test? "Suggested collection"
能量原理與變分法筆記19:最小餘能原理+可能功原理
USB3.0: layout guide for vl817q7-c0
什么是弱网测试?为什么要进行弱网测试?怎么进行弱网测试?「建议收藏」
华为云HCS解决方案笔记HUAWEI CLOUD Stack【面试篇】
Atcoder regular contest 144 [VP record]
Latex(katex)csdn 希腊字母表示,数学符号,集合符号,特殊标记
Ggarrange function of R language ggpubr package combines and annotates multiple images_ Figure add annotation, annotation, annotation information to the combined image, and add annotation information
【Unity项目实践】关卡解锁
Principe de l'énergie et méthode variationnelle note 19: principe de l'énergie résiduelle minimale + principe du travail possible
Idea select code generation method