OpenLayers VS Google Maps?

我已经使用过几次谷歌地图,但是对于 OpenLayers有什么好奇的呢。
在开始任何形式的编程之前,这里有几个问题出现在我的脑海中,

  • 为什么我要使用 OpenLayers 而不是 Google Maps?
    • 除了它的开放源码软件许可证
    • 您是否遇到过建议绝对不要使用 OpenLayers 的情况?
    • 我做了 关于堆栈溢出的“ OpenLayers”搜索测试,答案不多。这是否意味着这种溶液使用不多?这会对项目的长期可行性造成问题吗?
  • 对于那些已经使用过 OpenLayers 的人: 我可能会遇到什么常见的陷阱或问题吗?
    • 使用 JavaScript 框架怎么样?我见过它使用 原型机,而且我知道 Prototype,所以这没问题。但是使用像 MooTools这样的其他东西怎么样呢?(与原型不兼容)
    • 是否存在与速度和性能相关的问题?我需要我的应用程序是响应和不能等待数小时得到地图显示。
  • 很多地方都有地图吗? 还是有很多地图不见了?
    • 也就是说,我在法国,需要我的申请至少为大城市工作... 这样可以吗?
    • 如果没有,是否很容易为 OpenLayers 找到图层和可视化并将其集成?
  • 是否有任何类型的 API 来显示道路?
    • 例如,显示只有单向的道路。
    • 如果是的话,我该怎么做?我必须要有一些文件包含这些道路信息,然后,在地图上显示他们自己吗?
  • 你知道什么好的 OpenLayers 教程吗?

我还没有试过,这些只是出于蓝色的问题..。

51657 次浏览

我还没有看到很多 OpenLayers 用户在 SO 上的表现,但是他们已经出现了。OpenLayers 邮件列表非常活跃(我在 用户戴夫上,每天看到50-100封讨论各种事情的电子邮件。你也可以从这些链接中搜索列表。).

我不能回答你们所有的问题,但有一件事我要说明的是,OpenLayers 和谷歌地图并不是相互排斥的。OpenLayers 是一个 javascript 库,你可以使用它与谷歌地图进行交互。看看这个例子: 使用谷歌地图的 OpenLayers。这是主 OpenLayers 示例页面

这不一定是 OpenLayers 或 Google Maps 的问题。毕竟你可以在 OpenLayers 中使用 GoogleMaps 作为你的地图背景。一些更具体的回答:

为什么是 OpenLayers

  • OpenLayers 可以组合来自不同来源的地图(Google Maps 背景、 WMS 覆盖图、来自 KML 或 GML 文件或 WFS 的矢量数据等)
  • 你可以设计 OpenLayers 的样式,远远超过你可以谷歌地图
  • 开放源码,可以在调试时检查源代码
  • 如果你需要高精度的地图,使用 OpenLayers 与一个合适的地图服务器后端,而不是谷歌地图,以获得更好的地图投影(谷歌地图假设地球是一个完美的球体)

陷阱

  • 如果你想使用来自其他服务器的向量数据,由于跨网站脚本的限制,你需要一个代理

表演

  • 主要取决于地图后端的速度
  • 显示多个矢量特性(限制是依赖于浏览器的,但是一个视图大于200)需要时间,但是这更多的是浏览器的问题而不是 OpenLayers 的问题

JavaScript 框架

  • 看看 GeoExt,例如,它是 ExtJS + OpenLayers

可用地图

  • OpenLayers 没有地图后端。你可以使用谷歌地图,雅虎地图,微软虚拟地球等,或任何 WMS 和 WFS 服务,你有访问

这实际上取决于您想要使用地图的目的。只要在地图上简单地标出点,谷歌地图就可以了。谷歌地图的地图层也非常详细。另一方面,OpenLayers 提供了更多的功能,并且具有很强的可扩展性。

OpenLayers 有很多例子可以帮助你入门。

