比较各种JavaScript映射库?


138

我正在开发基于Web的地图系统,并且试图找出要使用的库。

这些是可用库比较的链接:

在此处输入图片说明

到目前为止的库列表:

  • 谷歌地图
  • Microsoft虚拟地球
  • MapQuest
  • 传单 -“注释的更小,更快,更新和更直接也可以理解为更少的功能和更少的测试。” -地理(见下文)
  • ArcGIS API for JavaScript-与ArcGIS Server配合使用效果最佳(请参见下文)。还提供了Google MapsBing maps扩展,使您可以将ESRI API与Google / Bing maps一起使用(尽管大多数库都是这样)。
  • Yahoo Map API的
  • 通过米其林
  • OpenLayers-广泛的文档和大量功能,以及使用不同地图提供者的能力。
  • Mapquery -MapQuery已发布,现在有一些有用的文档。它具有将OpenLayers和jQuery结合在一起的非常有价值的目标。如果您特别热衷于OpenLayers + jQuery的想法,或者您想为JavaScript映射库做出贡献,请参与并做出自己的努力。但是,如果您只是想成为最终用户,或者是该领域的新手,那么可能不适合您。
  • Mapstraction-使事情变得非常简单,尤其是与多个底图提供程序一起使用时。但是,这项工作仍在进行中,功能和文档都缺乏。(例如,“类型为“ FeatureCollection”的GeoJSON对象是要素集合对象。”不是很有用。)看来它仍在积极开发中,但截至2011年4月4日,尚未在Github上提交从一月份开始。
  • deCarta-具有移动和桌面Javascript-第一个兼容HTML5 / CSS3,第二个具有更多的浏览器兼容性。提供的源代码。商业API的最友好的开发人员条款。您可以在地图上加上商标,并且有几种不同的地图样式。您可以选择NAVTEQ或OSM数据。他们也有几个移动API。-由DeCarta员工TheSteve0编辑
  • 云制造
  • Polymaps-使来自许多不同来源的栅格和矢量数据的合成非常容易。让您轻松添加自己的颜色,分组和交互。运行速度快,可以很好地管理背景图块加载,并且只有30k的Javascript。潜在的不利之处:它使用SVG,这意味着它不能并且不能在MSIE 7或8中运行。它在所有其他浏览器中都可以正常运行,并且应该在IE9中运行。
  • 跳转 -跳转是一种轻量级的地图库,可以单独运行,也就是说,它不是OpenLayers或GoogleMaps API的包装。当前它正在开发中,但是许多基本功能都可以正常工作。
  • ModestMaps-来自Mapbox和TileMill的制造商的另一个更小,更快,更新的JS映射库。
  • 绘图者

我现在正在使用OpenLayers。您可以使用它做很多事情,它支持大多数数据类型。但是,这并非对所有事情都是最好的。例如,Leaflet在许多方面看起来都比较平滑,包括图像淡入和其他视觉调整。如果您喜欢jQuery,则可能想看看MapQuery,它类似于jQuery和OpenLayers的组合。

Answers:


93

该问题已转换为“社区Wiki”,并且Wiki已锁定,因为它是一个问题的示例,它寻求答案列表,并且似乎很受欢迎,可以防止其被关闭。应该将其视为特殊情况,并且不应将其视为鼓励在此或任何Stack Exchange网站上使用的问题类型,但是,如果您希望向其中贡献更多内容,请随时通过编辑此答案来这样做。 。


对于非GIS后台开发人员创建单功能地图绘制应用程序-我可能会推荐Leaflet(现在由MapBox支持)。易于使用且体积小。更多功能取决于质量和支持各不相同的插件。

GIS在线类型应用程序-使用OpenLayers3-在单个库中具有全套数据源,控件等。它也可以用于简单的地图绘制应用程序,因此,如果您有混搭的话,那么我会用它来做所有的事情。

Google仍然具有库/数据组合(例如,StreetView在其他任何地方均不可用)。

Esri具有GUI Web应用程序构建器,如下所述,如果您已经使用了它们的堆栈,为什么还要使事情变得复杂。

商业API(Google,Bing,Yahoo)

使用任何商业API都会使您不受提供商对API或服务条款所做的任何更改的约束。例如,如果突然您的使用Google Maps的地方政府门户网站突然弹出广告,该怎么办?是否想为Intranet网站重复使用您的JavaScript Google Maps代码?您会发现自己必须支付10,000美元的许可费。

Microsoft通常对服务(如果付费)有更明确和固定的条款,因此此处的风险可能较小。

最近对Twitter的强烈反对是开发人员在其下更改了API的一个很好的例子。如果您不支付服务费用,那么您(或您的系统)就是被出售的服务。

