У меня есть серия динамически генерируемых иконок SVG, которые будут использоваться в качестве маркеров на карте Leaflet.
Значки берут число r
и вставляют его в изображение; это прекрасно работает, когда на значок напрямую ссылается браузер, однако, когда значок размещен в системе Leaflet, фоновое изображение значка не отображается; но я не могу понять, почему это так:
SVG:
/***
* Create an SVG file using the Bronze image and apply a text as given by PHP GET clause.
***/
$rank = (int)$_GET['r'];
if($rank < 1 ) {
$rank = null;
}
header("content-type: image/svg+xml");
?>
<?xml version='1.0' encoding='utf-8'?>
<svg version='1.1' baseProfile='full' xmlns='http://www.w3.org/2000/svg' xmlns:svg='http://www.w3.org/2000/svg'
xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 20 25' xml:space='preserve' height='25' width='20'>
<image xlink:href='https://domain.co.uk/images/map_icons/bronze5_20.png' x='0' y='0' width='20' height='25' />
<text id='svgtext' x='50%' y='40%' dominant-baseline='middle' text-anchor='middle' fill='black' font-size='11px'><?php print $rank;?></text>
</svg>
Leaflet (v1.6 current ):
var Brnz4 = L.icon({
iconUrl: '/images/map_icons/bronze.php?r=4',
iconSize: [20, 25], // size of the icon
iconAnchor: [0, 25], // point of the icon which will correspond to marker's location
popupAnchor: [0, -20] // point from which the popup should open relative to the iconAnchor
});
И
L.marker([56.224800000000000,-2.703890000000000], {icon:Brnz4} ).addTo(map)
Но на самом деле отображается просто номер текста (4) без фонового изображения.
Фоновое изображение загружается нормально при прямом вызове.
SVG (PHP) корректно загружается при непосредственном вызове браузером.
Текст отображается в правильном положении, что означает, что SVG читается.
Что я пробовал?
- Добавлены различные заголовки к тегам
<svg>
/ <xml>
, как показано выше (например, viewbox, et c.). - абсолютные URL
- Чтение в этом посте
- использовались одинарные
'
и двойные "
цитаты в SVG, если XML была цитата- спецификация типа c.
Изображения:
Как выглядит маркер на карте листовки.
Как выглядит листовка в Инспекторе браузера.
Как маркер появляется с прямым URL в браузере. Это должно быть так, как это выглядит на карте.
Похоже, что каким-то образом через Leaflet фоновое изображение SVG не загружается. Почему?