美文网首页
图片连接成线

图片连接成线

作者: 宿州刘德华 | 来源:发表于2020-05-12 15:47 被阅读0次

需要rbush依赖

styleFunction(afeature, res) {

                let rgba =this.getRGB(afeature.get('rgba'));
                let properties = afeature.getProperties();
                let imageName = properties.gldm.toString().split("_")[0];

                let ImageSrc = "http://10.10.10.181:8888/lineType/"+imageName+"L.png";
                //轨迹线图形
                var trackLine = afeature.getGeometry();
                var styles = [];
                //对segments建立btree索引
                let tree = new rbush();//路段数
                trackLine.forEachSegment(function (start, end) {
                    var dx = end[0] - start[0];
                    var dy = end[1] - start[1];
                    //计算每个segment的方向,即箭头旋转方向
                    let rotation = Math.atan2(dy, dx);
                    let geom = new ol.geom.LineString([start, end]);
                    let extent = geom.getExtent();
                    var item = {
                        minX: extent[0], minY: extent[1], maxX: extent[2],
                        maxY: extent[3], geom: geom, rotation: rotation
                    };
                    tree.insert(item);
                });
                //轨迹地理长度
                let length = trackLine.getLength();
                //像素间隔步长
                let stpes = 47.5;//像素步长间隔
                //将像素  步长转实际地理距离步长
                let geo_steps = stpes * res;
                //箭头总数
                let arrowsNum = parseInt(length / geo_steps);
                arrowsNum += 1;
                for (let i = 0.5; i < arrowsNum; i+=1) {
                    let arraw_coor = trackLine.getCoordinateAt(i * 1.0 / arrowsNum);
                    let tol = 20;//10;//查询设置的点的容差,测试地图单位是米。如果是4326坐标系单位为度的话,改成0.0001.
                    let arraw_coor_buffer = [arraw_coor[0] - tol, arraw_coor[1] - tol, arraw_coor[0] + tol, arraw_coor[1] + tol];
                    //进行btree查询
                    var treeSearch = tree.search({
                        minX: arraw_coor_buffer[0],
                        minY: arraw_coor_buffer[1],
                        maxX: arraw_coor_buffer[2],
                        maxY: arraw_coor_buffer[3]
                    });
                    let arrow_rotation;
                    //只查询一个,那么肯定是它了,直接返回
                    if (treeSearch.length == 1) {
                        arrow_rotation = treeSearch[0].rotation;
                    } else if (treeSearch.length > 1) {
                        let results = treeSearch.filter(function (item) {
                            //箭头点与segment相交,返回结果。该方法实测不是很准,可能是计算中间结果
                            //保存到小数精度导致查询有点问题
                            // if(item.geom.intersectsCoordinate(arraw_coor))
                            //   return true;
                            //换一种方案,设置一个稍小的容差,消除精度问题
                            let _tol = 20;//消除精度误差的容差
                            if (item.geom.intersectsExtent([arraw_coor[0] - _tol, arraw_coor[1] - _tol, arraw_coor[0] + _tol, arraw_coor[1] + _tol])) {
                                return true;
                            }
                        })
                        if (results.length > 0) {
                            arrow_rotation = results[0].rotation;
                        }
                    }
                    styles.push(new ol.style.Style({
                        geometry: new ol.geom.Point(arraw_coor),
                        image: new ol.style.Icon({
                            color: 'rgb('+rgba.r+','+rgba.g+','+rgba.b+')',
                            crossOrigin: 'anonymous',
                            src: ImageSrc,
                            anchor: [0.5, 0.5],
                            rotateWithView: true,
                            rotation: -arrow_rotation
                        }),
                    }));
                }
                return styles;
            },

相关文章

  • 图片连接成线

    需要rbush依赖

  • 云聪金融交易学习记录三

    第十六节:什么是通道线和拐点?(理论部分) (1),将上升趋势的底点连接成趋势线,(2),把趋势线平行移动,按照第...

  • 点点链接师

    两点决定一线,两线连接成一面,由点及线,由线及面,这是我们在以前的数学教学中最基本的知识。 可...

  • 求“艺”之路——回归初心

    回顾过往,觉知生活是由无数个点组成,然后连接成一条线,从线的那头一步一步走向线的尽头…… 网上...

  • 埋在手心 颤抖 仰头微笑 一滴 一滴 泪 连接成线 哒 哒 磕碰到心上

  • 点.线.面

    文/无量水2017.6.9 无数的点连接成了线 多条线组合成了面 出生是起点 死亡是终点 人从呱呱落地开始 便在人...

  • 整体自然疗法学习一

    身体是由细胞构成的,细胞彼此连接成组织,组织彼此连接成器官,器官彼此连接成系统,系统彼此连接成人体。 ...

  • 真巧,我的城市也在下雨

    真巧,我的城市也在下雨, 仿佛世界变得只有我们一般, 雨滴连接成线,而线连接着我和你。 真巧,你的城市也在下雨, ...

  • 2019-12-12

    移动平均线是用统计处理的方式,将若干天的股票价格加以平均,然后连接成一条线,用以观察股价趋势。移动平均线的理论基础...

  • adb connect wifi 连接手机安装调试

    ①使用数据线连接上手机,可adb调试,②adb devices 确认手机连接成功③在 tcpip 模式下重启adb...

网友评论

      本文标题:图片连接成线

      本文链接:https://www.haomeiwen.com/subject/rwwbnhtx.html