Giter Club home page Giter Club logo

bmapgllib's Introduction

BMapGLLib

本代码库是基于百度地图JSAPI GL版的JavaScript开源工具库,如果使用的是2D地图的话,参考旧的2D开源库

此外!!!对于JSAPI GL版本鼠标绘制能力,我们推出了一个更加方便易用的新库bmap-draw

如何使用

我们在将GL版的开源工具库放到了百度云的BOS存储上,根据github文件目录可以推理出BOS的路径,比如:

<link href="//mapopen.bj.bcebos.com/github/BMapGLLib/DrawingManager/src/DrawingManager.min.css" rel="stylesheet">

<script src="//mapopen.bj.bcebos.com/github/BMapGLLib/DrawingManager/src/DrawingManager.min.js"></script>

功能示例

鼠标绘制工具条库

提供鼠标绘制点、线、面、多边形(矩形、圆)的编辑工具条的开源代码库。且用户可使用JavaScript API对应覆盖物(点、线、面等)类接口对其进行属性(如颜色、线宽等)设置、编辑(如开启线顶点编辑等)等功能。

示例   源码   压缩源码

测距工具

百度地图的测距工具类,对外开放。 允许用户在地图上点击完成距离的测量。 使用者可以自定义测距线段的相关样式,例如线宽、颜色、测距结果所用的单位制等等。

示例   源码   压缩源码

几何运算

GeoUtils类提供若干几何算法,用来帮助用户判断点与矩形、 圆形、多边形线、多边形面的关系,并提供计算折线长度和多边形的面积的公式。

示例   源码   压缩源码

视角轨迹动画

TrackAnimation类提供视角轨迹动画展示效果。

示例   源码   压缩源码

区域限制

百度地图浏览区域限制类,对外开放。 允许开发者输入限定浏览的地图区域的Bounds值, 则地图浏览者只能在限定区域内浏览地图。

示例   源码   压缩源码

自定义信息窗口

百度地图的infoBox。类似于infoWindow,比infoWindow更有灵活性,比如可以定制border,关闭按钮样式等。

示例1(顶部展示)   示例2(底部展示)   源码   压缩源码

富标注

百度地图的富Marker类,对外开放。 允许用户在自定义丰富的Marker展现样式,并添加点击、双击、拖拽等事件。

示例1   示例2   源码   压缩源码

路书

百度地图路书类,实现Marker沿路线运动,对外开放。 用户可以在地图上自定义轨迹运动,支持暂停/停止功能,并可以自定义路过某个点的图片,文字介绍等。

示例   源码   压缩源码

时间轴

文档

如何开发贡献代码

  1. clone本代码库
  2. 修改src目录下源文件
  3. 压缩生成.min文件
  4. 上传代码,告知维护同学codereview

bmapgllib's People

Contributors

chenglu4343 avatar floracat526 avatar freeeeeedom avatar gilnatab avatar junior2ran avatar l-hikari avatar lanjiannull avatar mmjinglin163 avatar myjustify avatar santalzhou avatar zhouyashu279 avatar zjpzjp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bmapgllib's Issues

DrawingManager.js skipEditing参数不生效,在操作完绘画以后不触发overlaycomplete事件

  drawingManager = new (window as any).BMapGLLib.DrawingManager(mapInstance, {
    // isOpen: true,        // 是否开启绘制模式
    enableCalculate: false, // 绘制是否进行测距测面
    enableSorption: true,
    sorptiondistance: 20,
    circleOptions: notExistOverlayStyle, // 圆的样式
    polylineOptions: notExistOverlayStyle, // 线的样式
    polygonOptions: notExistOverlayStyle, // 多边形的样式
    rectangleOptions: notExistOverlayStyle, // 矩形的样式
    skipEditing: true,
  });
  // 操作完成事件
  drawingManager.addEventListener('overlaycomplete', function(e) {
      // 此处执行
  });

map.clearOverlays() 无法清理多个RichMarker

var map = new BMapGL.Map("container");
map.centerAndZoom(new BMapGL.Point(116.401952, 40.032704), 12);
map.enableScrollWheelZoom();

