当前位置: 首页 > 知识库问答 >
问题:

Google地图在地图样式更改时更改图标的标记

易俊友
2023-03-14

我正在用html/jsp页面主体中的Google地图做一个web动态项目。

我制作了一个函数,可以创建一个标记(lat、lng、map),并在标记的参数中使用一个特殊的image.png作为图标。

在我的地图中,我制作了两种不同的样式(地图的颜色…)“白天”和“夜晚”。

我想知道当用户点击夜间更改样式时,我如何更改标记的图标。事实上,标记的颜色不适合这种风格的地图...

我尝试用相同的名称初始化不同样式的var image=/…/…png,这样我就可以在映射代码中使用var,但它不起作用。我还试了一个if-like

if(map.mapTypeControlOptions.mapTypeIds.equals(Day)){
    var image=...png
} else {
    var image=...png
}...

customMapTypeIdJour<div id="map"></div>

<script>
function initMap() {
    var customMapTypeNuit = new google.maps.StyledMapType([
        {
            "featureType": "landscape.man_made", "elementType": "geometry.fill", "stylers": [ { "color": "#2b3f57" } ]
        },                                                    
        //  ... the style of map
        {  
            name: 'Nuit'
        }
    );

    var customMapTypeJour = new google.maps.StyledMapType([
        //  a style of map
        {  
            name: 'Jour'
        }
    );

    var customMapTypeIdJour = 'Jour';
    var customMapTypeIdNuit = 'Nuit';
    var map = new google.maps.Map(document.getElementById('map'), {
        center: {lat: 43.6666, lng: 1.43333},
        zoom: 17,
        streetViewControl: false,
        zoomControl: false,
        mapTypeControlOptions: {
            mapTypeIds: [customMapTypeIdJour, customMapTypeIdNuit]
        }
    });
    map.mapTypes.set(customMapTypeIdNuit, customMapTypeNuit);
    map.mapTypes.set(customMapTypeIdJour, customMapTypeJour);
    map.setMapTypeId(customMapTypeIdJour);
    var infoWindow = new google.maps.InfoWindow({map: map});

    // Try HTML5 geolocation.
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function(position) {
            var pos = {
                lat: position.coords.latitude,
                lng: position.coords.longitude
            };

            infoWindow.setPosition(pos);
            infoWindow.setContent('Vous êtes ici.');

            createMarqueur(lat, lng, map);    // create a special marker with a special image as icon

            map.setCenter(pos);
        });
    } else {
        // Browser doesn't support Geolocation
        handleLocationError(false, infoWindow, map.getCenter());
    }
}

function handleLocationError(browserHasGeolocation, infoWindow, pos) {
    infoWindow.setPosition(pos);
    infoWindow.setContent(browserHasGeolocation ?
        'Error: The Geolocation service failed.' :
        'Error: Your browser doesn\'t support geolocation.');
}
</script>

共有2个答案

令狐宏伟
2023-03-14

你试过使用svg图形吗?你可以很容易地改变它的外观使用javascript。

你必须使用矢量编辑器软件,如Corel Draw,Adobe Illustrator或任何其他免费程序来制作你的标记。在文本编辑器中打开结果文件,你会发现类似这样的东西。

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25000 6000">
    <path d=" <!--svg path here--> ">
</svg>

您可以应用css:

svg path{fill:red} /*any color here*/ 

您想使用javascript更改颜色的任何更改都可以使用上述css的简单更改来完成。我希望我给了你一些如何改变标记的想法。

祁嘉言
2023-03-14

我开始悬赏,但最后我有了答案。根据谷歌的文档,有一个getMapTypeId()返回MapTypeId字符串(比如'Jour'或'Nuit'(sallt compatiriote!))。

因此,如果您持有标记列表,您可以这样做:

google.maps.event.addListener( map, 'maptypeid_changed', function() {
    if(map.getMapTypeId() == "Nuit"){
      for(var i=0;i<markerList.length;i++){
        markerList[i].setIcon("/resources/img/nuit.png");
      }
    }
    else{
      for(var i=0;i<markerList.length;i++){
        markerList[i].setIcon("/resources/img/jour.png");
      }
    }
} );
 类似资料:
  • 我想更改Google Maps上选定的标记图标,因此我有以下代码: 在这一行,我从下面得到错误: 例外情况如下:

  • 我有一个地图,如果用户触摸地图,我将只放置一个pin,我这样做了,但当用户想要更改pin位置时,他应该将pin拖动到新位置 当用户触摸另一个地方时,我想要的是删除之前的引脚并将新引脚放在新的地方而不拖动它。 我该怎么做?? 这是我的代码: 和MyItemizedOverlay

  • 我可以知道一种通过Javascript改变谷歌地图标记颜色的方法吗..我是这方面的新手,任何帮助都将不胜感激,谢谢。 我使用以下代码创建标记

  • 我试图在点击时更改标记的图标编号。我使用的是角度谷歌地图。我正在使用本地资产文件夹而不是服务API设置iNurl。 单击标记时,如何更改上述图标。

  • 我看了其他答案,试着: 以及: 在类中,我把图像文件放在资源文件夹中,也放在与我的文件和我项目的根文件夹中,甚至在开始时包含了/符号URL字符串,但没有工作。我想知道最近有没有人尝试过并成功了?

  • 在我的JSP中,我有一个下拉列表来列出所有可用的部门,当客户端选择一个部门时,通过AJAX,我将所有员工的列表放在下一个下拉列表中。 出于AJAX的目的,我使用 ,而不是Employment name Employer id。所以有人能告诉我如何在onchange事件中获取<code>HashMap</code>的值吗。