这一节我们主要讲述google map在android手机中的使用,我们一般是用google map API+Location API,就是地图API+地位API,如果加上一些服务端以及网络方面的知识,我们可以制作出很有创意的应用,而这些正是现在流行的LBS,主要涉及技术有地图API+地位API+javaee 服务端+手机通信+XMPP协议(主要是及时通信)。可以发挥自己的想象作出好的有创意的应用,比如说,我们在车上看见一美女,而又不好意思打招呼,但她手机中也有该LBS应用,那么我们可以查询当前多少米范围内有多少人使用这个应用,然后进一步锁定到车上的她,然后,你懂的。又或者我们出差在某地,打开应用可以从地图中标识找到我们喜欢吃得美食。这一切都归根于基本的地图服务,只要我们适当整合资源。
好了,不说废话了,开始我们的google map编程吧。
1:必须下载google Map扩展库,下载方式是通过AVD,跟你下载最新SDK一样,具体就不说了。
2:申请Android Map API Key:
在命令行下进入其路径地址,进入到:C:\Users\用户名\.android下:然后 输入
keytool -list -v -keystore debug.keystore ,这时它一般会提示你输入密码,默认的密码是android, 你输入android,如果完整输入android后,没有显示也没有关系,按回车即可,这样就把三种指纹证书全部列出来了,包括MD5、SHA1、SHA256。(密钥口令是android)
,后显示证书指纹如下:
3:记下认证指纹,接着去往
http://code.google.com/android/maps-api-signup.html,
在复选框上打钩后,输入你的认证指纹,然后点击Generate API Key,这时你就申请到了你的key,当然前提是你必须登录。(您可能需要一个google账号或者注册过google市场),
申请Google Maps API 时需要验证MD5指纹证书,那么我们就在文本框中输入MD5证书(注意是MD5,而不是SHA1等)
如图:
生成的key为:
好了,既然有了Key,那么就来开始编码了.步骤如下:
1:新建项目,选中Google apis.
2:必须在 AndroidManifest.xml 文件中声明: <uses-library android:name="com.google.android.maps"/>
3:当然了,我们需要访问网络,或者也需要WIFI定位等,那么就加入些权限吧。
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
4:新建布局文件,并添加:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="0XfqXJAIPzqeUtU7mTM2PQDwplHCFk93iAglI0w"
android:clickable="true">
</com.google.android.maps.MapView>
</LinearLayout>
5:然后定义activity继承MapActivity,这里我们可以定义菜单,分别切换不同的地图模式:街道、卫星、交通等。
这里我们需要了解3个对象: MapView 显示地图 MapController 控制地图,当然最重要的是怎么定位地图一个点,根据初中地理可知道,使用经纬度可以定义地球任意一点,这里需要用到google API的GeoPoint对象。
下面是代码:
package com.dongzi;
import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
/**
* location api和map api结合起来,通过location api定位,然后在map api中显示地图:
* @author Lenovo
*
*/
public class GooglemapDemoActivity extends MapActivity {
private static final String Tag=GooglemapDemoActivity.class.getName();
private MapView mapView=null;
private MapController mapController=null;
int latitudeE6=39*1000000;
int longitudeE6=116*1000000;
int zoomLevel=12;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapView);
//设置街道模式,可放大
mapView.setStreetView(true); //mapView.setTraffic(true);mapView.setSatellite(false);
mapView.setBuiltInZoomControls(true);
//获得map控制器
mapController=mapView.getController();
mapController.setZoom(zoomLevel);
//默认定位到北京经纬度
GeoPoint gpoint=new GeoPoint(latitudeE6, longitudeE6); //默认显示北京经纬度
mapController.animateTo(gpoint);
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);
menu.add(0, 0, 0, "街道");
menu.add(0, 1, 0, "交通");
menu.add(0, 2, 0, "卫星");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
super.onOptionsItemSelected(item);
switch(item.getItemId()){
case 0:
//显示街道图
mapView.setStreetView(true);
mapView.setTraffic(false);
mapView.setSatellite(false);
break;
case 1:
//显示交通图
mapView.setStreetView(false);
mapView.setTraffic(true);
mapView.setSatellite(false);
break;
case 2:
//显示卫星图
mapView.setStreetView(false);
mapView.setTraffic(false);
mapView.setSatellite(true);
break;
default:break;
}
return true;
}
//根据地位API获得当前经纬度并返回GeoPoint对象,提供与地图API
private GeoPoint getCurrentGeoPoint(){
LocationManager locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location=locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
return new GeoPoint((int)(location.getLatitude()*1e6),(int)(location.getLongitude()*1e6));
}
}
当然,我们还必须使用地位API,根据手机当前位置获得经纬度,然后在地图中显示。
注意,我们可以把我们手机默认语言设置为中文,这样显示路线的时候才会是中文
运行程序如图:
google map api包中最重要的几个类。
1、MapActivity:这个类是用于显示Map的Activity类,它需要连接底层网络。
2、MapView:是用于显示地图的View组件,它必须和MapActivity配合使用。
3、MapController:用于控制地图的移动。
4、Overlay:这是一个可显示于地图之上的可绘制的对象。
5、GeoPoint:一个包含经纬度位置的对象。
Android Location API 关于定位功能的比较重要的类:
1、LocationManager:本类提供访问定位服务的功能,也提供获取最佳定位提供者的功能。另外,临近警报功能。
2、LocationProvider:该类是定位提供者的抽象类。定位提供者具备周期性报告设备地理位置的功能。
3、LocationListener:提供定位信息发生改变时的回调功能。必须事先在定位管理器中注册监听器对象。
4、Criteria:该类使得应用能够通过在LocationProvider中设置的属性来选择合适的定位提供者。
那么怎么获得本机的经纬度呢?我们可以使用GPS传感器,
分享到:
相关推荐
GoogleMap控件是一款开源控件。 下载
一个google map的js 介绍如何初始化google map
一个简单的使用GoogleMap的应用实例
/// <reference path="GoogleMap_AutoComplete.js" /> 就可以智能感知了,具体效果图请参考我的博客 具体效果图请参考我的博客 妈的,公司领导他妈的变态,连csdn 的 blog 都封了,用代理上起也慢得要死,晚上再贴...
这是一个access类型的gps纠偏数据库,共有9万多条记录,大小5M,我导入到sqlite3...适用于要求精度不是太高的google map应用。所有经过纠偏的gps点,基本上能够显示到道路上。如果需要sqlite的可以自己导入或者联系我吧
一、软件功能: 1、大幅面截获Google Map上的地图、卫星影像、地形图、混合地图,拼接并存储为tif格式的图像,同时赋上精确的投影与坐标; 2、无幅面大小限制、海量下载、无缝拼接;
一直在找一款好的手机地图软件,找了很久才找到这款GoogleMap手机版,绝对强悍,绝对免费(当然要耗流量),支持强大的搜索,地图视图和卫星视图切换,大公司的产品就是不一样
Java写的一套Google Map演示程序,供参考!画点,画线!
Googlemap
地图功能 就是一个javascript的接口,他们网站上给出事例,你按照他们给出的方法引入js文件,再调用js函数就实现了,很简单的,一看就明白。 如果看不明白建议去javascript版块询问
googlemap谷歌地图gps纠偏数据库免费下载 纠偏数据库(google地图) 精度为0.01:经纬度每变化0.01,取一次偏移值,共980万条,access文件约600mb,误差5~10米。 精度为0.001:经纬度每变化0.001,取一次偏移值,共9...
google map demo .rar 一个关于地图的例子
例如,我想从SQL Server中读取经纬度信息,然后在Google Map中插入一个点。如果熟悉AJAX的话,很快就能得出答案。我们必须用JavaScript调用ASP.NET服务器端函数,利用得到的数据来绘制Google Map。简单吧?其实,...
使用google地图的反向地址解析功能,提供一个经纬度得到对应地址,或者给出模糊地址,得到经纬度,放在java后台代码中处理,这个使用的是Google的地理编码服务。一般而言数据量不大的情况使用是不限制的。按照Google...
flex开发google map的一个应用
一个简单的google map例子代码,可以通过输入地名直接定位,欢迎欣赏
包含了利用Google Map API进行二次开发的很多实例,为刚开始接触Google Map API进行二次开发的读者提供了一条捷径。
googlemap根据经纬度取地名。是一个用googlemap根据经纬度 来得到地名的小页面程序。
• Snake游戏深入解析 • Android学习每日一例——ApiDemos • JetBoy游戏深入解析(上)(中)(下) • 构建Android平台Google Map应用 • Android 中的XMPP 应用
一个google map小应用 应用google map api可以获得点的经纬度并且可以根据地理位置名称定位。