至于地图,OpenLayers 只是一个 API,所以你需要提供它将地图层。谷歌地图 API 将仅限于谷歌提供的地图层。使用 OpenLayer,您可以显示几乎任何公开可用的地图服务(WMS、 WFS、 TMS、 WMS-C)。一个很好的例子是 openstreetmap.org -(社区收集的全球街道地图)。OSM 可以作为 TMS 层添加到开放层。看看这个 例子的说明。

这些问题问得真好!我是一个专业的 OpenLayers 开发人员和球迷,所以我将从这个角度来解决你的问题。

为什么我要使用 OpenLayers 而不是 Google Maps?

  • 灵活性: 您没有绑定到任何特定的地图提供商或技术。您可以随时更改,而不必重写整个代码。Google,Yahoo,Microsoft,WMS,ArcGIS Server,MapServer 等都支持开箱即用。
  • 矢量支持: 更好地支持点、折线和多边形。
  • 控件: 您可以添加可能需要的任何新特性。我个人为 OpenLayers 编写了三个插件,其中两个已经或将要成为源代码的一部分。
  • 调试: 当您可以单步执行源代码时,调试要容易得多!

我一点也不担心这个项目的长期可行性。它是首屈一指的开源客户端映射库。

我可能会遇到什么常见的陷阱/问题吗?

  • 我遇到的最大的陷阱是使用 Web Mercator (Google)投影。使用谷歌、雅虎和微软的基础地图将像 WGS 84这样的矢量数据显示到 OpenLayers 地图中是一件痛苦的事情。例子就是你的朋友。

JavaScript 框架兼容性

  • 我的所有工作都使用 jQuery 框架,唯一的问题是在 OpenLayers 之后引用 jQuery。除此之外,一切都很顺利。
  • 性能是伟大的! 唯一的问题将与您的地图服务器或添加太多的矢量到您的地图。

很多地方都有地图吗?

  • 就像我说的,你可以在世界任何地方使用任何来源的基础地图。

是否有任何类型的 API 来显示道路?

  • 我会去看看 CloudMade!他们已经将 OpenStreetMap项目转换为地图瓷砖服务,并允许自定义样式。我相信,你可以设计单行道(根据你的例子)一个特定的方式。The CloudMade Developer Zone .

你知道什么好的 OpenLayers 教程吗?

  • 我不知道任何教程,但在 一个 href = “ http://OpenLayers.org/en/best/example/”rel = “ norefrer”> OpenLayers 示例 中有大量的例子

我希望这是有用的。我在堆栈溢出附近,如果你有任何问题!

一些客户可能会拒绝,或者对使用谷歌地图有强烈的保留意见。他们可能有正当的理由担心谷歌可能会在没有通知的情况下引入广告或改变 API。 不过,谷歌地图确实有与其他谷歌服务(地标、添加照片、地理编码服务)整合的好处。 因为它的网络,你总是可以结合许多不同的映射服务和 API。

我想从两个角度添加一些东西: 客户端使用和数据获取。

客户使用情况:

  • 你的客户目前习惯使用什么? 改变可能是困难的。
  • 你真正需要多少功能? OpenLayers 有相当多的功能,但是如果你不使用它..。

数据服务:

  • 你们提供 KML数据吗?如果是这样的话,OpenLayers 和 GoogleMaps 都可以使用它,你可能需要根据客户端的使用情况来做出决定。

  • 您是否提供其他类型的数据服务?(WMS,WFS,CSV,等等)如果是这样,那么 OpenLayers 很可能有示例和对它的支持。

我同意所有的答案,但有一点很重要,没有人提到。 OpenLayers 和 Google Maps 有不同的目标。

OpenLayer 是一个显示地理数据的优秀框架,但 Google Maps 是一个服务池,其中包括一个显示地理数据和其他服务的框架。

因此,谷歌地图公开了很多 OpenLayes 没有的服务和特性。 谷歌地图的一些功能和服务包括区域定位、传感器检测(适用于带有全球定位系统的设备)和用户定位、地理编码和反座标化、街景等。

