Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Google Maps
Code

Android中Google Maps入门:基础知识

by
Difficulty:BeginnerLength:LongLanguages:
This post is part of a series called Getting Started With Google Maps for Android.
Getting Started With Google Maps for Android: Intermediate

Chinese (Simplified) (中文(简体)) translation by Zhang Xiang Liang (you can also view the original English article)

介绍

毫无疑问,地图是应用程序中最有用的工具之一。 本教程是Google Maps v2 for Android系列中的第一篇。 通过Google开发者控制台设置Google Maps API,包括应用程序中的地图片段,显示用户的位置,添加标记,在地图上绘制以及一些将实用程序添加到应用程序的常规方法。 本教程的所有代码都可以在GitHub上找到。

1.设置开发者控制台

为了使用Google Maps API,您必须在Google开发者控制台上注册您的应用,并启用该API。 为此,请先到Google开发者控制台注册。 如果您已经创建了一个项目,可以跳过下一节。 如果没有,您可以为您的地图应用程序创建一个新的项目。

步骤1:创建项目

要创建一个新项目,请点击屏幕左上角的蓝色创建项目按钮。 如果您没有看到“创建项目”按钮,则查找一个标记为“ 创建一个空项目”的按钮  。

Create a project button

这将显示一个请求项目名称的对话框。 对于本教程,我创建了一个名为TutsPlusMaps的项目。 对于项目命名有一些限制,因为只有字母,数字,引号,连字符,空格和感叹号才被允许。

Creating a project dialog window

点击创建后,页面右下角会显示一个加载指示符的对话框。

步骤2:启用Maps API

当项目创建完成,或者您选择了一个现有项目时,您将进入项目概述屏幕。 从这里您将需要在左侧导航面板中点开API&auth,然后单击  API

APIs Auth location in nav

虽然此屏幕上有一个搜索框,您会注意到Google将Maps API项目置于中心列顶部,供开发人员访问。 在本教程中,点击Google Maps API标题下标题为Google Maps Android API的项目  。

Google Maps API item

您进入一个屏幕,可以点击蓝色的“启用API”  按钮,以便为您的项目启用Maps API。

Enable API button

步骤3:创建一个Android API密钥

启用Google Maps API之后,点击侧面导航面板中的API&auth下的凭证项目,以获取访问应用的Maps API的密钥。 当您显示“ 凭据”对话框时,按蓝色“ 添加凭据”按钮,然后选择“ API密钥”。

Dialog for selecting the type of credentials to create

由于这是一个Android应用程序,因此您需要在下一个对话框中选择Android Key。 如果要使用不同平台上的地图创建相同的应用程序,则可以为每个平台创建一个密钥。

Dialog for selecting the type of key to generate

在下一个屏幕上,单击  添加包名和指纹。 这提供两个字段,一个用于添加包名,另一个用于从应用程序签名密钥添加SHA1

对于本教程,我将使用包名com.tutsplus.mapsdemo。 要获取SHA1签名,您需要打开终端或命令提示符,并导航到应用程序签名密钥的位置。 这可以是发布版的密钥或调试版的debug.keystore。 您可以使用以下命令生成SHA1:

Screenshot of a terminal output when getting an SHA1 key from a keystore

创建SHA1密钥并将其输入到文本字段后,单击蓝色的创建按钮。 然后,您将看到一个对话框,其中包含您需要添加到Android应用程序以访问Maps API的API密钥。

Dialog presenting your Google API key

2.设置Android项目

此时,您可以使用用于创建API密钥的相同包名创建初始Android项目。 创建项目后,打开build.gradle文件。 您需要导入用于地图的Play服务库。 在此示例中,您还需要导入Play Services库的位置,以便为地图设置初始位置。 将以下行放入 build.gradle  文件的dependencies节点。

将库导入后,关闭build.gradle并打开AndroidManifest.xml文件。 在application节点之上  ,您需要声明应用程序使用OpenGL ES 2.0并定义应用程序所需的权限。

