Google maps 如何在谷歌地图上显示不同的标记

Google maps 如何在谷歌地图上显示不同的标记,google-maps,Google Maps,我有一个谷歌地图,显示多个标记,代码如下。 我想对其中一些进行分组,并有一个不同的图标,如果可能的话,我想设置如下 ['Bondi Beach', -33.890542, 151.274856 type="restaurant"], ['Bondi RD', -33.89457, 151.26826 type="hotel"], 等,然后根据其类型显示不同的图标 var markers1 = [ ['Bondi Beach', -33.890542, 151.274856],

我有一个谷歌地图,显示多个标记,代码如下。 我想对其中一些进行分组,并有一个不同的图标,如果可能的话,我想设置如下

['Bondi Beach', -33.890542, 151.274856 type="restaurant"],
['Bondi RD', -33.89457, 151.26826 type="hotel"],
等,然后根据其类型显示不同的图标

var markers1 = [
    ['Bondi Beach', -33.890542, 151.274856],
    ['Bondi RD', -33.89457, 151.26826],
    ['Wellington St', -33.89136, 151.26474],
    ['Bondi RD', -33.89457, 151.26826],
    ['Belleve Hill', -33.88673, 151.25839],
    ['Belleve RD', -33.88424, 151.25427],
    ['Blair St', -33.88509, 151.27058],
    ['Wollahra', -33.88951, 151.24500],
    ['Double Bay', -33.87783, 151.23985],
    ['Kings Cross', -33.87498, 151.21788],
    ['Shaw St', -33.88110, 151.27088],
    ['Coogee Beach', -33.923036, 151.259052],
    ['Cronulla Beach', -34.028249, 151.157507],
    ['Manly Beach', -33.80010128657071, 151.28747820854187],
    ['West of sydney', -33.87270, 151.15746],
    ['Maroubra Beach', -33.950198, 151.259302]
];


function initializehotell() {
    alert("init hotell");
    var latlng = new google.maps.LatLng(-33.92, 151.25);
    var myOptions = {
        zoom: 10,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        mapTypeControl: false
    };
    var map1 = new google.maps.Map(document.getElementById("map_canvashotell"),myOptions);
    image = new google.maps.MarkerImage("http://www.mydomain.com/images/googlemap/info.png",new google.maps.Size(32, 45));
  shadowi = new google.maps.MarkerImage("http://www.mydomain.com/images/googlemap/shadow.png",new google.maps.Size(51, 37));
    var infowindow = new google.maps.InfoWindow(), marker, i;
    for (i = 0; i < markers1.length; i++) {  
        marker = new google.maps.Marker({
            position: new google.maps.LatLng(markers1[i][1], markers1[i][2]),
            map: map1,
            shadow: shadowi,
          icon: image
        });

        google.maps.event.addListener(marker, 'click', (function(marker, i) {
            return function() {
                infowindow.setContent(markers1[i][0]);
                infowindow.open(map1, marker);
            }
        })(marker, i));
    }
}
var标记1=[
[Bondi Beach',-33.890542151.274856],
[Bondi路-33.89457151.26826],
[惠灵顿街-33.89136151.26474],
[Bondi路-33.89457151.26826],
[Belleve Hill',33.88673151.25839],
[Belleve路-33.88424151.25427],
[Blair St',33.88509151.27058],
[Wollahra',-33.88951151.24500],
[Double Bay',-33.87783151.23985],
[Kings Cross',-33.87498151.21788],
[Shaw St',33.88110151.27088],
[Coogee Beach',-33.923036151.259052],
['Cronulla Beach',-34.028249151.157507],
[‘曼利海滩’,-33.80010128657071151.28747820854187],
[‘悉尼以西’,-33.87270,151.15746],
[‘马鲁布拉海滩’,-33.950198151.259302]
];
函数初始化hotell(){
警报(“初始酒店”);
var latlng=新的google.maps.latlng(-33.92151.25);
变量myOptions={
缩放:10,
中心:拉特林,
mapTypeId:google.maps.mapTypeId.ROADMAP,
mapTypeControl:false
};
var map1=new google.maps.Map(document.getElementById(“Map_canvashotell”),myOptions);
image=新的google.maps.MarkerImage(“http://www.mydomain.com/images/googlemap/info.png,新的google.maps.Size(32,45));
shadowi=新的google.maps.MarkerImage(“http://www.mydomain.com/images/googlemap/shadow.png,新的google.maps.Size(51,37));
var infowindow=new google.maps.infowindow(),marker,i;
对于(i=0;i
我想我必须改变它在循环中的位置:新的google.maps.LatLng(markers1[I][1],markers1[I][2]),但我不确定如何改变。 因此,非常感谢您的任何意见,谢谢

typeObject = {
    "hotel" : {
         "icon" : "HERE_IS_YOUR_ICON",
         "shadow" : "HERE_IS_YOUR_SHADOW",
         "icon_size" : [32, 52],
         "shadow_size" : [62, 72]          
     },
    // continue for every type
}
现在有了一个JSON对象,其中的元素本身就是JSON对象。你稍微改变一下你的数组下面的例子

['Bondi Beach', -33.890542, 151.274856, "hotel"]
所以当你创建一个标记时

var icon = typeObjcet[markers1[i][3]]['icon'];
var shadow = typeObjcet[markers1[i][3]]['shadow'];
var iconSize = typeObjcet[markers1[i][3]]['icon_size']; 
var shadowSize = typeObjcet[markers1[i][3]]['shadow_size'];    

marker = new google.maps.Marker({
            position: new google.maps.LatLng(markers1[i][1], markers1[i][2]),
            map: map1,
            icon: new google.maps.MarkerImage(icon, new google.maps.Size(iconSize[0], iconSize[1])),
            shadow: new google.maps.MarkerImage(shadow, new google.maps.Size(shadowSize[0], shadowSize[1]))
 });                
我想它可以被修饰,但这是一个动态类型的粗略示例。您只需在typeObject上为所需的每个类型填充数据,并通过初始数组中的type属性访问它

更新

当然可能是这样

  typeObject = {
        "hotel" : {
             "icon" : new google.maps.MarkerImage("red.png", new google.maps.Size(32, 42)),
             "shadow" : new google.maps.MarkerImage("shadow.png", new google.maps.Size(58, 68))         
         },
        // continue for every type
    }

    var icon = typeObject[markers1[i][3]]['icon'];
    var shadow = typeObject[markers1[i][3]]['shadow'];

    marker = new google.maps.Marker({
                position: new google.maps.LatLng(markers1[i][1], markers1[i][2]),
                map: map1,
                icon: icon,
                shadow: shadow
     });  

我可以回答如何构造包含正确信息的json对象。但是除了图像,你还想保存什么呢?大小,shadow?如果我理解正确,您需要将您放入MarkerImage中的信息保存在json对象中,并按类型访问该信息(这将是您访问详细信息的密钥)alkis,谢谢。我需要大小和阴影,我想这就是我所需要的。例如:如果我设置type=“restaurant”,那么我想显示red.png,如果它是a type=“hotel”,那么我想显示gren.png等等,以获得更多类型。感谢的可能重复,我尝试了:bar=new google.maps.MarkerImage(../images/icons/bar.png),new google.maps.size(32,32)); 然后['Bondi Beach',33.890542,151.274856,bar],这个:icon:markers1[i][3],但它不起作用。为什么我不能在数组中设置变量栏?如果我设置:['Bondi Beach',-33.890542151.274856,…images/icons/bar.png'],那么它可以工作,但我不知道如何设置图标的大小?我必须测试你的密码。谢谢。你的第一个评论是错误的。我使用typeObject是有原因的。如果你想根据我的建议做其他事情,那么更新你的问题,这样我就可以看到你想要什么。除非你确定自己在做什么,否则不要拿我的例子举例。如果你不这样做,那就直截了当地说,完全按照我所说的去做。我使用typeObject实现可伸缩性。您可以将大小放入初始数组中,图标和阴影也可以。但是,假设你有两个地方的类型是hotel,你必须在这两个地方放置相同的数据(图标、阴影等)。这样,你把你想要的所有数据都放在typeObject中,然后根据你在初始数组中的类型找到它们。我的意思是,在你发布你的示例之前,我已经测试过了,明天我会测试它。