Openlayer 面图层加载文字标注(踩坑)

** 最近使用openlayer添加网格,需要加载文字标注,在这里遇见一个问题:当你添加面坐标是字符串时,则文字标注加载不上去。**

图层样式:

 style: function (feat) {
                var style = new ol.style.Style({
                    fill: new ol.style.Fill({
                        color: 'rgba(255, 255, 255, 0.2)'
                    }),
                    stroke: new ol.style.Stroke({
                        color: '#ffcc33',
                        width: 2
                    }),
                    image: new ol.style.Circle({
                        radius: 7,
                        fill: new ol.style.Fill({
                            color: '#ffcc33'
                        })
                    }),
                    text: new ol.style.Text({
                        text: feat.get('info').SYSTEM_ID,
                        font: '10px sans-serif',
                        textAlign: "center",
                        textBaseline: "middle",
                        //font: 'verdana',
                        fill: new ol.style.Fill({
                          color: "#ff0000"
                        }),
                        backgroundFill: new ol.style.Fill({
                          color: "#ff0000"
                        }),
                        font: "10px sans-serif",
                        stroke: new ol.style.Stroke({
                          color: "#ffffff"
                          // width: 3
                        }),
                        offsetX: parseInt(0, 10),
                        offsetY: parseInt(0, 10),
                        placement: "point", //point 则自动计算面的中心k点然后标注  line 则根据面要素的边进行标注
                        overflow: false //超出面的部分不显示
                    })
                })
                feat.setStyle(style);
            },

添加面图层:

 function drawCameraGridToMap(cameraGridArr) {
        vector.getSource().clear();
        var pattern = /\d+.\d*/g;
        for (var i = 0; i < cameraGridArr.length; i++) {
            var oldCodernit = cameraGridArr[i].SHAPE.match(pattern);
            var newCoords = [];
            for (var j = 0; j < oldCodernit.length; j++) {
                if (j % 2 == 0) {
                    newCoords.push([oldCodernit[j] , oldCodernit[j + 1]]);
                }
            }
            var polygon = new ol.geom.Polygon([newCoords]);
            var feature = new ol.Feature({
                geometry: polygon
            });
            feature.setId(cameraGridArr[i].JL_ID);
            feature.set('info', cameraGridArr[i]);
            vector.getSource().addFeature(feature);
        }
    }

由正则表达式提取的坐标是字符串格式的,导致文字表添加不上(console.log(feat.getStyle().getText().getText())可以获取到text)。但是在这里又有一个问题,当添加的是点图层时,即使点坐标是字符串时也能够添加上标注,what!这时面图层加标注只需把坐标处理时加上parseFloat就欧克了,简直不要太简单!(newCoords.push([parseFloat(oldCodernit[j]) , parseFloat(oldCodernit[j + 1])]);)
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OpenLayers是一个用于在Web浏览器上实现地图和地理空间信息可视化的开源JavaScript库。当使用TileLayer加载图层时,卡顿可能是由于多种原因引起的。 首先,图层的卡顿可能是由于网络延迟或服务器响应时间过长所致。当加载大量瓦片图像时,需要从远程服务器下载并显示,网络延迟等因素会导致加载和显示的速度变慢。这种情况下,可以尝试优化网络连接或更换更快的服务器来改善加载速度。 其次,卡顿可能是由于大量图层数据或大型图像导致的性能问题。当加载图层数据较大或图像较大时,浏览器需要较长的时间来处理和渲染图层,从而导致卡顿。这种情况下,可以尝试优化图层数据或图像的大小,如压缩图像文件、剔除不必要的数据等。 另外,卡顿还可能是由于浏览器的硬件性能限制所致。如果设备的处理能力较低或内存不足,加载和显示大量图层可能会导致卡顿。在这种情况下,可以尝试使用更高配置的设备或减少图层的数量和复杂性来提高性能。 此外,OpenLayers本身的配置和使用方式也可能影响卡顿情况。确保正确配置和使用OpenLayers可以提高性能并减少卡顿。可以参考OpenLayers的官方文档和各种社区资源,了解最佳实践和性能优化的方法。 总之,解决OpenLayers使用TileLayer加载图层卡顿的问题需要综合考虑网络连接、服务器性能、图层数据大小、设备性能等多个方的因素,并进行相应的优化措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值