Google 从2011年10月开始对使用他们的地图收费

埃斯里

正如其他人提到的那样,如果您使用的是Esri堆栈,那么毫无疑问,ArcGIS API for JavaScript可以在此之上很好地工作。来自GIS的背景Esri可能比“新地理”网络巨头更多地考虑了传统的GIS任务和功能(尽管这只是一种看法/感觉)。

OpenLayers 内置了对ArcGIS REST图层的支持,如果您希望对非基于ESRI的网站重用代码,那么开放式API再次为您提供了最好的选择。

使用OpenLayers ...

我真的不知道为什么开发人员会使用OpenLayers以外的API。开放源代码项目会导致相关的开放源代码项目,因此存在大量可重复使用的组件,例如GeoExt库MapQueryGeoPrisma

我只想补充一点,仅仅是因为项目是开源项目并不能自动使其比商业上的同类项目更好-但是在这种情况下,OpenLayers API可以与商业竞争者匹敌,并且可以查看源代码的工作方式,单元测试,构建脚本等意味着您可以轻松地在其之上构建新功能。

最近对 OpenLayers 提出了一些批评,主要与复杂性,样式和大小有关。OpenLayers的主要开发人员之一Christopher Schmidt 在这里这里都提出了反对意见。

值得注意的是,如果您需要一个简单的开源映射API,请查看Cloudmade的Leaflet

注释更小,更快,更新和更直接,也可以理解为功能较少和测试较少。

扫描API文档中的LeafletOpenLayers。后者包括诸如WFS图层,编辑工具和SLD支持之类的项目。它也已经在许多不同的环境中进行了测试,并且可以在IE6中运行(允许政府和地方当局用户使用)。

为了更简单地显示空间数据,Leaflet看起来很理想,并且更容易上手。但是,我将坚持使用OpenLayers开发功能更丰富的GIS应用程序。

注意事项

可能的弊端是,通常在商业提供商的系统中首先会看到新的创新-但是,这些创新几乎总是及时过滤到OpenLayers中。

最后,我确定在某些情况下其他API更合适-在自定义硬件上,以适合其他IT系统的组织,或者如果您已经完全了解API并可以在一半的时间内开发出系统。

您提到的所有API都可以生成出色的在线地图绘制系统,但是您的选择也应符合您或公司未来的发展需求。


50

javascript映射前端有一个新播放器-Leaflet。由CloudMade在BSD许可下开发。

看起来真的很有希望。

在此处输入图片说明

来源


3
哇,这似乎是一个令人印象深刻的图书馆。令我惊讶的是我没有意识到这一点。
dkroy 2011年

2
这是对传单和openlayers导航行为的比较
dkroy

2
不错的流程图。传单实际上真的很好。
Mr_Chimp 2011年

7
在尝试将Leaflet用于一些更复杂的事情之后,我必须承认与OpenLayers或GeoExt相比,Leaflet相当有限。设置非常容易,看起来非常漂亮,但是在交互方面您的工作受到限制。同样,每个都有它的位置。
Mr_Chimp

3
图表(从2012年1月)更新的副本,请访问:geotux.tuxfamily.org/index.php/en/geo-blogs/item/...
威尔。

35

我有一个Google Maps / arcgis api项目,大约一年前,我决定尝试OpenLayers。我越喜欢它,就越喜欢它,所以我决定迁移。在整个代码中,我一遍又一遍地将30-100行的Google代码缩减为1-3行。仅仅是因为OpenLayers对我想做的事情很感兴趣,并且不得不为Google地图手动编写代码。


2
都很好。感谢您的输入!我不确定是否有正确的答案,因此意见和轶事是否有用。
Mr_Chimp

2
+1如果任务要显示的不仅仅是一堆充满标记的手,我总是会选择OpenLayers而不是Google Maps。
Underdark

20

CartoDB是用于在PostGIS中分析,可视化和共享您的地理空间数据的工具。这是一个提供SQL API层的开源地理空间数据库平台。它允许开发人员查询针对地理空间目的而优化的云PostrgreSQL + OpenGIS数据库。

在此处输入图片说明



12

我将以下代码(带有重点和注释)进行比较:

  • MapQuest
  • 谷歌地图
  • bing
  • 奥维
  • 埃斯里
  • OpenLayers
  • jQuery Geo

此处:http//trippingthebits.com/geopres/

帖子是针对我在jQuery Geo上提供的演示文稿,可惜的是您的列表中没有该演示文稿。


那是一篇好文章。我喜欢您的颜色编码!很好的主意。
Mr_Chimp

