概览

Android版Google API 介绍。
通过Android版的Google API,开发者可以基于Google Map的数据开发自己的APP,API将自动连接至Google Map服务器、下载数据、显示呈现以及响应地图手势等。开发者也可以使用API添加标记(markers)、模块(polygons)、覆盖自己的基础地图(overlays to a basic map)、改变视图等。API同样提供了地理信息,方便用户与地图交互,开发者可以使用API添加如下图形:

  • 在地图上的具体位置做记号(Icons anchored to specific positions on the map (Markers));
  • 在地图上添加直线或折线(Sets of line segments (Polylines));
  • 在地图上附加模块(Enclosed segments (Polygons));
  • 在具体的位置上锚定位图(Bitmap graphics anchored to specific positions on the map (Ground Overlays));
  • 在基础地图的最上层覆盖一组图像(Sets of images which are displayed on top of the base map tiles (Tile Overlays));

本文档适合于Android开发者和具有面向对象概念的人阅读。
本文档可以让你对Google Maps Android API 快速入门,你可以参考相关的引用文档,查阅有关类和方法。


使用Google Map API必须要求应用中包含Google Play Services中的法律条款(Legal Notices)。法律条款可以在menu的item项中添加,也可以在“关于”项中添加。
添加法律条款的方法如下:

GoogleApiAvailability.getOpenSourceSoftwareLicenseInfo

Google Maps Android API有不错的兼容性,这种特性可以使任何应用都能使用API。
当在移动设备上使用TalkBack软件时(Talkback是一款由谷歌官方开发的系统工具软件,它的定位是帮助盲人或者有视力障碍的用户提供语言辅助。让盲人或者视力受损的用户可以非常方便的与他们的设备进行有效的互动。当使用Android自带的程序时,Talkback会实时的提供语言反馈),手指轻扫屏幕,屏幕就会从一个界面切换到另一界面,当另一界面元素获得焦点时,TalkBack会读出该元素。双击屏幕,元素就能获得焦点。


配置一个包含Google Map API的项目


  1. 安装Android Studio并打开Android SDK manager,在Extra目录中下载在最新的Android Support Repository和Android Support Library,以及Google Play services。
  2. 在创建项目时,选择activity模板时选择“Google Map Activity”,创建的项目中有一个文件叫做google_maps_api.xml,还有一个MapsActivity,其中google_maps_api.xml中用于填写API key。
  3. 获取API key:API key是一个字符串,是连接Google servers和开发者应用的桥梁,获取API key有如下三种方式:
    1)、直接复制google_maps_api.xml文件中类似于如下文本的内容到浏览器地址栏(前提是开发者注册了一个Google开发者账号):

    你将获得一个128位的SHA-1编码,该编码就是API key,将API key 复制到google_maps_api.xml文件的相应位置。

    2)、打开网页https://developers.google.com/maps/documentation/android/start#get-key,输入你的key和项目的包名,类似于下列方式: A1:C9:D0:AF:50:B0:4B:45:38:93:F2:AC:1D:E6:E6:D9:FF:78:F1:B6;com.googlemaptest.lenovo.googlemapdemo,通过该方式获得Google map API key。
    3)、参阅下面的网页https://developers.google.com/maps/documentation/android-api/signup#overview。


  1. 为布局layout添加如下XML代码:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/map"tools:context=".MapsActivity"android:name="com.google.android.gms.maps.SupportMapFragment" />

在activity中添加如下代码:

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {private GoogleMap mMap;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_maps);SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);mapFragment.getMapAsync(this);}@Overridepublic void onMapReady(GoogleMap googleMap) {mMap = googleMap;// Add a marker in Sydney, Australia, and move the camera.LatLng sydney = new LatLng(-34, 151);mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));}
}
  1. 请确保程序具备以下权限(其中精确位置和粗略位置至少具备其一)

    <!-- 允许程序通过wifi或移动基站的方式获取网络粗略的经纬度信息,定位精度大概误差在30-1500米之内 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><!-- 允许程序通过GPS芯片接收卫星的定位信息,定位精度在10米以内 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-feature android:name="android.hardware.location.gps"/><!-- 允许程序获取模拟的定位信息(该权限可省) --><uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
  1. 连接设备,安装应用,保证设备版本号不低于4.2.2;若使用模拟器,请确保模拟器具备硬件加速功能。

需要注意的是,
1、在AndroidManifest文件中,application标签的子标签中有一个标签,用于填写API key:

<meta-dataandroid:name="com.google.android.gms.version"android:value="@string/google_maps_key" />

该value所引用的值就是API key,该值应在google_maps_api.xml中配置过:

 <string name="google_maps_key" translatable="false" templateMergeStrategy="preserve">YOUR_KEY_HERE</string>

2、若应用所安装的设备版本是Android 6.0及以上,需要安装的Google play services SDK版本应不低于8.3。
3、以下这两个权限不必开发者手动添加,API会在需要使用这些权限时自动添加:

    <!-- 获取访问网络权限 --><uses-permission android:name="android.permission.INTERNET"/><!-- 允许当前程序获取的网络信息的权限,如,网络是否有效 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

