Openlayers source.once(更改)不会更新我的多边形

时间:2018-08-27 10:51:47

标签: javascript kml openlayers-3

我正在尝试通过KML给出一些坐标,以将一些多边形投影到地图上,而尽管多边形被完美投影,但是无论我在kml中进行了什么更改,都不会发生任何事情,并且无论如何我都必须刷新页面。< / p>

这是我的代码:

var polygons;

map = new ol.Map({
    render: 'canvas',
    layers: [raster, vector],
    target: 'map',
    interactions: interactions,
    view: view
});

var styling = new ol.style.Style({
    fill: new ol.style.Fill({
      color: [225, 85, 83, .4]
    }),
    stroke: new ol.style.Stroke({
      color: [135, 13, 39, .8],
      width: 2,
      lineCap: 'round'
    })
});

function testpolygons() {
    var new_source = new ol.source.Vector({
        url: 'pages/Coordinates.php',
        format: new ol.format.KML({
                extractStyles: false,
                extractAttributes: false
            })
    });

    var new_layer = new ol.layer.Vector({
        source: new_source,
        style: styling
    });

    map.addLayer(new_layer);

    new_source.once('change', function() {
        if (polygons) {
            map.removeLayer(polygons);
        }
        polygons= new_layer;
    });
    if (polygons!== undefined)
        polygons.setVisible(false);
}

testpolygons();

这是我的坐标页面的内容:

test 1 irrelativeToGround 10.416666666667,40.375 10.583333333333,40.891666666667 10.25,40.891666666667 10.25,40.058333333333 10.583333333333,40.058333333333 test 1 irrelativeToGround 10.25,40.391666666667 10.145833333333,40.491666666667 10.4,40.575 10.504166666667,40.475

源代码只是一个很好的选择:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
   <Document>
    <Placemark>
        <name>test</name>
            <Polygon>
                <extrude>1</extrude>
                <altitudeMode>irrelativeToGround</altitudeMode>
                <outerBoundaryIs>
                    <LinearRing>
                        <coordinates>
                            10.416666666667,40.375 10.583333333333,40.891666666667 10.25,40.891666666667 10.25,40.058333333333 10.583333333333,40.058333333333
                        </coordinates>
                    </LinearRing>
                </outerBoundaryIs>
            </Polygon>
        </Placemark>
    <Placemark>
        <name>test</name>
            <Polygon>
                <extrude>1</extrude>
                <altitudeMode>irrelativeToGround</altitudeMode>
                <outerBoundaryIs>
                    <LinearRing>
                        <coordinates>
                            10.25,40.391666666667 10.145833333333,40.491666666667 10.4,40.575 10.504166666667,40.475
                        </coordinates>
                    </LinearRing>
                </outerBoundaryIs>
            </Polygon>
        </Placemark>
</Document>

我还尝试添加"header('Content-type: application/vnd.google-earth.kml+xml');",将其转换为KML文件,但无论我添加多少多边形或坐标多少,"new_source.once('change', function(){})"事件都不会更新多边形变化,我不知道为什么。

编辑:现在这很尴尬,似乎我要做的就是删除

if (polygons!== undefined)
        polygons.setVisible(false);

并将"testpolygons();"行插入到setInterval中。

我只花了一个半星期才弄清楚。

现在唯一的事情是,即使源代码不变,仍会调用该函数,否则它将按预期工作。

1 个答案:

答案 0 :(得分:1)

您尝试调用map.redraw()吗?