如何在openlayers3中创建缓冲图形图层

时间:2016-08-03 11:12:54

标签: openlayers-3

您好我正在尝试为openlayers中的点创建缓冲区3.我能够在缓冲距离结果中显示with。但是无法创建图形图层。请帮忙,我试过我把它放下来。你可以检查一下  var style = new ol.style.Style({

    image: new ol.style.Circle({

        stroke: new ol.style.Stroke({
            width: 5,
            color: 'blue'
        }),
        radius: 12
    }),
    text: new ol.style.Text({
        font: '12px helvetica,sans-serif',


        fill: new ol.style.Fill({
            color: '#000'
        }),
        stroke: new ol.style.Stroke({
            color: '#fff',
            width: 2
        })
    })
});


for (var i = 0; i < myObject.length; i++) {
            ObjectIDs.push(myObject[i].asset_type);
            ObjectIDs.push(myObject[i].x);
            ObjectIDs.push(myObject[i].y);
        }
        var gridquerystr = ObjectIDs[0].toString();
        var x = ObjectIDs[1].toString();
        var y = ObjectIDs[2].toString();
        alert(gridquerystr);
        alert(x);
        alert(y);
        var pointgeom;
        var pointfeatures = [];
        //for (var i = 0 ; i < myObject.length ; i++) {

            pointgeom = new ol.geom.Point(ol.proj.transform([parseFloat(x), parseFloat(y)], "EPSG:4326", "EPSG:3857"));

            pointfeature = new ol.Feature({
                geometry: pointgeom
            });
            pointfeature.setStyle(new ol.style.Style({
                image: new ol.style.Circle({
                    radius: bufferdistance,
                    width: 5
                }),
                fill: new ol.style.Fill({
                    color: [51, 51, 51, .3]
                })
            }));
            pointfeatures.push(pointfeature);

            pointfeature.setStyle(style);

        var locations = new ol.source.Vector({
            features: pointfeatures,
            project: "EPSG:4326"

        });

        SearchResultsLayer.setSource(locations);

3 个答案:

答案 0 :(得分:0)

因为你可以检索你创建的缓冲区中的功能,只需要显示它(如果我很清楚你想要的是什么),你只需要像这样改变你的观点的风格:

 Feature.setStyle(new ol.style.Style({
    image: new ol.style.Circle({
      radius: yourBufferDistance,
      width: 2
      }),
      fill: new ol.style.Fill({
        color: [51, 51, 51, .3]
      })
    })
  }));

答案 1 :(得分:0)

我正在获取所选功能的缓冲区。但我想为该功能添加自己的样式。还有其他任何方式。我的工作缓冲区功能是

            var pointgeom;
            var pointfeatures = [];


            pointgeom = new ol.geom.Point(ol.proj.transform([parseFloat(x), parseFloat(y)], "EPSG:4326", "EPSG:3857"));

            pointfeature = new ol.Feature({
                geometry: pointgeom
            });
            var poitnExtent = pointfeature.getGeometry().getExtent();
            var bufferedExtent = new ol.extent.buffer(poitnExtent, bufferdistance);

            var bufferPolygon = new ol.geom.Polygon(
            [
                [[bufferedExtent[0], bufferedExtent[1]],
                [bufferedExtent[0], bufferedExtent[3]],
                [bufferedExtent[2], bufferedExtent[3]],
                [bufferedExtent[2], bufferedExtent[1]],
                [bufferedExtent[0], bufferedExtent[1]]]
            ]
            );


            var bufferedFeature = new ol.Feature(bufferPolygon);

            vectorBuffers.getSource().addFeature(bufferedFeature);

答案 2 :(得分:0)

My working buffer for point is 

    var pointfeatures = [];
                var ObjectIDs = [];
                var obj = JSON.parse(data.d);
                for (var i = 0 ; i < obj.length ; i++) {
                    ObjectIDs.push(obj[i].x);
                    ObjectIDs.push(obj[i].y);
                    var x = ObjectIDs[0].toString();
                    var y = ObjectIDs[1].toString();

                    pointgeom = new ol.geom.Point(ol.proj.transform([parseFloat(x), parseFloat(y)], "EPSG:4326", "EPSG:3857"));
                    pointfeature = new ol.Feature({
                        geometry: pointgeom
                    });




                    var extent = pointfeature.getGeometry().getExtent();
                    var bufferextent = new ol.extent.buffer(extent, bufferdistance);

                    var bufferPolygon = new ol.geom.Circle(extent, bufferdistance);

                    var bufferedFeature = new ol.Feature(bufferPolygon);
                    pointfeatures.push(bufferedFeature);

                    pointfeature.setStyle(style);


                    bufferedFeature.setStyle(new ol.style.Style({
                        stroke: new ol.style.Stroke({
                            color: 'red',
                            width: 2
                        }),
                        image: new ol.style.Circle({
                            radius: bufferdistance,
                            width: 2
                        })


                    })
                    );

                    vectorBuffers.getSource().addFeature(bufferedFeature);
                }
                                locations = new ol.source.Vector({
                                    features: bufferextent,
                                    project: "EPSG:4326"
                                });

                                SearchResultsLayer.setSource(locations);

                    map.getView().fit(SearchResultsLayer.getSource().getExtent(), map.getSize());