A while back I posted on how to create dynamic Google maps markers which allow for any colour and any text in the classic Google map style.
Recently, I have had a need to do the same with circular markers. It uses the ‘Image Smooth Arc‘ function provided by Ulrich Mierendorff.
Similarly, I provide a little demo of some PHP code that does this that I quickly whipped up. Here are some example markers:










(Have a look at the image name)
Now that gets a little boring, how about some color:










(Again, have a look at the image name)
Again, you will need to download the modified arial font and host it in the same directory.
Have a look at the PHP source code below:
<?php
include ("imageSmoothArc_optimized.php");
$color = $_GET['color'];
if (!$color) {$color = "ff776b";} //default google map color
$color = str_replace("#", "", $color);
$string = $_GET['text'];
$font = realpath('arial.ttf');
//unfortunately we still must do some offsetting
switch (ord(substr($string,0,1))) {
case 49: //1
$offset = -2;
break;
case 55: //7
$offset = -1;
break;
case 65: //A
$offset = 1;
break;
case 74: //J
$offset = -1;
break;
case 84: //T
$offset = 1;
break;
case 99: //c
$offset = -1;
break;
case 106: //j
$offset = 1;
break;
}
if (strlen($string) == 1) {
$fontsize = 10.5;
} else if (strlen($string) == 2) {
$fontsize = 9;
} else {
$fontsize = 10.5;
$offset = 0; //reset offset
$string = chr(149);
}
$bbox = imagettfbbox($fontsize, 0, $font, $string);
$width = $bbox[2] - $bbox[0] + 1;
$height = $bbox[1] - $bbox[7] + 1;
$im = imagecreatetruecolor(20, 20);
//add the alpha
$trans_colour = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagefill($im, 0, 0, $trans_colour);
imageAlphaBlending($im, true);
imageSaveAlpha($im, true);
$bord_ellipse = array (0, 0, 0, 0);
imageSmoothArc($im, 9, 10, 17, 17, $bord_ellipse, 0, 2*M_PI); //x, y, width, hegiht
$fill_ellipse = array (hexdec(substr($color,0,2)), hexdec(substr($color,2,2)), hexdec(substr($color,4,2)), 0);
imageSmoothArc($im, 9, 10, 16, 16, $fill_ellipse, 0, 2*M_PI); //x, y, width, hegiht
$black = imagecolorallocate($im, 0, 0, 0);
imagettftext($im, $fontsize, 0, 11 - $width/2 + $offset, 9 + $height/2, $black, $font, $string);
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>