Reputation: 133
I've learnt that when I would like to use sprites as google Map markers, I need to put it like this:
var myIcon = new google.maps.MarkerImage(
"../public/img/categories.png",
new google.maps.Size(90, 50),
new google.maps.Point(0, data[i].subcategory_id * 50)
);
// as I understand:
// new google.maps.MarkerImage(url, original size, anchor point);
when making it retina-proof, I understand I need to make it like this:
//new google.maps.MarkerImage(url, original size, anchor point, null, half size);
var myIcon = new google.maps.MarkerImage(
"../public/img/categories.png",
new google.maps.Size(90,50),
new google.maps.Point(0, data[i].subcategory_id * 50),
null,
new google.maps.Size(45,25)
);
However, when adding the extra size, my marker isn't there anymore. What am I doing wrong?
Upvotes: 3
Views: 7046
Reputation: 5339
Yes, using the google.maps.Icon class is the way to go.
A full demonstration of adding a marker with proper handling for sprite image base, Retina support, and non-default anchoring:
var marker = new google.maps.Marker({
position: latLng,
title: 'My Marker',
map: myMap,
// google.maps.Icon
icon: {
url: 'img/marker.png',
// base image is 60x60 px
size: new google.maps.Size(60, 60),
// we want to render @ 30x30 logical px (@2x dppx or 'Retina')
scaledSize: new google.maps.Size(30, 30),
// the most top-left point of your marker in the sprite
// (based on scaledSize, not original)
origin: new google.maps.Point(0, 0),
// the "pointer"/anchor coordinates of the marker (again based on scaledSize)
anchor: new google.maps.Point(25.5, 29)
}
});
A demo by Google exists here.
Upvotes: 1
Reputation: 1301
This have been updated:
scaledSize: The size of the entire image after scaling, if any. Use this property to stretch/shrink an image or a sprite.
size: The display size of the sprite or image. When using sprites, you must specify the sprite size. If the size is not provided, it will be set when the image loads.
So now it should be:
var myIcon {
url: "../public/img/categories.png",
size: new google.maps.Size(90,50), // the orignal size
scaledSize: new google.maps.Size(45,25), // the new size you want to use
origin: new google.maps.Point(0, 25) // position in the sprite
};
Upvotes: 0
Reputation: 133
Like @duncan said, I need to use the icon class.
var myIcon {
url: "../public/img/categories.png",
size: new google.maps.Size(45,25), // the size it should be on the map
scaledSize: new google.maps.Size(45,550), // the normal size of the image is 90x1100 because Retina asks double size.
origin: new google.maps.Point(0, 25) // position in the sprite
};
This helped me out, thank you!
Upvotes: 3