我正在尝试通过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中。
我只花了一个半星期才弄清楚。
现在唯一的事情是,即使源代码不变,仍会调用该函数,否则它将按预期工作。
答案 0 :(得分:1)
您尝试调用map.redraw()吗?