Google地图:如何在叠加层上绘制标签(国家/地区,城市名称等)

GRa*_*aAL 3 google-maps google-maps-api-3

我需要在Google地图上绘制一些图形。图形并不总是透明的,因此我想在图形上绘制文本标签(国家名称,城市名称等)。

对于图形,我使用叠加地图类型,它会显示在基础地图上。但是我无法在上面绘制标签吗?

我猜想应该有一种方法可以使用不同的样式设置两次绘制底图(因此,我对不带标签的地图进行样式化,放置我的叠加层,然后仅对带有标签的路线图进行叠加),但是似乎不行使用基本地图类型作为叠加层。我看到的另一种方法是仅通过组成URL来手动获得带有标签的图块。这可行,但据我了解,ToS禁止直接访问地图图块。

是否有可行且合法的方法来做到这一点?

这是jsfiddle,它说明了URL组成解决方案:https ://jsfiddle.net/GRaAL/jyr81p2c/

// here is how I get google maps tile with labels only
function getLabelsOnlyTile(coord, zoom) {
    return "https://maps.googleapis.com/maps/vt?pb=!1m5!1m4!1i" + zoom + "!2i" + (coord.x) + "!3i" + (coord.y) + "!4i512!2m3!1e0!2sm!3i353022921!3m14!2sen!3sUS!5e18!12m1!1e47!12m3!1e37!2m1!1ssmartmaps!12m4!1e26!2m2!1sstyles!2zcC52Om9mZixzLmU6bHxwLnY6b24!4e0";
}
Run Code Online (Sandbox Code Playgroud)

GRa*_*aAL 5

我发现它StyledMapType可以用作覆盖地图类型(具有相同的界面),因此我StyledMapType仅使用标签创建,而不是将其注册到地图类型注册表中,而是通过以下方式将其添加为覆盖:

var onlyLabels = new google.maps.StyledMapType([...], {name: 'labels'});
//draw useful data over map
map.overlayMapTypes.insertAt(0, new UsefulDataOverlay());
//and then draw labels over it
map.overlayMapTypes.insertAt(1, onlyLabels);
Run Code Online (Sandbox Code Playgroud)

完整的工作示例在这里:https//jsfiddle.net/GRaAL/jyr81p2c/2/