common 能够快速构建地图, common 提供了一个 initMap 方法和个性化地图php
<script src="https://mapv.baidu.com/gl/examples/static/common.js"></script>
initMap 提供一个参数 (options)npm
function initMap(options) { options = Object.assign({ tilt: 60, // 默认地图倾斜角为60 heading: 0 // 默认地图旋转角度0 }, options); } 经过 Object.assign() 方法对参数进行合并
建立实例 map 实例dom
var map = new BMapGL.Map('map_container', { restrictCenter: false, style: {styleJson: options.style || darkStyle } });
common 提供了 snowStyle, darkStyle, purpleStyle, whiteStyle 4种 jsp
function initMap(options) { options = Object.assign({ tilt: 60, heading: 0 }, options); var map = new BMapGL.Map('map_container', { restrictCenter: false, style: {styleJson: options.style || darkStyle } }); map.enableKeyboard(); // 启用键盘操做,默认禁用。键盘的上、下、左、右键可连续移动地图。同时按下其中两个键可以使地图进行对角移动。PgUp、PgDn、Home和End键会使地图平移其1/2的大小。+、-键会使地图放大或缩小一级 map.enableScrollWheelZoom(); // 容许地图可被鼠标滚轮缩放,默认禁用 map.enableInertialDragging(); // 启用地图惯性拖拽,默认禁用 map.enableContinuousZoom(); // 开启双击平滑缩放效果 map.setDisplayOptions(options.displayOptions || { indoor: false, poi: true, skyColors: options.skyColors || [ 'rgba(5, 5, 30, 0.01)', 'rgba(5, 5, 30, 1.0)' ] }); if (options.center && options.zoom) { map.centerAndZoom(new BMapGL.Point(options.center[0], options.center[1]), options.zoom); } map.setTilt(options.tilt); // 设置地图倾斜角 map.setHeading(options.heading); // 设置地图旋转角度 return map; }
var map = initMap({ tilt: 0, center: [121.477091, 31.223825], // 坐标中心点 zoom: 10, // 地图缩放级别 style: snowStyle // styleJson样式 })
也能够本身建立map (不引入common.js)ide
var cityCenter = mapv.utilCityCenter.getCenterByCityName('南京') var map = new BMapGL.Map("map_container", { mapType: BMAP_NORMAL_MAP }); // 建立Map实例 map.setMapStyleV2({ // styleId: '', // 提供一个 styleId styleJson: snowStyle // snowstyle 是 common 中的 styleJson }); var point = new BMapGL.Point(cityCenter.lng,cityCenter.lat); map.centerAndZoom(point, 12); // 初始化地图,设置中心点坐标和地图级别 map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放 map.setHeading(0); // 设置地图旋转角度 map.setTilt(0); // 设置地图的倾斜角度
地图能正确加载后ui
<script src="https://mapv.baidu.com/build/mapv.js"></script>
<script src="https://code.bdstatic.com/npm/mapvgl@1.0.0-beta.54/dist/mapvgl.min.js"></script>
根据城市名找到对应坐标url
var cities = ['上海'] // mapv.utilCityCenter.getCenterByCityName 能够根据城市名找到对应坐标 var cityCenter = mapv.utilCityCenter.getCenterByCityName(cities[0]) console.log(cityCenter) // {lng: 121.487899, lat: 31.249162}
加入到数据源种spa
点数据规范 rest
var data = [] data.push({ geometry: { type: 'Point', coordinates: [cityCenter.lng, cityCenter.lat] }, properties: { sales: Math.random() * 100 } })
1.生成 mapvgl 视图 View (至关与在地图上添加蒙层进行绘制)code
var view = new mapvgl.View({map})
2. 初始化 Intensity 对象 (控制点的半径大小或颜色)
var intensity = new mapvgl.Intensity({ min: 0, // 最小值 max: 100, // 最大值 minSize: 5, // 生成最小半径 maxSize: 30, // 生成最大半径 gradient: { 0: 'rgba(25,66,102,0.8)', 0.3: 'rgba(145,102,129,0.8)', 0.7: 'rgba(210,131,137,0.8)', 1: 'rgba(248,177,149,0.8)' } // 渐变色设置 })
3. 初始化 mapvgl 的 point 对象
var pointLayer = new mapvgl.PointLayer({ size: function (data) { return intensity.getSize(data.properties.sales) }, color: function (data) { return intensity.getColor(data.properties.sales) } })
4. 将 pointLayer 对象加入 View 种
view.addLayer(pointLayer)
5. 将 data 数据与 point 对象绑定
pointLayer.setData(data)
完整代码
var map = initBMap() var data = initData() setData(map, data) // 初始化百度地图 function initBMap () { var cityCenter = mapv.utilCityCenter.getCenterByCityName('南京') return initMap({ tilt: 0, center: [cityCenter.lng, cityCenter.lat], zoom: 10, style: snowStyle }) } // 准备数据源 function initData () { var data = [] var random = 700 var cities = [ '北京', '天津', '上海', '重庆', '石家庄', '太原', '呼和浩特', '哈尔滨', '长春', '沈阳', '济南', '南京', '合肥', '杭州', '南昌', '福州', '郑州', '武汉', '长沙', '广州', '南宁', '西安', '银川', '兰州', '西宁', '乌鲁木齐', '成都', '贵阳', '昆明', '拉萨', '海口' ] while (random--) { // 随机获取城市中心点 var city = cities[parseInt(Math.random() * cities.length)] var cityCenter = mapv.utilCityCenter.getCenterByCityName(city) // 随机对城市中心点进行偏移 cityCenter.lng = cityCenter.lng - 2 + Math.random() * 4 cityCenter.lat = cityCenter.lat - 2 + Math.random() * 4 data.push({ geometry: { type: 'Point', coordinates: [cityCenter.lng, cityCenter.lat] }, properties: { sales: Math.random() * 100 } }) } data = data.filter(_ => _.properties.sales > 50) return data } // 绘制数据源 function setData (map, data) { // 1. 生成 mapvgl 视图 View var view = new mapvgl.View({map}) // 2. 初始化 Intensity 对象 var intensity = new mapvgl.Intensity({ min: 0, max: 100, minSize: 5, maxSize: 30, gradient: { 0: 'rgba(25,66,102,0.8)', 0.3: 'rgba(145,102,129,0.8)', 0.7: 'rgba(210,131,137,0.8)', 1: 'rgba(248,177,149,0.8)' } }) // 3. 初始化 mapvgl 的 point 对象 var pointLayer = new mapvgl.PointLayer({ size: function (data) { return intensity.getSize(data.properties.sales) }, color: function (data) { return intensity.getColor(data.properties.sales) } }) // 4. 将 pointLayer 对象加入 View 种 view.addLayer(pointLayer) // 5. 将 data 数据与 point 对象绑定 pointLayer.setData(data) }
最终效果