• 百度地图3D棱柱鼠标事件


    百度地图2D API  JavaScript API | 百度地图API SDK

    百度地图3D API  jspopularGL | 百度地图API SDK

    3D棱柱效果如下

    一. 渲染地图

    1. var map = new BMapGL.Map('container', {
    2. style: {
    3. styleJson: styleJson2
    4. }
    5. })
    6. map.centerAndZoom(new BMapGL.Point(116.404, 39.925), 9);
    7. map.enableScrollWheelZoom(true);
    8. map.setTilt(50);

    这块加了一个地图样式  是从百度地图 API 上扣的

    <script src="http://bj.bcebos.com/v1/mapopen/api-demos/js/mapStyle.js">script>

    二. 获取行政边界点位  并添加鼠标点击事件

    1. var bd1 = new BMapGL.Boundary();
    2. bd1.get('北京市', function (rs) {
    3. let count = rs.boundaries.length;
    4. for (let i = 0; i < count; i++) {
    5. let path = [];
    6. let str = rs.boundaries[i].replace(' ', '');
    7. let points = str.split(';');
    8. for (let j = 0; j < points.length; j++) {
    9. let lng = points[j].split(',')[0];
    10. let lat = points[j].split(',')[1];
    11. path.push(new BMapGL.Point(lng, lat));
    12. }
    13. // 将所有点位坐标添加到一个数组里面 然后下方代码 将棱柱渲染出来
    14. let prism = new BMapGL.Prism(path, 5000, {
    15. topFillColor: '#5679ea',
    16. topFillOpacity: 0.6,
    17. sideFillColor: '#5679ea',
    18. sideFillOpacity: 0.9
    19. });
    20. map.addOverlay(prism);
    21. // 绑定鼠标事件
    22. var events = ['click', 'mouseover', 'mouseout'];
    23. for (let i = 0; i < events.length; i++) {
    24. prism.addEventListener(events[i], e => {
    25. switch (events[i]) {
    26. case 'click':
    27. alert('北京市');
    28. break;
    29. case 'mouseover':
    30. e.target.setTopFillColor('#475fab');
    31. e.target.setTopFillOpacity(1);
    32. break;
    33. case 'mouseout':
    34. e.target.setTopFillColor('#5679ea');
    35. e.target.setTopFillOpacity(0.5);
    36. break;
    37. }
    38. });
    39. }
    40. }
    41. });

    首先 调用了百度地图获取市级行政边界的方法 Boundary() 去获取了北京市的行政边界

    获取到是这个样子的 

    所以要处理一下 spilt(";") 通过分号处理成另外一个数组

     

    长这个样子 

    我们平常通过后端获取到的点位格式大概是 [{lat:114, lng: 30}, {lat:114, lng: 30}] 这样的,我们将其循环 new BMapGL.Point(lng, lat) 添加到地图点位当中 然后 push 到一个数组里 储存起来

    例如  path.push(new BMapGL.Point(lng, lat));

    打印一下 path

    下方就可以直接把这个 path 里的点位渲染成3D棱柱图了

    1. let prism = new BMapGL.Prism(path, 5000, {
    2. topFillColor: '#5679ea',
    3. topFillOpacity: 0.6,
    4. sideFillColor: '#5679ea',
    5. sideFillOpacity: 0.9
    6. });
    7. map.addOverlay(prism);

    鼠标事件 

    1. // 绑定鼠标事件
    2. var events = ['click', 'mouseover', 'mouseout'];
    3. for (let i = 0; i < events.length; i++) {
    4. prism.addEventListener(events[i], e => {
    5. switch (events[i]) {
    6. case 'click':
    7. alert('北京市');
    8. break;
    9. case 'mouseover':
    10. e.target.setTopFillColor('#475fab');
    11. e.target.setTopFillOpacity(1);
    12. break;
    13. case 'mouseout':
    14. e.target.setTopFillColor('#5679ea');
    15. e.target.setTopFillOpacity(0.5);
    16. break;
    17. }
    18. });
    19. }

    如果只需要点击事件

    1. prism.addEventListener('click', e => {
    2. alert('北京市');
    3. });

  • 相关阅读:
    现在产品经理已经开始泛滥了吗?
    北理工嵩天Python语言程序设计笔记(9 程序设计方法学)
    c++ 程序中使用命令行
    优先队列题目:拼车
    ATF源码篇(九):docs文件夹-Components组件(8)固件升级
    JAVA:实现Damm达姆算法(附完整源码)
    Torch基础(二)
    (附源码)ssm网上零食销售系统 毕业设计 180826
    【SSM框架】测试 修改.删除.查询功能
    「MySQL高级篇」MySQL存储引擎
  • 原文地址:https://blog.csdn.net/notagoodwriter/article/details/132759863