我有一个用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"
}
});
});
但是只显示文字而不是图标。
问题是:我如何在这张地图上添加一个普通的基本彩色标记,甚至不是其中一个特殊图标?
感谢。
答案 0 :(得分:12)
问题在于Mapbox Studio中您的样式的起点(您选择的模板)没有您在图层布局中引用的字形/精灵。如果您切换到他们在您使用的示例中使用的相同样式:
mapbox://styles/mapbox/streets-v8
您会看到标记出现。这是因为他们已被添加到那种风格。如果你换回你的风格,它们就会再次消失。
这是你的风格精灵的console.log:
这是一个关于Mapbox街道精灵的console.log:
正如你所看到的,你只有两个,而mapbox有几十个(比屏幕截图更多)。只需使用属性名称default_marker
和secondary_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是一个软件工具,因此在stackoverflow上就是“offtopic”。
如果你甚至不需要精灵/字形,你也可以使用type: circle
和paint
属性创建简单的圆圈:
map.addLayer({
"id": "markers",
"source": "markers",
"type": "circle",
"paint": {
"circle-radius": 10,
"circle-color": "#007cbf"
}
});
关于Plunker的示例:http://plnkr.co/edit/QDtIBtDIimKy6TUmKxcC?p=preview
有关样式和精灵的更多信息,请点击此处: