热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MapKit和Google地图SDK比较!

众所周知,iOS有一个地图问题。有的人以为,这个问题只不过是无法为消费者提供更加优质的地图服务而已。但实际上,这个问题的影响范围,除了消费者,还有应用开发者。Co.Labs访问了多名开发者

众所周知,iOS 有一个地图问题。有的人以为,这个问题只不过是无法为消费者提供更加优质的地图服务而已。但实际上,这个问题的影响范围,除了消费者,还有应用开发者。Co.Labs 访问了多名开发者,从多个角度展开讨论。

Plane Finder 是一个可追踪航班信息的应用,去年团队在 WWDC 上看到 iOS 苹果地图的新 SDK(后正式称为 MapKit),兴奋不已。因为苹果地图的 SDK 一直缺乏某些主要功能,但从 WWDC 所公布的 SDK 来看,苹果注意到了问题。

Plane Finder 拥有 400 万用户,最近遭到用户的投诉,大多与地图相关:

许多人责怪我们的地图出现问题,它的定位常常不准确,弄错了城市或城镇,令他们找不到机场。之前我们把机场标记在跑道上,现在却跑到了农场里!用户对应用的评价从五颗星降至三颗星。20% 的邮件都在询问与此相关的问题。

苹果地图的问题还包括没办法搜到准确的位置,从 iOS 6 发布到现在,这个都没得到妥善的解决。Tube Tamer 的开发者 Bryce McKinlay 说:

苹果的精力集中在展示方面,比如 3D 视图啦,比如全程语音导航啦等等。这两个功能做得不错,但我不会花太多时间在上面。苹果在这些花哨的东西上花了大量精力,却忽视一些基本的功能。

3006725-inline-image

(左:Google Maps  中:MapKit  右:苹果地图)Google 地图的图片质量将更高

显然,精确度对于依赖地理定位的应用来说,十分重要。,因此 Google 地图发布 iOS 版 SDK 后,许多团队开始使用 Google 的产品。

采用 Google 地图 SDK 的好处不止获得精确的地理定位。McKinlay 的应用需要“兴趣点”的数据,因此他希望转用 Google 地图的 SDK。这样,他就能一直使用 Google Places 的 API,获得数据。

从开发者角度来看,Google 地图 SDK 支持 3D 建筑,用户可以在应用中旋转或者倾斜,这是苹果 MapKit 所不支持的。它还提供了更好的混合视图以及卫星图片质量。

用户们已经习惯 Google 地图,采用 Google 地图 SDK,意味着用户不必学习,目之所及,皆是熟悉的按钮、路线、颜色等等。而且 Google 地图 SDK 还支持跨平台。应用开发者不必担心跨平台应用体验不一致的问题。

不过,开发者觉得 Google 地图 SDK 较为昂贵。以 Google Place API 为例,为开发者提供了提供了一天 10 万次请求的配额。看上去 Google 提供开发者的条件是比较优渥的,但实际上,一天 10 万次请求远远不够。尤其是一名用户可以发出多个请求的情况下,很快就达到 10 万次请求的数量。开发者不得不为申请更多配额而付费。免费应用的开发者有时候会觉得这笔钱特别刺眼。而 MapKit 则没有这样的限制,可以无限次请求。

此外,由于苹果地图是系统服务,因此它不受系统限制,应用里可储存更多的资料。而 Google 地图 SDK 只能保证应用储存 6 MB 的数据。

McKinlay 还说,Google 地图 SDK 的性能不如苹果的 MapKit,结果在缩放或者移动地图的时候,会感到明显的“卡顿”,如果移动地图的速度较快,兴趣点、地图上其它的图层的绘制也显得卡顿。在 iPhone 5 上也如此。

MapKit 比 Google 地图 SDK 更灵活的是,它允许显示更多的东西,比如表格、动画等等。MapKit 甚至允许开发者推荐自定义的内容,比如步行的路径、适合接吻的小径等等。此外,要运用 Google 地图 SDK,开发者必须先自行设定好图案,而 MapKit 则不必,开发者可以创建只包含地理位置、文字的内容。

3006725-inline-tiled-overlays

(左:Google 地图  右:MapKit)MapKit 允许开发者添加更多的内容,但 Google 地图则不行

从开发的难易程度来看,MapKit 会显得更加简单——打开 Xcode,然后只要在 Interface Builder 中,拖放一下就可以了。MapKit 还意味着能与更多人交流,毕竟使用它的开发者数量众多。目前用 Google 地图 SDK 的开发者的数量尚属少数。

