Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use SVG icon as marker in OpenLayers

I tried to svg icon as marker in Openlayers-3. Here in my code.

var svg = '<?xml version="1.0"?>'
            + '<svg viewBox="0 0 120 120" version="1.1" xmlns="http://www.w3.org/2000/svg">'
            + '<circle cx="60" cy="60" r="60"/>'
            + '</svg>';

var style = new ol.style.Style({
            image: new ol.style.Icon({
                opacity: 1,
                src: 'data:image/svg+xml;base64,' + btoa(svg)
            })
        });

But my svg image is truncated,as shown in the following picture. ( the icon should be a circle)

enter image description here

like image 891
Alexlionnel Sieyadjeu Avatar asked Jun 15 '16 08:06

Alexlionnel Sieyadjeu


People also ask

Can SVG be used as icon?

Scalable Vector Graphics, or SVGs, are a generally a good choice for use as icons on your website, because they are vector graphics. Vector graphics can be scaled to any size without losing quality. The files are small and compress well, so they won't make your website slow to load.

How do I get the SVG code for an icon?

To copy the HTML code of your icon, just search for the icon, change the size (don't put any colour to customize it in your CMS), click on SVG and copy/paste your code.


2 Answers

Here is an example that shows inline SVG in an icon symbolizer: http://jsfiddle.net/eze84su3/

Here is the relevant code:

var svg = '<svg width="120" height="120" version="1.1" xmlns="http://www.w3.org/2000/svg">'
    + '<circle cx="60" cy="60" r="60"/>'
    + '</svg>';

var style = new ol.style.Style({
  image: new ol.style.Icon({
    opacity: 1,
    src: 'data:image/svg+xml;utf8,' + svg,
    scale: 0.3
  })
});

A few differences from yours:

  • I added width and height attributes to the <svg>. This lets the browser know how big to make the resulting image.
  • I added a scale property to the icon to resize the image.
  • I used utf8 instead of base64 encoding (not significant).
like image 176
Tim Schaub Avatar answered Oct 20 '22 02:10

Tim Schaub


To me, the solution was:

const iconMarkerStyle = new ol.style.Icon({
    src: './data/static_images/marker.svg',
    //size: [100, 100],
    offset: [0, 0],
    opacity: 1,
    scale: 0.35,
    //color: [10, 98, 240, 1]
})

Then add size parameters directly in the SVG file:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 144.81 215.81" width="14.5px" height="21.6px">
    <title>Asset 190-SVG</title>
</svg>
like image 1
TAG Formación Online Avatar answered Oct 20 '22 04:10

TAG Formación Online