171

我用过几次谷歌地图,但对OpenLayers有什么疑惑。
在开始任何类型的编码之前,我想到了几个问题,

  • 为什么我要使用 OpenLayers 而不是 Google Maps?
    • 无论如何,除了它的 OSS 许可证
    • 您是否遇到过绝对不建议使用 OpenLayers 的情况?
    • 在 Stack Overflow 上搜索了“OpenLayers”;答案并不多。这是否意味着该解决方案使用不多?会不会影响项目的长期可行性?
  • 对于那些已经使用过 OpenLayers 的人:我可能会遇到任何常见的陷阱/问题吗?
    • 与它一起使用 JavaScript 框架怎么样?我已经看到它正在使用Prototype,而且我知道 Prototype,所以没关系。但是使用MooTools 之类的东西呢?(这与原型不兼容,顺便说一句)
    • 是否存在任何与速度和性能相关的问题?我需要我的应用程序具有响应能力,并且不能等待数小时才能显示地图。
  • 是否有许多地方的地图可用,还是缺少很多地图?
    • 也就是说,我在法国,需要我的申请至少在大城市工作……这样可以吗?
    • 如果没有,是否容易找到 OpenLayers 的图层和可视化并将它们集成?
  • 是否有任何类型的 API 来显示道路?
    • 例如,显示仅单向的道路。
    • 如果是,我该怎么做?我是否必须拥有某种包含这些道路信息的文件,然后自己在地图上显示它们?
  • 你知道 OpenLayers 有什么好的教程吗?

我还没有尝试过,那些只是出乎意料的问题......

4

11 回答 11

159

这些真是一个很棒的问题!我是一名专业的 OpenLayers 开发人员和粉丝,所以我将从这个角度解决您的问题。

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

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

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

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

  • 我遇到的最大陷阱是使用 Web Mercator (Google) 投影。使用 Google、Yahoo 和 Microsoft 基本地图将常见且真实的投影(如WGS 84)中的矢量数据显示到 OpenLayers 地图中可能会很痛苦。这些例子是你的朋友。

JavaScript 框架兼容性

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

有很多地方的地图吗?

  • 就像我说的,您可以使用来自世界任何地方的几乎任何来源的底图。

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

  • 我会看看 CloudMade!已将OpenStreetMap项目转换为地图切片服务并允许自定义样式。我相信您可以以特定方式设计单向街道(根据您的示例)。CloudMade 开发者专区

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

我希望这很有用。如果您有任何问题,我在 Stack Overflow 附近!

于 2009-08-13T15:53:45.443 回答
35

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

为什么选择 OpenLayers?

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

陷阱

  • 如果您想使用来自另一台服务器的矢量 (WFS) 数据,您需要一个代理,因为跨站点脚本限制

表现

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

JavaScript 框架

  • 看看GeoExt,例如 ExtJS + OpenLayers

可用地图

  • OpenLayers 不附带地图后端。您可以使用 Google Maps、Yahoo Maps、MS Virtual Earth 等,或您可以访问的任何 WMS 和 WFS 服务
于 2009-08-06T06:34:10.850 回答
23

我没有在 SO 上看到 OpenLayers 用户的大量存在,但他们就在那里。OpenLayers 邮件列表非常活跃(我在用户开发人员上,每天可以看到 50-100 封讨论各种事情的电子邮件。您也可以从这些链接中搜索列表。)。

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

于 2009-08-06T06:17:43.767 回答
13

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

OpenLayers 有很多示例可以帮助您入门。

至于地图,OpenLayers 只是一个 API,因此您需要提供它来绘制图层。Google Maps API 将仅限于 google 提供的地图图层。使用 OpenLayer,您几乎可以显示任何公开可用的地图服务(WMS、WFS、TMS、WMS-C)。一个很好的例子是 openstreetmap.org -(由社区收集的全球街道地图)。OSM 可以作为 TMS 层添加到 openlayers。查看此示例以获取说明。

