AngryHacker
AngryHacker

Reputation: 61646

How can I get smooth markers (SVG icons) on Google Maps?

I create a marker to place on a Google map:

var compMarker = new google.maps.Marker({
    position: {lat: 33, lng: -118}
    map: map,
    label: {
        text: "10",
        color: "white",
        fontWeight: "bold"
    },
    icon: {
        path: google.maps.SymbolPath.CIRCLE,
        scale: 15,
        fillColor: "#4E90D9",
        fillOpacity: 1,
        strokeWeight: 1
    }
});

This is the result:

screenshot of resulting map

As you can see the circle is pretty choppy looking. Is there a way to create a high quality circle?

Upvotes: 1

Views: 4293

Answers (1)

geocodezip
geocodezip

Reputation: 161384

One option would be to use a custom SVG icon.

icon: {
  url:'data:image/svg+xml;charset=utf-8,' + encodeURIComponent ('<svg viewBox="0 0 220 220" xmlns="http://www.w3.org/2000/svg"><circle cx="110" cy="110" r="100" stroke="black" fill="#4E90D9" fill-opacity="1.0" stroke-width="10" /></svg>'),
  size: new google.maps.Size(200,200),
  scaledSize: new google.maps.Size(32,32),
  anchor: new google.maps.Point(16,16),
  labelOrigin: new google.maps.Point(16,16)
},

proof of concept fiddle

screenshot of result

Related questions dealing with issues in IE11:

code snippet:

function initMap() {
  var pointA = new google.maps.LatLng(53.3163803, -6.2676661),
    myOptions = {
      zoom: 15,
      center: pointA
    },
    map = new google.maps.Map(document.getElementById('map-canvas'), myOptions),
    markerA = new google.maps.Marker({
      position: pointA,
      title: "SVG icon",
      label: {
        text: "10",
        color: "white"
      },
      icon: {
         url:'data:image/svg+xml;charset=utf-8,' + encodeURIComponent('<svg viewBox="0 0 220 220" xmlns="http://www.w3.org/2000/svg"><circle cx="110" cy="110" r="100" stroke="black" fill="#4E90D9" fill-opacity="1.0" stroke-width="10" /></svg>'),
        size: new google.maps.Size(200, 200),
        scaledSize: new google.maps.Size(32, 32),
        anchor: new google.maps.Point(16, 16),
        labelOrigin: new google.maps.Point(16, 16)
      },
      map: map
    });
}
google.maps.event.addDomListener(window, 'load', initMap);
html,
body,
#map-canvas {
  height: 100%;
  width: 100%;
  padding: 0px;
  margin: 0px;
}
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<div id='map-canvas'></div>

Upvotes: 11

Related Questions