我正在使用Mapbox,在我的本地主机中,它总是正确加载我的标记。然而,现在我部署了我的应用程序,它没有。
至少有时候,
我注意到,如果我加载页面,然后就在页面加载之前,我切换到另一个选项卡,然后等待5秒钟,然后回到我的应用所在的选项卡。它确实工作并加载标记。
此外,我得到的错误:源用户不存在于地图的样式中。
当我试图设置一个功能状态(当你悬停在侧边栏项目上,在标记没有加载的情况下):map.setFeatureState({Source:'user', id: i},{hover: true})
我还注意到映射。on('load',fn)
在标记未加载时不触发,因为如果我添加控制台。将日志记录在其中。
。。它不会被记录(当标记未加载时)
所以源代码没有加载。。。
所以,我猜这是某种类型的异步问题,或者是map的问题。on('load',fn)
可能会遇到某些竞争条件:https://github.com/mapbox/mapbox-gl-js/issues/6707.
这就是为什么当我给它一些时间,通过去另一个标签,然后回来,它工作。
但是我想不出解决办法。
我有这个loadUser函数,它对我的后端进行API调用,获取用户,然后调用map.on('load', fn)
当我得到用户时,我使用等待:
const res = await axios.get(`${apiUrl}?lat=${lat}&lng=${lng}`)
const users = res.data;
...
有人知道问题在哪里吗?为什么我的标记没有加载?
我的现场直播在这里:https://jamsesssion.com/
如果您检查并搜索文件:usersMap,您可以在那里看到代码。在chrome控制台中按cmd p并搜索文件。
这是代码:
async function loadUsers(map, lat = 52.5, lng = 13.4, apiUrl = `/api/users/near?lat=${lat}&lng=${lng}`) {
const res = await axios.get(`${apiUrl}?lat=${lat}&lng=${lng}`)
const users = res.data;
if (!users.length) {
alert('Oooops! \n\nThere are no registered users in the place you searched yet, If you live there, register to Jamsession and tell your friends!');
return;
}
const geoJsonMarkers = users.map( (place, i ) => {
const [placeLng, placeLat] = place.location.coordinates;
const position = { lat: placeLat, lng: placeLng };
return {
'type': 'Feature',
'geometry': {
'type': 'Point',
'coordinates': [position.lng, position.lat]
},
'id': i,
'properties': {
'name': place.name,
'genres': place.genres,
'photo': place.photo,
'slug': place.slug,
}
}
})
let markers = { 'features': geoJsonMarkers }
map.on('load', function() {
map.addSource('users', {
type: "geojson",
data: markers,
cluster: true,
clusterMaxZoom: 22,
clusterRadius: 50,
})
map.addLayer({
id: "singles",
type: "circle",
source: "users",
filter: ["!has", "point_count"],
paint: {
'circle-radius': {
'base': 10,
'stops': [[5, 20], [13, 50], [14, 60]]
},
// 'circle-color': '#ddffc8',
'circle-color': ["case",
["boolean", ["feature-state", "hover"], false],
'#ff4da6',
'#ddffc8'
],
}
});
}
您可能需要放置地图。在(‘加载’…)
loadUsers
函数之外执行code>request,以便映射等待loadUsers
请求完成。您还可以创建一个单独的函数来添加也等待loadUsers
请求的源和层。所以它可能看起来像:
map。on('load',function(){loadUsers(addSources)})
我试图弄清楚如何将lon/lat坐标上的GeoJSON列表加载到MapBox地图中。我想我已经很接近了,我只是不能让它真正起作用。 我在这里设置了一个演示页面:http://sandbox.charliehield.com/mapbox/ 这是GeoJSON文件: 超文本标记语言很简单: 和JS:
我在视图中使用mapbox,需要从JSON添加多个标记 这是我的JSON 下面是我如何运行脚本添加地图到视图 但是我想知道,我如何需要添加标记到map(对于json中的每个元素,我需要获得lat和lon)来映射。因为医生说我需要这样的Json var Geojson={type:'FeatureCollection',特性:[{type:'Feature',几何:{type:'Point',坐标:
我对mapbox/传单还不熟悉,我认为这是一个相当基本的问题,我在过去两天里一直在努力解决,尽管我已经尝试了几种方法,但我还是无法完全理解。 我正在通过geojson加载标记: 然后尝试根据Geojson数据中使用的标题更改大小或颜色等属性: geojson如下所示: 我错过了什么吗,因为我也试图通过使用 setIcon函数中的某个地方,但似乎没有工作。如果有人能给我指出正确的方向。这真的很合适。
拒绝加载脚本'https://api.mapbox.com/mapbox-gl-js/v2.1.1/mapbox-gl.js',因为它违反了以下内容安全策略指令:脚本-src'自己'。请注意,没有显式设置脚本-src-elem,因此脚本-src被用作后备选项。
我一直在使用mapbox户外光栅瓷砖服务器处理传单地图。Mapbox有一些现成的样式,其中大部分都列在这个答案中。这个的代码/url是这样的: 我喜欢这种风格。但我的问题是,我试图添加一个图像。我希望imageoverlay位于地图地形图形之上,但位于标签之下。所以我所做的就是进入mapbox studio创建这两种样式-基本上是户外样式,标签分开: 没有标签 仅标签 旧样式在左侧,带有分离图层的
我在GeoJSON上遇到了麻烦,是否有一个标记属性将标记不透明度设置为零?我目前正在使用mapbox加载标记,我的标记代码如下: 有人知道mapbox是否识别gejson中的不透明度属性吗?