参考资料
google map v2 api网址:
https://developers.google.com/maps/documentation/android/map
google map v2 官方用例网址:
https://developers.google.com/maps/documentation/android/utility/
基础开发环境配置网址:
http://www.cnblogs.com/linzhichao86/p/Android_GoogleMap.html
http://www.androidhive.info/2013/08/android-working-with-google-maps-v2/
其他的参考资料网址:
http://blog.csdn.net/mad1989/article/category/1121318
http://tech.it168.com/a2012/0309/1322/000001322925.shtml
知识整理
1.安装google setting 和 google play store
请确保你的手机上安装这2个软件(google settings 就是google play store服务)
2.下载 Google play services
打开Eclipse ⇒ Windows ⇒ Android SDK Manager,选择Extra选项下的Google play services,下载该选项。
下载完成后该lib位置在
android-sdk-windows\extras\google\google_play_services\libproject\google-play-services_lib
为项目引用该lib,Eclipse ⇒ Android ⇒ Library ,选择add
3.SHA获取
SHA网络上获取有几种方式,这边列出2种。
(1)Keytool
Keytool这个文件一般位于%JAVA_HOME%/bin目录下,如果是Linux系统,则位于
$JAVA_HOME/bin下的,比如windows下在C:\programs\Java\jdk1.6.0_18\bin下。
输入命令:
Window系统:
Keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore"
-alias androiddebugkey -storepass android -keypass android
linux or Mac OS系统:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey
-storepass android -keypass android
(2)较为快捷的方式
Eclipse ⇒ Android⇒ Build,SHA1 fingerprint的值
4.注册Google mail账号
需要google mail的账号,当然如果你有,就可以直接跳过这步骤了。
5.Google map v2 key值获取
终于快结束了环境配置了,Key值获取的网址如下:
https://code.google.com/apis/console/
打开google map android api v2服务,接着选择API access,点击选择Create new Android key.....,在弹出框内,输入获取SHA,输入格式为SHA;你的项目包名(如果你换掉IDE(eclipse)或者换掉包名都需要重新申请——我没试过换掉eclipse是否要重新申请的情况)
代码片段:
1.AndroidMainfest.xml配置文件配置
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.googlemap"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="9" />
<!--begin-->
<permission
android:name="com.googlemap.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="com.map.permission.MAPS_RECEIVE" />
<!--end api可下载地图,注意com.googlemap替换为项目包名----------------------->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--允许API可存取Google web-based 服务-->
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<!--允许网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--允许GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--Google Maps Android API 2会使用到OpenGL ES version 2,所以添加此特性,以免Google Play Store 认为APP不支持OpenGL ES version 2-->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<!--注意com.googlemap替换为项目包名,android:value值更改为申请的KEY-->
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="your key" />
<activity
android:name="com.googlemap.MainActivity2"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
2.Xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<!--sdk 3.1即(API12)之前的版本为com.google.android.gms.maps.SupportMapFragment,其他版本则为com.google.android.gms.maps.MapFragment-->
<fragment
android:id="@+id/googlemap"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment" />
</RelativeLayout>
3.地图初始显示
/**sdk 3.1即(API12)之前的版本需要继承FragmentActivity,其他版本则无需*/
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.main);
}
}
4.定位
定位自己当前的位置,使用到LocationManager类,代码如下:
/**初始化GoogleMap*/
if (null == mGoogleMap) {//此处初始化方法为sdk3.1(API12)之前的版本
mGoogleMap = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.nav_testmap)).getMap();
}
/**if (null == mGoogleMap) {
mGoogleMap =
((MapFragment) this.findFragmentById(R.id.nav_testmap)).getMap();
}*/
/**定位自己当前位置*/
void getPointLocation() {
Criteria criteria = new Criteria();
// ACCURACY_FINE 较高精确度
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
//获取LocationManager对象
locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
//provider的Criteria.ACCURACY_FINE精确度不是最精确的
//若正式环境改为精确度最高的
//LocationManager.GPS_PROVIDER
provider = locationManager.getBestProvider(criteria, true);
locationListener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onLocationChanged(Location location) {
//获取当前位置
lat = location.getLatitude();
lng = location.getLongitude();
}
};
//返回缓存中的位置信息(上次获取的位置信息)
location = locationManager.getLastKnownLocation(locationManager.GPS_PROVIDER);
location = locationManager.getLastKnownLocation(locationManager.NETWORK_PROVIDER);
//注册周期性位置更新,第二个参数为最短更新时间,第三个参数为最短更新距离
locationManager.requestLocationUpdates(provider, 0, 0,locationListener);
}
//移除位置监听
locationManager.removeUpdates(locationListener);
5.标识
标识位置,使用到的类Marker,代码如下:
marker = mGoogleMap.addMarker(new MarkerOptions().position(new LatLng(lat, lng)).title("lat:" + lat + " lng:" + lng).snippet("我的位置"));
你可以设置marker的icon图标
// GREEN color icon
marker.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
// Changing your own marker icon
marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.my_marker_icon)));
6.镜头定位移动
cameraPosition = new CameraPosition.Builder()
.target(new LatLng(lat, lng)).zoom(17).bearing(0).tilt(20).build();
mGoogleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
7.路线绘制
start = new LatLng(22.43040815, 114.20932812); end = new LatLng(22.410410, 114.247622); //移除地图上的覆盖物 mGoogleMap.clear(); wayLine(start, end); /**路线绘制*/ private void wayLine(LatLng start, LatLng end) { String url = navUtil.getDirectionsUrl(start, end); NavUtil.googleMapRouteTask gRouteTask = navUtil.new googleMapRouteTask( url); gRouteTask.execute(url); } /**组合成googlemap direction所需要的url*/ public String getDirectionsUrl(LatLng origin, LatLng dest) { // Origin of route String str_origin = "origin=" + origin.latitude + "," + origin.longitude; // Destination of route String str_dest = "destination=" + dest.latitude + "," + dest.longitude; // Sensor enabled String sensor = "sensor=false"; // Travelling Mode String mode = "mode=driving"; // String waypointLatLng = "waypoints="+"40.036675"+","+"116.32885"; // 如果使用途径点,需要添加此字段 // String waypoints = "waypoints="; String parameters = null; // Building the parameters to the web service parameters = str_origin + "&" + str_dest + "&" + sensor + "&" + mode; // parameters = str_origin + "&" + str_dest + "&" + sensor + "&" // + mode+"&"+waypoints; // Output format // String output = "json"; String output = "xml"; // Building the url to the web service String url = "https://maps.googleapis.com/maps/api/directions/" + output + "?" + parameters; System.out.println("getDerectionsURL--->: " + url); return url; } /**异步请求获取导航数据*/ public class googleMapRouteTask extends AsyncTask<String, Void, List<LatLng>> { HttpClient client; String url; List<LatLng> routes = null; public googleMapRouteTask(String url) { this.url = url; } @Override protected List<LatLng> doInBackground(String... params) { HttpGet get = new HttpGet(url); try { HttpResponse response = client.execute(get); int statusecode = response.getStatusLine().getStatusCode(); System.out.println("response:" + response + " statuscode:" + statusecode); if (statusecode == 200) { String responseString = EntityUtils.toString(response .getEntity()); int status = responseString.indexOf("<status>OK</status>"); System.out.println("status:" + status); if (-1 != status) { int pos = responseString.indexOf("<overview_polyline>"); pos = responseString.indexOf("<points>", pos + 1); int pos2 = responseString.indexOf("</points>", pos); responseString = responseString .substring(pos + 8, pos2); routes = decodePoly(responseString); } else { // 错误代码, return null; } } else { // 请求失败 return null; } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println("doInBackground:"+routes); return routes; } @Override protected void onPreExecute() { client = new DefaultHttpClient(); client.getParams().setParameter( CoreConnectionPNames.CONNECTION_TIMEOUT, 15000); client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 15000); super.onPreExecute(); } @Override protected void onPostExecute(List<LatLng> routes) { super.onPostExecute(routes); if (routes == null) { // 导航失败 Toast.makeText(context, "没有搜索到线路", Toast.LENGTH_LONG).show(); } else{ //地图描点 PolylineOptions lineOptions = new PolylineOptions(); lineOptions.addAll(routes); lineOptions.width(3); lineOptions.color(Color.BLUE); mGoogleMap.addPolyline(lineOptions); //定位到第0点经纬度 mGoogleMap.animateCamera(CameraUpdateFactory.newLatLng(routes.get(0))); } } } /**解析返回xml中overview_polyline的路线编码*/ private List<LatLng> decodePoly(String encoded) { List<LatLng> poly = new ArrayList<LatLng>(); int index = 0, len = encoded.length(); int lat = 0, lng = 0; while (index < len) { int b, shift = 0, result = 0; do { b = encoded.charAt(index++) - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); lat += dlat; shift = 0; result = 0; do { b = encoded.charAt(index++) - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); lng += dlng; LatLng p = new LatLng((((double) lat / 1E5)), (((double) lng / 1E5))); poly.add(p); } return poly; }
相关推荐
在Android开发中,Google Maps API V2是一个强大的工具,它允许开发者将交互式地图集成到他们的应用程序中。这个"google map v2 Demo"是展示如何使用API V2创建一个简单的地图应用实例。在这个Demo中,重点是展示...
本文将详细介绍如何进行Android GoogleMap开发的基础设置,包括必要的配置和代码实现。 首先,你需要在Android SDK Manager中下载Google Play Services SDK。这通常位于Extras目录下,下载完成后,你将在SDK目录的...
在Android平台上进行基于Google Maps的个人移动地图开发是一项常见的任务,尤其对于想要构建地理位置相关应用的开发者来说。这个主题涉及到Android SDK、Google Maps API以及如何将它们整合到一个功能丰富的移动应用...
**Android谷歌地图API** 在Android应用开发中,Google Maps API是一个至关重要的组件,它允许开发者在应用程序中集成谷歌地图的功能,提供丰富的地理位置服务。本文档将深入探讨Android Map API v1,这一版本虽然已...
二、基础地图功能的代码调用: 1. **添加依赖**: - 在项目的build.gradle文件中添加Google Maps依赖,如:`implementation 'com.google.android.gms:play-services-maps:18.1.0'`。 2. **在XML布局文件中添加...
在Android开发中,集成高德地图API是一个常见的需求,它能为应用提供地图展示、定位、路线规划等功能。本文将详细介绍如何在Android项目中初始化并运行一个基本的高德地图Demo。 首先,我们需要在Android Studio中...
在Android开发中,地图应用是常见且重要的功能之一,它涉及到地理位置信息的显示、导航、定位等服务。本文将深入探讨“Android地图实例”的相关知识点,帮助初学者快速理解和掌握如何在Android应用中集成和使用地图...
在这个项目中,我们将会深入探讨如何在Android应用中集成高德地图,并实现基础地图的显示、用户定位以及Marker标记的使用。 1. **集成高德地图SDK** 在Android项目中使用高德地图首先需要在项目的build.gradle文件...
在Android开发领域,绘制地图轨迹是一项常见的需求,尤其在定位导航、运动轨迹记录等应用中。MapTrack.zip是一个专门用于Android平台的项目,它能够帮助开发者实现动态在地图上显示轨迹的功能。在这个项目中,我们将...
Google Map V3是Google Maps API的一个重要版本,主要针对Web开发,提供了一整套用于在网页中集成地图、定位、路线规划等功能的工具。这个中文教程可以帮助开发者理解和运用V3版本的API,即便在无法访问互联网的情况...
在开发Android应用时,集成Google Maps是一项常见的需求,而`googlemap教程说明`是开发者掌握Android地图开发的关键。本教程主要涵盖了Google Maps API的基本概念和使用方法,特别适合初学者入门。 首先,我们要...
通过`getMapAsync()`方法,我们可以获取到`GoogleMap`对象,进一步定制地图,如添加标记、设置图层、开启定位等。 在Eclipse中实现路线查询功能,通常会涉及到对百度地图API的使用,因为Google Maps API V2不直接...
在Android开发中,地图功能是常见且重要的一个部分,它涉及到地理位置服务、用户交互以及界面导航等多个方面。本文将详细讲解如何在Android应用中实现"获取当前位置"、"设置气泡标志"以及"点击气泡跳转到另一个界面...
`onMapReady`回调会在地图准备就绪时被调用,此时你可以对`GoogleMap`对象进行操作,例如添加标记、热区、路径或者设置地图样式。例如,添加一个标记: ```java MarkerOptions markerOptions = new MarkerOptions()...
在本篇博客“Eclipse开发Android,Hello, MapView(学习5)”中,我们将探讨如何在Android开发环境中使用Eclipse集成开发环境(IDE)来创建一个简单的应用程序,该程序展示了一个显示地图的MapView。这个过程涉及到...
同时,还需要考虑与Google Map V2或其他第三方库的兼容性问题,以确保整个应用的稳定性和流畅性。 总之,"百度地图Demo+SlidingMenu"是一个结合了地图服务和侧滑菜单的实例,它不仅展示了百度地图API的基本使用方法...
如果设备没有任何受支持的本机地图提供程序,则AirMapView将回退到基于Web的地图提供程序(当前为Google Maps)。 易于集成,它是Google Maps V2软件包的直接替代品。 AirMapView的原始作者是 。 特征 Google Maps ...