openlayers 中LineString显示填充色效果

openlayer中加载LineString 显示天填充色,但是Style.Fill 对LineString 没有效果,所以想达到自己的目标需要另外想办法

1、通过设置Stroke 来实现

通过设置多个Stroke样式设置,设置Stroke线条宽度,第一个粗,最后的细,达到有填充色的效果。


 styles.push(new Style({
            stroke: new Stroke({
                color: 'red',
                width: 12,
                lineCap: 'square',
            }),
        }));
        styles.push(new Style({
            stroke: new Stroke({
                color: 'green',
                width: 4,

            }),
        }))return styles;

在这里插入图片描述
缺陷:如果中心有需要有透明度渐变色这些问题,就无法实现,因为透明度透必定是上一个样式的颜色

2、通过改变图形,将图形变为Polygon来实现

1. 利用turf 中的buffer方法获取Polygon,通过设置Fill,从而达到需要的效果

var line = turf.LineString([[-90.548630, 14.616599],[-90.748630, 14.816599]]);
var buffered = turf.buffer(point, 500, {units: 'meters'});

注意:units参数值,meters:米,kilometers:千米,miles:英里
缺点:缓存出来的面两端都是圆角,无法设置成为平角,如果你需要平角的线段那么这个方法将不是你的选择

  1. 根据geoserver wps 获取缓存面,通过设置Fill,从而达到需要的效果
 function getbufferbyline(linef, buffersize, round) {
            if (linef == undefined || linef == null) return;
            var linewkt = new ol.format.WKT().writeFeature(linef);
            if (buffersize == undefined || buffersize == null) buffersize = 10;
            if (round == undefined || round == null) round = 10;
            var bufferxml = getbuffxml(new ol.format.WKT().writeFeature(linef), buffersize, round);
            $.ajax({
                type: "POST",
                url: geoserver + "geoserver/orchard/ows",
                contentType: "application/xml",
                data: bufferxml,
                async: true,
                success: function (o) {
                    if (o.coordinates != null) {
                        coordians = o.coordinates[0];
                    }
                },
                error: function (s) {
                }
            });
        };
        function getbuffxml(wkt, buffersize, round) {
            var bufferxml = '<?xml version="1.0" encoding="UTF-8"?><wps:Execute version="1.0.0" service="WPS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wps/1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wcs="http://www.opengis.net/wcs/1.1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">';
            bufferxml += ' <ows:Identifier>geo:buffer</ows:Identifier>';
            bufferxml += '<wps:DataInputs>';
            bufferxml += '<wps:Input>';
            bufferxml += '<ows:Identifier>geom</ows:Identifier>';
            bufferxml += '<wps:Data><wps:ComplexData mimeType="text/xml; subtype=gml/3.1.1"><![CDATA[' + wkt + ']]></wps:ComplexData></wps:Data>';
            bufferxml += '</wps:Input>';
            bufferxml += '<wps:Input>';
            bufferxml += '<ows:Identifier>distance</ows:Identifier>';
            bufferxml += '<wps:Data><wps:LiteralData>' + buffersize + '</wps:LiteralData></wps:Data>';
            bufferxml += '</wps:Input>';
            bufferxml += '<wps:Input>';
            bufferxml += '<ows:Identifier>capStyle</ows:Identifier>';
            bufferxml += '<wps:Data><wps:LiteralData>Flat</wps:LiteralData></wps:Data>';
            bufferxml += ' </wps:Input>';
            bufferxml += '</wps:DataInputs>';
            bufferxml += '<wps:ResponseForm>';
            bufferxml += '<wps:RawDataOutput mimeType="application/json"><ows:Identifier>result</ows:Identifier></wps:RawDataOutput>';
            bufferxml += '</wps:ResponseForm>';
            bufferxml += '</wps:Execute>';
            return bufferxml;
        }

缺点:geoserver 必须要添加WPS 插件,如果没有就无法实现,所以如果你无法决定你的geoserver里面添加插件,你也没有办法使用

  1. 根据postgis st_buffer 获取缓存面,通过设置Fill,从而达到需要的效果
    函数说明
SELECT ST_Buffer(
 ST_GeomFromText(
  'LINESTRING(50 50,150 150,150 50)'
 ), 10, 'endcap=square join=round');

缺点:这需要后台配合

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Openlayers地图的全屏显示,可以使用浏览器提供的Fullscreen API来实现。具体步骤如下: 1. 创建一个按钮或者一个链接,用于触发全屏显示。 2. 绑定该按钮或链接的点击事件,在事件处理函数调用地图对象的requestFullscreen()方法,请求浏览器进入全屏模式。 3. 监听Fullscreen API的fullscreenchange事件。当该事件被触发时,检查当前是否处于全屏模式。如果是,则设置地图的尺寸为浏览器窗口的尺寸。 下面是一个实现Openlayers地图全屏显示的示例代码: ``` // 创建地图对象 var map = new ol.Map({ target: 'map', layers: [ // 添加地图图层 new ol.layer.Tile({ source: new ol.source.OSM() }) ], view: new ol.View({ // 设置地图心点和缩放级别 center: ol.proj.fromLonLat([120, 30]), zoom: 10 }) }); // 创建全屏按钮 var fullscreenBtn = document.createElement('button'); fullscreenBtn.innerText = '全屏'; // 点击按钮进入全屏模式 fullscreenBtn.addEventListener('click', function() { if (document.fullscreenElement) { document.exitFullscreen(); } else { map.getTargetElement().requestFullscreen(); } }); // 监听Fullscreen API的fullscreenchange事件 document.addEventListener('fullscreenchange', function() { if (document.fullscreenElement) { // 进入全屏模式时设置地图大小为浏览器窗口大小 map.setSize([window.innerWidth, window.innerHeight]); } else { // 退出全屏模式时恢复地图原来的大小 map.setSize([500, 500]); } }); // 将按钮添加到页面 document.body.appendChild(fullscreenBtn); ``` 该示例代码创建了一个地图对象,并添加了一个OpenStreetMap图层。然后创建了一个全屏按钮,点击该按钮可以进入或退出全屏模式。最后监听了Fullscreen API的fullscreenchange事件,在事件处理函数设置了地图的大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值