KML с изображением из источника, который не имеет заголовка Access_Control_Allow_Origin - PullRequest
0 голосов
/ 10 октября 2019

Я использую openlayers и пытаюсь показать KML внутри моей карты в веб-приложении, размещенном в IIS. Пример используемого 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">
         <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>

, однако, это не работает, я получаю сообщение об ошибке:

Доступ к изображению в 'https://www.gstatic.com/mapspro/images/stock/1415-rec-winter-snow.png' from origin 'http://localhost' заблокирован политикой CORS: в запрошенном ресурсе отсутствует заголовок' Access-Control-Allow-Origin '.

, если я изменяю kmlтак что изображение вместо этого использует URL https://maps.google.com/mapfiles/kml/shapes/snowflake_simple.png, оно отображается нормально без каких-либо проблем.

Я пытаюсь выяснить, как использовать перезапись URL для добавления 'Access-Control-Разрешить-Происхождение 'к первой / плохой ссылке, но ничего, что я пытаюсь, не работает. https://kamranicus.com/posts/2016-03-06-cors-multiple-origins-iis казалось многообещающим, но это не сработало для меня. если я использую расширение типа https://mybrowseraddon.com/access-control-allow-origin.html,, которое решает проблему, но это не реальное решение для моей ситуации.

Какой лучший способ показать изображения KML, которые не настроены для CORS, вOpenLayers

1 Ответ

0 голосов
/ 11 октября 2019

Вам, вероятно, понадобится простой прокси на вашем сервере, чтобы обойти CORS, а вашей исходной настройке OpenLayers понадобится загрузчик (нет стратегии bbox, поэтому упрощенная версия с https://openlayers.org/en/latest/apidoc/module-ol_source_Vector-VectorSource.html) для префикса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();
   },
 });
...