4、同样,Google map需要3D绘制,故需要open GL ES的支持,开发者亦不必手动添加如下声明,API会在需要时自动添加:

<uses-feature
        android:glEsVersion="0x00020000"android:required="true"/>


创建地图实例


创建google map实例需要两个重要的类:GoogleMap、MapFragment。
具体代码请参见上小节中的“在activity中添加源码”,其中getMapAsync方法需要运行于主线程中;在onMapReady回调方法中处理GoogleMap对象,当地图可用时,该方法将被回调,并传入一个非空的GoogleMap对象。
一旦GoogleMap对象被实例化,它将自动做如下事情:

  • 与google map服务连接;
  • 下载地图拼图;
  • 将地图拼图显示在设备的屏幕上;
  • 显示相关的控制组件,如缩放地图;
  • 响应手势操作,如缩放地图。

MapFragment:
MapFragment是Fragment的子类,可将地图以fragment的形式展示在屏幕上,MapFragment实例可被当作是盛放地图的容器,另外,还可通过该类获得GoogleMap实例。
MapView:
MapView是View的子类,该View用于显示google地图,并提供了以个长方形的区域,与MapFragment类似,该类同样用于盛放地图的容器,同时利用该类创建GoogleMap实例。
应使用activity的生命周期回调方法管理GoogleMap实例,如onCreate、onResume、onPause方法等。


地图模式

Google Map提供了五种地图模式:

  • Normal(普通)模式:普通的道路地图,可显示人造的景观以及自然景观,比如河流等,道路信息可见。
  • Hybrid(混合)模式:普通的道路地图中添加了卫星图像,道路信息可见。
  • Satellite(卫星)模式:卫星图像,道路信息不可见。
  • Terrain(地形)模式:展示地形数据,地图中包含等高线和透视的阴影,部分道路可见。
  • None(空)模式:不显示任何地图图像。
    可以通过GoogleMap的setMapType()方法设置地图模式:
GoogleMap map;
...
// Sets the map type to be "hybrid"
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);

在同一地理位置下,不同的地图模式如下所示:


若将地图模式调成normal或satellite模式,放大地图,地图将展现出更多建筑物的室内信息,如机场、购物商场、大型零售店、加油站等。当缩小地图时,这些建筑的室内信息将被隐藏。如下所示:


通过API设置地图放大时的室内信息:

  • 通过GoogleMap.setIndoorEnabled(false)方法可关闭室内信息。默认情况下,室内信息处于开启状态。
  • 通过OnIndoorStateChangeListener接口,当一个新的建筑在地图上有焦点时,或某个建筑在被切换放大级别时,该接口中的方法被回调。
  • 通过GoogleMap.getFocusedBuilding()方法,可获得当前处于焦点的建筑,通过IndoorBuilding.getActiveLevelIndex()方法获得当前地图的放大级别。

配置地图初始状态

对地图进行初始化配置:

  • camera的位置,包括:定位location、放大缩小、方位和倾斜角度;
  • 地图的模式;
  • 放大按钮或指南正是否显示在屏幕上;
  • 手势操作是否可用;
  • 轻便模式(lite mode)是否可用,轻便模式可使移动设备在节省内存、和电量的情况下,使用google map最基本的地图功能。

