美文网首页
OpenLayers绘制多边形踩坑记录

OpenLayers绘制多边形踩坑记录

作者: 没见过的颜色 | 来源:发表于2021-01-11 00:11 被阅读0次

    初始化地图使用的EPSG是4326,看了这篇文章
    https://blog.51cto.com/13802307/2295958
    按照他的代码绘制多边形始终没画出来,
    然后我发现这段代码
    polygon.applyTransform(ol.proj.getTransform('EPSG:4326', 'EPSG:3857'));
    这个段代码的大概的意思就是将4326的坐标转换城3857墨卡托投影坐标系在地图上展示,那么问题来了,我初始化的时候是使用4326,恰巧这段代码把坐标给转成3857了,所以没绘制出来。
    总结:
    初始化地图使用的如果是4326地理坐标系,那么在坐标转换时候也要转换成相应的坐标系。
    要点:
    Openlayers地图初始化默认是3857,也可以指定城4326。当改变默认坐标系时在绘制图形是一定要对坐标进行转换
    具体代码如下:

            var style = new ol.style.Style({
                stroke: new ol.style.Stroke({
                    color: '#000',
                    width: 3,
                }),
                fill: new ol.style.Fill({
                    color: '#ff5722',
                }),
            })
            var polygonStyle = new ol.style.Style({
                stroke: new ol.style.Stroke({
                    color: '#00bcd4',
                    width: 3,
                }),
                fill: new ol.style.Fill({
                    color: '#ff5722',
                }),
            })
            var vectorLayer = new ol.layer.Vector({
                source: new ol.source.Vector({
                    url: './src/data/countries.geojson',
                    format: new ol.format.GeoJSON(),
                }),
                style: [style]
            });
    
            var map = new ol.Map({
                layers: [vectorLayer],
                target: 'map',
                view: new ol.View({
                    projection: 'EPSG:4326',
                    center: [114.11, 22.71],
                    zoom: 0,
                }),
            });
    
            var polygon = new ol.geom.Polygon([[[114.11, 22.71], [117.11, 22.71], [117.11, 22.01], [114.11, 22.01], [114.11, 22.71]]]);
    
            polygon.applyTransform(ol.proj.getTransform('EPSG:4326', 'EPSG:4326'));
    
            var polygonFeature = new ol.Feature(polygon);
    
            var polygonSource = new ol.source.Vector();
    
            polygonSource.addFeature(polygonFeature);
    
            var polygonLayer = new ol.layer.Vector({
                source: polygonSource,
                style: [polygonStyle]
            });
            map.addLayer(polygonLayer);
            map.on('click', function (evt) {
                console.log(evt)
            })
    

    相关文章

      网友评论

          本文标题:OpenLayers绘制多边形踩坑记录

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