Google maps 向数据层添加几何图形-如何在添加期间设置要素样式?

Google maps 向数据层添加几何图形-如何在添加期间设置要素样式?,google-maps,google-maps-api-3,Google Maps,Google Maps Api 3,我正在建造一个学校层。对于每个学校,我将根据其属性指定不同的图标 这是我目前的解决方案。我首先将所有学校插入数据层,然后运行forEach函数更改每个点的图标。这不是最优的,因为我正在添加学校,然后立即编辑学校 // Current solution. It is WORKING but it is not optimal schools = (a list of google.maps.Data.Point objects) for (school in schools) { s

我正在建造一个学校层。对于每个学校,我将根据其属性指定不同的图标

这是我目前的解决方案。我首先将所有学校插入数据层,然后运行
forEach
函数更改每个点的图标。这不是最优的,因为我正在添加学校,然后立即编辑学校

// Current solution.  It is WORKING but it is not optimal

schools = (a list of google.maps.Data.Point objects)

for (school in schools) {
    schoolLayer.add({
        geometry: school,
    });
}

schoolLayer.forEach(function(feature) {
    schoolLayer.overrideStyle(feature, {
        if (some condition) {
            icon: ...
        } else {
            icon: ...
        }
    }
}

最佳的解决方案是在添加样式时将样式添加到学校,这样以后就不需要编辑了。大概是这样的:

// The solution I am trying to achieve.  The `StyleOptions` property is made up to represent what I am trying to achieve.  I want to add styles to the school as it is being inserted into the data layer

for (school in schools) {
    schoolLayer.add({
        geometry: school,
        StyleOptions: {
            if (some condition) {
                icon: ...
            } else {
                icon: ...
            }
        }
    });
}

上述代码不起作用。文档中有什么我没有做到的吗?

我建议创建一个
google.maps.Data.Feature
对象列表,而不是
google.maps.Data.Point
对象
Data.Feature
可以包括作为
google.maps.Data.Point
实例的几何体在您的情况下,可以是字符串或数字的id以及可以放置名称-值对的属性

特性中属性的存在会造成一个恶作剧。您可以为数据层应用样式设置函数,该函数读取要素的属性(在您的案例中为图标)并返回相应的样式。将要素添加到数据层时,将应用样式功能

看看下面的代码示例,
schoolLayer.setStyle()
是最相关的部分

var映射;
函数initMap(){
var学校=[
新的google.maps.Data.Feature({
几何:新的google.maps.Data.Point({lat:41.384301,lng:2.173792}),
id:1,
特性:{
“图标”:”http://maps.google.com/mapfiles/kml/paddle/blu-blank.png"
}
}),
新的google.maps.Data.Feature({
几何:新的google.maps.Data.Point({lat:41.384897,lng:2.176656}),
id:2,
特性:{
“图标”:”http://maps.google.com/mapfiles/kml/paddle/pink-blank.png"
}
}),
新的google.maps.Data.Feature({
几何:新的google.maps.Data.Point({lat:41.386756,lng:2.175268}),
id:3,
特性:{
“图标”:”https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png"
}
})
];
map=new google.maps.map(document.getElementById('map'){
缩放:17,
中心:{纬度:41.385064,液化天然气:2.173403}
});
var schoolLayer=map.data;
schoolLayer.setStyle(功能(特性){
返回{
图标:feature.getProperty(“图标”),
标题:“+feature.getId()
};
});
(学校之学校){
添加(学校);
}
}
#地图{
身高:100%;
}
html,正文{
身高:100%;
保证金:0;
填充:0;
}


请提供一个示例来说明您的问题。@geocodezip没问题。我删除了尽可能多的代码,但没有遗漏要点。它仍然不起作用。如何重现该问题?@geocodezip您正在查看哪一段代码?第一块代码运行良好,但不是最佳解决方案。第二块是我试图实现的解决方案,我将
StyleOptions
作为一个属性。我重新写了这个问题,让它更清楚。现在看起来有点合理了,但在我有时间让它发挥作用之前,我无能为力。A会缩短时间,但是,我现在正在旅行,所以无论如何都需要一段时间。是的,这很有效。现在我不再需要执行
ForEach
函数。谢谢