OpenLayers与谷歌地图?

我已经使用了Google Maps几次,但有什么想知道OpenLayers 。
在开始任何forms的编码之前,这里有几个问题出现在我的脑海里,

  • 为什么我会使用OpenLayers而不是Google Maps?
    • 无论如何,除了OSS许可证之外
    • 你有没有遇到任何你绝对不推荐使用OpenLayers的情况?
    • 我在Stack Overflow上search了一下“OpenLayers” 没有太多的答案。 这是否意味着这个解决scheme用得不多? 项目的长期可行性是否会成为问题?
  • 对于那些已经使用过OpenLayer的人们,我可能遇到什么常见的陷阱/问题?
    • 那么使用JavaScript框架呢? 我已经看到它使用Prototype ,我知道Prototype,所以这将是确定的。 但是使用MooTools之类的东西呢? (这与原型,BTW不兼容)
    • 有什么样的速度和性能相关的问题? 我需要我的应用程序来响应,不能等待几个小时才能显示地图。
  • 有很多地方可以使用地图吗?还是有很多失踪的地图?
    • 也就是说,我在法国,需要我的申请至less在大城市工作…这样可以吗?
    • 如果没有,是否很容易findOpenLayers的图层和可视化并整合它们?
  • 有什么样的API来显示道路?
    • 例如,显示只有单向的道路。
    • 如果是,我该怎么做? 我是否必须有一些包含道路信息的文件,然后自己在地图上显示出来?
  • 你知道OpenLayers的教程吗?

我还没有尝试过,那些只是蓝色的问题…

这是一个非常好的问题! 我是一个专业的OpenLayers开发者和粉丝,所以我会从这个angular度来解决你的问题。

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

  • 灵活性:您不受限于任何特定的地图提供者或技术。 你可以随时更改,而不必重写你的整个代码。 谷歌,雅虎,微软,WMS,ArcGIS Server,MapServer等都支持开箱即用。
  • vector支持:更好地支持点,多义线和多边形。
  • 控制:您可以添加任何您可能需要的新function。 我亲自为OpenLayers编写了三个插件,其中两个是或将会是源代码的一部分。
  • debugging:当您可以逐步完成源代码时,更容易debugging!

我完全不担心项目的长期可行性。 它是首要的开源客户端映射库。

我可能遇到哪些常见的陷阱/问题?

  • 我遇到的最大的陷阱是与Web墨卡托投影(谷歌)投影。 使用Google,Yahoo和Microsoft基本地图将像WGS 84这样的常见和真实投影中的vector数据显示到OpenLayers地图中可能会很痛苦。 这些例子是你的朋友。

JavaScript框架兼容性

  • 我为我所有的工作使用了jQuery框架,唯一的问题是在OpenLayers之后引用jQuery。 除此之外,这是一帆风顺的。
  • performance很棒! 唯一的问题将是你的地图服务器或添加太多的vector到你的地图。

有很多地方可以使用地图吗?

  • 就像我所说的,你可以在任何地方使用任何来源的底图。

有什么样的API来显示道路?

  • 我会检查出CloudMade! 已经将OpenStreetMap项目转换为地图瓦片服务并允许自定义样式。 我相信你可以用一种特殊的方式来devise单行道(按照你的例子)。 CloudMade开发者专区

你知道OpenLayers的教程吗?

  • 我不知道任何教程,但在OpenLayers示例中有很多示例

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

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

为什么selectOpenLayers?

  • OpenLayers可以结合来自不同来源的地图(Google Maps背景,WMS叠加层,来自KML或GML文件的vector数据或WFS等)
  • 您可以将OpenLayers的风格远远超过您的Google地图
  • 开源的,你可以在debugging的时候检查源代码
  • 如果在地图上需要高精度的地图,可以使用OpenLayers和适当的地图服务器后台而不是Google Maps来获得更好的地图投影(Google Maps假定地球是一个完美的球体)

陷阱

  • 如果您想使用来自其他服务器的向量(WFS)数据,则由于跨站点脚本的限制,您需要代理

性能

  • 主要取决于地图后端的速度
  • 显示许多vectorfunction(限制依赖于浏览器,但在一个视图中说> 200)需要时间,但这是浏览器的事情比OpenLayers的问题

JavaScript框架

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

可用的地图

  • OpenLayers不会附带地图后端。 你可以使用谷歌地图,雅虎地图,微软虚拟地球等,或者任何WMS和WFS服务

我从来没有看到从OpenLayers用户的存在,但他们在那里。 OpenLayers邮件列表非常活跃(我在Users和Dev上 ,每天从50到100封电子邮件中讨论各种事情,你也可以从那些链接中search列表)。

我不能回答你所有的问题,但有一件事我会发现,OpenLayers和谷歌地图不是相互排斥的。 OpenLayers是一个JavaScript库,您可以使用它来与Google地图进行交互。 看看这个例子: 使用谷歌地图的OpenLayers 。 这里是主要的OpenLayers示例页面 。

