通过 mapbox gl js 向 mapbox 中的地图添加一些基本标记

Posted

技术标签:

【中文标题】通过 mapbox gl js 向 mapbox 中的地图添加一些基本标记【英文标题】:Add some basic markers to a map in mapbox via mapbox gl js 【发布时间】:2016-05-16 20:33:09 【问题描述】:

我有一张使用 mapbox studio 风格的地图,但是我什至很难在其中添加一个基本标记,但是在标记应该出现的位置出现了文本,这表明标记会在那里。

下面是该地图样式的代码:

mapboxgl.accessToken = 'pk.eyJ1Ijoic21pY2tpZSIsImEiOiJjaWtiM2JkdW0wMDJudnRseTY0NWdrbjFnIn0.WxGYL18BJjWUiNIu-r3MSA';
var map = new mapboxgl.Map(
    container: 'map',
    style: "mapbox://styles/smickie/cikb3fhvi0063cekqns0pk1f1",
    center: [-30.50, 40],
    zoom: 2,
    interactive: false
);

这里从 api 的示例中添加了一些标记:

map.on('style.load', function () 

    map.addSource("markers", 
        "type": "geojson",
        "data": 
            "type": "FeatureCollection",
            "features": [
                "type": "Feature",
                "geometry": 
                    "type": "Point",
                    "coordinates": [-77.03238901390978, 38.913188059745586]
                ,
                "properties": 
                    "title": "Mapbox DC",
                    "marker-symbol": "monument"
                
            , 
                "type": "Feature",
                "geometry": 
                    "type": "Point",
                    "coordinates": [-122.414, 37.776]
                ,
                "properties": 
                    "title": "Mapbox SF",
                    "marker-color": "#ff00ff"
                
            ]
        
    );

    map.addLayer(
        "id": "markers",
        "type": "symbol",
        "source": "markers",
        "layout": 
            "icon-image": "marker-symbol-15",
            "text-field": "title",
            "text-font": ["Open Sans Semibold", "Arial Unicode MS Bold"],
            "text-offset": [0, 0.6],
            "text-anchor": "top"
        
    );
);

但是只显示文本而不显示图标。

问题是:我如何在这张地图上只添加一个普通的基本彩色标记,甚至不添加一个特殊图标?

谢谢。

【问题讨论】:

【参考方案1】:

这里的问题是,您在 Mapbox Studio 中的样式起点(您选择的模板)没有您在图层布局中引用的字形/精灵。如果您切换到他们在您使用的示例中使用的相同样式: mapbox://styles/mapbox/streets-v8 你会看到标记会出现。这是因为它们已被添加到该样式中。如果你切换回你的风格,它们又消失了。

这是您的样式精灵的控制台日志:

这是 Mapbox 街道精灵的 console.log:

如您所见,您只有两个,而 mapbox 有几十个(比屏幕截图上的多)。您可以通过简单地使用属性名称来使用您拥有的那些:default_markersecondary_marker


    "type": "Feature",
    "geometry": 
        "type": "Point",
        "coordinates": [-77.03238901390978, 38.913188059745586]
    ,
    "properties": 
       "title": "Mapbox DC",
       "marker-symbol": "default_marker"
    


map.addLayer(
    "id": "markers",
    "source": "markers",
    "type": "symbol",
    "layout": 
        "icon-image": "marker-symbol",
        "text-field": "title",
        "text-font": ["Open Sans Semibold", "Arial Unicode MS Bold"],
        "text-offset": [0, 0.6],
        "text-anchor": "top"
    
);

Plunker 示例:http://plnkr.co/edit/W7pfGHVBzJj8U3AmPyzf?p=preview

如果您需要更多,您必须在 Mapbox 工作室中将您想要使用的精灵/字形添加到您的样式中。不幸的是,这与“编程”无关,因为它与 Mapbox Studio 有关,Mapbox Studio 是一个软件工具,因此在 *** 上有点“离题”。

如果您甚至不需要精灵/字形,您也可以使用 type: circlepaint 属性来创建简单的圆圈:

map.addLayer(
    "id": "markers",
    "source": "markers",
    "type": "circle",
    "paint": 
        "circle-radius": 10,
        "circle-color": "#007cbf"
    
);

Plunker 示例:http://plnkr.co/edit/QDtIBtDIimKy6TUmKxcC?p=preview

更多关于样式和精灵的信息可以在这里找到:

https://www.mapbox.com/help/define-sprite/ https://www.mapbox.com/developers/api/styles/#Sprites https://www.mapbox.com/mapbox-gl-style-spec/#sprite

【讨论】:

注意,default_marker 已重命名为 marker-15。 ***.com/a/38061574/3625228我花了一段时间才弄清楚为什么它不起作用。 这些不是默认标记。默认标记就是你得到的docs.mapbox.com/mapbox-gl-js/example/add-a-marker。使用 addLayer() 似乎不可能做到这一点......但我仍然无法相信。

以上是关于通过 mapbox gl js 向 mapbox 中的地图添加一些基本标记的主要内容,如果未能解决你的问题,请参考以下文章

Mapbox GL JS getBounds()/fitBounds()

如何将 Mapbox Mapmatching API 输出与 mapbox-gl-js 一起使用?

在mapbox-gl-js中居中文本标签?

Mapbox GL js 可用图标

mapbox-gl-js 围绕 lat/lng 创建一个扇区?

我可以使用传单插件和mapbox gl js吗?