是否可以从Azure映射中删除标签?

时间:2019-06-28 00:40:50

标签: azure-maps

我想使用Azure Maps渲染静态地图(作为图像),该地图仅显示基本的世界视图,我将在上面放置几个图钉。我不希望显示海洋和国家名称的标签层。

浏览Azure Maps代码示例(https://azuremapscodesamples.azurewebsites.net/)我似乎找不到任何可以简化地图的内容。

Google地图通过将标签的可见性设置为false来支持此功能。旧版Microsoft Maps通过将labelOverlay设置为hidden来支持此功能。我想产生这样的内容:https://snazzymaps.com/style/209544/no-labels

如何将所有标签隐藏在Azure地图(或Bing地图)中,这样我可以得到一个简单的图像,其中我的针脚设置了标签,而所有其他标签都被删除了?

1 个答案:

答案 0 :(得分:1)

没有文档化的API,但是有一种不受支持的方式来实现。 Azure Maps中的基础地图使用Mapbox Vector Tile样式架构,这是一个开放标准。可以访问基本地图图层并隐藏所需的任何标签图层。这是一个代码示例,该代码示例隐藏了底图中的所有标签:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8" />

    <link rel="stylesheet" href="https://atlas.microsoft.com/sdk/css/atlas.min.css?api-version=1" type="text/css" />
    <script src="https://atlas.microsoft.com/sdk/js/atlas.min.js?api-version=1"></script>

    <script type='text/javascript'>
        var map;

        function GetMap() {

            map = new atlas.Map('myMap', {
                authOptions: {
                    authType: 'subscriptionKey',
                    subscriptionKey: '<YOUR AZURE MAPS KEY>'
                }
            });

            map.events.add('ready', function () {
                var layers = map.map.getStyle().layers;

                for (var i = 0; i < layers.length; i++) {
                    if (layers[i].type == 'symbol' && layers[i].source == 'vectorTiles' && layers[i].layout && layers[i].layout['text-field'] && layers[i].layout['text-field'] !== '') {
                        map.map.setLayoutProperty(layers[i].id, 'visibility', 'none');
                    }
                }

                //Add any your post map load code here.
            });
        }
    </script>
</head>
<body onload="GetMap()">
    <div id="myMap" style="height:100vh"></div>
</body>
</html>