于 2009-08-06T12:22:52.033 回答
13

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

  • 您不能仅在需要付费才能访问的网站部分或公众无法注册的私人网站(例如公司内部网)中合法地使用 Google 地图。(IANAL,但请参阅服务条款、9.1常见问题解答

  • 您不能合法(或实际上)将 Google API 用于离线应用程序(即从您自己的机器提供图块的地方)。即使没有法律限制,Google 使这在技术上变得非常困难,而 OpenLayers 使它变得容易。

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

有关详细信息,请参阅此常见问题解答服务条款

综上所述,作为最近开始使用 OpenLayers 的长期 Google Maps 开发者,我觉得 Google Maps 比 OpenLayers 拥有更好的文档、更大的用户社区以及更清晰、更稳定的 API。所以你必须在某个地方做出权衡。

于 2011-02-08T06:45:05.653 回答
10

我同意所有答案,但有一点非常重要,没人提到。OpenLayers 和谷歌地图有不同的目标。

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

因此,谷歌地图公开了很多 OpenLayes 所没有的服务和功能。Google Maps 功能和服务的一些示例包括区域定位、传感器检测(用于带 GPS 的设备)和用户定位、地理编码和反向地理编码、街景等。

于 2010-08-28T12:04:46.950 回答
9

一些客户可能会拒绝或对使用 Google 地图持强烈保留意见。他们可能有理由担心 Google 可能会在未通知的情况下引入广告或更改 API。然而,谷歌地图确实具有与其他谷歌服务(地标、添加照片、地理编码服务)集成的优势。作为网络,您始终可以组合许多不同的地图服务和 API。

于 2009-09-26T17:44:55.907 回答
6

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

我已经制作了一个通用 API 来抽象它们之间的差异,让我告诉你,有些东西用一个比另一个更容易做。就像限制您可以平移地图的范围一样,在 OpenLayers 中这样做要容易得多,但在 GoogleMaps 上更容易使用热图(它由 google 正式支持,与可用的 OpenLayers 插件不同)。

  1. OpenLayers 支持离线地图。我的一些用户在没有 Internet 连接的私有 Intranet 中。

  2. GoogleMaps 有两个绝对必备的插件,MarkClusterSpiderfier,它们可以可视化大量的标记。

  3. GoogleMaps InfoWindows 比 OpenLayers.Popups 更易于使用并且具有更好的可用性。这些是单击标记时可以打开的小窗口。默认情况下,Googlemaps InfoWindows 也更漂亮,您必须使用 Popups 做一些 CSS 魔法。

  4. 谷歌地图有街景,有时很有用。

  5. GoogleMaps 具有您可能需要的更多功能。尽管 OpenLayers 中也存在许多功能,但并未得到官方支持。

通常最后你应该使用 OpenLayers,因为你可能会从 googlemaps 的许可和带宽使用中减少头痛。两者都能很好地处理基本映射(即在地图顶部显示标记)。除非您可以从另一个不存在的特定功能中找到您需要的特定功能,否则您应该选择 OpenLayers。有关 googlemaps 计费以及何时可以免费使用它的更多信息,请参阅此内容。

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

于 2014-01-31T20:30:36.350 回答
3

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

在 Google 中,您可以创建一个自定义 GOverlay,其内容是“div”,在 IE 中呈现没有问题。

于 2011-08-01T11:19:27.707 回答
3

我想从两个角度补充几点:客户端使用和数据挖掘。

客户端使用:

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

数据服务:

  • 您是否提供KML数据?如果是这样,OpenLayers 和 Google Maps 都可以使用它,您可能必须根据客户的使用情况做出决定。

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

于 2010-02-05T17:56:54.273 回答
2

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

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

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

有更复杂的免费地理工具,但它们所做的只是调用 openlayers 并抽象一些更无聊的琐事。

所以放心使用吧。它成熟、稳健,在可预见的未来不会消亡。但是,如果您想加快开发过程,您应该尝试安装在它之上的其他工具。

祝你今天过得愉快

于 2013-04-05T14:53:48.540 回答