请注意,此演示需要ACCESS_FINE_LOCATION权限才能获取用户的位置,以定义地图最初显示的位置。 如果您在自己的应用程序中有一个已知的位置,则无需使用用户的位置。

在节点application内,您需要添加两个元数据。 第一个通知应用程序使用Play服务,第二个将Maps API密钥与应用程序绑定。 在以下代码片段中,@string/google_api_key是从Google开发者控制台键入的字符串引用。

完成AndroidManifest.xml更新后  ,关闭该文件。 接下来,您需要创建一个继承SupportMapFragment的新Java类MapFragment。 在这里使用SupportMapFragment而不是com.google.android.gms.maps.MapFragment是为了兼容API 12。

如果您的应用不需要支持旧版Android系统,则可以使用com.google.android.gms.maps.MapFragment。 一旦创建了基本fragment,您需要实现六个接口。

  • ConnectionCallbacksOnConnectionFailedListener被设计为监视GoogleApiClient,用于获取用户当前位置。
  • OnInfoWindowClickListener 当用户点击地图上的标记弹出的信息窗口时触发。
  • 当用户点击或按住地图的一部分时触发OnMapLongClickListenerOnMapClickListener
  •  在用户点击地图上的标记时调用OnMarkerClickListener,通常还会显示该标记的信息窗口。

出现提示时,单击类名旁边的红色灯泡,以添加这些接口所需的方法。

一旦构建了初始fragment,需要让MainActivity知道它应该使用这个fragment。 从资源文件夹中打开activity_main.xml并进行更改,以便将fragment包含为视图。

更新activity布局后,您应该能够运行应用程序,并查看完全缩小并定位在纬度0,经度0的地球地图。

What your screen should look like when Google Maps is initially set up correctly

3.初始化地图

步骤1:声明地图类型

返回到MapFragment类,需要在类的顶部定义一些全局值,以便在应用程序中使用。

这里mGoogleApiClientmCurrentLocation用于获取用户的位置来初始化地图相机。 MAP_TYPEScurMapTypeIndex用于在不同的地图显示类型之间进行切换。 每个地图类型都有不同的用途,因此一个或多个可能适合您自己的应用。

GoogleMap.MAP_TYPE_SATELLITE 显示没有街道名称或标签区域的卫星视图。

Example of the Satellite map type

GoogleMap.MAP_TYPE_NORMAL 显示具有街道名称和标签的通用地图。

Example of the Normal map type

GoogleMap.MAP_TYPE_HYBRID 结合卫星和正常模式,显示区域所有标签的卫星图像。

Example of the Hybrid map type

GoogleMap.MAP_TYPE_TERRAIN与普通地图类似,但纹理被添加以显示环境中的高程变化。 当地图用双指拖动成角度时,这些纹理最为可见。

Example of the Terrain map type

GoogleMap.MAP_TYPE_NONE与普通地图类似,但不显示区域中环境类型的任何标签或着色。 它允许在地图上显示交通和其他覆盖层。

Example of the None map type

步骤2:创建API客户端

接下来,您需要创建GoogleApiClient并启动LocationServices以获取用户的当前位置。 如前所述,如果您有要显示的位置而不是定位用户,则可以跳过使用LocationServices

initListeners方法将您在类顶部声明的接口与GoogleMap 与SupportMapFragment绑定。 实现如下:

您可能已经注意到, GoogleApiClient和它的监听器是在onViewCreated方法中创建和绑定而不是在传统的onCreate方法中创建和绑定。 这是因为GoogleMap对象在onCreate被调用时尚未被初始化  ,所以我们需要等待视图完全创建,然后再尝试调用getMap方法才能避免NullPointerException

步骤3:配置地图

由于您将通过Play Services找到用户位置之后设置地图摄像机,因此我们将使用Play Services生命周期来驱动初始化我们的地图。 你可以在onStart方法中连接GoogleApiClient。 当客户端连接后,您可以抓住用户最近获取到的位置,并将其用于瞄准地图摄像机。

