美文网首页Gis专辑GISgis
OpenLayer4调用GeoServer发布的矢量切片

OpenLayer4调用GeoServer发布的矢量切片

作者: 忘我怎么解 | 来源:发表于2018-02-05 16:21 被阅读213次

首先设置矢量切片数据源,可以选择pbf格式或者geojson格式,其中pbf格式数据加密性较好,读取速度快:

var vector = new ol.layer.VectorTile({  
            source: new ol.source.VectorTile({  
                projection: projection4326,  
                <!-- format: new ol.format.GeoJSON(), -->//geojson格式
                format: new ol.format.MVT(),//pbf格式             
                tileGrid: ol.tilegrid.createXYZ({  
                    extent: ol.proj.get('EPSG:4326').getExtent(),  
                    maxZoom: 32  
                }),  
                tilePixelRatio: 1,
                // 矢量切片服务地址  
                tileUrlFunction: function(tileCoord){  
                    return 'http://127.0.0.1:8080/geoserver/gwc/service/tms/1.0.0/'  
                        +lyr+'@EPSG%3A4326@pbf/'+(tileCoord[0]-1)  
                        + '/'+tileCoord[1] + '/' + (Math.pow(2,tileCoord[0]-1)+tileCoord[2]) + '.pbf';//pbf矢量切片  
                }
                <!-- tileUrlFunction: function(tileCoord){   -->
                    <!-- return 'http://127.0.0.1:8080/geoserver/gwc/service/tms/1.0.0/'   -->
                        <!-- +lyr+'@EPSG%3A4326@geojson/'+(tileCoord[0]-1)   -->
                        <!-- + '/'+tileCoord[1] + '/' + (Math.pow(2,tileCoord[0]-1)+tileCoord[2]) + '.geojson'; -->
                <!-- }               -->//geojson矢量切片
            })  
            <!-- style:initStyle  --> 
        });

设置Map对象,并自定义矢量切片符号:

//设置POI图标
        var iconStyle = new ol.style.Style({
                            image: new ol.style.Icon(/** @type {olx.style.IconOptions} */ ({
                              anchor: [0.5, 46],
                              anchorXUnits: 'fraction',
                              anchorYUnits: 'pixels',
                              src: 'https://openlayers.org/en/v4.6.4/examples/data/icon.png'
                            }))
                        }); 
//设置Map对象
var map = new ol.Map({  
            layers: [    
                vector  
            ],  
            target: 'map',  
            controls: ol.control.defaults().extend([  
                new ol.control.MousePosition({  
                    className:"ol-mouseposition",  
                    coordinateFormat: ol.coordinate.createStringXY(5)  
                })  
            ]),  
            view: new ol.View({  
                projection: projection4326,  
                minZoom:1,  
                maxZoom:32,  
                center: [-103.774,44.440],  
                zoom: 8  
            })  
        });
//将默认样式切换成自定义符号
vector.setStyle(iconStyle); 

具体效果如下图所示:


默认样式效果图 动态渲染效果图

相关文章

网友评论

  • LBHN:Failed to load http://localhost:8080/geoserver/gwc/service/tms/1.0.0/qinghua:LYRCounty_AnHui@EPSG%3A[object%20Object]@pbf/11/3382/1385.pbf: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:7245' is therefore not allowed access. The response had HTTP status code 400
    楼主,这种错误怎么解决:sob:
    忘我怎么解:@LBHN 矢量切片主要是实现无级放缩,动态渲染,所以不能一次性下载完整缓存,如果你需要完整缓存,建议使用离线瓦片地图
    LBHN:@忘我怎么解 嗯嗯已经解决了。谢谢!:smile: 不过geoserver切的矢量瓦片好像总是缓存不完整,这个问题你知道怎么解决吗?或者能提供其他的切片方案吗?
    忘我怎么解:@LBHN 这个是跨域问题,你参考我写的解决跨域的文章就能解决
  • 553817329341:使用geojson的方式加载失败呀,已经看到文件是切好的了,貌似行、列号没计算对,找不到.geojson文件
    553817329341:@忘我怎么解 发现一个严重的问题,geoServer对2361坐标进行切片时会失败,切出来的png都是黑色,.geojson都是空白的,难道不支持别的坐标么,有空再测试下。
    553817329341:@忘我怎么解 现在可以了,谢谢。现在测试其他坐标,像2361等加载情况,wms可以,矢量切片的方式还没加载出来,调试发现geoServer服务器上生成的.pbf文件大小为0,好奇葩。
    忘我怎么解:@bcabchappy 你把错误日志截图,我看下,我应该遇到过

本文标题:OpenLayer4调用GeoServer发布的矢量切片

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