如何更改谷歌地图上的图标,而图层是由kml文件导入的?

时间:2017-01-05 08:22:58

标签: google-maps google-maps-api-3 google-maps-markers

我一直试图解决这个问题一个星期,但还没有找到任何解决方案。

我发现的所有标记都是由自己放置的标记可以更改。

我的情况是我导入了一个带有标记的KML文件,我想更改click事件上的图标。 下面的代码工作正常

    var ctaLayer = new google.maps.KmlLayer({
            //KMZ KML
            url: url,
            map: map,
            suppressInfoWindows: true,
         });
    ctaLayer.addListener('click', function (kmlEvent) {     
    var text = kmlEvent.featureData.description;  
    showInContentWindow(text); }

My Current Result

大多数人使用以下功能设置不同的图标

marker.seticon(ICON)

但在我的情况下,我无法获得我点击的标记

希望有人可以帮助我!!

2 个答案:

答案 0 :(得分:1)

使用KmlLayer,您无法在加载后更改样式(使用当前记录的API)。一种选择是使用第三方KML解析器(如geoxml3或geoxml_v3)将KML转换为可以更改的本机谷歌地图api对象。

geoxml3: https://github.com/geocodezip/geoxml3

geoxml_v3: http://code.google.com/p/geoxml-v3/

答案 1 :(得分:1)

根据geocodezip的建议

我出来了这个解决方案

        var marker;
        google.maps.event.addListener(ctaLayer, 'click', function (event) {

            var eLatLng = event.latLng;     

             if (marker != null) //this will remove the previous marker
            {
                marker.setMap(null);
            }
            marker = new google.maps.Marker({
                position: eLatLng,
                map: map,

            });

            marker.setPosition((eLatLng));
            marker.setIcon(ICON);
        });

点击kmlLayer标记时,我在其上覆盖了一个新的更大的标记。

我知道它不是最好的解决方案,但至少它会告诉用户他们现在点击哪个标记。