initCamera方法中,您可以初始化相机和一些基本的地图属性。 您首先通过CameraPosition.Builder创建一个CameraPosition对象,将目标设置为用户的纬度和经度以及设置的缩放级别。

在这里倾斜和轴承使用默认值来说明它们是可用选项。 一旦你有CameraPosition对象,你可以使用CameraUpdateFactory将地图摄像头定位到该位置。

在此方法结束时,您会注意到最后四行代码为地图设置了一些属性。 您可以设置地图类型,如本教程前面所述,并在前两行中启用实时交通。  setMyLocationEnabled 在MapFragment右上角添加一个按钮,当按下时,自动将相机移动到用户的位置。

最后调用setZoomControlsEnabled 增加  +-  按钮在右下角,允许用户更改地图缩放级别,而不必使用手势。 使用UiSettings,您还有可以设置其他东西,例如添加指南针或禁用手势,您可以在Android参考文档中找到它们。

4.标记位置

最常用的地图功能之一是指示具有标记的位置。 由于需要纬度和经度来添加标记,所以您需要使用选项OnMapClickListener来允许用户在地图上选择一个放置Marker对象的地点。

此方法创建一个用户点击的通用红色标记。 可以通过MarkerOptions对象设置其他选项,例如将标记设置为可拖动。 您可以在官方Android参考文档中找到其他属性。 如果要更改标记的颜色,可以在给MarkerOptions添加图标时调用BitmapDescriptorFactory.defaultMarker  。  defaultMarker 方法接受定义色调的float值。 色调可以手动设置或作为BitmapDescriptorFactory预定义的静态值  。应该注意的是,  addMarker 返回一个Marker对象,如果需要,可以存储并用于手动删除特定标记的对象。

Generic markers placed on the map

如果您想避免使用通用彩色针脚作为位置标记,则可以在MarkerOptions对象上设置位图图标。 为了演示这一点,您可以重写  onMapLongClick 方法,以便Marker在用户长按地图时使用资源文件夹中的app图标。

您可能已经注意到,两次点击事件中,getAddressFromLatLng 方法都被调用。 这是用来帮助获取并运行LatLng的,它通过Geocoder获取街道地址。 在最后两个示例中,我们使用此方法在点击标记时显示街道地址。

Example of images used as markers

5.绘制地图

GoogleMap对象有一组方法可以轻松绘制形状并将图像放置到地图上。 要绘制一个简单的圆,只需要创建一个CircleOptions对象,设置半径和中心位置,并定义笔画/填充颜色和大小。

一旦你有CircleOptions 对象,你可以调用  addCircle 在地图上绘制定义的圆。 就像放置标记一样,在地图上绘制的对象返回一个绘制项目类型的对象,以便以后可以被引用。

Illustration of a circle drawn programmatically on the map

要绘制不同的封闭形状,您可以采取多个LatLng点并创建一个  PolygonOptions对象。 如下所示,CircleOptions以类似的方式创建PolygonOptions。 不使用centerradius方法,您可以使用add方法。 然后可以调用  addPolygon来绘制形状。 对于这个例子,你只需在地图上绘制一个三角形。

Example of a polygon drawn on the map

最终绘图类型是在地图上添加图像作为叠加层。 如果您想要在普通地图类型之上显示的区域绘制地图,则叠加很方便。 这可以通过创建一个  GroundOverlayOptions的位置,宽度和高度以及要用作BitmapDescriptor的图像来实现  。

在以下方法中,您可以将APP的launcher图标作为叠加层绘制在地图图块上。

结论

在本教程中,您已经学会了如何创建API密钥并启用Google Maps for Android。 您还学到了MapFragment 类和一些可以为地图激活的基本功能。

您已经学会了如何放置标记,监听与地图的交互,以及如何在地图上绘制以显示其他信息。

在本系列的下一篇教程中,您将学习如何通过MapFragment覆盖视图,如何与室内地图交互,以及如何显示街景给用户。

关注我们的公众号
Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.