这真的取决于你想要使用的地图。 要简单地在地图上绘制点,Google地图将会很好。 Google地图的地图图层也非常详细。 另一方面,OpenLayers提供了更多的function,并且是非常可扩展的。

OpenLayers有很多例子让你开始。

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

有一点还没有完全实现,就是使用OpenLayers避免了Google对地图API服务条款的各种限制,其中包括:

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

  • 您无法合法(或实际上)将Google API用于离线应用程序(例如,从您自己的计算机提供的图块)。 即使没有法律上的限制,Google在技术上也是非常困难的,而OpenLayers使得这一点变得简单。

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

有关更多详细信息,请参阅此常见问题和服务条款 。

总之,作为最近开始使用OpenLayers的Google Maps开发者,我觉得Google Maps比OpenLayers更好的文档,更大的用户社区以及更清晰,更稳定的API。 所以你必须在某个地方做一个权衡。

有些客户可能会拒绝或强烈保留使用Google地图的权利。 他们可能有有效的担心,Google可能会在不通知的情况下引入广告或更改API。 不过,Google地图确实可以与其他Google服务(地标,添加照片,地理编码服务)进行整合。 作为网页,您可以随时结合许多不同的地图服务和API。

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

OpenLayer是一个很好的框架来显示地理数据,但谷歌地图是一个服务池,其中包括一个框架来显示其他服务之间的地理数据。

所以,Google地图公开了许多OpenLayes没有的服务和function。 Google地图function和服务的一些示例是地区本地化,传感器检测(带有GPS的设备)和用户本地化,地理编码和反向地理编码,街景等。

我已经使用了两个API。 我为企业制作软件,这个软件需要映射,但并不是所有的客户端都有GoogleMaps许可证,所以我需要支持这两种types的地图。

我已经提出了一个通用的API来抽象它们之间的差异,让我告诉你,有些东西比另一个更容易做到。 像限制地图到哪里的范围一样,在OpenLayers中执行起来要容易得多,但是在GoogleMaps上更容易使用热点地图(与可用的OpenLayers插件不同,它由谷歌官方支持)。

  1. OpenLayers支持离线地图。 我的一些用户在没有互联网连接的私人内部网中。

  2. GoogleMaps有两个绝对必须有插件, MarkCluster和Spiderfier ,使得可能可视化大量的标记。

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

  4. GoogleMaps有时候有用的街景。

  5. GoogleMaps有更多的function,你可能需要。 虽然许多function也都在OpenLayers中,但是没有官方的支持。

通常最后你应该和OpenLayers一起去,因为你可以从googlemaps的授权和带宽使用中减less头痛。 两者都处理基本映射(即在地图顶部显示标记)。 除非你能find一个你不需要的特定function,否则你应该去OpenLayers。 有关Google地图计费的更多信息,以及何时可以免费使用,请参阅此处。

此外,GoogleMaps的基本地理位置types为“LatLng”,Openlayers使用“LonLat”,这使得我疯狂地疯狂,因为我一直误认为函数调用中参数的顺序。

除了那些提到速度问题的人之外,我想补充一点,IE的VML渲染器可以用一个具有许多特性的vector图层真的很慢。 一位用户提到了大约200.这就是我IE可以添加之前IE添加到相当缓慢的点。 如果添加文本标签的function,则可以减less一半,这可能是因为内部每个文本标签由两个VML元素组成。

在Google中,您可以创build一个自定义的GOverlay,其内容是“div”,在IE中不会出现任何问题。

我会从两个angular度添加一些东西:客户端使用和数据删除。

客户用途:

  • 你目前使用什么东西? 改变可能很困难。
  • 你真的需要多lessfunction? OpenLayers有相当多的,但如果你不使用它…

数据服务:

  • 您正在提供KML数据吗? 如果是这样,OpenLayers和谷歌地图将与它一起工作,你可能将不得不根据客户端的使用情况来决定。

  • 你是否正在服务其他types的数据服务? (WMS,WFS,CSV等)如果是这样,那么OpenLayers很可能有它的例子和支持。

OL有一个很大的粉丝基础,也许是世界上使用最多的开源。

你不会在这个networking平台上看到很multithreading和文章,因为这里的人们倾向于讨论其他types的技术,比如JSF和Mobile(非地理),不是因为OL就像struts。

然而,Ol有一些缺点,主要是它的水平太低,所以你必须编写大量的代码才能执行常见的操作。 这也可以起到很好的作用,因为作为开发人员a:你有所有的代码,b:调整和定制是非常简单的。

有更复杂的免费geotools,但他们所做的只是叫openlayers和抽象一些更无聊的琐事。

所以自信地使用它。 它是成熟的,强大的,它不会在可预见的未来死亡。 但是,如果你想加快你的开发过程,你应该尝试安装在其上的其他工具。

祝你今天愉快