Я использую этот фрагмент кода для загрузки файла KML в GoogleMapsAPI:
<script>
function googleMapInitialize() {
var myOptions = {
center: new google.maps.LatLng(-34.397, 150.644),
zoom: 8,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var myMap = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
var ctaLayer = new google.maps.KmlLayer('http://www.freemages.fr/test/session_k.kml');
ctaLayer.setMap(myMap);
}
</script>
Хотя он работает правильно для загрузки точек, определенный мной стиль не отображается должным образом, поскольку он использует белый диск в формате PNG, который должен быть повторно окрашен в соответствии с параметром цвета, а также изменение размера картинка по параметру шкалы:
<Style id="sn_style_0">
<IconStyle>
<color>FF4ea24a</color>
<scale>0.4</scale>
<Icon>
<href>http://www.freemages.fr/test/disc.png</href>
</Icon>
</IconStyle>
<LabelStyle>
<scale>0.5</scale>
</LabelStyle>
</Style>
<Style id="sh_style_0">
<IconStyle>
<color>FF4ea24a</color>
<scale>0.5</scale>
<Icon>
<href>http://www.freemages.fr/test/disc.png</href>
</Icon>
</IconStyle>
<LabelStyle>
<scale>0.5</scale>
</LabelStyle>
</Style>
<StyleMap id="msn_style_0">
<Pair>
<key>normal</key>
<styleUrl>#sn_style_0</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#sh_style_0</styleUrl>
</Pair>
</StyleMap>
Google Планета Земля может правильно отображать этот стиль, и он работает очень хорошо.
В моем проекте я хочу позволить пользователю выбрать именно тот цвет, который ему нужен, поэтому я не могу использовать коллекцию цветных дисков, которые я использовал бы без перекраски, что в противном случае было бы простым вариантом.
Я также пытался использовать динамическое создание прозрачного диска PNG в PHP, используя следующий код, но PHP не очень хорошо управляет прозрачностью и не отображается должным образом в файле:
<?php
header('Content-type: image/png');
$r = $_GET["r"];
$fg = $_GET["fg"];
is_numeric($r) or $r = 16; // radius
strlen($fg)==6 or $fg = '22e822'; // fill color
$bg = 'ffffff';
function hex2rgb($im,$hex) {
return imagecolorallocate($im,
hexdec(substr($hex,0,2)),
hexdec(substr($hex,2,2)),
hexdec(substr($hex,4,2))
);
}
$d = $r*2;
$dm = $d-4;
$im1 = imagecreatetruecolor($d,$d);
imagecolortransparent($im1, hex2rgb($im1,$bg));
imagefill($im1,0,0,hex2rgb($im1,$bg));
imagefilledellipse($im1, $r, $r, $dm, $dm, hex2rgb($im1,$fg));
imagepng($im1);
?>
В идеале, если бы можно было просто создать цветной диск по коду в файле KML, это было бы лучше, но я не нашел никакого способа сделать это в документации.
Есть предложения, как обойти эту проблему?
Спасибо!