Загрузите KML в Google Maps API с правильным отображением цветных меток диска - PullRequest
2 голосов
/ 11 марта 2012

Я использую этот фрагмент кода для загрузки файла 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, это было бы лучше, но я не нашел никакого способа сделать это в документации.

Есть предложения, как обойти эту проблему?

Спасибо!

1 Ответ

0 голосов
/ 13 марта 2012

Посмотрите на 'styledmarker' в google-maps-utility-library-v3.http://code.google.com/p/google-maps-utility-library-v3/

Это позволит вам контролировать стили иконок программно.http://google -maps-utility-library-v3.googlecode.com / svn / trunk / styledmarker /

Например, изменение цвета http://google -maps-utility-library-v3.googlecode.com/svn/trunk/styledmarker/examples/change_color.htm

...