Google Maps数据驱动样式:部分国家无法在要素图层着色问题
问题:Google Maps数据驱动样式无法为特定国家着色
我正在使用Google Maps新的数据驱动样式创建自定义地图,为指定国家着色。多数国家均可正常着色,但俄罗斯、乌克兰、阿根廷、智利、印度这五个国家无法实现着色。注:最终仅需为部分国家着色,其中包含乌克兰和印度,测试中发现另外3个国家也无法访问。我制作了一个示例,除上述五个国家外其余国家均已着色。通过输出要素图层循环中的feature.displayName发现,这五个国家从未被获取进行样式设置,且已排查过是否存在别名或拼写差异。
示例代码:
const countries_all = ["Chile", "Russia", "Argentina", "India", "Ukraine"]; function initMap() { let featureLayer; let map; map = new google.maps.Map(document.getElementById('mapbox'), { center: { lat: 16.6310, lng: 66.76005 }, zoom: 2, mapId: 'a8540ac9b4094555', }); // Add a feature layer for localities. featureLayer = map.getFeatureLayer(google.maps.FeatureType.COUNTRY); featureLayer.style = (placeFeature) => { if (countries_all.includes(placeFeature.feature.displayName)) { return {fillColor: '#007DB3', fillOpacity: 0.8} } } }
解决方案
问题核心是依赖displayName匹配国家名称不可靠,Google Maps Feature Layer中部分国家的displayName包含额外区域信息或格式差异,导致匹配失败。最稳定的方案是使用ISO 3166-1标准国家代码进行匹配。
修改步骤:
- 替换国家列表为对应ISO 3166-1 alpha-2代码:
// ISO 3166-1 alpha-2代码:智利(CL)、俄罗斯(RU)、阿根廷(AR)、印度(IN)、乌克兰(UA) const countries_all = ["CL", "RU", "AR", "IN", "UA"]; - 修改样式回调函数,通过Feature的
isoCode属性匹配:featureLayer.style = (placeFeature) => { const isoCode = placeFeature.feature.properties.isoCode; if (countries_all.includes(isoCode)) { return {fillColor: '#007DB3', fillOpacity: 0.8} } }
备选方案(使用标准化名称匹配)
如果坚持用名称匹配,需使用Google Maps返回的标准国家名称:
- 俄罗斯对应
"Russian Federation" - 乌克兰对应
"Ukraine" - 阿根廷对应
"Argentina" - 智利对应
"Chile" - 印度对应
"India"
修改后的国家列表:
const countries_all = ["Chile", "Russian Federation", "Argentina", "India", "Ukraine"];
ISO代码匹配不受语言、区域设置影响,是更推荐的方案。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