另外,MapKit 也提供了一些 Google 地图 SDK 所没有的特性,比如“Follow user location”以及“Follow with heading”——前者 MapKit 会提供一个按钮,自动跟踪用户的位置,同时还能根据指南针的方向来自动旋转地图。虽然 Google 地图 SDK 也能做到,但需要开发者耗费时间和力气,重新制造轮子。

MapKit 有一个缺点,那就是它的更新周期与 iOS 同步,因此更新周期需要一年的时间。Google 则不同,它可以随时更新 Google 地图 SDK,从去年 12 月上线以来,已经更新了三次。

以上比较了许多苹果的 MapKit 与 Google 地图 SDK 之间的优势和劣势。如果开发者既想用这个,又想用那个的话,其实也可以。比如 Plane Finder,集成了苹果地图和 Google 地图,用户可自由选择。

这听起来有些疯狂。但开发者解释,如果要让应用达到好用的程度,那么就必须这么做。首先,Google 地图受到限制,没办法做想做的事情,是保留苹果地图很好的理由。其次,Google 地图仍然是一个新框架,常常会碰到崩溃的问题,性能也有问题,而苹果地图则不会。因而,他在应用里显示两个地图。

3006725-inline-detailed-coastline

(左:Google 地图   右:苹果地图)Google 地图的数据会更加全面、准确

对于初学者而言,用苹果地图可以更快上手,但都最后不可避免要使用 Google 地图。原因在于后者提供的信息更加丰富,搜索功能更加强大。不过,Google 地图 SDK 并非是为取代 MapKit 而设计,许多部分跟 Google 地图的 Javascript 以及 Android API 有紧密的联系——换言之,开发者需要通过重写、改写才能用得上 Google 地图 SDK 里的功能。

目前,从易用性等方面来看,苹果的 MapKit 比 Google 地图是 SDK 稍胜一筹,但 Google 更新的速度更快,因此未来胜负尚不可知。


推荐阅读
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 卓盟科技:动态资源加载技术的兼容性优化与升级 | Android 开发者案例分享
    随着游戏内容日益复杂,资源加载过程已不仅仅是简单的进度显示,而是连接玩家与开发者的桥梁。玩家对快速加载的需求越来越高,这意味着开发者需要不断优化和提升动态资源加载技术的兼容性和性能。卓盟科技通过一系列的技术创新,不仅提高了加载速度,还确保了不同设备和系统的兼容性,为用户提供更加流畅的游戏体验。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • 今天我开始学习Flutter,并在Android Studio 3.5.3中创建了一个新的Flutter项目。然而,在首次尝试运行时遇到了问题,Gradle任务 `assembleDebug` 执行失败,退出状态码为1。经过初步排查,发现可能是由于依赖项配置不当或Gradle版本不兼容导致的。为了解决这个问题,我计划检查项目的 `build.gradle` 文件,确保所有依赖项和插件版本都符合要求,并尝试更新Gradle版本。此外,还将验证环境变量配置是否正确,以确保开发环境的稳定性。 ... [详细]
  • 在Android 4.4系统中,通过使用 `Intent` 对象并设置动作 `ACTION_GET_CONTENT` 或 `ACTION_OPEN_DOCUMENT`,可以从相册中选择图片并获取其路径。具体实现时,需要为 `Intent` 添加相应的类别,并处理返回的 Uri 以提取图片的文件路径。此方法适用于需要从用户相册中选择图片的应用场景,能够确保兼容性和用户体验。 ... [详细]
  • 本文探讨了Android系统中支持的图像格式及其在不同版本中的兼容性问题,重点涵盖了存储、HTTP传输、相机功能以及SparseArray的应用。文章详细分析了从Android 10 (API 29) 到Android 11 的存储规范变化,并讨论了这些变化对图像处理的影响。此外,还介绍了如何通过系统升级和代码优化来解决版本兼容性问题,以确保应用程序在不同Android版本中稳定运行。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 深入解析 Synchronized 锁的升级机制及其在并发编程中的应用
    深入解析 Synchronized 锁的升级机制及其在并发编程中的应用 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • Android Studio 安装指南:详细步骤与常见问题解答
    Android Studio 安装指南:详细步骤与常见问题解答 ... [详细]
author-avatar
血玉残阳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有