用于在 MapBox FeatureLayer 中添加标记的 WebWorker
WebWorker to add markers in MapBox FeatureLayer
我正在用MapBox地图构建一个应用程序。我向服务器询问一个GeoJson文件,其中包含一个标记列表,已经根据猫鼬模式格式化,如下所示:
var poiSchema = new Schema({
type : { type:String, required:true},
geometry : {
type : { type:String},//point
coordinates : { type: [Number]} //lng, lat
},
properties:
{
"marker-color" : {type:String},
"marker-size" : {type:String},
"marker-symbol" : {type:String},
}
});
这样我就可以把结果
放在地图上 map.featureLayer.setGeoJSON(result_from_server);
无论如何,我有很多标记(大约 1000 个),需要一段时间......5-6秒:(
加载时,GUI 几乎卡住了,滚动像其他所有滚动一样非常非常慢。有没有办法在网络工作者中执行setGeoJSON
?谢谢
如果您实际分析了应用程序,您会发现导致性能问题的原因。是 DOM 操作让你陷入困境。问题不是标记的初始化,而是将标记和阴影 img 元素附加到 DOM 树以及浏览器必须执行的结果绘制。
很抱歉,你不能在javascriptworker中执行DOM操作。工作线程无权访问窗口对象,因此 Mapbox/Leaflet 无法运行。它甚至不会加载,因为库要做的第一件事是将自身 L 附加到窗口对象。此外,您不能将 Leaflet 对象从主线程发送到工作线程,因为它只接受可由结构化克隆算法克隆的值。这不包括具有方法的复杂对象,如 Leaflet 对象。
如果你真的想显示大量的标记,你可以尝试使用纯SVG,它可以更好地预制,或者你可以看看对它们进行聚类。
相关文章:
- 标记的实时更新,无需加载页面谷歌地图API V3
- 如何重新加载脚本标记
- 如果图像标记是用javascript编写的,并且需要用户输入,那么图像不会随页面加载吗
- 当select标记触发onChange事件时,从mysql数据库加载html表
- 加载/调整大小时未切换图像数据标记
- 如何通过脚本标记加载REST调用
- 加载XML并获取标记.从php更改为javascript
- 页面上的传单加载打开所有标记的弹出窗口
- jQuery没有在ajax请求的脚本标记中加载js文件
- 在 DIV 标记中动态加载页面
- 如何在地图加载后向谷歌地图添加标记
- 无法从 .each 循环加载谷歌地图上的两个标记
- 在 <对象> 标记中加载 SVG 时,将侦听器添加到 SVG 卸载事件
- 谷歌地图自动加载标记位置中的隐藏位置
- 如何将“跨源”标记添加到动态加载的脚本中
- 使用 FileReader 加载 CSV 以创建地图标记的 JS 对象 (地图 API)
- Google Map JS API-加载地图分幅,但所有图像(标记、缩放控制等)都不加载;t负载2分钟
- Javascript:用循环在谷歌地图上加载标记
- 谷歌地图API-在从ajax页面加载新数据之前清除标记、多段线
- 由于小叶中折线的距离不同,在折线上加标记