Я пытаюсь получить некоторые координаты, передаваемые через 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.
У меня ушло только полторы недели, чтобы понять.
Теперь единственное, что, даже если источник не изменяется, он все равно вызывает функцию, но в остальном он работает как надо.