这里还有一点没有完全说明,那就是使用 OpenLayers 避免了 Google 对其地图 API 服务条款的种种限制,包括:

  • 你不能合法地使用谷歌地图,只是在你的网站的一部分,需要付费访问,或私人网站,公众不能注册(例如企业内部网)。(IANAL,但请参阅 服务条款9.1常见问题)

  • 您不能合法(或实际)使用离线应用程序(即从您自己的机器上提供瓷砖)的 Google API。即使没有法律限制,谷歌也让这在技术上变得非常困难,而 OpenLayers 让它变得简单。

  • 如果您显示的地图内容令人反感,Google 保留关闭访问 API 的权利。常见问题解答中给出的例子是一张非法毒品的地图,它可以很好地了解这种限制可能覆盖的灰色地带。

有关更多细节,请参见 本常见问题服务条款

尽管如此,作为一个最近开始使用 OpenLayers 的谷歌地图的长期开发者,我认为谷歌地图比 OpenLayers 有更好的文档,更大的用户社区,以及更清晰和更稳定的 API。所以你必须在某个地方做出交易。

除了那些提到速度问题的人之外,我还想补充一点,IE 的 VML 渲染器在具有许多特性的矢量图层中会变得非常慢。一个用户提到了大约200个。这正是我能在 IE 速度大幅下降到冻结点之前添加的内容。如果添加文本标签特性,则可以少添加一半,这可能是因为每个文本标签在内部由两个 VML 元素组成。

在 Google 中,你可以创建一个定制的 GOverlay,它的内容是一个“ div”,在 IE 中没有任何问题。

OL 拥有庞大的粉丝基础,可能是世界上使用最多的开源地理信息系统。

你不会在这个网络空间看到很多关于它的帖子和帖子,因为这里的人们倾向于讨论其他类型的技术,比如 JSF 和 Mobile (非 geo) ,而不是因为 OL 像 struts。

然而 Ol 有一些缺点,主要是它的级别太低,以至于你必须编写大量代码来执行常见的操作。这也可以很好地工作,因为作为一个开发人员,a: 你有所有的代码在前面,b: 调整和自定义是非常容易的。

有更复杂的免费地质工具,但他们所做的只是调用开放层和抽象一些更无聊的家务。

所以要自信地使用它。它是成熟的,强壮的,在可预见的未来它不会死去。然而,如果你想加快你的开发过程,你应该尝试其他工具,挂载在它的顶部。

祝你愉快

我使用了这两种 API。我为公司制作了一个软件,这个软件需要地图,但不是所有的客户都有 GoogleMaps 许可证,所以我需要支持这两种类型的地图。

我已经制作了一个通用的 API 来抽象它们之间的差异,让我告诉你,有些东西在一种情况下比在另一种情况下更容易做到。就像限制你可以平移地图的范围一样,在 OpenLayers 中做起来要容易得多,但是在 GoogleMaps 上使用起来要容易得多(Google 官方支持这个功能,不同于现有的 OpenLayers 插件)。

  1. OpenLayers 支持离线地图 没有互联网连接的内联网

  2. GoogleMaps 有两个绝对必须要有的插件,MarkCluster 和 蜘蛛侠使得可视化一个巨大的数字成为可能 标记

  3. GoogleMaps InfoWindows 更容易使用,也更好用 弹出窗口。这些是小窗口 当您单击标记时可以打开 默认情况下也更漂亮,你必须做一些 CSS 向导 和弹出窗一起

  4. GoogleMaps 有街景,有时候很有用。

  5. GoogleMaps 有更多你可能需要的功能,尽管有很多 特性也出现在 OpenLayers 中,但不是官方的 支持

通常最后你应该选择 OpenLayers,因为这样可以减少你从 Googlemap 中获得许可和使用带来的麻烦。两者都能很好地处理基本的映射(例如,在地图上显示标记)。除非你能找到一个特定的功能,你需要从一个不存在的另一个,你应该去为 OpenLayers。 有关谷歌地图计费的更多信息以及何时可以免费使用它,请参见 这个

此外,GoogleMaps 的基本地理定位类型是“ LatLng”,OpenLayer 使用的是“ LonLat”,这让我抓狂,因为我总是在函数调用中弄错参数的顺序。