Iis KML的图像来自不具有Access\u Control\u Allow\u Origin标头的源
我正在使用openlayers,并试图在IIS托管的web应用程序上显示地图中的KML。我正在使用的KML的一个例子是:Iis KML的图像来自不具有Access\u Control\u Allow\u Origin标头的源,iis,cors,kml,url-rewrite-module,openlayers-5,Iis,Cors,Kml,Url Rewrite Module,Openlayers 5,我正在使用openlayers,并试图在IIS托管的web应用程序上显示地图中的KML。我正在使用的KML的一个例子是: <?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <name>Test CORS KML</name> <Style id="badCors
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Test CORS KML</name>
<Style id="badCors">
<IconStyle>
<color>ff589d0f</color>
<scale>1</scale>
<Icon><href>https://www.gstatic.com/mapspro/images/stock/1415-rec-winter-snow.png</href>
</Icon>
</IconStyle>
</Style>
<Placemark>
<name>Bad Mark</name>
<styleUrl>#badCors</styleUrl>
<Point>
<coordinates>4.3849582,50.9757646,0</coordinates>
</Point>
</Placemark>
</Document>
</kml>
测试CORS KML
ff589d0f
1.
https://www.gstatic.com/mapspro/images/stock/1415-rec-winter-snow.png
坏分数
#坏蛋
4.3849582,50.9757646,0
这不起作用,但是,我得到一个错误:
在
''
来自源“”已被CORS策略阻止:否
“Access Control Allow Origin”标头出现在请求的服务器上
资源
如果我更改kml,使图像改为使用url,它将显示良好,没有任何问题
我试图找出如何使用url重写将“访问控制允许源代码”添加到第一个/错误链接,但我所尝试的一切都不起作用。看起来很有希望,但对我来说不起作用。如果我使用像这样的扩展,这就解决了问题,但对于我的情况来说,这不是一个真正的解决方案
显示未在openlayers中为CORS设置的KML图像的最佳方式是什么?您可能需要在服务器上使用一个简单的代理来绕过CORS,并且您的openlayers源代码设置将需要一个加载器(没有bbox策略,因此中的简化版本)来为href URL添加代理前缀
var vectorSource = new Vector({
format: new KML(),
loader: function() {
var url = 'your-kml.kml;
var xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.onload = function(extent, resolution, projection) {
if (xhr.status == 200) {
var text = xhr.responseText.replace(
/\<href\>http/gi,
'<href>yourproxy?http'
);
vectorSource.addFeatures(
vectorSource.getFormat().readFeatures(text, {
dataProjection: 'EPSG:4326',
featureProjection: projection
})
);
}
}
xhr.send();
},
});
var vectorSource=新向量({
格式:new KML(),
加载程序:函数(){
var url='your-kml.kml;
var xhr=new XMLHttpRequest();
xhr.open('GET',url);
xhr.onload=函数(范围、分辨率、投影){
如果(xhr.status==200){
var text=xhr.responseText.replace(
/\http/gi,
'yourproxy?http'
);
vectorSource.addFeatures(
vectorSource.getFormat().readFeatures(文本{
数据预测:“EPSG:4326”,
特征投影:投影
})
);
}
}
xhr.send();
},
});
如果是您自己的KML,您可以将图像复制到您自己的服务器或本地主机。不幸的是,这不是我的选择。KML来自我的客户我希望出于某种原因会有一个不同的答案,但我可以做到这一点。非常感谢。问题是,允许KML构造函数中的crossOrigin:null
选项防止对未启用的资源发出CORS请求,就像对任何其他图标一样,这非常简单。