var htm1 =
    "<div id='overLay' style='width:93px;height:116px; background:url(//bj.bcebos.com/v1/mapopen/github/BMapGLLib/RichMarker/examples/images/back.png) left top no-repeat;position: absolute;'>" +
    "<img style='margin-left:9px;margin-top: 8px;' src='//bj.bcebos.com/v1/mapopen/github/BMapGLLib/RichMarker/examples/images/small.jpg' />" +
    "</div>",
    myRichMarker1 = new BMapGLLib.RichMarker(htm1, new BMapGL.Point(116.30816, 40.056863), {
        "anchor": new BMapGL.Size(-47, -116),
        "enableDragging": true
    });
map.addOverlay(myRichMarker1);


var html2 =
    '<div style="position: absolute; margin: 0pt; padding: 0pt; width: 80px; height: 26px; left: -10px; top: -35px; overflow: hidden;">' +
    '<img id="rm3_image" style="border:none;left:0px; top:0px; position:absolute;" src="http://bj.bcebos.com/v1/mapopen/github/BMapGLLib/RichMarker/examples/images/back1.png">' +
    '</div>' +
    '<label class=" BMapLabel" unselectable="on" style="position: absolute; -moz-user-select: none; display: inline; cursor: inherit; border: 0px none; padding: 2px 1px 1px; white-space: nowrap; font: 12px arial,simsun; z-index: 80; color: rgb(255, 102, 0); left: 15px; top: -35px;">$ 20 B</label>',
    myRichMarker2 = new BMapGLLib.RichMarker(html2, new BMapGL.Point(116.402922, 39.99908), {
        "anchor": new BMapGL.Size(-18, -27),
        "enableDragging": true 
    });
map.addOverlay(myRichMarker2);

myRichMarker2.addEventListener("onmouseover", function (e) {
    document.getElementById("rm3_image").src = "//bj.bcebos.com/v1/mapopen/github/BMapGLLib/RichMarker/examples/images/back2.png";
});
myRichMarker2.addEventListener("onmouseout", function (e) {
    document.getElementById("rm3_image").src = "//bj.bcebos.com/v1/mapopen/github/BMapGLLib/RichMarker/examples/images/back1.png";
});

// 测试代码
map.addEventListener('click',(e)=>{
// map.clearOverlays() 该清理方法只能清理一个marker ,原因不明

// 清除多个只能手动一个一个清理
const overlays=map.getOverlays()
console.log(overlays)
overlays.forEach(overlay=>{
map.removeOverlay(overlay)
})

})

infobox.min.js使用报错

我引入了infobox.min.js,但是还是报bmaplib.infoboxis not defined
地图使用的版本:webgl1.0

鼠标绘制的编辑模式

使用·鼠标绘制·模块时,如果在绘制完成确认后,如何进编辑模式呢?

当前可以在绘制完成的事件中获取绘制图形,然后调 overlayenableEditing() 方法实现功能,但是如果想使用 DrawingManager 的编辑状态(在绘制过程中,确认完成之前的状态),如何实现?

DistanceTool问题

在地球模式下,测距之后不能通过点击关闭按钮关闭

BMapGLLib.TrackAnimation 绘制地图轨迹的时候,如果有靠近的点和比较远的点,靠近的点的线会偏移到海外去

问题

BMapGLLib.TrackAnimation 绘制地图轨迹的时候,如果有靠近的点和比较远的点,靠近的点的线会偏移到海外去

直接上demo代码(接入api的链接需要自行加入key)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!--  下面link需要加上自己的key  -->
    <script type="text/javascript" src="https://api.map.baidu.com/api?type=webgl&v=1.0"></script>
    <script type="text/javascript" src="https://api.map.baidu.com/library/TrackAnimation/src/TrackAnimation_min.js"></script>
</head>

<body>
    <div style="width: 800px; height: 800px;" id="container"></div>

    <script>
        var map = new BMapGL.Map("container");
        // 创建地图实例 

       // 第二个和第三个点很接近
        const p = [{
            lat: 40.87629,
            lng: 116.43897
        }, {
            lat: 39.87621,
            lng: 116.43887
        }, {
            lat: 39.87619,
            lng: 116.43913
        }]

        var point = new BMapGL.Point(116.404, 39.915);
        // 创建点坐标 
        map.centerAndZoom(point, 15);

        const listP = []

        p.forEach((item) => {
            listP.push(new BMapGL.Point(item.lng, item.lat))
        })

        const pl = new BMapGL.Polyline(listP, {
            strokeColor: '#1890ff',
            enableClicking: true,
        })
        const trackAni = new BMapGLLib.TrackAnimation(map, pl, {
            overallView: true, // 动画完成后自动调整视野到总览
            tilt: 30, // 轨迹播放的角度,默认为55
            duration: 400, // 动画持续时长,默认为10000,单位ms
            delay: 300, // 动画开始的延迟,默认0,单位ms
        })
        setTimeout(() => {
            trackAni.start()
        }, 3000)
    </script>
