在Map框词汇表中,Mapbox.js
Mapbox.js是一个JavaScript库,允许你在网站上添加一个交互式Map。它是一个Leaflet插件,是一个开源库,可以免费使用。
和Mapbox GL JS
Mapbox GL JS是一个JavaScript库,使用Mapbox GL渲染交互式Map。它是一个免费使用的开源库。您可以将Mapbox样式或使用Mapbox Studio创建的自定义样式添加到您的Mapbox GL JS应用程序中。
以及从this answer
Mapbox样式是用于Mapbox GL和原生iOS和Android SDK的。你不能使用经典的Mapbox JS。Mapbox JS支持光栅瓦片,你不能样式化那些。他们只是图像。Mapbox GL和原生SDK的(可以)使用矢量瓦片,那些是样式化的。
我相信我可以使用mapbox.js
作为leaflet
、css
和js
源代码的替代品,但是我可以对mapbox-gl.js
做同样的事情吗?
这两个库之间还存在哪些不同之处?
8条答案
按热度按时间cwdobuhd1#
据我所知,Mapbox GL JS将取代当前在后台使用Leaflet的Mapbox JS。Leaflet做的很多事情,GL也可以做,甚至更多。但不是所有的事情。反之亦然。GL可以做Leaflet做不到的事情。GL的最大特点是它是使用WebGL围绕矢量图块构建的。从介绍文章中可以看到:
宣布Mapbox GL JS -一个快速而强大的新的网络Map系统。Mapbox GL JS是一个客户端渲染器,所以它使用JavaScript和WebGL动态绘制数据的速度和流畅的视频游戏。而不是固定的风格和缩放水平在服务器级,Mapbox GL把权力JavaScript,允许动态样式和自由形式的互动。矢量Map是下一个演变,我们很高兴看到开发人员用这个框架构建了什么。
如果你真的想对这两个框架进行比较,很抱歉据我所知没有。在进行比较时有太多的事情需要提及/考虑,所以最好你根据自己的需求自己做这件事。一个好的开始是比较每个框架的例子,因为它给出了一个很好的概念,这两个框架都可以做什么:
之后,您可以比较他们的API:
有一点需要记住的是GL是全新的,我们开发人员都知道这是有代价的。有些问题还没有解决。至于Leaflet,它非常成熟,广泛使用,并且经过了很好的测试/证明。如果你想了解GL目前存在的问题,你可以看看Github的存储库中的问题:
nuypyhwy2#
iH8回答非常好,再补充一点细节:
对于 * 底图 *,Mapbox.js显示栅格图块(PNG & JPEG)文件,并使用HTML & CSS显示它们。Mapbox GL JS显示矢量图块(花哨的协议缓冲区),并使用WebGL显示它们。它也可以显示栅格图块,但这不是重点。
Mapbox.js和MapboxGLJS都支持GeoJSON图层和标记之类的覆盖。两者都是开源的,有着相似的许可证和一些共享的贡献者。
Mapbox.js图层的样式存储在服务器上,并使用服务器技术呈现。Mapbox GL JS的样式在浏览器中动态呈现,因此可以实时更改。
Leaflet提供了更广泛的浏览器支持,代价是一些浏览器无法支持的功能,如Map倾斜和旋转。Mapbox GL支持支持WebGL的浏览器,在较新的计算机上性能最佳。它有一个本地版本,称为Mapbox GL Native,在所有移动的上性能都很好。
不管名称如何,您可以将Leaflet与Mapbox和Mapbox.js以及Mapbox GL与非Mapbox样式一起使用。
xfb7svmp3#
我目前正致力于将一个复杂的基于Leaflet的Map系统切换到Mapbox GL,我发现一个显著的不同之处在于绘图工具和GeoJSON图层的处理。Leaflet有一套绘图工具,包括非标准的GeoJSON,如标记、矩形和圆形。Mapbox GL的开发者决定专注于原生GeoJSON。这意味着没有对绘制/渲染圆形和矩形的开箱即用支持(例如,Mapbox GL中没有类似L.Circle的东西);有一个标记,但样式看起来像一个传统的Leaflet标记需要创建自己的sprites或使用SVG。所有这些事情仍然是可能的,但他们需要更多的设置对部分开发人员比他们在Leaflet。
此外,大多数Mapbox GL图层都呈现为画布元素。这意味着,与Leaflet不同,没有HTML元素与您的各个图层相关联。这使得在需要时很难使用CSS定位元素。我在这里发现的一个例外是标记,它呈现为单独的HTML元素。
尽管如此,我已经能够几乎完全复制现有的绘图工具和渲染风格,只有一些小的差异。如果你需要高度定制的绘图工具,Mapbox GL可能会让你感到沮丧。
浏览器支持也被认为是一个潜在的问题。任何支持WebGL的浏览器都可以运行Mapbox GL。这包括所有主流浏览器。我们看到的唯一不支持Mapbox GL的浏览器是IE10或更老版本,但我们的分析表明,几乎没有用户仍然使用这些浏览器,所以我们正式放弃了对它们的支持。您的里程可能会明显不同。
总的来说,我对这个转换很满意,因为我认为Mapbox GL更容易使用,提供了更好的用户体验。
bihw5rsg4#
一般来说,Leafletjs和Mapbox.js是相同的,但Mapbox.js具有 Package Leaflet并绑定到Mapbox服务的插件和扩展(例如方向)。其他公司或产品也有类似的插件和功能,Leaflet可以使用它们来补充或代替Mapbox。基于Leaflet的库通常具有更好的传统浏览器支持,使用光栅瓦片,所述特征被添加,其结合了像矢量瓦片(pbf、mvt等)和各种渲染器(包括webgl)的现代特征。
Mapbox-gl-js和原生变体mapbox-gl是开源库,针对矢量切片进行了高性能和高度优化(pbf,mvt)和webgl,用于将渲染到画布元素中(对于-js变体)。它是相对较新的,因此使用Leaflet容易的一些事情可能不同或具有挑战性(截至2016年4月),也就是说,它们非常相似,而且运行良好,包括在移动的设备上(从过去几年,如iPhone 5 s)。一个随机怪癖的例子是,希伯来语标签在以色列,读从右到左,是落后的,看起来像废话(这是一个开放的问题正在解决)。
如果放弃旧的浏览器支持是可以的,请转到Mapbox-gl(-js)route可以是一个很好的选择。在我有限的经验中(使用了几个月)它拥有最好的用户和开发者体验,Mapbox在工程/输出方面一直保持一致。我对他们的付费服务经验较少,也不清楚他们的库与这些服务的结合有多紧密。对于一个移动的项目,我搬到了mapbox-gl-js在看了谷歌Map,传单v0.7和v1,这似乎是一个很好的决定。
我开始使用Mapbox-gl-js之前的传单经验和熟练的HTML/CSS/JS,并发现the primer和examples都有助于理解技术细节。(不是CSS)。还要仔细看看服务条款,这是一个重要的正面区别特别是与Google相比。Mapbox的服务不在美国以外没有最强大的覆盖范围,所以一定要给予这个一些审查以及(在我的经验,另一个提供商通常是可用的,所以这不一定影响决定采用的库,他们只是非常紧密地耦合到Mapbox的功能或标准)。
lfapxunr5#
我们从Leafletjs过渡到Mapbox-gl-js已经有一年多了。我们切换是因为我们想利用矢量图块功能。总体来说,我们喜欢Mapbox-gl-js,尽管我们遇到了一些小问题。
我们在使用Mapbox-gl-js时遇到了一些内存问题(因为WebGL是一个“Pig”),特别是我们的一些矢量图块。你一定要注意图块本身存储了多少数据。
我们遇到的另一个问题是与政府机构合作,他们的PC由于安全性而被锁定到第N级,例如在操作系统级别关闭WebGL支持(他们喜欢锁定一切,无论什么)。这是一个杀手,因为Mapbox-gl-js没有WebGL就无法工作,让政府机构改变安全策略并不是一件容易或快速的事情。不幸的是,如果用户没有WebGL,似乎没有任何一种简单的后备方案。我们仍在寻找解决这个问题的最佳方案。
yvt65v4c6#
对于有使用Mapbox.js或Leaflet构建WebMap经验的开发人员来说,将旧项目切换到使用Mapbox GL JS可以显著提高现有应用程序的性能。Mapbox GL JS使用WebGL客户端渲染来显示Map,从而加快加载速度,在缩放或平移时实现平滑过渡,并且在动态更改Map数据和样式方面有更大的灵活性,这些改进使得切换到MapboxGLJS非常值得,所以我最近将Peter的Courier演示从Mapbox.js转换到了GL
dfty9e197#
Mapbox.js
Map框GL JS
文章还举例说明了两者的异同。
ev7lccsx8#
如果你打算在一个页面上绘制超过10张Map,我建议你不要使用mapbox-gl。Mapbox-gl使用WebGl来动态绘制Map。尽管所有的现代浏览器都支持WebGl,但当打开太多WebGl上下文时,我们会遇到问题。太多是主观的,取决于你的客户端使用的浏览器。上下文的数量似乎也是独立于选项卡的,因此如果您的客户端打开了一个选项卡,而该选项卡已经使用了“太多”上下文,那么您的Map可能会因此而无法呈现。
以下是几个相关的问题:
https://github.com/mapbox/mapbox-gl-js/issues/6312
https://github.com/mapbox/mapbox-gl-js/issues/7332
我从来没有用过mapbox.js或传单,但对于需要10个或更多Map的页面,我绝对建议不要使用mapbox-gl。