Openlayers source.once (изменить) не обновляет мои полигоны - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь получить некоторые координаты, передаваемые через KML, для проецирования некоторых многоугольников на карту, и хотя многоугольники проецируются идеально, независимо от того, что я изменяю в kml, ничего не происходит, и мне все равно приходится обновлять страницу.

Вот мой код:

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 голосов
/ 28 августа 2018

Вы пытались вызвать map.redraw ()?

...