</body>

</html>

DistanceTool 接口文档不全

DistanceTool 接口文档不全, 通过挖源代码,发现还有secIcon, closeIcon 这两个接口,分别代表测距中节点的图标以及测距完成后删除测距线条的图标

绘制多条可编辑折线,出现多个确认关闭,只有第一个起作用。

  1. 点击绘制可编辑的折线
  2. 绘制折线,双击完成绘制,出现√号和×号,都不点击
  3. 再点击绘制可编辑折线按钮,绘制折线
  4. 双击,第二条折线绘制完成,又出现√号和×号,点击第二条的√号和×号,没有反应
  5. 点击第一条折线的√号和×号,两条折线可编辑状态都关闭。

建议:参考高德和leaflet地图

路书在速度很快的时候会出现动画走不到终点的问题。

测试点位如下:
new BMapGL.Point(130.458099, 33.971874),
new BMapGL.Point(130.54406, 33.993706),
new BMapGL.Point(130.546106, 33.993706),
new BMapGL.Point(130.545106, 33.993706),
new BMapGL.Point(130.553106, 33.993706),
new BMapGL.Point(130.719402, 34.124882),
new BMapGL.Point(130.712402, 34.124882),
new BMapGL.Point(130.758286, 33.94067),
new BMapGL.Point(130.766510, 33.933945),
new BMapGL.Point(130.764435, 33.938244),
new BMapGL.Point(130.762680, 33.93261)

速度为1000000
在示例中心测试的时候就无法走到终点http://lbsyun.baidu.com/jsdemo.htm#webgl1_7

对其他点位大部分情况也会走不到终点。不知道为什么?

使用GeoUtils.getPolygonArea方法计算面积时会报错

问题描述:

使用DrawingManager画多边形的时候,如果一直在一个地方点击鼠标,最后得到覆盖物的坐标数组会有很多个连续相同的坐标。然后使用GeoUtils.getPolygonArea方法计算面积得到的结果是NaN

坐标示例:

[{"lng":116.05931967048495,"lat":39.94503428079636}, {"lng":116.10761257470138,"lat":39.94149394355425}, {"lng":116.10761257470138,"lat":39.94149394355425}, {"lng":116.1064627436486,"lat":39.92688810062903}, {"lng":116.08749053127787,"lat":39.91050811648429}, {"lng":116.08749053127787,"lat":39.91050811648429}, {"lng":116.06851831890714,"lat":39.9144928004373}, {"lng":116.06851831890714,"lat":39.9144928004373}, {"lng":116.05931967048495,"lat":39.94503428079636}]

使用的js

//mapopen.cdn.bcebos.com/github/BMapGLLib/GeoUtils/src/GeoUtils.min.js

BMapGL 的 JSAPI 中包含的 HTMLElement#contains 方法实现方式有误

抱歉,这个问题本来应该报告给百度地图,但是我怀疑百度的工单客服可能是个机器人,不得已发到了这里,希望可以帮忙反馈一下

描述

由于百度地图 JSAPI 中错误的实现并覆盖了原生浏览器的 HTMLElement#contains 方法,导致其他库中使用该方法并传入值为null 的参数时报错

4286ad952650d3bf5b5f9abc1264768d5ff81646967297

复现步骤

  1. 使用 「Chrome」 打开百度地图 https://map.baidu.com/
  2. 按(F12)打开「开发者工具」
  3. 选择「开发者工具」中的 「Console」(控制台)页签
  4. 在控制台中输入 document.querySelector('div').contains(null); 并执行

期望的结果

控制台中应返回结果 false

这是在百度搜索中调用的结果(没有引入百度地图JSAPI)
image

实际结果

控制台出现错误信息 Uncaught TypeError: Cannot read properties of null (reading 'parentNode')

这是在百度地图中调用的结果(引入了百度地图JSAPI)
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.