使用XML代码配置属性,(需使用命名空间xmlns:map=”http://schemas.android.com/apk/res-auto”):

可以在XML代码中为MapFragment和MapView这两个控件配置初始属性:

  • mapType属性:设置地图模式;
  • cameraTargetLat, cameraTargetLng, cameraZoom, cameraBearing, cameraTilt属性:缩放、经纬度等信息的显示位置;
  • uiZoomControls, uiCompass:缩放控件和指南针是否可见;
  • uiZoomGestures, uiScrollGestures, uiRotateGestures, uiTiltGestures:相应手势是否可用;
  • zOrderOnTop:该属性用于设置Map所在视图是否显示与Z轴的顶部;
  • useViewLifecycle:该属性仅对MapFragment有效,该属性表明地图视图是否与fragment的生命周期绑定;
  • liteMode:地图是否使用liteMode模式,默认下为false。

为MapFragment配置属性的方式如下(配置MapView的方式与其相同):

<fragment xmlns:android="http://schemas.android.com/apk/res/android"xmlns:map="http://schemas.android.com/apk/res-auto"android:name="com.google.android.gms.maps.SupportMapFragment"android:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent"map:cameraBearing="112.5"map:cameraTargetLat="-33.796923"map:cameraTargetLng="150.922433"map:cameraTilt="30"map:cameraZoom="13"map:mapType="normal"map:uiCompass="false"map:uiRotateGestures="true"map:uiScrollGestures="false"map:uiTiltGestures="true"map:uiZoomControls="false"map:uiZoomGestures="true"/>

在代码中动态设置地图属性:
为低筒动态设置属性,需使用GoogleMapOptions对象,具体操作方式如下:

GoogleMapOptions options = new GoogleMapOptions();
options.mapType(GoogleMap.MAP_TYPE_SATELLITE).compassEnabled(false).rotateGesturesEnabled(false).tiltGesturesEnabled(false);

若使用的是MapFragment,则为地图初始化属性的方式为MapFragment.newInstance(GoogleMapOptions options)
若使用MapView,则方式如下:

MapView(Context, GoogleMapOptions)

地图面板(Map padding)的使用

在使用地图的过程中,尽管用户可以不断变换地图的显示区域,但仍希望一些UI控制按钮(如缩放按钮、指南针、google logo等)能不随地图位置变化,一直显示在屏幕的周围。
通过GoogleMap.setPadding()方法可用于添加地图周围的控制面板,当变换地图的区域时,这些控制面板将缩小而透明;


Google Maps API for Android 指南(一)相关推荐

  1. Google Maps API v2 android版本开发 国内手机不支持google play Service相关问题解决--图文教程

    Google Maps API v2 android版本开发 国内手机不支持google play Service相关问题解决--图文教程 参考文章: (1)Google Maps API v2 an ...

  2. Android Google Maps API教程-入门

    This is android google maps api tutorial. 这是android Google Maps API教程. In this tutorial I will teach ...

  3. maps-api-v3_Android Google Maps API集成

    maps-api-v3 In this tutorial we'll show how to integrate android google maps API in our application ...

  4. Google 地图 API for Android

    原文:Introduction to Google Maps API for Android 作者: Eunice Obugyei 译者:kmyhy 从健康类 app Runkeeper 到游戏 ap ...

  5. Google Maps API 申请方式变更为APIs Console, android手机申请方式

    使用旧的key访问会弹出要你到:http://code.google.com/apis/maps/documentation/javascript/v2/introduction.html#0btai ...

  6. Android Google Maps API 网络服务用于网络定位、计算路线、获取经纬度、获取详细地址等

    Google Maps API 网络服务 官网地址 : https://developers.google.com/maps/documentation/webservices/?hl=zh-cn 其 ...

  7. Google Maps API –地图类型示例

    Google Maps API支持四种地图类型: ROADMAP –显示普通的街道/道路地图(默认地图类型). 地形-根据地形信息显示正常的街道/道路地图. 卫星–仅显示卫星图像. 混合–普通和卫星视 ...

  8. Google Maps API编程资源大全

    Google Maps API是Google自己推出编程API,可以让全世界对Google Maps有兴趣的程序设计师自行开发基于Google Maps的服务,建立自己的地图网站.以下是我在Googl ...

  9. Google Maps API 简易教程(四)

    Google Maps 类型 一.基本地图类型 Google Maps API支持一下map类型: .ROADMAP(正式的,默认为2D地图) .SATELLITE(逼真的地图) .HYBRID(逼真 ...

最新文章

  1. 华人学者解开计算机领域30年难题:布尔函数敏感度猜想
  2. Win2008虚拟化实战之Hyper-V快速设置
  3. 英国《金融时报》:全力加码早期投资,红杉中国在下一盘怎样的棋?
  4. 在Autodesk应用程序商店发布基于浏览器的Web应用程序
  5. 设计模式C++实现(2)——策略模式
  6. 掌握这 20 个容器实战技巧!
  7. Java 9,Jigsaw,JPMS和模块:个人探索
  8. css图片的全屏显示代码-css3
  9. QTableWidget item设置不可以选中和编辑状态
  10. 这种反人类的工作被机器人取代,我举双手双脚赞成
  11. 愚公移山第一章伪代码
  12. 绘图技术采用计算机什么软件,计算机绘图好用的软件
  13. php excel导出科学计数法,php导出excel时科学计数法的处理方法
  14. ubuntu17.04 UHD 驱动出错
  15. 56-狂拍灰太狼游戏
  16. db2数据库常见问题处理
  17. 新手云服务器系统,新手云服务器系统
  18. 一文搞懂K-means聚类算法
  19. html5 粒子动画效果制作,8款惊艳的HTML5粒子动画特效
  20. java 记事本源代码_JAVA记事本源代码 收藏

热门文章

  1. 第二十九章 OOTV杯超级模式大赛-模式总结(读书笔记)
  2. 群发短信 发短信(带图片)
  3. 中小企业发展电子商务的必要性
  4. Python抓取数据具体流程
  5. EasyUI TreeGrid滚动条异常
  6. 高等学校计算机规划教程,操作系统教程(21世纪高等学校计算机规划教材)
  7. overflow的属性值说明
  8. 【Linux学习笔记④】——Shell程序设计【变量 输入与输出 条件表达式 判断语句 循环语句 Shell函数】
  9. 关于上传资源的最新公告
  10. IOS OpenGL ES GPUImage 图像Lanczos重取样模糊效果 GPUImageLanczosResamplingFilter