jQuery Geo FTW!
Sameer 2014年

1
谢谢@SameerAlibhai!敬请期待,我们即将发布发布候选版本1。
ryanttb 2014年

11

我想在浏览器中可视化地球仪Cesium是个不错的选择。(无需插件即可使用,但浏览器需要WebGL支持)

可以显示3D,2D和2.5D视图

铯支持3D,2D和2.5D

支持不同的栅格/矢量格式(KML等)

支持differnet栅格/矢量数据

自由控制相机和相机飞行

控制相机

...以及(现代)浏览器中的所有内容。


2
哇,这真的是一个非常不错的项目!:)
Krystian

1
是的,但是您能否向我们解释为什么Cesium不支持(以及许多其他标准)标准WFS(Web功能服务)?在我看来,这是一个功能非常强大的查看器,但根本不是GIS系统。
Web-GIS企业家

11

我没有能力做一个全面的比较,但是我已经用Polymaps完成了三个不同的小型项目,对此可以发表评论。它的主要优点是使来自许多不同来源的栅格和矢量数据的合成变得非常容易。它可以满足您的所有要求,尤其是在轻松添加自己的颜色,分组和交互方面。Polymaps的效率也很高:它运行速度很快,可以很好地管理背景图块的加载,并且只有30k的Javascript。

Polymaps的主要缺点是它使用SVG,这意味着它不能也不能在MSIE 7或8中运行。它在所有其他浏览器中都可以正常运行,并且应该在IE9中也可以运行,但是我不确定它是否经过了良好的测试。SVG也是一种优势:它易于编程,并且呈现效果很好,尤其是以小增量缩放矢量和栅格特征。

关于库的一个警告:如果要使用Google的栅格图块作为底图,则必须使用其Javascript库。OpenStreetMap等具有更多允许的许可证,允许您选择库。

(此答案来自2011年,发生了很多变化。不再维护Polymaps。此时,Leaflet是首选的开源库。)


4
只是我的答案的更新;Polymaps两年来没有任何进展。它仍然是一个有趣的库,具有一些独特的功能,但是我不会在新项目中使用它。这些天,我正在使用Leaflet。
尼尔森

9

我是制图学的研究生,也是Web映射的新手,但是我一直在研究一个项目,比较那里的各种技术,并为Web映射入门编写了基本的“操作方法”指南。我的分析绝不是全面的,并且我一直在尝试通过与每个库一起玩耍以及通过经验丰富的程序员所发表的类似文章来了解每个库。我很高兴收到任何反馈。


(+1)感谢您的贡献-欢迎来到我们的社区!
ub

8

我发现Google融合表,polymap,openlayers和Cartographer.js之间的比较与以下示例图像:http ://gis-techniques.blogspot.com/2011/05/choropleth-mapping-techniques-for-web20.html?spref = tw


7

城市地图中的Mapfluence也在其中。托管的映射平台,提供基于Web的地理服务,可通过REST并使用JavaScript(改进的途中文档/教程)API进行访问。或OL(如果需要)。我们渲染自己的基础图块,具有按需数据的庞大目录,并支持数据和其他可视化查询。

请查看Wed在O'Reilly举办的有关地理服务+大数据的网络研讨会,以了解什么是地理信息。


7

您也可以看看Geomajas。这是一个用Java(包括使用GWT的Java客户端)编写的GIS框架。但是,当前正在开发一个插件,以使用JavaScript提供完整的客户端API。不太稳定,但值得一看。使用Geomajas的优点是后端和客户端之间的强大集成,它具有一些优点,包括能够轻松地将工作卸载到服务器上,并且特别为安全性而添加。


6

我会推荐ammap:http ://www.ammap.com 他们曾经有Flash地图,但是最近引入的JavaScript地图具有很多强大的功能。


4

如果您正在寻找数据可视化库,请从Highcharts背后的人员(包括我本人-当前受聘为软件开发人员)中查看Highmaps。它是免费的,用于非商业用途,可与移动浏览器(完全支持触摸)和旧版IE6(甚至是IE6)配合使用。支持高级动态功能,例如向下钻取和丰富的工具提示。

在此处输入图片说明 在此处输入图片说明



1
足够公平,已编辑。
Oystein 2014年

3

可以找到一种有趣的方法来比较JavaScript映射库中所需的功能(不限于此用例)。该方法由Richard Donohue等人在NACIS 2012活动上展示。有趣的部分是关于它们如何根据目的和所需功能进行分类的。



2

也许你也可以考虑苍鹭。它基于Ext和开放层构建,它们具有许多您可以自定义的模板。

另一个潜在的候选人是GeoJS

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.